fix(i18n): cover missing ui translations
This commit is contained in:
parent
d35f03b396
commit
371bf948c2
87 changed files with 2362 additions and 429 deletions
|
|
@ -20,10 +20,10 @@ const props = defineProps<{
|
|||
reducedMotion?: boolean;
|
||||
}>();
|
||||
|
||||
const { locale } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const localizedHeroFeatureRail = computed(() => getLocalizedHeroFeatureRail(locale.value));
|
||||
const localizedHeroReviewerFeatureCard = computed(() => getLocalizedHeroReviewerFeatureCard(locale.value));
|
||||
const statusLabel = computed(() => locale.value === "ru" ? "Статус:" : "Status:");
|
||||
const statusLabel = computed(() => t("common.statusLabel"));
|
||||
|
||||
const icons = [
|
||||
mdiRobotOutline,
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ const props = defineProps<{
|
|||
activeReceiver?: HeroAgentRole | "video" | null;
|
||||
}>();
|
||||
|
||||
const { locale } = useI18n();
|
||||
const { t } = useI18n();
|
||||
const isSender = computed(() => props.activeSender === props.agent.id);
|
||||
const isReceiver = computed(() => props.activeReceiver === props.agent.id);
|
||||
const imageLoading = computed(() => (props.agent.priority ? "eager" : "lazy"));
|
||||
const imageFetchPriority = computed(() => (props.agent.priority ? "high" : "auto"));
|
||||
const statusLabel = computed(() => locale.value === "ru" ? "Статус:" : "Status:");
|
||||
const statusLabel = computed(() => t("common.statusLabel"));
|
||||
|
||||
const rootStyle = computed(() => ({
|
||||
"--agent-x": String(props.agent.desktop.x),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
const { locale } = useI18n();
|
||||
const isRu = computed(() => locale.value === "ru");
|
||||
const { t } = useI18n();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
@ -8,12 +7,12 @@ const isRu = computed(() => locale.value === "ru");
|
|||
id="hero-demo"
|
||||
class="cyber-video-frame"
|
||||
role="region"
|
||||
:aria-label="isRu ? 'Смотреть демо Agent Teams' : 'Watch Agent Teams demo'"
|
||||
:aria-label="t('hero.videoFrameLabel')"
|
||||
>
|
||||
<div class="cyber-video-frame__bezel" aria-hidden="true" />
|
||||
<div class="cyber-video-frame__status" aria-hidden="true">
|
||||
<span>{{ isRu ? 'Командная лента' : 'Team command feed' }}</span>
|
||||
<span>{{ isRu ? 'Живое демо' : 'Live demo' }}</span>
|
||||
<span>{{ t('hero.commandFeed') }}</span>
|
||||
<span>{{ t('hero.liveDemo') }}</span>
|
||||
</div>
|
||||
<div class="cyber-video-frame__content">
|
||||
<HeroDemoVideo />
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const { t, locale } = useI18n();
|
|||
const { repoUrl } = useGithubRepo();
|
||||
const { baseURL } = useRuntimeConfig().app;
|
||||
const year = new Date().getFullYear();
|
||||
const authorLabel = computed(() => locale.value === 'ru' ? 'Автор' : 'Author');
|
||||
const authorLabel = computed(() => t('footer.links.author'));
|
||||
const docsHref = computed(() => {
|
||||
const base = baseURL.replace(/\/?$/, '/');
|
||||
return `${base}${locale.value === 'ru' ? 'docs/ru/' : 'docs/'}`;
|
||||
|
|
|
|||
|
|
@ -8,16 +8,15 @@ const menuOpen = ref(false);
|
|||
|
||||
const withBase = (path: string) => `${baseURL.replace(/\/?$/, '/')}${path.replace(/^\/+/, '')}`;
|
||||
const docsHref = computed(() => withBase(locale.value === 'ru' ? 'docs/ru/' : 'docs/'));
|
||||
const isRu = computed(() => locale.value === 'ru');
|
||||
const openMenuLabel = computed(() => (isRu.value ? 'Открыть меню' : 'Open menu'));
|
||||
const closeMenuLabel = computed(() => (isRu.value ? 'Закрыть меню' : 'Close menu'));
|
||||
const openMenuLabel = computed(() => t('nav.openMenu'));
|
||||
const closeMenuLabel = computed(() => t('nav.closeMenu'));
|
||||
|
||||
const navItems = computed(() => [
|
||||
{ href: '#screenshots', label: t('nav.screenshots'), shortLabel: isRu.value ? 'Скрины' : 'Shots' },
|
||||
{ href: docsHref.value, label: t('nav.docs'), shortLabel: isRu.value ? 'Док' : 'Docs' },
|
||||
{ href: '#download', label: t('nav.download'), shortLabel: isRu.value ? 'Скачать' : 'Get' },
|
||||
{ href: '#comparison', label: t('nav.comparison'), shortLabel: isRu.value ? 'Сравн.' : 'Compare' },
|
||||
{ href: '#pricing', label: t('nav.pricing'), shortLabel: isRu.value ? 'Беспл.' : 'Free' },
|
||||
{ href: '#screenshots', label: t('nav.screenshots'), shortLabel: t('nav.short.screenshots') },
|
||||
{ href: docsHref.value, label: t('nav.docs'), shortLabel: t('nav.short.docs') },
|
||||
{ href: '#download', label: t('nav.download'), shortLabel: t('nav.short.download') },
|
||||
{ href: '#comparison', label: t('nav.comparison'), shortLabel: t('nav.short.comparison') },
|
||||
{ href: '#pricing', label: t('nav.pricing'), shortLabel: t('nav.short.pricing') },
|
||||
{ href: '#faq', label: t('nav.faq'), shortLabel: 'FAQ' },
|
||||
]);
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ const releaseDate = computed(() => {
|
|||
day: 'numeric',
|
||||
});
|
||||
});
|
||||
const linuxRobotBubble = computed(() => locale.value === 'ru' ? 'Готов начать!' : 'Ready to start!');
|
||||
const linuxRobotBubble = computed(() => t('download.readyToStart'));
|
||||
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -54,14 +54,10 @@ const supportedProviders = [
|
|||
},
|
||||
] as const;
|
||||
const supportedProvidersLabel = computed(() => (
|
||||
locale.value === "ru"
|
||||
? "Поддерживаем AI-провайдеры"
|
||||
: "Supported AI providers"
|
||||
t("hero.supportedProviders")
|
||||
));
|
||||
const heroSlogan = computed(() => (
|
||||
locale.value === "ru"
|
||||
? "Делайте много, почти ничего не делая"
|
||||
: "Get a lot done by doing very little"
|
||||
t("hero.slogan")
|
||||
));
|
||||
|
||||
const heroDownloadUrl = computed(() => {
|
||||
|
|
@ -74,17 +70,13 @@ const heroDownloadUrl = computed(() => {
|
|||
const docsHref = computed(() => withBase(locale.value === "ru" ? "docs/ru/" : "docs/"));
|
||||
const downloadActionSubtitle = computed(() => {
|
||||
if (!selectedDownloadAsset.value) {
|
||||
return locale.value === "ru"
|
||||
? "Для вашей платформы"
|
||||
: "For your platform";
|
||||
return t("hero.platformDefault");
|
||||
}
|
||||
|
||||
return selectedDownloadAsset.value.actionSubtitle;
|
||||
});
|
||||
const docsActionSubtitle = computed(() => (
|
||||
locale.value === "ru"
|
||||
? "Гайды и настройка"
|
||||
: "Guides and setup"
|
||||
t("hero.guidesSetup")
|
||||
));
|
||||
|
||||
function clearHeroMessageTimers() {
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ const screenshots = computed(() => screenshotData.map((s) => ({
|
|||
width: s.width,
|
||||
height: s.height,
|
||||
})));
|
||||
const prevLabel = computed(() => locale.value === 'ru' ? 'Предыдущий' : 'Previous');
|
||||
const nextLabel = computed(() => locale.value === 'ru' ? 'Следующий' : 'Next');
|
||||
const prevLabel = computed(() => t('common.previous'));
|
||||
const nextLabel = computed(() => t('common.next'));
|
||||
|
||||
const swiperRef = ref<SwiperContainerElement | null>(null);
|
||||
const swiperReady = ref(false);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, onMounted, onUnmounted, watch } from 'vue';
|
||||
import { computed, ref, onMounted, onUnmounted, watch } from 'vue';
|
||||
import { mdiRobotOutline, mdiCheckCircleOutline, mdiCodeBraces, mdiMessageTextOutline } from '@mdi/js';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
// ─── State machine for demo cycle ───
|
||||
type DemoState = 'idle' | 'working' | 'reviewing' | 'done';
|
||||
const state = ref<DemoState>('idle');
|
||||
|
|
@ -9,13 +11,13 @@ const state = ref<DemoState>('idle');
|
|||
// ─── Animated task text ───
|
||||
const currentTask = ref('');
|
||||
const taskFading = ref(false);
|
||||
const TASKS = [
|
||||
'Implementing auth middleware...',
|
||||
'Writing unit tests for API...',
|
||||
'Reviewing PR #42 changes...',
|
||||
'Setting up CI/CD pipeline...',
|
||||
'Refactoring database layer...',
|
||||
];
|
||||
const taskMessages = computed(() => [
|
||||
t('hero.demo.activity.authMiddleware'),
|
||||
t('hero.demo.activity.unitTests'),
|
||||
t('hero.demo.activity.reviewPr'),
|
||||
t('hero.demo.activity.ciPipeline'),
|
||||
t('hero.demo.activity.refactorDatabase'),
|
||||
]);
|
||||
let taskIndex = 0;
|
||||
let charTimer: ReturnType<typeof setTimeout> | null = null;
|
||||
|
||||
|
|
@ -28,9 +30,9 @@ const agents = ref([
|
|||
|
||||
// ─── Kanban mini-board ───
|
||||
const kanbanTasks = ref([
|
||||
{ id: 1, text: 'Auth API', col: 'todo' as string },
|
||||
{ id: 2, text: 'Unit tests', col: 'todo' as string },
|
||||
{ id: 3, text: 'CI setup', col: 'todo' as string },
|
||||
{ id: 1, text: t('hero.demo.tasks.authApi'), col: 'todo' as string },
|
||||
{ id: 2, text: t('hero.demo.tasks.unitTests'), col: 'todo' as string },
|
||||
{ id: 3, text: t('hero.demo.tasks.ciSetup'), col: 'todo' as string },
|
||||
]);
|
||||
|
||||
function typeNextChar(text: string, index: number) {
|
||||
|
|
@ -76,9 +78,9 @@ function runCycle() {
|
|||
currentTask.value = '';
|
||||
taskFading.value = false;
|
||||
kanbanTasks.value = [
|
||||
{ id: 1, text: 'Auth API', col: 'todo' },
|
||||
{ id: 2, text: 'Unit tests', col: 'todo' },
|
||||
{ id: 3, text: 'CI setup', col: 'todo' },
|
||||
{ id: 1, text: t('hero.demo.tasks.authApi'), col: 'todo' },
|
||||
{ id: 2, text: t('hero.demo.tasks.unitTests'), col: 'todo' },
|
||||
{ id: 3, text: t('hero.demo.tasks.ciSetup'), col: 'todo' },
|
||||
];
|
||||
agents.value.forEach(a => a.status = 'idle');
|
||||
|
||||
|
|
@ -91,7 +93,8 @@ function runCycle() {
|
|||
agents.value[1].status = 'active';
|
||||
kanbanTasks.value[0].col = 'progress';
|
||||
|
||||
const task = TASKS[taskIndex % TASKS.length];
|
||||
const messages = taskMessages.value;
|
||||
const task = messages[taskIndex % messages.length];
|
||||
taskIndex++;
|
||||
typeNextChar(task, 0);
|
||||
|
||||
|
|
@ -179,6 +182,16 @@ function colColor(col: string) {
|
|||
}
|
||||
}
|
||||
|
||||
function colLabel(col: string) {
|
||||
switch (col) {
|
||||
case 'todo': return t('hero.demo.columns.todo');
|
||||
case 'progress': return t('hero.demo.columns.progress');
|
||||
case 'review': return t('hero.demo.columns.review');
|
||||
case 'done': return t('hero.demo.columns.done');
|
||||
default: return col.toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
function statusDotColor(status: string) {
|
||||
switch (status) {
|
||||
case 'active': return '#00f0ff';
|
||||
|
|
@ -190,7 +203,7 @@ function statusDotColor(status: string) {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div ref="containerRef" class="hero-demo" role="img" aria-label="Agent team demo">
|
||||
<div ref="containerRef" class="hero-demo" role="img" :aria-label="t('hero.demo.ariaLabel')">
|
||||
<div class="hero-demo__content">
|
||||
<!-- Header -->
|
||||
<div class="hero-demo__header">
|
||||
|
|
@ -198,7 +211,7 @@ function statusDotColor(status: string) {
|
|||
<span class="hero-demo__title">Agent Teams</span>
|
||||
<span class="hero-demo__badge-live">
|
||||
<span class="hero-demo__live-dot" />
|
||||
LIVE
|
||||
{{ t('hero.demo.live') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -225,7 +238,7 @@ function statusDotColor(status: string) {
|
|||
<div class="hero-demo__kanban">
|
||||
<div v-for="col in ['todo', 'progress', 'review', 'done']" :key="col" class="hero-demo__kanban-col">
|
||||
<div class="hero-demo__kanban-label" :style="{ color: colColor(col) }">
|
||||
{{ col === 'progress' ? 'IN PROGRESS' : col.toUpperCase() }}
|
||||
{{ colLabel(col) }}
|
||||
</div>
|
||||
<div class="hero-demo__kanban-cards">
|
||||
<TransitionGroup name="kanban-card">
|
||||
|
|
@ -249,7 +262,7 @@ function statusDotColor(status: string) {
|
|||
<span
|
||||
class="hero-demo__log-text"
|
||||
:class="{ 'hero-demo__log-text--fading': taskFading }"
|
||||
>{{ currentTask || 'Waiting for tasks...' }}</span>
|
||||
>{{ currentTask || t('hero.demo.waiting') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,19 +2,15 @@
|
|||
import { computed, onMounted, onUnmounted, ref } from "vue";
|
||||
import { mdiPlay } from "@mdi/js";
|
||||
|
||||
const { t, locale } = useI18n();
|
||||
const { t } = useI18n();
|
||||
const config = useRuntimeConfig();
|
||||
const muxAccentColor = "#00f0ff";
|
||||
const muxPrimaryColor = "#e6fbff";
|
||||
const muxSecondaryColor = "#020617";
|
||||
|
||||
const muxPlaybackId = computed(() => String(config.public.muxPlaybackId || "").trim());
|
||||
const videoTitle = computed(() => (
|
||||
locale.value === "ru" ? "Демо-видео Agent Teams" : "Agent Teams demo video"
|
||||
));
|
||||
const muxVideoTitle = computed(() => (
|
||||
locale.value === "ru" ? "Демо Agent Teams" : "Agent Teams demo"
|
||||
));
|
||||
const videoTitle = computed(() => t("hero.demoVideoTitle"));
|
||||
const muxVideoTitle = computed(() => t("hero.demoTitle"));
|
||||
const muxPlayerUrl = computed(() => {
|
||||
if (!muxPlaybackId.value) return "";
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "تحميل",
|
||||
"pricing": "مجاني",
|
||||
"faq": "الأسئلة الشائعة",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "فتح القائمة",
|
||||
"closeMenu": "إغلاق القائمة",
|
||||
"short": {
|
||||
"screenshots": "صور",
|
||||
"docs": "Docs",
|
||||
"download": "تحميل",
|
||||
"comparison": "مقارنة",
|
||||
"pricing": "مجاني"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "مفتوح المصدر"
|
||||
},
|
||||
"watchDemo": "شاهد العرض",
|
||||
"videoUnavailable": "الفيديو غير متوفر"
|
||||
"videoUnavailable": "الفيديو غير متوفر",
|
||||
"supportedProviders": "مزودو AI المدعومون",
|
||||
"slogan": "أنجز الكثير بجهد قليل جدًا",
|
||||
"platformDefault": "لمنصتك",
|
||||
"guidesSetup": "الأدلة والإعداد",
|
||||
"videoFrameLabel": "شاهد عرض Agent Teams",
|
||||
"commandFeed": "تدفق أوامر الفريق",
|
||||
"liveDemo": "عرض مباشر",
|
||||
"demoVideoTitle": "فيديو عرض Agent Teams",
|
||||
"demoTitle": "عرض Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "عرض فريق الوكلاء",
|
||||
"live": "LIVE",
|
||||
"waiting": "بانتظار المهام...",
|
||||
"activity": {
|
||||
"authMiddleware": "تنفيذ middleware للمصادقة...",
|
||||
"unitTests": "كتابة اختبارات وحدة للـ API...",
|
||||
"reviewPr": "مراجعة تغييرات PR #42...",
|
||||
"ciPipeline": "إعداد pipeline CI/CD...",
|
||||
"refactorDatabase": "إعادة هيكلة طبقة قاعدة البيانات..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "اختبارات وحدة",
|
||||
"ciSetup": "إعداد CI"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "قيد التنفيذ",
|
||||
"review": "مراجعة",
|
||||
"done": "تم"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "تحميل",
|
||||
"detected": "تم الكشف",
|
||||
"systemRequirements": "متطلبات النظام",
|
||||
"version": "الإصدار {version}"
|
||||
"version": "الإصدار {version}",
|
||||
"readyToStart": "جاهز للبدء!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "داكن",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "لقطات شاشة حقيقية من التطبيق — لوحة كانبان، مراجعة الكود، فرق الوكلاء، والمزيد."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "اعرف المزيد"
|
||||
"learnMore": "اعرف المزيد",
|
||||
"statusLabel": "الحالة:",
|
||||
"previous": "السابق",
|
||||
"next": "التالي"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "أنا أنتظر",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "المؤلف",
|
||||
"docs": "التوثيق"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "ডাউনলোড করা হয়েছে",
|
||||
"pricing": "মুক্ত",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "প্রদর্শন GitHub"
|
||||
"viewOnGithub": "প্রদর্শন GitHub",
|
||||
"openMenu": "মেনু খুলুন",
|
||||
"closeMenu": "মেনু বন্ধ করুন",
|
||||
"short": {
|
||||
"screenshots": "স্ক্রিন",
|
||||
"docs": "Docs",
|
||||
"download": "ডাউনলোড",
|
||||
"comparison": "তুলনা",
|
||||
"pricing": "ফ্রি"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "উৎস খুলুন"
|
||||
},
|
||||
"watchDemo": "নমুনা",
|
||||
"videoUnavailable": "ভিডিও উপলব্ধ নয়"
|
||||
"videoUnavailable": "ভিডিও উপলব্ধ নয়",
|
||||
"supportedProviders": "সমর্থিত AI providers",
|
||||
"slogan": "খুব কম কাজ করে অনেক কিছু করুন",
|
||||
"platformDefault": "আপনার platform-এর জন্য",
|
||||
"guidesSetup": "Guides এবং setup",
|
||||
"videoFrameLabel": "Agent Teams demo দেখুন",
|
||||
"commandFeed": "Team command feed",
|
||||
"liveDemo": "Live demo",
|
||||
"demoVideoTitle": "Agent Teams demo video",
|
||||
"demoTitle": "Agent Teams demo",
|
||||
"demo": {
|
||||
"ariaLabel": "Agent team demo",
|
||||
"live": "LIVE",
|
||||
"waiting": "Tasks এর অপেক্ষা...",
|
||||
"activity": {
|
||||
"authMiddleware": "Auth middleware implement হচ্ছে...",
|
||||
"unitTests": "API এর জন্য unit tests লেখা হচ্ছে...",
|
||||
"reviewPr": "PR #42 changes review হচ্ছে...",
|
||||
"ciPipeline": "CI/CD pipeline setup হচ্ছে...",
|
||||
"refactorDatabase": "Database layer refactor হচ্ছে..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit tests",
|
||||
"ciSetup": "CI setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "IN PROGRESS",
|
||||
"review": "REVIEW",
|
||||
"done": "DONE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "ডাউনলোড করা হয়েছে",
|
||||
"detected": "সনাক্ত",
|
||||
"systemRequirements": "সিস্টেম প্রয়োজন",
|
||||
"version": "সংস্করণ {version}"
|
||||
"version": "সংস্করণ {version}",
|
||||
"readyToStart": "শুরু করার জন্য প্রস্তুত!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "কালো",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "অ্যাপটির বাস্তব স্ক্রিনশট —কানবান বোর্ড, কোড পর্যালোচনা, এজেন্ট দল এবং আরও অনেক কিছু ।"
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "অারো জানুন"
|
||||
"learnMore": "অারো জানুন",
|
||||
"statusLabel": "স্ট্যাটাস:",
|
||||
"previous": "আগের",
|
||||
"next": "পরের"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "আমি অপেক্ষা করছি",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "লেখক",
|
||||
"docs": "নথিপত্র"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Download",
|
||||
"pricing": "Kostenlos",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "Menü öffnen",
|
||||
"closeMenu": "Menü schließen",
|
||||
"short": {
|
||||
"screenshots": "Bilder",
|
||||
"docs": "Docs",
|
||||
"download": "Laden",
|
||||
"comparison": "Vergleich",
|
||||
"pricing": "Gratis"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Demo ansehen",
|
||||
"videoUnavailable": "Video nicht verfügbar"
|
||||
"videoUnavailable": "Video nicht verfügbar",
|
||||
"supportedProviders": "Unterstützte KI-Anbieter",
|
||||
"slogan": "Viel erledigen mit sehr wenig Aufwand",
|
||||
"platformDefault": "Für Ihre Plattform",
|
||||
"guidesSetup": "Anleitungen und Einrichtung",
|
||||
"videoFrameLabel": "Agent Teams Demo ansehen",
|
||||
"commandFeed": "Team-Befehlsfeed",
|
||||
"liveDemo": "Live-Demo",
|
||||
"demoVideoTitle": "Agent Teams Demo-Video",
|
||||
"demoTitle": "Agent Teams Demo",
|
||||
"demo": {
|
||||
"ariaLabel": "Agententeam-Demo",
|
||||
"live": "LIVE",
|
||||
"waiting": "Warte auf Aufgaben...",
|
||||
"activity": {
|
||||
"authMiddleware": "Auth-Middleware wird implementiert...",
|
||||
"unitTests": "Unit-Tests für API werden geschrieben...",
|
||||
"reviewPr": "PR #42 Änderungen werden geprüft...",
|
||||
"ciPipeline": "CI/CD-Pipeline wird eingerichtet...",
|
||||
"refactorDatabase": "Datenbankschicht wird refaktoriert..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit-Tests",
|
||||
"ciSetup": "CI Setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "IN ARBEIT",
|
||||
"review": "REVIEW",
|
||||
"done": "FERTIG"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Herunterladen",
|
||||
"detected": "Erkannt",
|
||||
"systemRequirements": "Systemanforderungen",
|
||||
"version": "Version {version}"
|
||||
"version": "Version {version}",
|
||||
"readyToStart": "Bereit zum Start!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Dunkel",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Echte Screenshots der App — Kanban-Board, Code-Review, Agenten-Teams und mehr."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Mehr erfahren"
|
||||
"learnMore": "Mehr erfahren",
|
||||
"statusLabel": "Status:",
|
||||
"previous": "Zurück",
|
||||
"next": "Weiter"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "Ich warte",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Autor",
|
||||
"docs": "Dokumentation"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Download",
|
||||
"pricing": "Free",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "Open menu",
|
||||
"closeMenu": "Close menu",
|
||||
"short": {
|
||||
"screenshots": "Shots",
|
||||
"docs": "Docs",
|
||||
"download": "Get",
|
||||
"comparison": "Compare",
|
||||
"pricing": "Free"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Watch Demo",
|
||||
"videoUnavailable": "Video unavailable"
|
||||
"videoUnavailable": "Video unavailable",
|
||||
"supportedProviders": "Supported AI providers",
|
||||
"slogan": "Get a lot done by doing very little",
|
||||
"platformDefault": "For your platform",
|
||||
"guidesSetup": "Guides and setup",
|
||||
"videoFrameLabel": "Watch Agent Teams demo",
|
||||
"commandFeed": "Team command feed",
|
||||
"liveDemo": "Live demo",
|
||||
"demoVideoTitle": "Agent Teams demo video",
|
||||
"demoTitle": "Agent Teams demo",
|
||||
"demo": {
|
||||
"ariaLabel": "Agent team demo",
|
||||
"live": "LIVE",
|
||||
"waiting": "Waiting for tasks...",
|
||||
"activity": {
|
||||
"authMiddleware": "Implementing auth middleware...",
|
||||
"unitTests": "Writing unit tests for API...",
|
||||
"reviewPr": "Reviewing PR #42 changes...",
|
||||
"ciPipeline": "Setting up CI/CD pipeline...",
|
||||
"refactorDatabase": "Refactoring database layer..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit tests",
|
||||
"ciSetup": "CI setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "IN PROGRESS",
|
||||
"review": "REVIEW",
|
||||
"done": "DONE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Download",
|
||||
"detected": "Detected",
|
||||
"systemRequirements": "System requirements",
|
||||
"version": "Version {version}"
|
||||
"version": "Version {version}",
|
||||
"readyToStart": "Ready to start!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Dark",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Real screenshots from the app — kanban board, code review, agent teams, and more."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Learn more"
|
||||
"learnMore": "Learn more",
|
||||
"statusLabel": "Status:",
|
||||
"previous": "Previous",
|
||||
"next": "Next"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "I'm waiting",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Author",
|
||||
"docs": "Documentation"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Descargar",
|
||||
"pricing": "Gratis",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "Abrir menú",
|
||||
"closeMenu": "Cerrar menú",
|
||||
"short": {
|
||||
"screenshots": "Capturas",
|
||||
"docs": "Docs",
|
||||
"download": "Bajar",
|
||||
"comparison": "Comparar",
|
||||
"pricing": "Gratis"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Ver demo",
|
||||
"videoUnavailable": "Vídeo no disponible"
|
||||
"videoUnavailable": "Vídeo no disponible",
|
||||
"supportedProviders": "Proveedores de IA compatibles",
|
||||
"slogan": "Haz mucho haciendo muy poco",
|
||||
"platformDefault": "Para tu plataforma",
|
||||
"guidesSetup": "Guías y configuración",
|
||||
"videoFrameLabel": "Ver demo de Agent Teams",
|
||||
"commandFeed": "Feed de comandos del equipo",
|
||||
"liveDemo": "Demo en vivo",
|
||||
"demoVideoTitle": "Vídeo demo de Agent Teams",
|
||||
"demoTitle": "Demo de Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "Demo del equipo de agentes",
|
||||
"live": "LIVE",
|
||||
"waiting": "Esperando tareas...",
|
||||
"activity": {
|
||||
"authMiddleware": "Implementando middleware de autenticación...",
|
||||
"unitTests": "Escribiendo pruebas unitarias para API...",
|
||||
"reviewPr": "Revisando cambios del PR #42...",
|
||||
"ciPipeline": "Configurando pipeline CI/CD...",
|
||||
"refactorDatabase": "Refactorizando capa de base de datos..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "API de auth",
|
||||
"unitTests": "Pruebas unitarias",
|
||||
"ciSetup": "Config CI"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "EN PROGRESO",
|
||||
"review": "REVISIÓN",
|
||||
"done": "LISTO"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Descargar",
|
||||
"detected": "Detectado",
|
||||
"systemRequirements": "Requisitos del sistema",
|
||||
"version": "Versión {version}"
|
||||
"version": "Versión {version}",
|
||||
"readyToStart": "Listo para empezar!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Oscuro",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Capturas reales de la aplicación — tablero kanban, revisión de código, equipos de agentes y más."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Más información"
|
||||
"learnMore": "Más información",
|
||||
"statusLabel": "Estado:",
|
||||
"previous": "Anterior",
|
||||
"next": "Siguiente"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "Estoy esperando",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Autor",
|
||||
"docs": "Documentación"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Télécharger",
|
||||
"pricing": "Gratuit",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "Ouvrir le menu",
|
||||
"closeMenu": "Fermer le menu",
|
||||
"short": {
|
||||
"screenshots": "Captures",
|
||||
"docs": "Docs",
|
||||
"download": "Télécharger",
|
||||
"comparison": "Comparer",
|
||||
"pricing": "Gratuit"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Voir la démo",
|
||||
"videoUnavailable": "Vidéo indisponible"
|
||||
"videoUnavailable": "Vidéo indisponible",
|
||||
"supportedProviders": "Fournisseurs IA compatibles",
|
||||
"slogan": "Faites beaucoup en faisant très peu",
|
||||
"platformDefault": "Pour votre plateforme",
|
||||
"guidesSetup": "Guides et configuration",
|
||||
"videoFrameLabel": "Regarder la démo Agent Teams",
|
||||
"commandFeed": "Flux de commandes d'équipe",
|
||||
"liveDemo": "Démo en direct",
|
||||
"demoVideoTitle": "Vidéo démo Agent Teams",
|
||||
"demoTitle": "Démo Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "Démo d'équipe d'agents",
|
||||
"live": "LIVE",
|
||||
"waiting": "En attente de tâches...",
|
||||
"activity": {
|
||||
"authMiddleware": "Implémentation du middleware d'auth...",
|
||||
"unitTests": "Écriture de tests unitaires pour l'API...",
|
||||
"reviewPr": "Revue des changements PR #42...",
|
||||
"ciPipeline": "Configuration du pipeline CI/CD...",
|
||||
"refactorDatabase": "Refactorisation de la couche base de données..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "API auth",
|
||||
"unitTests": "Tests unitaires",
|
||||
"ciSetup": "Config CI"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "EN COURS",
|
||||
"review": "REVUE",
|
||||
"done": "TERMINÉ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Télécharger",
|
||||
"detected": "Détecté",
|
||||
"systemRequirements": "Configuration requise",
|
||||
"version": "Version {version}"
|
||||
"version": "Version {version}",
|
||||
"readyToStart": "Prêt à commencer!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Sombre",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Captures d'écran réelles — tableau kanban, revue de code, équipes d'agents et plus."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "En savoir plus"
|
||||
"learnMore": "En savoir plus",
|
||||
"statusLabel": "Statut:",
|
||||
"previous": "Précédent",
|
||||
"next": "Suivant"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "J'attends",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Auteur",
|
||||
"docs": "Documentation"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "डाउनलोड",
|
||||
"pricing": "मुफ़्त",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "मेनू खोलें",
|
||||
"closeMenu": "मेनू बंद करें",
|
||||
"short": {
|
||||
"screenshots": "शॉट्स",
|
||||
"docs": "Docs",
|
||||
"download": "डाउनलोड",
|
||||
"comparison": "तुलना",
|
||||
"pricing": "मुफ्त"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "ओपन सोर्स"
|
||||
},
|
||||
"watchDemo": "डेमो देखें",
|
||||
"videoUnavailable": "वीडियो उपलब्ध नहीं"
|
||||
"videoUnavailable": "वीडियो उपलब्ध नहीं",
|
||||
"supportedProviders": "समर्थित AI providers",
|
||||
"slogan": "बहुत कम करके बहुत कुछ करें",
|
||||
"platformDefault": "आपके platform के लिए",
|
||||
"guidesSetup": "Guides और setup",
|
||||
"videoFrameLabel": "Agent Teams demo देखें",
|
||||
"commandFeed": "Team command feed",
|
||||
"liveDemo": "Live demo",
|
||||
"demoVideoTitle": "Agent Teams demo video",
|
||||
"demoTitle": "Agent Teams demo",
|
||||
"demo": {
|
||||
"ariaLabel": "Agent team demo",
|
||||
"live": "LIVE",
|
||||
"waiting": "Tasks का इंतज़ार...",
|
||||
"activity": {
|
||||
"authMiddleware": "Auth middleware implement हो रहा है...",
|
||||
"unitTests": "API के लिए unit tests लिखे जा रहे हैं...",
|
||||
"reviewPr": "PR #42 changes review हो रहे हैं...",
|
||||
"ciPipeline": "CI/CD pipeline setup हो रही है...",
|
||||
"refactorDatabase": "Database layer refactor हो रही है..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit tests",
|
||||
"ciSetup": "CI setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "IN PROGRESS",
|
||||
"review": "REVIEW",
|
||||
"done": "DONE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "डाउनलोड",
|
||||
"detected": "पहचाना गया",
|
||||
"systemRequirements": "सिस्टम आवश्यकताएँ",
|
||||
"version": "संस्करण {version}"
|
||||
"version": "संस्करण {version}",
|
||||
"readyToStart": "शुरू करने के लिए तैयार!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "डार्क",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "ऐप के असली स्क्रीनशॉट — कानबन बोर्ड, कोड रिव्यू, एजेंट टीमें, और बहुत कुछ।"
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "और जानें"
|
||||
"learnMore": "और जानें",
|
||||
"statusLabel": "स्थिति:",
|
||||
"previous": "पिछला",
|
||||
"next": "अगला"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "मैं इंतज़ार कर रहा हूँ",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "लेखक",
|
||||
"docs": "दस्तावेज़"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Unduh",
|
||||
"pricing": "Bebas",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "Tilik pada GitHub"
|
||||
"viewOnGithub": "Tilik pada GitHub",
|
||||
"openMenu": "Buka menu",
|
||||
"closeMenu": "Tutup menu",
|
||||
"short": {
|
||||
"screenshots": "Gambar",
|
||||
"docs": "Docs",
|
||||
"download": "Unduh",
|
||||
"comparison": "Banding",
|
||||
"pricing": "Gratis"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Buka Sumber"
|
||||
},
|
||||
"watchDemo": "Watch Demo",
|
||||
"videoUnavailable": "Video tidak tersedia"
|
||||
"videoUnavailable": "Video tidak tersedia",
|
||||
"supportedProviders": "Penyedia AI yang didukung",
|
||||
"slogan": "Selesaikan banyak hal dengan sangat sedikit aksi",
|
||||
"platformDefault": "Untuk platform Anda",
|
||||
"guidesSetup": "Panduan dan penyiapan",
|
||||
"videoFrameLabel": "Tonton demo Agent Teams",
|
||||
"commandFeed": "Feed perintah tim",
|
||||
"liveDemo": "Demo langsung",
|
||||
"demoVideoTitle": "Video demo Agent Teams",
|
||||
"demoTitle": "Demo Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "Demo tim agen",
|
||||
"live": "LIVE",
|
||||
"waiting": "Menunggu tugas...",
|
||||
"activity": {
|
||||
"authMiddleware": "Menerapkan middleware auth...",
|
||||
"unitTests": "Menulis unit test untuk API...",
|
||||
"reviewPr": "Meninjau perubahan PR #42...",
|
||||
"ciPipeline": "Menyiapkan pipeline CI/CD...",
|
||||
"refactorDatabase": "Merefactor layer database..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit test",
|
||||
"ciSetup": "Setup CI"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "BERJALAN",
|
||||
"review": "REVIEW",
|
||||
"done": "SELESAI"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Unduh",
|
||||
"detected": "Terdeteksi",
|
||||
"systemRequirements": "Kebutuhan sistem",
|
||||
"version": "Versi {version}"
|
||||
"version": "Versi {version}",
|
||||
"readyToStart": "Siap mulai!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Gelap",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Gambar layar nyata dari aplikasi - papan kanban, ulasan kode, tim agen, dan banyak lagi."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Pelajari lagi"
|
||||
"learnMore": "Pelajari lagi",
|
||||
"statusLabel": "Status:",
|
||||
"previous": "Sebelumnya",
|
||||
"next": "Berikutnya"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "Aku menunggu",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Penulis",
|
||||
"docs": "Dokumentasi"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "ダウンロード",
|
||||
"pricing": "無料",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "メニューを開く",
|
||||
"closeMenu": "メニューを閉じる",
|
||||
"short": {
|
||||
"screenshots": "画像",
|
||||
"docs": "Docs",
|
||||
"download": "入手",
|
||||
"comparison": "比較",
|
||||
"pricing": "無料"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "オープンソース"
|
||||
},
|
||||
"watchDemo": "デモを見る",
|
||||
"videoUnavailable": "動画は利用できません"
|
||||
"videoUnavailable": "動画は利用できません",
|
||||
"supportedProviders": "対応 AI プロバイダー",
|
||||
"slogan": "少ない操作で多くをこなす",
|
||||
"platformDefault": "お使いのプラットフォーム向け",
|
||||
"guidesSetup": "ガイドとセットアップ",
|
||||
"videoFrameLabel": "Agent Teams のデモを見る",
|
||||
"commandFeed": "チームコマンドフィード",
|
||||
"liveDemo": "ライブデモ",
|
||||
"demoVideoTitle": "Agent Teams デモ動画",
|
||||
"demoTitle": "Agent Teams デモ",
|
||||
"demo": {
|
||||
"ariaLabel": "エージェントチームのデモ",
|
||||
"live": "LIVE",
|
||||
"waiting": "タスクを待機中...",
|
||||
"activity": {
|
||||
"authMiddleware": "認証ミドルウェアを実装中...",
|
||||
"unitTests": "API のユニットテストを作成中...",
|
||||
"reviewPr": "PR #42 の変更をレビュー中...",
|
||||
"ciPipeline": "CI/CD パイプラインを設定中...",
|
||||
"refactorDatabase": "データベース層をリファクタリング中..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "認証 API",
|
||||
"unitTests": "ユニットテスト",
|
||||
"ciSetup": "CI 設定"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "進行中",
|
||||
"review": "レビュー",
|
||||
"done": "完了"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "ダウンロード",
|
||||
"detected": "検出済み",
|
||||
"systemRequirements": "動作環境",
|
||||
"version": "バージョン {version}"
|
||||
"version": "バージョン {version}",
|
||||
"readyToStart": "開始できます!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "ダーク",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "アプリの実際のスクリーンショット — カンバンボード、コードレビュー、エージェントチームなど。"
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "詳細"
|
||||
"learnMore": "詳細",
|
||||
"statusLabel": "ステータス:",
|
||||
"previous": "前へ",
|
||||
"next": "次へ"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "待ってるよ",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "作者",
|
||||
"docs": "ドキュメント"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "다운로드",
|
||||
"pricing": "무료",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "GitHub에서 보기"
|
||||
"viewOnGithub": "GitHub에서 보기",
|
||||
"openMenu": "메뉴 열기",
|
||||
"closeMenu": "메뉴 닫기",
|
||||
"short": {
|
||||
"screenshots": "샷",
|
||||
"docs": "문서",
|
||||
"download": "받기",
|
||||
"comparison": "비교",
|
||||
"pricing": "무료"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "오픈 소스"
|
||||
},
|
||||
"watchDemo": "데모 보기",
|
||||
"videoUnavailable": "동영상을 사용할 수 없습니다"
|
||||
"videoUnavailable": "동영상을 사용할 수 없습니다",
|
||||
"supportedProviders": "지원되는 AI 제공자",
|
||||
"slogan": "아주 적은 조작으로 많은 일을 처리하세요",
|
||||
"platformDefault": "현재 플랫폼용",
|
||||
"guidesSetup": "가이드 및 설정",
|
||||
"videoFrameLabel": "Agent Teams 데모 보기",
|
||||
"commandFeed": "팀 명령 피드",
|
||||
"liveDemo": "라이브 데모",
|
||||
"demoVideoTitle": "Agent Teams 데모 동영상",
|
||||
"demoTitle": "Agent Teams 데모",
|
||||
"demo": {
|
||||
"ariaLabel": "에이전트 팀 데모",
|
||||
"live": "LIVE",
|
||||
"waiting": "작업 대기 중...",
|
||||
"activity": {
|
||||
"authMiddleware": "인증 미들웨어 구현 중...",
|
||||
"unitTests": "API 단위 테스트 작성 중...",
|
||||
"reviewPr": "PR #42 변경 사항 검토 중...",
|
||||
"ciPipeline": "CI/CD 파이프라인 설정 중...",
|
||||
"refactorDatabase": "데이터베이스 계층 리팩터링 중..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "단위 테스트",
|
||||
"ciSetup": "CI 설정"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "진행 중",
|
||||
"review": "리뷰",
|
||||
"done": "완료"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "다운로드",
|
||||
"detected": "감지됨",
|
||||
"systemRequirements": "시스템 요구 사항",
|
||||
"version": "버전 {version}"
|
||||
"version": "버전 {version}",
|
||||
"readyToStart": "시작할 준비 완료!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "다크",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "칸반 보드, 코드 리뷰, 에이전트 팀 등 앱의 실제 스크린샷입니다."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "자세히 알아보기"
|
||||
"learnMore": "자세히 알아보기",
|
||||
"statusLabel": "상태:",
|
||||
"previous": "이전",
|
||||
"next": "다음"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "기다리고 있어요",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "작성자",
|
||||
"docs": "문서"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Baixar",
|
||||
"pricing": "Grátis",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "Abrir menu",
|
||||
"closeMenu": "Fechar menu",
|
||||
"short": {
|
||||
"screenshots": "Imagens",
|
||||
"docs": "Docs",
|
||||
"download": "Baixar",
|
||||
"comparison": "Comparar",
|
||||
"pricing": "Grátis"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Ver demo",
|
||||
"videoUnavailable": "Vídeo indisponível"
|
||||
"videoUnavailable": "Vídeo indisponível",
|
||||
"supportedProviders": "Provedores de IA compatíveis",
|
||||
"slogan": "Faça muito fazendo muito pouco",
|
||||
"platformDefault": "Para sua plataforma",
|
||||
"guidesSetup": "Guias e configuração",
|
||||
"videoFrameLabel": "Assistir demo do Agent Teams",
|
||||
"commandFeed": "Feed de comandos da equipe",
|
||||
"liveDemo": "Demo ao vivo",
|
||||
"demoVideoTitle": "Vídeo demo do Agent Teams",
|
||||
"demoTitle": "Demo do Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "Demo da equipe de agentes",
|
||||
"live": "LIVE",
|
||||
"waiting": "Aguardando tarefas...",
|
||||
"activity": {
|
||||
"authMiddleware": "Implementando middleware de autenticação...",
|
||||
"unitTests": "Escrevendo testes unitários para API...",
|
||||
"reviewPr": "Revisando mudanças do PR #42...",
|
||||
"ciPipeline": "Configurando pipeline CI/CD...",
|
||||
"refactorDatabase": "Refatorando camada de banco de dados..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "API auth",
|
||||
"unitTests": "Testes unitários",
|
||||
"ciSetup": "Setup CI"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "EM PROGRESSO",
|
||||
"review": "REVISÃO",
|
||||
"done": "PRONTO"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Baixar",
|
||||
"detected": "Detectado",
|
||||
"systemRequirements": "Requisitos do sistema",
|
||||
"version": "Versão {version}"
|
||||
"version": "Versão {version}",
|
||||
"readyToStart": "Pronto para começar!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Escuro",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Capturas reais do app — quadro kanban, revisão de código, equipes de agentes e mais."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Saiba mais"
|
||||
"learnMore": "Saiba mais",
|
||||
"statusLabel": "Status:",
|
||||
"previous": "Anterior",
|
||||
"next": "Próximo"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "Estou esperando",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Autor",
|
||||
"docs": "Documentação"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "Скачать",
|
||||
"pricing": "Бесплатно",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "GitHub"
|
||||
"viewOnGithub": "GitHub",
|
||||
"openMenu": "Открыть меню",
|
||||
"closeMenu": "Закрыть меню",
|
||||
"short": {
|
||||
"screenshots": "Скрины",
|
||||
"docs": "Док",
|
||||
"download": "Скачать",
|
||||
"comparison": "Сравн.",
|
||||
"pricing": "Беспл."
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "Open Source"
|
||||
},
|
||||
"watchDemo": "Смотреть демо",
|
||||
"videoUnavailable": "Видео недоступно"
|
||||
"videoUnavailable": "Видео недоступно",
|
||||
"supportedProviders": "Поддерживаем AI-провайдеры",
|
||||
"slogan": "Делайте много, почти ничего не делая",
|
||||
"platformDefault": "Для вашей платформы",
|
||||
"guidesSetup": "Гайды и настройка",
|
||||
"videoFrameLabel": "Смотреть демо Agent Teams",
|
||||
"commandFeed": "Командная лента",
|
||||
"liveDemo": "Живое демо",
|
||||
"demoVideoTitle": "Демо-видео Agent Teams",
|
||||
"demoTitle": "Демо Agent Teams",
|
||||
"demo": {
|
||||
"ariaLabel": "Демо команды агентов",
|
||||
"live": "LIVE",
|
||||
"waiting": "Ожидание задач...",
|
||||
"activity": {
|
||||
"authMiddleware": "Реализация auth middleware...",
|
||||
"unitTests": "Написание unit-тестов для API...",
|
||||
"reviewPr": "Ревью изменений PR #42...",
|
||||
"ciPipeline": "Настройка CI/CD pipeline...",
|
||||
"refactorDatabase": "Рефакторинг слоя базы данных..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit-тесты",
|
||||
"ciSetup": "CI setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "В РАБОТЕ",
|
||||
"review": "РЕВЬЮ",
|
||||
"done": "ГОТОВО"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "Скачать",
|
||||
"detected": "Определено",
|
||||
"systemRequirements": "Системные требования",
|
||||
"version": "Версия {version}"
|
||||
"version": "Версия {version}",
|
||||
"readyToStart": "Готов начать!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "Тёмная",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "Реальные скриншоты приложения — канбан-доска, код-ревью, команды агентов и многое другое."
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "Подробнее"
|
||||
"learnMore": "Подробнее",
|
||||
"statusLabel": "Статус:",
|
||||
"previous": "Предыдущий",
|
||||
"next": "Следующий"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "Я жду",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "Автор",
|
||||
"docs": "Документация"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "گر تے ہوئے",
|
||||
"pricing": "مفت",
|
||||
"faq": "FAQ",
|
||||
"viewOnGithub": "دیکھیں GitHub"
|
||||
"viewOnGithub": "دیکھیں GitHub",
|
||||
"openMenu": "مینو کھولیں",
|
||||
"closeMenu": "مینو بند کریں",
|
||||
"short": {
|
||||
"screenshots": "تصاویر",
|
||||
"docs": "Docs",
|
||||
"download": "ڈاؤن لوڈ",
|
||||
"comparison": "موازنہ",
|
||||
"pricing": "مفت"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "کھولیں"
|
||||
},
|
||||
"watchDemo": "دیمو",
|
||||
"videoUnavailable": "ویڈیو غیر درج شدہ"
|
||||
"videoUnavailable": "ویڈیو غیر درج شدہ",
|
||||
"supportedProviders": "حمایت یافتہ AI providers",
|
||||
"slogan": "بہت کم کام کر کے بہت کچھ کریں",
|
||||
"platformDefault": "آپ کے platform کے لیے",
|
||||
"guidesSetup": "Guides اور setup",
|
||||
"videoFrameLabel": "Agent Teams demo دیکھیں",
|
||||
"commandFeed": "Team command feed",
|
||||
"liveDemo": "Live demo",
|
||||
"demoVideoTitle": "Agent Teams demo video",
|
||||
"demoTitle": "Agent Teams demo",
|
||||
"demo": {
|
||||
"ariaLabel": "Agent team demo",
|
||||
"live": "LIVE",
|
||||
"waiting": "Tasks کا انتظار...",
|
||||
"activity": {
|
||||
"authMiddleware": "Auth middleware implement ہو رہا ہے...",
|
||||
"unitTests": "API کے لیے unit tests لکھے جا رہے ہیں...",
|
||||
"reviewPr": "PR #42 changes review ہو رہے ہیں...",
|
||||
"ciPipeline": "CI/CD pipeline setup ہو رہی ہے...",
|
||||
"refactorDatabase": "Database layer refactor ہو رہی ہے..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "Auth API",
|
||||
"unitTests": "Unit tests",
|
||||
"ciSetup": "CI setup"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "TODO",
|
||||
"progress": "IN PROGRESS",
|
||||
"review": "REVIEW",
|
||||
"done": "DONE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "گر تے ہوئے",
|
||||
"detected": "غیر متصل",
|
||||
"systemRequirements": "سسٹم تقاضوں",
|
||||
"version": "ورژن {version}"
|
||||
"version": "ورژن {version}",
|
||||
"readyToStart": "شروع کرنے کے لیے تیار!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "اندھیرا",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "ایپ کی طرف سے حقیقی اسکرین — کابینہ بورڈ ، کوڈ جائزہ ، ایجنٹ ٹیموں اور زیادہ سے زیادہ"
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "مزید سیکھیں"
|
||||
"learnMore": "مزید سیکھیں",
|
||||
"statusLabel": "اسٹیٹس:",
|
||||
"previous": "پچھلا",
|
||||
"next": "اگلا"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "میں انتظار کر رہا ہوں",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "مصنف",
|
||||
"docs": "دستاویز"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,7 +7,16 @@
|
|||
"download": "下载",
|
||||
"pricing": "免费",
|
||||
"faq": "常见问题",
|
||||
"viewOnGithub": "View on GitHub"
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"openMenu": "打开菜单",
|
||||
"closeMenu": "关闭菜单",
|
||||
"short": {
|
||||
"screenshots": "截图",
|
||||
"docs": "文档",
|
||||
"download": "下载",
|
||||
"comparison": "比较",
|
||||
"pricing": "免费"
|
||||
}
|
||||
},
|
||||
"hero": {
|
||||
"badge": "Agent Teams",
|
||||
|
|
@ -22,13 +31,46 @@
|
|||
"openSource": "开源"
|
||||
},
|
||||
"watchDemo": "观看演示",
|
||||
"videoUnavailable": "视频不可用"
|
||||
"videoUnavailable": "视频不可用",
|
||||
"supportedProviders": "支持的 AI 提供商",
|
||||
"slogan": "用很少操作完成大量工作",
|
||||
"platformDefault": "适用于你的平台",
|
||||
"guidesSetup": "指南和设置",
|
||||
"videoFrameLabel": "观看 Agent Teams 演示",
|
||||
"commandFeed": "团队命令流",
|
||||
"liveDemo": "实时演示",
|
||||
"demoVideoTitle": "Agent Teams 演示视频",
|
||||
"demoTitle": "Agent Teams 演示",
|
||||
"demo": {
|
||||
"ariaLabel": "代理团队演示",
|
||||
"live": "LIVE",
|
||||
"waiting": "等待任务...",
|
||||
"activity": {
|
||||
"authMiddleware": "正在实现身份验证中间件...",
|
||||
"unitTests": "正在为 API 编写单元测试...",
|
||||
"reviewPr": "正在审查 PR #42 更改...",
|
||||
"ciPipeline": "正在设置 CI/CD 流水线...",
|
||||
"refactorDatabase": "正在重构数据库层..."
|
||||
},
|
||||
"tasks": {
|
||||
"authApi": "认证 API",
|
||||
"unitTests": "单元测试",
|
||||
"ciSetup": "CI 设置"
|
||||
},
|
||||
"columns": {
|
||||
"todo": "待办",
|
||||
"progress": "进行中",
|
||||
"review": "审查",
|
||||
"done": "完成"
|
||||
}
|
||||
}
|
||||
},
|
||||
"download": {
|
||||
"title": "下载",
|
||||
"detected": "已检测",
|
||||
"systemRequirements": "系统要求",
|
||||
"version": "版本 {version}"
|
||||
"version": "版本 {version}",
|
||||
"readyToStart": "准备开始!"
|
||||
},
|
||||
"theme": {
|
||||
"dark": "深色",
|
||||
|
|
@ -100,7 +142,10 @@
|
|||
"sectionSubtitle": "应用的真实截图——看板、代码审查、智能体团队等等。"
|
||||
},
|
||||
"common": {
|
||||
"learnMore": "了解更多"
|
||||
"learnMore": "了解更多",
|
||||
"statusLabel": "状态:",
|
||||
"previous": "上一个",
|
||||
"next": "下一个"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© {year} Agent Teams",
|
||||
|
|
@ -108,6 +153,7 @@
|
|||
"robotBubble": "我在等你",
|
||||
"links": {
|
||||
"github": "GitHub",
|
||||
"author": "作者",
|
||||
"docs": "文档"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -85,6 +85,10 @@ export interface TeamGraphData extends TeamViewSnapshot {
|
|||
runtimeEntriesByMember?: Record<string, TeamAgentRuntimeEntry>;
|
||||
}
|
||||
|
||||
export interface TeamGraphAdapterText {
|
||||
hiddenBlockingLinks(count: number): string;
|
||||
}
|
||||
|
||||
function toGraphLaunchVisualState(
|
||||
visualState: ReturnType<typeof buildMemberLaunchPresentation>['launchVisualState'] | undefined
|
||||
): GraphNode['launchVisualState'] {
|
||||
|
|
@ -141,7 +145,8 @@ export class TeamGraphAdapter {
|
|||
slotAssignments?: Record<string, GraphOwnerSlotAssignment>,
|
||||
layoutMode: GraphLayoutMode = DEFAULT_TEAM_GRAPH_LAYOUT_MODE,
|
||||
gridOwnerOrder?: readonly string[],
|
||||
activeTaskLogActivity?: Record<string, true>
|
||||
activeTaskLogActivity?: Record<string, true>,
|
||||
text?: TeamGraphAdapterText
|
||||
): GraphDataPort {
|
||||
if (teamData?.teamName !== teamName) {
|
||||
return TeamGraphAdapter.#emptyResult(teamName);
|
||||
|
|
@ -227,7 +232,8 @@ export class TeamGraphAdapter {
|
|||
memberNodeIdByAlias,
|
||||
leadId,
|
||||
leadName,
|
||||
activeTaskLogActivity
|
||||
activeTaskLogActivity,
|
||||
text
|
||||
);
|
||||
this.#buildProcessNodes(nodes, edges, teamData, teamName, memberNodeIdByAlias);
|
||||
this.#attachActivityFeeds(nodes, teamData, teamName, leadId, leadName);
|
||||
|
|
@ -673,7 +679,8 @@ export class TeamGraphAdapter {
|
|||
memberNodeIdByAlias?: ReadonlyMap<string, string>,
|
||||
leadId?: string,
|
||||
leadName?: string,
|
||||
activeTaskLogActivity?: Record<string, true>
|
||||
activeTaskLogActivity?: Record<string, true>,
|
||||
text?: TeamGraphAdapterText
|
||||
): void {
|
||||
const taskStateById = new Map<
|
||||
string,
|
||||
|
|
@ -869,9 +876,10 @@ export class TeamGraphAdapter {
|
|||
sourceTaskIds: Array.from(edge.sourceTaskIds),
|
||||
targetTaskIds: Array.from(edge.targetTaskIds),
|
||||
label:
|
||||
edge.aggregateCount > 1 &&
|
||||
(edge.source.includes(':overflow:') || edge.target.includes(':overflow:'))
|
||||
? `${edge.aggregateCount} hidden blocking links`
|
||||
edge.aggregateCount > 1 &&
|
||||
(edge.source.includes(':overflow:') || edge.target.includes(':overflow:'))
|
||||
? (text?.hiddenBlockingLinks(edge.aggregateCount) ??
|
||||
`${edge.aggregateCount} hidden blocking links`)
|
||||
: undefined,
|
||||
}))
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
import { useLayoutEffect, useMemo, useRef, useSyncExternalStore } from 'react';
|
||||
|
||||
import { useAppTranslation } from '@features/localization/renderer';
|
||||
import { useTeamAgentRuntimeWatcher } from '@renderer/components/team/useTeamAgentRuntimeWatcher';
|
||||
import { getSnapshot, subscribe } from '@renderer/services/commentReadStorage';
|
||||
import { useStore } from '@renderer/store';
|
||||
|
|
@ -65,9 +66,17 @@ export function useTeamGraphAdapter(
|
|||
options?: UseTeamGraphAdapterOptions
|
||||
): GraphDataPort {
|
||||
const isActive = options?.active ?? true;
|
||||
const { t } = useAppTranslation('team');
|
||||
const adapterRef = useRef<TeamGraphAdapter>(TeamGraphAdapter.create());
|
||||
const inactiveGraphData = useMemo(() => emptyGraphData(teamName), [teamName]);
|
||||
const lastActiveGraphDataRef = useRef<GraphDataPort>(inactiveGraphData);
|
||||
const adapterText = useMemo(
|
||||
() => ({
|
||||
hiddenBlockingLinks: (count: number) =>
|
||||
t('agentGraph.blockingEdge.hiddenBlockingLinks', { count }),
|
||||
}),
|
||||
[t]
|
||||
);
|
||||
|
||||
const {
|
||||
teamSnapshot,
|
||||
|
|
@ -216,7 +225,8 @@ export function useTeamGraphAdapter(
|
|||
effectiveSlotAssignments,
|
||||
graphLayoutMode ?? DEFAULT_TEAM_GRAPH_LAYOUT_MODE,
|
||||
gridOwnerOrder,
|
||||
activeTaskLogActivity
|
||||
activeTaskLogActivity,
|
||||
adapterText
|
||||
);
|
||||
}, [
|
||||
isActive,
|
||||
|
|
@ -236,6 +246,7 @@ export function useTeamGraphAdapter(
|
|||
graphLayoutMode,
|
||||
gridOwnerOrder,
|
||||
activeTaskLogActivity,
|
||||
adapterText,
|
||||
]);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
|
|
|
|||
|
|
@ -21,26 +21,47 @@ function isOverflowNode(
|
|||
return Boolean(node?.kind === 'task' && node.isOverflowStack);
|
||||
}
|
||||
|
||||
function describeNode(node: GraphNode | undefined, fallback: string): string {
|
||||
interface BlockingEdgeLabels {
|
||||
hiddenTaskStack: string;
|
||||
hiddenTasks: (count: number) => string;
|
||||
task: string;
|
||||
openBlockerStack: string;
|
||||
openBlockedStack: string;
|
||||
openBlockerTask: string;
|
||||
openBlockedTask: string;
|
||||
}
|
||||
|
||||
function describeNode(
|
||||
node: GraphNode | undefined,
|
||||
fallback: string,
|
||||
labels: Pick<BlockingEdgeLabels, 'hiddenTaskStack' | 'hiddenTasks' | 'task'>
|
||||
): string {
|
||||
if (!node) return fallback;
|
||||
if (isOverflowNode(node)) {
|
||||
return node.overflowCount && node.overflowCount > 1
|
||||
? `${node.overflowCount} hidden tasks`
|
||||
: 'Hidden task stack';
|
||||
? labels.hiddenTasks(node.overflowCount)
|
||||
: labels.hiddenTaskStack;
|
||||
}
|
||||
if (isTaskNode(node)) {
|
||||
return `${node.displayId ?? node.label} - ${node.sublabel ?? 'Task'}`;
|
||||
return `${node.displayId ?? node.label} - ${node.sublabel ?? labels.task}`;
|
||||
}
|
||||
return node.label;
|
||||
}
|
||||
|
||||
function getActionLabel(node: GraphNode | undefined, role: 'blocker' | 'blocked'): string | null {
|
||||
function getActionLabel(
|
||||
node: GraphNode | undefined,
|
||||
role: 'blocker' | 'blocked',
|
||||
labels: Pick<
|
||||
BlockingEdgeLabels,
|
||||
'openBlockerStack' | 'openBlockedStack' | 'openBlockerTask' | 'openBlockedTask'
|
||||
>
|
||||
): string | null {
|
||||
if (!node) return null;
|
||||
if (isOverflowNode(node)) {
|
||||
return role === 'blocker' ? 'Open blocker stack' : 'Open blocked stack';
|
||||
return role === 'blocker' ? labels.openBlockerStack : labels.openBlockedStack;
|
||||
}
|
||||
if (isTaskNode(node)) {
|
||||
return role === 'blocker' ? 'Open blocker task' : 'Open blocked task';
|
||||
return role === 'blocker' ? labels.openBlockerTask : labels.openBlockedTask;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -71,10 +92,19 @@ export const GraphBlockingEdgePopover = ({
|
|||
[teamData?.tasks]
|
||||
);
|
||||
const relationCount = edge.aggregateCount ?? 1;
|
||||
const sourceLabel = describeNode(sourceNode, edge.source);
|
||||
const targetLabel = describeNode(targetNode, edge.target);
|
||||
const sourceActionLabel = getActionLabel(sourceNode, 'blocker');
|
||||
const targetActionLabel = getActionLabel(targetNode, 'blocked');
|
||||
const labels: BlockingEdgeLabels = {
|
||||
hiddenTaskStack: t('agentGraph.blockingEdge.hiddenTaskStack'),
|
||||
hiddenTasks: (count) => t('agentGraph.blockingEdge.hiddenTasks', { count }),
|
||||
task: t('agentGraph.blockingEdge.task'),
|
||||
openBlockerStack: t('agentGraph.blockingEdge.openBlockerStack'),
|
||||
openBlockedStack: t('agentGraph.blockingEdge.openBlockedStack'),
|
||||
openBlockerTask: t('agentGraph.blockingEdge.openBlockerTask'),
|
||||
openBlockedTask: t('agentGraph.blockingEdge.openBlockedTask'),
|
||||
};
|
||||
const sourceLabel = describeNode(sourceNode, edge.source, labels);
|
||||
const targetLabel = describeNode(targetNode, edge.target, labels);
|
||||
const sourceActionLabel = getActionLabel(sourceNode, 'blocker', labels);
|
||||
const targetActionLabel = getActionLabel(targetNode, 'blocked', labels);
|
||||
const sourceHiddenTasks = resolveEdgeTaskPreview(sourceNode, edge.sourceTaskIds, tasksById);
|
||||
const targetHiddenTasks = resolveEdgeTaskPreview(targetNode, edge.targetTaskIds, tasksById);
|
||||
|
||||
|
|
@ -111,7 +141,7 @@ export const GraphBlockingEdgePopover = ({
|
|||
variant="outline"
|
||||
className="border-red-500/30 px-1.5 py-0 text-[10px] text-red-300"
|
||||
>
|
||||
{relationCount} links
|
||||
{t('agentGraph.blockingEdge.links', { count: relationCount })}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -132,7 +132,14 @@ function hasOpenCodeEmptyStateWarning(preview: MemberLogPreviewMember | undefine
|
|||
function resolveEmptyText(
|
||||
preview: MemberLogPreviewMember | undefined,
|
||||
loading: boolean,
|
||||
error: string | null
|
||||
error: string | null,
|
||||
labels: {
|
||||
unsupportedProvider: string;
|
||||
openCodeLogsDelayed: string;
|
||||
logsUnavailable: string;
|
||||
loadingLogs: string;
|
||||
noRecentLogs: string;
|
||||
}
|
||||
): string {
|
||||
const hasCodexUnsupportedWarning = preview?.warnings.some(
|
||||
(warning) => warning.code === 'codex_member_wide_not_supported'
|
||||
|
|
@ -142,34 +149,47 @@ function resolveEmptyText(
|
|||
(preview?.coverage.length ?? 0) > 0 &&
|
||||
preview?.coverage.every((coverage) => coverage.provider === 'codex_native_trace');
|
||||
if (hasOnlyCodexUnsupportedCoverage) {
|
||||
return 'Unsupported provider';
|
||||
return labels.unsupportedProvider;
|
||||
}
|
||||
if ((preview?.items.length ?? 0) === 0 && hasOpenCodeDeliveryDelayedWarning(preview)) {
|
||||
return 'OpenCode logs delayed';
|
||||
return labels.openCodeLogsDelayed;
|
||||
}
|
||||
if ((preview?.items.length ?? 0) === 0 && hasOpenCodeRuntimeWarning(preview)) {
|
||||
return 'Logs unavailable';
|
||||
return labels.logsUnavailable;
|
||||
}
|
||||
if (loading && !preview) return 'Loading logs';
|
||||
if (error && !preview) return 'Logs unavailable';
|
||||
return 'No recent logs';
|
||||
if (loading && !preview) return labels.loadingLogs;
|
||||
if (error && !preview) return labels.logsUnavailable;
|
||||
return labels.noRecentLogs;
|
||||
}
|
||||
|
||||
function fallbackDisplayTitle(item: MemberLogPreviewItem): string {
|
||||
function fallbackDisplayTitle(
|
||||
item: MemberLogPreviewItem,
|
||||
labels: {
|
||||
toolError: string;
|
||||
toolResult: string;
|
||||
toolUse: string;
|
||||
thinking: string;
|
||||
error: string;
|
||||
logEvent: string;
|
||||
}
|
||||
): string {
|
||||
if (item.kind === 'tool_result') {
|
||||
return item.tone === 'error' ? 'Tool error' : 'Tool result';
|
||||
return item.tone === 'error' ? labels.toolError : labels.toolResult;
|
||||
}
|
||||
if (item.kind === 'tool_use') {
|
||||
return item.toolName?.trim() || 'Tool use';
|
||||
return item.toolName?.trim() || labels.toolUse;
|
||||
}
|
||||
if (item.kind === 'thinking') {
|
||||
return 'Thinking';
|
||||
return labels.thinking;
|
||||
}
|
||||
return item.tone === 'error' ? 'Error' : 'Log event';
|
||||
return item.tone === 'error' ? labels.error : labels.logEvent;
|
||||
}
|
||||
|
||||
function compactDisplayTitle(item: MemberLogPreviewItem): string {
|
||||
const title = item.title.trim() || fallbackDisplayTitle(item);
|
||||
function compactDisplayTitle(
|
||||
item: MemberLogPreviewItem,
|
||||
labels: Parameters<typeof fallbackDisplayTitle>[1]
|
||||
): string {
|
||||
const title = item.title.trim() || fallbackDisplayTitle(item, labels);
|
||||
if (title.toLowerCase() === 'tool result') {
|
||||
return title;
|
||||
}
|
||||
|
|
@ -205,7 +225,13 @@ function trimRepeatedTitlePrefix(preview: string, title: string): string {
|
|||
function compactPreviewText(
|
||||
item: MemberLogPreviewItem,
|
||||
displayTitle: string,
|
||||
rawDisplayTitle = displayTitle
|
||||
rawDisplayTitle = displayTitle,
|
||||
labels: {
|
||||
noErrorOutput: string;
|
||||
noOutput: string;
|
||||
noInput: string;
|
||||
logEvent: string;
|
||||
}
|
||||
): string {
|
||||
const preview = item.preview?.trim();
|
||||
if (preview) {
|
||||
|
|
@ -217,12 +243,12 @@ function compactPreviewText(
|
|||
return compact || preview;
|
||||
}
|
||||
if (item.kind === 'tool_result') {
|
||||
return item.tone === 'error' ? 'No error output' : 'No output';
|
||||
return item.tone === 'error' ? labels.noErrorOutput : labels.noOutput;
|
||||
}
|
||||
if (item.kind === 'tool_use') {
|
||||
return 'No input';
|
||||
return labels.noInput;
|
||||
}
|
||||
return item.sourceLabel || 'Log event';
|
||||
return item.sourceLabel || labels.logEvent;
|
||||
}
|
||||
|
||||
function truncateCompactRowPreview(
|
||||
|
|
@ -281,6 +307,25 @@ export const GraphMemberLogPreviewHud = ({
|
|||
onOpenMemberProfile,
|
||||
}: GraphMemberLogPreviewHudProps): React.JSX.Element | null => {
|
||||
const { t } = useAppTranslation('team');
|
||||
const logPreviewLabels = useMemo(
|
||||
() => ({
|
||||
unsupportedProvider: t('agentGraph.logPreview.unsupportedProvider'),
|
||||
openCodeLogsDelayed: t('agentGraph.logPreview.openCodeLogsDelayed'),
|
||||
logsUnavailable: t('agentGraph.logPreview.logsUnavailable'),
|
||||
loadingLogs: t('agentGraph.logPreview.loading'),
|
||||
noRecentLogs: t('agentGraph.logPreview.noRecentLogs'),
|
||||
toolError: t('agentGraph.logPreview.toolError'),
|
||||
toolResult: t('agentGraph.logPreview.toolResult'),
|
||||
toolUse: t('agentGraph.logPreview.toolUse'),
|
||||
thinking: t('agentGraph.logPreview.thinking'),
|
||||
error: t('agentGraph.logPreview.error'),
|
||||
logEvent: t('agentGraph.logPreview.logEvent'),
|
||||
noErrorOutput: t('agentGraph.logPreview.noErrorOutput'),
|
||||
noOutput: t('agentGraph.logPreview.noOutput'),
|
||||
noInput: t('agentGraph.logPreview.noInput'),
|
||||
}),
|
||||
[t]
|
||||
);
|
||||
const worldLayerRef = useRef<HTMLDivElement | null>(null);
|
||||
const shellRefs = useRef(new Map<string, HTMLDivElement | null>());
|
||||
const visibleKeyRef = useRef('');
|
||||
|
|
@ -514,9 +559,14 @@ export const GraphMemberLogPreviewHud = ({
|
|||
const renderItem = useCallback(
|
||||
(memberName: string, item: MemberLogPreviewItem) => {
|
||||
const relativeTime = formatRelativeTime(item.timestamp);
|
||||
const rawDisplayTitle = compactDisplayTitle(item);
|
||||
const rawDisplayTitle = compactDisplayTitle(item, logPreviewLabels);
|
||||
const displayTitle = truncateCompactTitle(rawDisplayTitle);
|
||||
const fullPreviewText = compactPreviewText(item, displayTitle, rawDisplayTitle);
|
||||
const fullPreviewText = compactPreviewText(
|
||||
item,
|
||||
displayTitle,
|
||||
rawDisplayTitle,
|
||||
logPreviewLabels
|
||||
);
|
||||
const previewText = truncateCompactRowPreview(fullPreviewText, displayTitle, relativeTime);
|
||||
const titleText = compactRowLabel([rawDisplayTitle, relativeTime, fullPreviewText]);
|
||||
const isHighlighted = highlightedItemIds.has(buildRenderedItemKey(memberName, item.id));
|
||||
|
|
@ -565,7 +615,7 @@ export const GraphMemberLogPreviewHud = ({
|
|||
</button>
|
||||
);
|
||||
},
|
||||
[highlightedItemIds, openLogs]
|
||||
[highlightedItemIds, logPreviewLabels, openLogs]
|
||||
);
|
||||
|
||||
if (!enabled || ownerNodes.length === 0) {
|
||||
|
|
@ -631,7 +681,7 @@ export const GraphMemberLogPreviewHud = ({
|
|||
className={`${INTERACTIVE_LOG_CONTROL_CLASS} flex h-[72px] min-h-[72px] items-center rounded-md border border-dashed border-white/10 bg-[rgba(8,14,28,0.28)] px-3 text-left text-[11px] text-slate-400/60`}
|
||||
onClick={() => openLogs(memberName)}
|
||||
>
|
||||
{resolveEmptyText(preview, loading, error)}
|
||||
{resolveEmptyText(preview, loading, error, logPreviewLabels)}
|
||||
</button>
|
||||
)}
|
||||
{preview && preview.overflowCount > 0 ? (
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "مضافا إليها API المفتاح",
|
||||
"addFirst": "أضف مفتاحك الأول",
|
||||
"edit": "Edit"
|
||||
"edit": "Edit",
|
||||
"copied": "تم النسخ!",
|
||||
"copyEnvVarName": "نسخ اسم متغير env",
|
||||
"confirmDelete": "انقر مرة أخرى للتأكيد",
|
||||
"delete": "حذف"
|
||||
},
|
||||
"empty": {
|
||||
"title": "لا API المفاتيح الموفرة",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copied",
|
||||
"copy": "تشخيص النسخ",
|
||||
"hints": "Hints",
|
||||
"likelyCause": "السبب الغالب:"
|
||||
"likelyCause": "السبب الغالب:",
|
||||
"windowsSymlinkAdminHint": "Windows: شغّل Agent Teams AI كمسؤول"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "هذا هو التخلف المختار من قبل",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "نماذج البحث",
|
||||
"selectProjectBeforeTesting": "اختيار سياق المشروع قبل نماذج الاختبار.",
|
||||
"selectProjectBeforeTestingDefaults": "Select a project context before testing orving OpenCode defaults.",
|
||||
"useInTeamPicker": "الاستخدام في مشغل الفريق"
|
||||
"useInTeamPicker": "الاستخدام في مشغل الفريق",
|
||||
"testInProgress": "اختبار النموذج قيد التشغيل بالفعل.",
|
||||
"validationContextRequired": "حدد سياق تحقق أعلاه لتفعيل Test و Set default. الحفظ في team picker يخزن route للفرق الجديدة فقط.",
|
||||
"defaultSaveInProgress": "يتم حفظ OpenCode default.",
|
||||
"routeUnavailableAuth": "يتطلب هذا provider مصادقة قبل استخدام هذا النموذج.",
|
||||
"routeUnavailableFailed": "فشل هذا model route في آخر execution test.",
|
||||
"routeUnavailableUnknown": "هذا النموذج هو OpenCode default الحالي، لكنه غير متاح بعد في live catalog.",
|
||||
"actionsUnavailable": "الإجراءات غير متاحة مؤقتًا.",
|
||||
"routeUnavailableGeneric": "لا يمكن استخدام هذا model route الآن."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "مُقدِّم الخدمات المفتوحة",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "اختبار الاحتياجات",
|
||||
"failed": "فشل",
|
||||
"unknown": "مجهول",
|
||||
"default": "العجز"
|
||||
"default": "العجز",
|
||||
"knownRoute": "route معروف"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API تم تشكيل المفتاح ولكن لم يتم التحقق منه بعد",
|
||||
"apiKeyModeMissingCredential": "API الطريقة الرئيسية المختارة، ولكن لا API مفتاح تم تشكيله",
|
||||
"connectedVia": "Connected via {{method}}",
|
||||
"unableToVerify": "غير قادر على التحقق"
|
||||
"unableToVerify": "غير قادر على التحقق",
|
||||
"modelsAvailable": "النماذج متاحة"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Selected auth: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "الدورة",
|
||||
"stallNudge": "كشك",
|
||||
"start": "البدء",
|
||||
"workSync": "تزامن العمل"
|
||||
"workSync": "تزامن العمل",
|
||||
"agentError": "خطأ الوكيل",
|
||||
"apiError": "خطأ API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "بوتستراب اعترف",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "الرد"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "قيد التنفيذ"
|
||||
"inProgress": "قيد التنفيذ",
|
||||
"expandInProgress": "توسيع قيد التنفيذ",
|
||||
"collapseInProgress": "طي قيد التنفيذ",
|
||||
"reviewing": "يراجع",
|
||||
"workingOn": "يعمل على"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "رؤية موسعة للرسالة"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "ستظهر بيانات الفريق بمجرد الانتهاء من توفيرها",
|
||||
"context": {
|
||||
"title": "السياق"
|
||||
"title": "السياق",
|
||||
"loading": "جار التحميل...",
|
||||
"noSessionLoaded": "لم يتم تحميل أي جلسة",
|
||||
"closePanel": "إغلاق لوحة سياق {{team}}",
|
||||
"loadingContext": "جار تحميل السياق...",
|
||||
"openLeadSession": "افتح جلسة قائد الفريق لعرض السياق."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "لا توجد مصادر للسجلات",
|
||||
"ariaLabel": "المصدر",
|
||||
"leadLabel": "الرصاص",
|
||||
"selectSourceEmpty": "اختيار مصدر سجل."
|
||||
"selectSourceEmpty": "اختيار مصدر سجل.",
|
||||
"leadDescription": "قائد الفريق",
|
||||
"removedLabel": "تمت الإزالة",
|
||||
"removedDescription": "تمت الإزالة"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} أكثر",
|
||||
"more_other": "+{{count}} أكثر",
|
||||
"more_few": "+{{count}} أكثر",
|
||||
"more_many": "+{{count}} أكثر"
|
||||
"more_many": "+{{count}} أكثر",
|
||||
"unsupportedProvider": "المزود غير مدعوم",
|
||||
"openCodeLogsDelayed": "سجلات OpenCode متأخرة",
|
||||
"logsUnavailable": "السجلات غير متاحة",
|
||||
"noRecentLogs": "لا توجد سجلات حديثة",
|
||||
"toolError": "خطأ الأداة",
|
||||
"toolResult": "نتيجة الأداة",
|
||||
"toolUse": "استخدام الأداة",
|
||||
"thinking": "تفكير",
|
||||
"error": "خطأ",
|
||||
"logEvent": "حدث سجل",
|
||||
"noErrorOutput": "لا يوجد خرج خطأ",
|
||||
"noOutput": "لا يوجد خرج",
|
||||
"noInput": "لا يوجد إدخال"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "الإعالة",
|
||||
"blocks": "اللبنات",
|
||||
"close": "اقترب",
|
||||
"blockingHiddenTasks": "حجب المهام الخفية",
|
||||
"blockedHiddenTasks": "مهام خفية مقفلة"
|
||||
"blockedHiddenTasks": "مهام خفية مقفلة",
|
||||
"links_one": "{{count}} رابط",
|
||||
"links_other": "{{count}} روابط",
|
||||
"hiddenBlockingLinks_one": "{{count}} رابط حظر مخفي",
|
||||
"hiddenBlockingLinks_other": "{{count}} روابط حظر مخفية",
|
||||
"hiddenTaskStack": "مجموعة مهام مخفية",
|
||||
"hiddenTasks_one": "{{count}} مهمة مخفية",
|
||||
"hiddenTasks_other": "{{count}} مهام مخفية",
|
||||
"task": "مهمة",
|
||||
"openBlockerStack": "فتح مجموعة المهام الحاجزة",
|
||||
"openBlockedStack": "فتح مجموعة المهام المحجوبة",
|
||||
"openBlockerTask": "فتح المهمة الحاجزة",
|
||||
"openBlockedTask": "فتح المهمة المحجوبة"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "النشاط",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "تطهير السيارات",
|
||||
"wrapLines": "خطوط الغضب",
|
||||
"loadingTail": "عملية تحديد الموقع",
|
||||
"empty": "لم يتم القبض على ملف سجل العمليات لهذا العضو بعد"
|
||||
"empty": "لم يتم القبض على ملف سجل العمليات لهذا العضو بعد",
|
||||
"copy": "نسخ",
|
||||
"fileEmpty": "ملف سجل العملية فارغ.",
|
||||
"showingLast": "عرض آخر {{bytes}}.",
|
||||
"showing": "عرض {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "No tasks assigned to this member"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "اثبت او اعيد تشغيل الكود المفتوح من بطاقة مركز المزود ثم اعيد فتح هذا الرقم",
|
||||
"openCodeAppMcpUnreachable": "البدء من جديد لتنشيط طلب الموافقة المفتوحة MCP الجسر إذا كرر، إعادة تشغيل التطبيق وفتح الوقت.",
|
||||
"cliBinaryMissing": "تأكد من كلود المحلي CLI وجود ثنائي ويمكن البدء به، ثم إعادة فتح هذا الهاتف.",
|
||||
"default": "حل المسألة أعلاه، ثم إعادة فتح هذا الهاتف."
|
||||
"default": "حل المسألة أعلاه، ثم إعادة فتح هذا الهاتف.",
|
||||
"openCodeNodeModulesSymlinkPermission": "شغّل Agent Teams AI كمسؤول، ثم أعد محاولة launch."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "الأفرقة العاملة"
|
||||
"title": "الأفرقة العاملة",
|
||||
"status": {
|
||||
"active": "نشط",
|
||||
"provisioning": "قيد التشغيل",
|
||||
"idle": "يعمل"
|
||||
},
|
||||
"noProject": "بدون مشروع"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "الحد الأقصى {{count}} لقد وصلت"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "جلسة كودوكس تبدو ثابتة أعيد الاتصال",
|
||||
"useCode": "رمز الاستخدام"
|
||||
"useCode": "رمز الاستخدام",
|
||||
"generating": "جار الإنشاء...",
|
||||
"openLogin": "فتح تسجيل الدخول",
|
||||
"generateLink": "إنشاء رابط"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "مستوى الإنفاق (اختياري)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "دور الجمارك...",
|
||||
"searchPlaceholder": "أدوار البحث...",
|
||||
"empty": "لا توجد أدوار",
|
||||
"reservedRole": "هذا الدور محجوز"
|
||||
"reservedRole": "هذا الدور محجوز",
|
||||
"emptyCustomRole": "لا يمكن أن يكون الدور فارغا"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "যোগ করুন API কি",
|
||||
"addFirst": "প্রথমে কি যোগ করুন",
|
||||
"edit": "সম্পাদনা"
|
||||
"edit": "সম্পাদনা",
|
||||
"copied": "কপি হয়েছে!",
|
||||
"copyEnvVarName": "Env var name copy করুন",
|
||||
"confirmDelete": "Confirm করতে আবার ক্লিক করুন",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"empty": {
|
||||
"title": "না API সংরক্ষিত কি",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "প্রতিলিপি",
|
||||
"copy": "ডায়গনিস্টিক কপি করুন",
|
||||
"hints": "ইঙ্গিত",
|
||||
"likelyCause": "হতে পারে:"
|
||||
"likelyCause": "হতে পারে:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI অ্যাডমিনিস্ট্রেটর হিসেবে চালান"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "বর্তমানে নির্বাচিত ডিফল্ট মান ।",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "অনুসন্ধানের মডেল",
|
||||
"selectProjectBeforeTesting": "মডেল পরীক্ষার পূর্বে একটি প্রজেক্ট প্রসঙ্গ নির্বাচন করুন।",
|
||||
"selectProjectBeforeTestingDefaults": "পরীক্ষা অথবা সংরক্ষণ করার পূর্বে একটি প্রজেক্ট প্রসঙ্গ নির্বাচন করুন ।",
|
||||
"useInTeamPicker": "গ্রুপ বাছাইকারী ব্যবহার করো"
|
||||
"useInTeamPicker": "গ্রুপ বাছাইকারী ব্যবহার করো",
|
||||
"testInProgress": "মডেল পরীক্ষা ইতিমধ্যেই চলছে।",
|
||||
"validationContextRequired": "Test এবং Set default চালু করতে উপরে একটি validation context নির্বাচন করুন। team picker-এ সংরক্ষণ করলে শুধু নতুন দলের জন্য route রাখা হয়।",
|
||||
"defaultSaveInProgress": "OpenCode default সংরক্ষণ করা হচ্ছে।",
|
||||
"routeUnavailableAuth": "এই মডেল ব্যবহারের আগে এই provider-এর authentication দরকার।",
|
||||
"routeUnavailableFailed": "এই model route শেষ execution test-এ ব্যর্থ হয়েছে।",
|
||||
"routeUnavailableUnknown": "এই মডেলটি বর্তমান OpenCode default, কিন্তু এখনও live catalog-এ নেই।",
|
||||
"actionsUnavailable": "অ্যাকশনগুলো সাময়িকভাবে পাওয়া যাচ্ছে না।",
|
||||
"routeUnavailableGeneric": "এই model route এখন ব্যবহার করা যাবে না।"
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "OpenCode উপলব্ধকারী ক্যাটালগ",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "একটি পরীক্ষা প্রয়োজন",
|
||||
"failed": "বিফল",
|
||||
"unknown": "অজানা",
|
||||
"default": "ডিফল্ট"
|
||||
"default": "ডিফল্ট",
|
||||
"knownRoute": "পরিচিত route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API কি ইম্পোর্ট করা হয়নি কিন্তু যাচাই করা হয়নি",
|
||||
"apiKeyModeMissingCredential": "API চাবি নির্বাচন করা হয়েছে, কিন্তু কিছুই নির্বাচিত নয় API কি কনফিগার করা হয়েছে",
|
||||
"connectedVia": "পরিচিতির সাথে সংযোগ করা হয়েছে {{method}}",
|
||||
"unableToVerify": "যাচাই করতে ব্যর্থ"
|
||||
"unableToVerify": "যাচাই করতে ব্যর্থ",
|
||||
"modelsAvailable": "মডেল উপলব্ধ"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "নির্বাচিত অনুমোদন {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "সেশান",
|
||||
"stallNudge": "স্থগিত রাখো",
|
||||
"start": "আরম্ভ",
|
||||
"workSync": "সুসংগতি কর্ম"
|
||||
"workSync": "সুসংগতি কর্ম",
|
||||
"agentError": "Agent Error",
|
||||
"apiError": "API Error"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "বুটস্ট্র্যাপ স্বীকার করেছে",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "প্রত্যুত্তর"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "চলছে"
|
||||
"inProgress": "চলছে",
|
||||
"expandInProgress": "In progress খুলুন",
|
||||
"collapseInProgress": "In progress বন্ধ করুন",
|
||||
"reviewing": "review করছে",
|
||||
"workingOn": "কাজ করছে"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "তালিকা"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "দলের তথ্য একযোগে উপলব্ধ করা হবে",
|
||||
"context": {
|
||||
"title": "কনটেক্সট"
|
||||
"title": "কনটেক্সট",
|
||||
"loading": "লোড হচ্ছে...",
|
||||
"noSessionLoaded": "Session loaded নয়",
|
||||
"closePanel": "{{team}} context panel বন্ধ করুন",
|
||||
"loadingContext": "Context লোড হচ্ছে...",
|
||||
"openLeadSession": "Context দেখতে team lead session খুলুন."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "কোনো লগ পাওয়া যায়নি।",
|
||||
"ariaLabel": "উৎসের উৎস",
|
||||
"leadLabel": "লিড",
|
||||
"selectSourceEmpty": "একটি লগ উৎস নির্বাচন করুন।"
|
||||
"selectSourceEmpty": "একটি লগ উৎস নির্বাচন করুন।",
|
||||
"leadDescription": "Team Lead",
|
||||
"removedLabel": "সরানো হয়েছে",
|
||||
"removedDescription": "সরানো হয়েছে"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} আরও",
|
||||
"more_other": "+{{count}} আরও",
|
||||
"more_few": "+{{count}} আরও",
|
||||
"more_many": "+{{count}} আরও"
|
||||
"more_many": "+{{count}} আরও",
|
||||
"unsupportedProvider": "Provider সমর্থিত নয়",
|
||||
"openCodeLogsDelayed": "OpenCode logs বিলম্বিত",
|
||||
"logsUnavailable": "Logs উপলভ্য নয়",
|
||||
"noRecentLogs": "সাম্প্রতিক logs নেই",
|
||||
"toolError": "Tool error",
|
||||
"toolResult": "Tool result",
|
||||
"toolUse": "Tool use",
|
||||
"thinking": "Thinking",
|
||||
"error": "Error",
|
||||
"logEvent": "Log event",
|
||||
"noErrorOutput": "কোনো error output নেই",
|
||||
"noOutput": "কোনো output নেই",
|
||||
"noInput": "কোনো input নেই"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "নির্ভরতা ব্লক করা হচ্ছে",
|
||||
"blocks": "ব্লক",
|
||||
"close": "বন্ধ",
|
||||
"blockingHiddenTasks": "আড়াল করা কাজ বন্ধ করা হচ্ছে",
|
||||
"blockedHiddenTasks": "আড়াল করা কাজ আড়াল করা হয়েছে"
|
||||
"blockedHiddenTasks": "আড়াল করা কাজ আড়াল করা হয়েছে",
|
||||
"links_one": "{{count}} লিংক",
|
||||
"links_other": "{{count}} লিংক",
|
||||
"hiddenBlockingLinks_one": "{{count}} লুকানো blocking link",
|
||||
"hiddenBlockingLinks_other": "{{count}} লুকানো blocking links",
|
||||
"hiddenTaskStack": "লুকানো কাজের stack",
|
||||
"hiddenTasks_one": "{{count}} লুকানো কাজ",
|
||||
"hiddenTasks_other": "{{count}} লুকানো কাজ",
|
||||
"task": "কাজ",
|
||||
"openBlockerStack": "Blocker stack খুলুন",
|
||||
"openBlockedStack": "Blocked stack খুলুন",
|
||||
"openBlockerTask": "Blocker task খুলুন",
|
||||
"openBlockedTask": "Blocked task খুলুন"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "কর্ম",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "নতুন করেত প্রদর্শন ( r)",
|
||||
"wrapLines": "লাইন গুটানো",
|
||||
"loadingTail": "প্রসেসটি লগ- ইন করা হচ্ছে...",
|
||||
"empty": "এই সদস্য জন্য কোনো প্রসেস লগ ফাইল পাওয়া যায়নি।"
|
||||
"empty": "এই সদস্য জন্য কোনো প্রসেস লগ ফাইল পাওয়া যায়নি।",
|
||||
"copy": "Copy",
|
||||
"fileEmpty": "Process log file খালি.",
|
||||
"showingLast": "শেষ {{bytes}} দেখানো হচ্ছে.",
|
||||
"showing": "{{bytes}} দেখানো হচ্ছে."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "এই সদস্যে কোনো কাজ নির্ধারিত হয়নি"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "পরিসেবা উপলব্ধকারীর অবস্থা থেকে আরম্ভ করে এই ডায়লগ পুনরায় আরম্ভ করুন।",
|
||||
"openCodeAppMcpUnreachable": "OpenChod অ্যাপ্লিকেশন পুনরায় চালু করতে পুনরায় চেষ্টা করুন MCP ব্রিজ. যদি এটা আবার হয়, তাহলে অ্যাপ্লিকেশন পুনরায় চালু করুন এবং ওপেনোডে ধারণ করুন।",
|
||||
"cliBinaryMissing": "স্থানীয় Klalou নিশ্চিত করুন CLI বাইনারি উপস্থিত রয়েছে এবং এটি পুনরায় আরম্ভ করা যাবে।",
|
||||
"default": "উপরে ব্যাপারটা সমাধান করো, তারপর এই সংলাপ খুলে দাও।"
|
||||
"default": "উপরে ব্যাপারটা সমাধান করো, তারপর এই সংলাপ খুলে দাও।",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI অ্যাডমিনিস্ট্রেটর হিসেবে চালান, তারপর launch আবার চেষ্টা করুন।"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "চলছে"
|
||||
"title": "চলছে",
|
||||
"status": {
|
||||
"active": "সক্রিয়",
|
||||
"provisioning": "শুরু হচ্ছে",
|
||||
"idle": "চলছে"
|
||||
},
|
||||
"noProject": "কোনো project নেই"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "সর্বোচ্চ মান {{count}} পার্শ্ববর্তী পেইন"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "আপনার কোডেক্স সেশনটা খুব পুরনো মনে হচ্ছে. পুনরায় চালু করা।",
|
||||
"useCode": "কোড ব্যবহার করো"
|
||||
"useCode": "কোড ব্যবহার করো",
|
||||
"generating": "তৈরি হচ্ছে...",
|
||||
"openLogin": "Login খুলুন",
|
||||
"generateLink": "Link তৈরি করুন"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "প্রচেষ্টা",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "স্বনির্ধারিত ভূমিকা...",
|
||||
"searchPlaceholder": "ভূমিকা অনুসন্ধান করুন...",
|
||||
"empty": "কোনো ভূমিকা পাওয়া যায়নি।",
|
||||
"reservedRole": "এই ভূমিকা সংরক্ষিত রয়েছে"
|
||||
"reservedRole": "এই ভূমিকা সংরক্ষিত রয়েছে",
|
||||
"emptyCustomRole": "Role খালি হতে পারে না"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Hinzufügen API Schlüssel",
|
||||
"addFirst": "Fügen Sie Ihren ersten Schlüssel hinzu",
|
||||
"edit": "Bearbeiten"
|
||||
"edit": "Bearbeiten",
|
||||
"copied": "Kopiert!",
|
||||
"copyEnvVarName": "Env-Variablennamen kopieren",
|
||||
"confirmDelete": "Zum Bestätigen erneut klicken",
|
||||
"delete": "Löschen"
|
||||
},
|
||||
"empty": {
|
||||
"title": "Nein API Schlüssel gespeichert",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "gekreppt",
|
||||
"copy": "Kopieren von Diagnosen",
|
||||
"hints": "Hinweise",
|
||||
"likelyCause": "Ursache:"
|
||||
"likelyCause": "Ursache:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI als Administrator ausführen"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "Dies ist bereits der ausgewählte OpenCode Standard.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "Suchmodelle",
|
||||
"selectProjectBeforeTesting": "Wählen Sie vor dem Testen einen Projektkontext aus.",
|
||||
"selectProjectBeforeTestingDefaults": "Wählen Sie vor dem Testen oder Speichern von OpenCode-Standards einen Projektkontext aus.",
|
||||
"useInTeamPicker": "Einsatz im Team Picker"
|
||||
"useInTeamPicker": "Einsatz im Team Picker",
|
||||
"testInProgress": "Der Modelltest läuft bereits.",
|
||||
"validationContextRequired": "Wählen Sie oben einen validation context aus, um Test und Set default zu aktivieren. Speichern für team picker speichert nur die route für neue Teams.",
|
||||
"defaultSaveInProgress": "OpenCode default wird gespeichert.",
|
||||
"routeUnavailableAuth": "Dieser provider benötigt eine Authentifizierung, bevor dieses Modell verwendet werden kann.",
|
||||
"routeUnavailableFailed": "Diese model route ist beim letzten execution test fehlgeschlagen.",
|
||||
"routeUnavailableUnknown": "Dieses Modell ist der aktuelle OpenCode default, aber noch nicht im live catalog verfügbar.",
|
||||
"actionsUnavailable": "Aktionen sind vorübergehend nicht verfügbar.",
|
||||
"routeUnavailableGeneric": "Diese model route kann derzeit nicht verwendet werden."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "OpenCode Anbieter Katalog",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "Bedarfsprüfung",
|
||||
"failed": "gescheitert",
|
||||
"unknown": "unbekannt",
|
||||
"default": "Standard"
|
||||
"default": "Standard",
|
||||
"knownRoute": "bekannte route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API Schlüssel konfiguriert, aber noch nicht überprüft",
|
||||
"apiKeyModeMissingCredential": "API Schlüsselmodus ausgewählt, aber nein API Schlüssel konfiguriert",
|
||||
"connectedVia": "Vernetzt über {{method}}",
|
||||
"unableToVerify": "Unfähig zu überprüfen"
|
||||
"unableToVerify": "Unfähig zu überprüfen",
|
||||
"modelsAvailable": "Modelle verfügbar"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Ausgewählte Auth: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "Sitzung",
|
||||
"stallNudge": "stall nudge",
|
||||
"start": "Start",
|
||||
"workSync": "Arbeit synchronisiert"
|
||||
"workSync": "Arbeit synchronisiert",
|
||||
"agentError": "Agent-Fehler",
|
||||
"apiError": "API-Fehler"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap anerkannt",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Antwort"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "Fortschritte"
|
||||
"inProgress": "Fortschritte",
|
||||
"expandInProgress": "In Arbeit erweitern",
|
||||
"collapseInProgress": "In Arbeit einklappen",
|
||||
"reviewing": "prüft",
|
||||
"workingOn": "arbeitet an"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Erweiterte Nachrichtenansicht"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Teamdaten erscheinen, sobald die Bereitstellung abgeschlossen ist",
|
||||
"context": {
|
||||
"title": "Kontext"
|
||||
"title": "Kontext",
|
||||
"loading": "Lädt...",
|
||||
"noSessionLoaded": "Keine Sitzung geladen",
|
||||
"closePanel": "Kontextpanel {{team}} schließen",
|
||||
"loadingContext": "Kontext wird geladen...",
|
||||
"openLeadSession": "Öffnen Sie die Team-Lead-Sitzung, um den Kontext anzuzeigen."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "Keine Protokollquellen gefunden.",
|
||||
"ariaLabel": "Datenquelle",
|
||||
"leadLabel": "Blei",
|
||||
"selectSourceEmpty": "Wählen Sie eine Protokollquelle aus."
|
||||
"selectSourceEmpty": "Wählen Sie eine Protokollquelle aus.",
|
||||
"leadDescription": "Team Lead",
|
||||
"removedLabel": "entfernt",
|
||||
"removedDescription": "Entfernt"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} mehr",
|
||||
"more_other": "+{{count}} mehr",
|
||||
"more_few": "+{{count}} mehr",
|
||||
"more_many": "+{{count}} mehr"
|
||||
"more_many": "+{{count}} mehr",
|
||||
"unsupportedProvider": "Anbieter nicht unterstützt",
|
||||
"openCodeLogsDelayed": "OpenCode-Logs verzögert",
|
||||
"logsUnavailable": "Logs nicht verfügbar",
|
||||
"noRecentLogs": "Keine aktuellen Logs",
|
||||
"toolError": "Tool-Fehler",
|
||||
"toolResult": "Tool-Ergebnis",
|
||||
"toolUse": "Tool-Nutzung",
|
||||
"thinking": "Denken",
|
||||
"error": "Fehler",
|
||||
"logEvent": "Log-Ereignis",
|
||||
"noErrorOutput": "Keine Fehlerausgabe",
|
||||
"noOutput": "Keine Ausgabe",
|
||||
"noInput": "Keine Eingabe"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Blockierung der Abhängigkeit",
|
||||
"blocks": "Blöcke",
|
||||
"close": "Schließen",
|
||||
"blockingHiddenTasks": "Blockierung versteckter Aufgaben",
|
||||
"blockedHiddenTasks": "Gesperrte versteckte Aufgaben"
|
||||
"blockedHiddenTasks": "Gesperrte versteckte Aufgaben",
|
||||
"links_one": "{{count}} Link",
|
||||
"links_other": "{{count}} Links",
|
||||
"hiddenBlockingLinks_one": "{{count}} versteckter blockierender Link",
|
||||
"hiddenBlockingLinks_other": "{{count}} versteckte blockierende Links",
|
||||
"hiddenTaskStack": "Stapel versteckter Aufgaben",
|
||||
"hiddenTasks_one": "{{count}} versteckte Aufgabe",
|
||||
"hiddenTasks_other": "{{count}} versteckte Aufgaben",
|
||||
"task": "Aufgabe",
|
||||
"openBlockerStack": "Blockierenden Stapel öffnen",
|
||||
"openBlockedStack": "Blockierten Stapel öffnen",
|
||||
"openBlockerTask": "Blockierende Aufgabe öffnen",
|
||||
"openBlockedTask": "Blockierte Aufgabe öffnen"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Tätigkeit",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Auto-refresh",
|
||||
"wrapLines": "Wrap-Linien",
|
||||
"loadingTail": "Ladevorgang log tail...",
|
||||
"empty": "Noch keine Prozess-Log-Datei für dieses Mitglied erfasst."
|
||||
"empty": "Noch keine Prozess-Log-Datei für dieses Mitglied erfasst.",
|
||||
"copy": "Kopieren",
|
||||
"fileEmpty": "Die Prozess-Logdatei ist leer.",
|
||||
"showingLast": "Zeige letzte {{bytes}}.",
|
||||
"showing": "Zeige {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "Keine Aufgaben, die diesem Mitglied zugewiesen werden"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Installieren oder Wiederherstellen OpenCode Laufzeit von der Provider-Statuskarte, dann wieder öffnen Sie diesen Dialog.",
|
||||
"openCodeAppMcpUnreachable": "Wiederholen Sie den Start der OpenCode App MCP Brücke. Wenn es wiederholt, starten Sie die App und OpenCode Laufzeit.",
|
||||
"cliBinaryMissing": "Stellen Sie sicher, dass die lokale Claude CLI binär existiert und kann gestartet werden, dann wieder öffnet dieser Dialog.",
|
||||
"default": "Lösen Sie das Problem oben, dann wieder öffnen Sie diesen Dialog."
|
||||
"default": "Lösen Sie das Problem oben, dann wieder öffnen Sie diesen Dialog.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI als Administrator ausführen und launch erneut versuchen."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Laufende Teams"
|
||||
"title": "Laufende Teams",
|
||||
"status": {
|
||||
"active": "Aktiv",
|
||||
"provisioning": "Startet",
|
||||
"idle": "Läuft"
|
||||
},
|
||||
"noProject": "Kein Projekt"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Höchstgehalt {{count}} erreichte Scheiben"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Ihre Codex-Session erscheint stabil. Weiterleiten.",
|
||||
"useCode": "Bezeichnung"
|
||||
"useCode": "Bezeichnung",
|
||||
"generating": "Wird generiert...",
|
||||
"openLogin": "Login öffnen",
|
||||
"generateLink": "Link generieren"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Schwierigkeitsgrad (optional)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Individuelle Rolle...",
|
||||
"searchPlaceholder": "Suchrollen...",
|
||||
"empty": "Keine Rollen gefunden.",
|
||||
"reservedRole": "Diese Rolle ist reserviert"
|
||||
"reservedRole": "Diese Rolle ist reserviert",
|
||||
"emptyCustomRole": "Rolle darf nicht leer sein"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Add API Key",
|
||||
"addFirst": "Add your first key",
|
||||
"edit": "Edit"
|
||||
"edit": "Edit",
|
||||
"copied": "Copied!",
|
||||
"copyEnvVarName": "Copy env var name",
|
||||
"confirmDelete": "Click again to confirm",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"empty": {
|
||||
"title": "No API keys saved",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copied",
|
||||
"copy": "Copy diagnostics",
|
||||
"hints": "Hints",
|
||||
"likelyCause": "Likely cause:"
|
||||
"likelyCause": "Likely cause:",
|
||||
"windowsSymlinkAdminHint": "Windows: run Agent Teams AI as Administrator"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "This is already the selected OpenCode default.",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "session",
|
||||
"stallNudge": "stall nudge",
|
||||
"start": "start",
|
||||
"workSync": "work sync"
|
||||
"workSync": "work sync",
|
||||
"agentError": "Agent Error",
|
||||
"apiError": "API Error"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap acknowledged",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Reply"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "In progress"
|
||||
"inProgress": "In progress",
|
||||
"expandInProgress": "Expand in progress",
|
||||
"collapseInProgress": "Collapse in progress",
|
||||
"reviewing": "reviewing",
|
||||
"workingOn": "working on"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Expanded message view"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Team data will appear once provisioning completes",
|
||||
"context": {
|
||||
"title": "Context"
|
||||
"title": "Context",
|
||||
"loading": "Loading...",
|
||||
"noSessionLoaded": "No session loaded",
|
||||
"closePanel": "Close {{team}} context panel",
|
||||
"loadingContext": "Loading context...",
|
||||
"openLeadSession": "Open the team lead session to view context."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "No log sources found.",
|
||||
"ariaLabel": "Log source",
|
||||
"leadLabel": "Lead",
|
||||
"selectSourceEmpty": "Select a log source."
|
||||
"selectSourceEmpty": "Select a log source.",
|
||||
"leadDescription": "Team Lead",
|
||||
"removedLabel": "removed",
|
||||
"removedDescription": "Removed"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} more",
|
||||
"more_other": "+{{count}} more",
|
||||
"more_few": "+{{count}} more",
|
||||
"more_many": "+{{count}} more"
|
||||
"more_many": "+{{count}} more",
|
||||
"unsupportedProvider": "Unsupported provider",
|
||||
"openCodeLogsDelayed": "OpenCode logs delayed",
|
||||
"logsUnavailable": "Logs unavailable",
|
||||
"noRecentLogs": "No recent logs",
|
||||
"toolError": "Tool error",
|
||||
"toolResult": "Tool result",
|
||||
"toolUse": "Tool use",
|
||||
"thinking": "Thinking",
|
||||
"error": "Error",
|
||||
"logEvent": "Log event",
|
||||
"noErrorOutput": "No error output",
|
||||
"noOutput": "No output",
|
||||
"noInput": "No input"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Blocking Dependency",
|
||||
"blocks": "blocks",
|
||||
"close": "Close",
|
||||
"blockingHiddenTasks": "Blocking hidden tasks",
|
||||
"blockedHiddenTasks": "Blocked hidden tasks"
|
||||
"blockedHiddenTasks": "Blocked hidden tasks",
|
||||
"links_one": "{{count}} link",
|
||||
"links_other": "{{count}} links",
|
||||
"hiddenBlockingLinks_one": "{{count}} hidden blocking link",
|
||||
"hiddenBlockingLinks_other": "{{count}} hidden blocking links",
|
||||
"hiddenTaskStack": "Hidden task stack",
|
||||
"hiddenTasks_one": "{{count}} hidden task",
|
||||
"hiddenTasks_other": "{{count}} hidden tasks",
|
||||
"task": "Task",
|
||||
"openBlockerStack": "Open blocker stack",
|
||||
"openBlockedStack": "Open blocked stack",
|
||||
"openBlockerTask": "Open blocker task",
|
||||
"openBlockedTask": "Open blocked task"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Activity",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Auto-refresh",
|
||||
"wrapLines": "Wrap lines",
|
||||
"loadingTail": "Loading process log tail...",
|
||||
"empty": "No process log file captured for this member yet."
|
||||
"empty": "No process log file captured for this member yet.",
|
||||
"copy": "Copy",
|
||||
"fileEmpty": "Process log file is empty.",
|
||||
"showingLast": "Showing last {{bytes}}.",
|
||||
"showing": "Showing {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "No tasks assigned to this member"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Install or retry OpenCode runtime from the provider status card, then reopen this dialog.",
|
||||
"openCodeAppMcpUnreachable": "Retry launch to refresh the OpenCode app MCP bridge. If it repeats, restart the app and OpenCode runtime.",
|
||||
"cliBinaryMissing": "Make sure the local Claude CLI binary exists and can be started, then reopen this dialog.",
|
||||
"default": "Resolve the issue above, then reopen this dialog."
|
||||
"default": "Resolve the issue above, then reopen this dialog.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Run Agent Teams AI as Administrator, then retry launch."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Running Teams"
|
||||
"title": "Running Teams",
|
||||
"status": {
|
||||
"active": "Active",
|
||||
"provisioning": "Launching",
|
||||
"idle": "Running"
|
||||
},
|
||||
"noProject": "No project"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Maximum of {{count}} panes reached"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Your Codex session appears stale. Reconnect to continue.",
|
||||
"useCode": "Use code"
|
||||
"useCode": "Use code",
|
||||
"generating": "Generating...",
|
||||
"openLogin": "Open login",
|
||||
"generateLink": "Generate link"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Effort level (optional)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Custom role...",
|
||||
"searchPlaceholder": "Search roles...",
|
||||
"empty": "No roles found.",
|
||||
"reservedRole": "This role is reserved"
|
||||
"reservedRole": "This role is reserved",
|
||||
"emptyCustomRole": "Role cannot be empty"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Añadir API Key",
|
||||
"addFirst": "Añade tu primera llave",
|
||||
"edit": "Editar"
|
||||
"edit": "Editar",
|
||||
"copied": "Copiado!",
|
||||
"copyEnvVarName": "Copiar nombre de variable env",
|
||||
"confirmDelete": "Haga clic otra vez para confirmar",
|
||||
"delete": "Eliminar"
|
||||
},
|
||||
"empty": {
|
||||
"title": "No se guardan las teclas ZXCV",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copiado",
|
||||
"copy": "Copia diagnóstico",
|
||||
"hints": "Hintes",
|
||||
"likelyCause": "Causa probable:"
|
||||
"likelyCause": "Causa probable:",
|
||||
"windowsSymlinkAdminHint": "Windows: ejecuta Agent Teams AI como administrador"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "Este ya es el predeterminado OpenCode seleccionado.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "Modelos de búsqueda",
|
||||
"selectProjectBeforeTesting": "Seleccione un contexto de proyecto antes de probar modelos.",
|
||||
"selectProjectBeforeTestingDefaults": "Seleccione un contexto de proyecto antes de probar o guardar los defectos de OpenCode.",
|
||||
"useInTeamPicker": "Uso en el equipo picker"
|
||||
"useInTeamPicker": "Uso en el equipo picker",
|
||||
"testInProgress": "La prueba del modelo ya está en curso.",
|
||||
"validationContextRequired": "Selecciona un contexto de validación arriba para habilitar Test y Set default. Guardar para team picker solo almacena la route para equipos nuevos.",
|
||||
"defaultSaveInProgress": "Se está guardando el OpenCode default.",
|
||||
"routeUnavailableAuth": "Este provider requiere autenticación antes de usar este modelo.",
|
||||
"routeUnavailableFailed": "Esta model route falló su último execution test.",
|
||||
"routeUnavailableUnknown": "Este modelo es el OpenCode default actual, pero aún no está en el live catalog.",
|
||||
"actionsUnavailable": "Las acciones no están disponibles temporalmente.",
|
||||
"routeUnavailableGeneric": "Esta model route no se puede usar ahora."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "Catálogo de proveedores de OpenCode",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "examen de necesidades",
|
||||
"failed": "fracasado",
|
||||
"unknown": "desconocida",
|
||||
"default": "por defecto"
|
||||
"default": "por defecto",
|
||||
"knownRoute": "route conocida"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API llave configurada, pero no verificada",
|
||||
"apiKeyModeMissingCredential": "Modo de tecla API seleccionado, pero no se configura la tecla API",
|
||||
"connectedVia": "Conectado vía {{method}}",
|
||||
"unableToVerify": "Incapaz de verificar"
|
||||
"unableToVerify": "Incapaz de verificar",
|
||||
"modelsAvailable": "Modelos disponibles"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Ajuste seleccionado: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "período de sesiones",
|
||||
"stallNudge": "¡No!",
|
||||
"start": "Empieza",
|
||||
"workSync": "sincronización de trabajo"
|
||||
"workSync": "sincronización de trabajo",
|
||||
"agentError": "Error del agente",
|
||||
"apiError": "Error de API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap acknowledged",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Respuesta"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "En curso"
|
||||
"inProgress": "En curso",
|
||||
"expandInProgress": "Expandir en progreso",
|
||||
"collapseInProgress": "Contraer en progreso",
|
||||
"reviewing": "revisando",
|
||||
"workingOn": "trabajando en"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Ampliación de la vista del mensaje"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Los datos del equipo aparecerán una vez que se complete el suministro",
|
||||
"context": {
|
||||
"title": "Contexto"
|
||||
"title": "Contexto",
|
||||
"loading": "Cargando...",
|
||||
"noSessionLoaded": "Sesión no cargada",
|
||||
"closePanel": "Cerrar panel de contexto de {{team}}",
|
||||
"loadingContext": "Cargando contexto...",
|
||||
"openLeadSession": "Abra la sesión del líder del equipo para ver el contexto."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "No hay fuentes de registro encontradas.",
|
||||
"ariaLabel": "Fuente de registro",
|
||||
"leadLabel": "Lead",
|
||||
"selectSourceEmpty": "Seleccione una fuente de registro."
|
||||
"selectSourceEmpty": "Seleccione una fuente de registro.",
|
||||
"leadDescription": "Líder del equipo",
|
||||
"removedLabel": "eliminado",
|
||||
"removedDescription": "Eliminado"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} más",
|
||||
"more_other": "+{{count}} más",
|
||||
"more_few": "+{{count}} más",
|
||||
"more_many": "+{{count}} más"
|
||||
"more_many": "+{{count}} más",
|
||||
"unsupportedProvider": "Proveedor no compatible",
|
||||
"openCodeLogsDelayed": "Logs de OpenCode retrasados",
|
||||
"logsUnavailable": "Logs no disponibles",
|
||||
"noRecentLogs": "No hay logs recientes",
|
||||
"toolError": "Error de herramienta",
|
||||
"toolResult": "Resultado de herramienta",
|
||||
"toolUse": "Uso de herramienta",
|
||||
"thinking": "Pensando",
|
||||
"error": "Error",
|
||||
"logEvent": "Evento de log",
|
||||
"noErrorOutput": "Sin salida de error",
|
||||
"noOutput": "Sin salida",
|
||||
"noInput": "Sin entrada"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Bloqueo de la dependencia",
|
||||
"blocks": "bloques",
|
||||
"close": "Cerca",
|
||||
"blockingHiddenTasks": "Bloqueo de tareas ocultas",
|
||||
"blockedHiddenTasks": "Tareas ocultas bloqueadas"
|
||||
"blockedHiddenTasks": "Tareas ocultas bloqueadas",
|
||||
"links_one": "{{count}} enlace",
|
||||
"links_other": "{{count}} enlaces",
|
||||
"hiddenBlockingLinks_one": "{{count}} enlace bloqueante oculto",
|
||||
"hiddenBlockingLinks_other": "{{count}} enlaces bloqueantes ocultos",
|
||||
"hiddenTaskStack": "Pila de tareas ocultas",
|
||||
"hiddenTasks_one": "{{count}} tarea oculta",
|
||||
"hiddenTasks_other": "{{count}} tareas ocultas",
|
||||
"task": "Tarea",
|
||||
"openBlockerStack": "Abrir pila bloqueadora",
|
||||
"openBlockedStack": "Abrir pila bloqueada",
|
||||
"openBlockerTask": "Abrir tarea bloqueadora",
|
||||
"openBlockedTask": "Abrir tarea bloqueada"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Actividad",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Auto-refresh",
|
||||
"wrapLines": "Líneas de trampa",
|
||||
"loadingTail": "Carga de proceso log tail...",
|
||||
"empty": "Aún no se ha capturado ningún archivo de registro de procesos para este miembro."
|
||||
"empty": "Aún no se ha capturado ningún archivo de registro de procesos para este miembro.",
|
||||
"copy": "Copiar",
|
||||
"fileEmpty": "El archivo de log del proceso está vacío.",
|
||||
"showingLast": "Mostrando los últimos {{bytes}}.",
|
||||
"showing": "Mostrando {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "No se han asignado tareas a este miembro"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Instala o vuelve a iniciar OpenCode tiempo de ejecución de la tarjeta de estado del proveedor, y luego vuelve a abrir este diálogo.",
|
||||
"openCodeAppMcpUnreachable": "Lanzamiento de entrada para refrescar el puente de OpenCode MCP. Si se repite, reinicie la aplicación y el tiempo de ejecución OpenCode.",
|
||||
"cliBinaryMissing": "Asegúrese de que el binario local Claude CLI exista y pueda comenzar, y luego vuelva a abrir este diálogo.",
|
||||
"default": "Resolver el tema anterior, luego reabrir este diálogo."
|
||||
"default": "Resolver el tema anterior, luego reabrir este diálogo.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Ejecuta Agent Teams AI como administrador y vuelve a intentar el launch."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Equipos de ejecución"
|
||||
"title": "Equipos de ejecución",
|
||||
"status": {
|
||||
"active": "Activo",
|
||||
"provisioning": "Iniciando",
|
||||
"idle": "En ejecución"
|
||||
},
|
||||
"noProject": "Sin proyecto"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Máximo de los paneles {{count}} alcanzado"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Su sesión de Codex parece ser firme. Reconéctate para continuar.",
|
||||
"useCode": "Código de uso"
|
||||
"useCode": "Código de uso",
|
||||
"generating": "Generando...",
|
||||
"openLogin": "Abrir inicio de sesión",
|
||||
"generateLink": "Generar enlace"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Nivel de esfuerzo (opcional)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Función personalizada...",
|
||||
"searchPlaceholder": "Funciones de búsqueda...",
|
||||
"empty": "No hay papeles encontrados.",
|
||||
"reservedRole": "Esta función está reservada"
|
||||
"reservedRole": "Esta función está reservada",
|
||||
"emptyCustomRole": "El rol no puede estar vacío"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Ajouter API Clé",
|
||||
"addFirst": "Ajouter votre première clé",
|
||||
"edit": "Modifier"
|
||||
"edit": "Modifier",
|
||||
"copied": "Copié!",
|
||||
"copyEnvVarName": "Copier le nom de variable env",
|
||||
"confirmDelete": "Cliquez encore pour confirmer",
|
||||
"delete": "Supprimer"
|
||||
},
|
||||
"empty": {
|
||||
"title": "Numéro API clés enregistrées",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copié",
|
||||
"copy": "Copier les diagnostics",
|
||||
"hints": "Conseils",
|
||||
"likelyCause": "Cause probable:"
|
||||
"likelyCause": "Cause probable:",
|
||||
"windowsSymlinkAdminHint": "Windows: lancez Agent Teams AI en tant qu'administrateur"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "C'est déjà la valeur par défaut d'OpenCode sélectionnée.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "Modèles de recherche",
|
||||
"selectProjectBeforeTesting": "Sélectionnez un contexte de projet avant de tester des modèles.",
|
||||
"selectProjectBeforeTestingDefaults": "Sélectionnez un contexte de projet avant de tester ou d'enregistrer les valeurs par défaut OpenCode.",
|
||||
"useInTeamPicker": "Utilisation dans le sélectionneur d'équipe"
|
||||
"useInTeamPicker": "Utilisation dans le sélectionneur d'équipe",
|
||||
"testInProgress": "Le test du modèle est déjà en cours.",
|
||||
"validationContextRequired": "Sélectionnez un contexte de validation ci-dessus pour activer Test et Set default. L'enregistrement pour team picker ne conserve que la route pour les nouvelles équipes.",
|
||||
"defaultSaveInProgress": "L'OpenCode default est en cours d'enregistrement.",
|
||||
"routeUnavailableAuth": "Ce provider nécessite une authentification avant d'utiliser ce modèle.",
|
||||
"routeUnavailableFailed": "Cette model route a échoué au dernier execution test.",
|
||||
"routeUnavailableUnknown": "Ce modèle est l'OpenCode default actuel, mais il n'est pas encore disponible dans le live catalog.",
|
||||
"actionsUnavailable": "Les actions sont temporairement indisponibles.",
|
||||
"routeUnavailableGeneric": "Cette model route ne peut pas être utilisée maintenant."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "Catalogue des fournisseurs OpenCode",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "test des besoins",
|
||||
"failed": "échoué",
|
||||
"unknown": "inconnu",
|
||||
"default": "par défaut"
|
||||
"default": "par défaut",
|
||||
"knownRoute": "route connue"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API clé configurée, mais non encore vérifiée",
|
||||
"apiKeyModeMissingCredential": "API mode clé sélectionné, mais non API la clé est configurée",
|
||||
"connectedVia": "Connecté via {{method}}",
|
||||
"unableToVerify": "Impossible de vérifier"
|
||||
"unableToVerify": "Impossible de vérifier",
|
||||
"modelsAvailable": "Modèles disponibles"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Auth sélectionnée: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "session",
|
||||
"stallNudge": "Décrochage",
|
||||
"start": "début",
|
||||
"workSync": "synchronisation de travail"
|
||||
"workSync": "synchronisation de travail",
|
||||
"agentError": "Erreur d'agent",
|
||||
"apiError": "Erreur d'API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap reconnu",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Réponse"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "En cours"
|
||||
"inProgress": "En cours",
|
||||
"expandInProgress": "Développer en cours",
|
||||
"collapseInProgress": "Réduire en cours",
|
||||
"reviewing": "relit",
|
||||
"workingOn": "travaille sur"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Affichage du message élargi"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Les données de l'équipe apparaîtront une fois la fourniture terminée",
|
||||
"context": {
|
||||
"title": "Contexte"
|
||||
"title": "Contexte",
|
||||
"loading": "Chargement...",
|
||||
"noSessionLoaded": "Aucune session chargée",
|
||||
"closePanel": "Fermer le panneau de contexte {{team}}",
|
||||
"loadingContext": "Chargement du contexte...",
|
||||
"openLeadSession": "Ouvrez la session du lead d'équipe pour voir le contexte."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "Aucune source de log n'a été trouvée.",
|
||||
"ariaLabel": "Source du journal",
|
||||
"leadLabel": "Plomb",
|
||||
"selectSourceEmpty": "Sélectionnez une source de journal."
|
||||
"selectSourceEmpty": "Sélectionnez une source de journal.",
|
||||
"leadDescription": "Lead d'équipe",
|
||||
"removedLabel": "supprimé",
|
||||
"removedDescription": "Supprimé"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} plus",
|
||||
"more_other": "+{{count}} plus",
|
||||
"more_few": "+{{count}} plus",
|
||||
"more_many": "+{{count}} plus"
|
||||
"more_many": "+{{count}} plus",
|
||||
"unsupportedProvider": "Fournisseur non pris en charge",
|
||||
"openCodeLogsDelayed": "Logs OpenCode retardés",
|
||||
"logsUnavailable": "Logs indisponibles",
|
||||
"noRecentLogs": "Aucun log récent",
|
||||
"toolError": "Erreur d'outil",
|
||||
"toolResult": "Résultat d'outil",
|
||||
"toolUse": "Utilisation d'outil",
|
||||
"thinking": "Réflexion",
|
||||
"error": "Erreur",
|
||||
"logEvent": "Événement de log",
|
||||
"noErrorOutput": "Aucune sortie d'erreur",
|
||||
"noOutput": "Aucune sortie",
|
||||
"noInput": "Aucune entrée"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Bloquer la dépendance",
|
||||
"blocks": "blocs",
|
||||
"close": "Fermer",
|
||||
"blockingHiddenTasks": "Blocage des tâches cachées",
|
||||
"blockedHiddenTasks": "Tâches cachées bloquées"
|
||||
"blockedHiddenTasks": "Tâches cachées bloquées",
|
||||
"links_one": "{{count}} lien",
|
||||
"links_other": "{{count}} liens",
|
||||
"hiddenBlockingLinks_one": "{{count}} lien bloquant masqué",
|
||||
"hiddenBlockingLinks_other": "{{count}} liens bloquants masqués",
|
||||
"hiddenTaskStack": "Pile de tâches cachées",
|
||||
"hiddenTasks_one": "{{count}} tâche cachée",
|
||||
"hiddenTasks_other": "{{count}} tâches cachées",
|
||||
"task": "Tâche",
|
||||
"openBlockerStack": "Ouvrir la pile bloquante",
|
||||
"openBlockedStack": "Ouvrir la pile bloquée",
|
||||
"openBlockerTask": "Ouvrir la tâche bloquante",
|
||||
"openBlockedTask": "Ouvrir la tâche bloquée"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Activité",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Rénovation automatique",
|
||||
"wrapLines": "Lignes d'enroulement",
|
||||
"loadingTail": "Chargement de la queue de log...",
|
||||
"empty": "Aucun fichier de processus n'a encore été capturé pour ce membre."
|
||||
"empty": "Aucun fichier de processus n'a encore été capturé pour ce membre.",
|
||||
"copy": "Copier",
|
||||
"fileEmpty": "Le fichier de log du processus est vide.",
|
||||
"showingLast": "Affichage des derniers {{bytes}}.",
|
||||
"showing": "Affichage de {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "Aucune tâche assignée à ce membre"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Installer ou réessayer OpenCode runtime à partir de la carte de statut du fournisseur, puis rouvrir cette boîte de dialogue.",
|
||||
"openCodeAppMcpUnreachable": "Reessayer le lancement pour actualiser l'application OpenCode MCP pont. Si elle se répète, redémarrez l'application et l'exécution OpenCode.",
|
||||
"cliBinaryMissing": "Assurez-vous que le Claude local CLI binaire existe et peut être démarré, puis rouvrir cette boîte de dialogue.",
|
||||
"default": "Résolvez le problème ci-dessus, puis rouvrez ce dialogue."
|
||||
"default": "Résolvez le problème ci-dessus, puis rouvrez ce dialogue.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Lancez Agent Teams AI en tant qu'administrateur, puis réessayez le launch."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Équipes de course"
|
||||
"title": "Équipes de course",
|
||||
"status": {
|
||||
"active": "Active",
|
||||
"provisioning": "Lancement",
|
||||
"idle": "En cours"
|
||||
},
|
||||
"noProject": "Aucun projet"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Maximum de {{count}} vitres atteintes"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Votre session Codex semble inexistante. Reconnecter pour continuer.",
|
||||
"useCode": "Utiliser le code"
|
||||
"useCode": "Utiliser le code",
|
||||
"generating": "Génération...",
|
||||
"openLogin": "Ouvrir la connexion",
|
||||
"generateLink": "Générer le lien"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Niveau d'effort (facultatif)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Rôle personnalisé...",
|
||||
"searchPlaceholder": "Rechercher les rôles...",
|
||||
"empty": "Aucun rôle trouvé.",
|
||||
"reservedRole": "Ce rôle est réservé"
|
||||
"reservedRole": "Ce rôle est réservé",
|
||||
"emptyCustomRole": "Le rôle ne peut pas être vide"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "API कुंजी जोड़ें",
|
||||
"addFirst": "अपनी पहली कुंजी जोड़ें",
|
||||
"edit": "संपादित करें"
|
||||
"edit": "संपादित करें",
|
||||
"copied": "कॉपी हो गया!",
|
||||
"copyEnvVarName": "Env var name copy करें",
|
||||
"confirmDelete": "Confirm करने के लिए फिर क्लिक करें",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"empty": {
|
||||
"title": "No API कुंजी बचाया",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copied",
|
||||
"copy": "निदान की प्रतिलिपि",
|
||||
"hints": "हिंट",
|
||||
"likelyCause": "समान कारण:"
|
||||
"likelyCause": "समान कारण:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI को Administrator के रूप में चलाएं"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "यह पहले से ही चयनित OpenCode डिफ़ॉल्ट है।",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "खोज मॉडल",
|
||||
"selectProjectBeforeTesting": "परीक्षण मॉडल से पहले परियोजना संदर्भ का चयन करें।",
|
||||
"selectProjectBeforeTestingDefaults": "OpenCode डिफ़ॉल्ट परीक्षण या सहेजने से पहले एक परियोजना संदर्भ का चयन करें।",
|
||||
"useInTeamPicker": "टीम पिकर में उपयोग करें"
|
||||
"useInTeamPicker": "टीम पिकर में उपयोग करें",
|
||||
"testInProgress": "मॉडल टेस्ट पहले से चल रहा है।",
|
||||
"validationContextRequired": "Test और Set default सक्षम करने के लिए ऊपर validation context चुनें। team picker के लिए सेव करने से सिर्फ नई टीमों की route सेव होती है।",
|
||||
"defaultSaveInProgress": "OpenCode default सेव हो रहा है।",
|
||||
"routeUnavailableAuth": "इस model का उपयोग करने से पहले इस provider को authentication चाहिए।",
|
||||
"routeUnavailableFailed": "यह model route पिछले execution test में विफल रहा।",
|
||||
"routeUnavailableUnknown": "यह model वर्तमान OpenCode default है, लेकिन अभी live catalog में उपलब्ध नहीं है।",
|
||||
"actionsUnavailable": "Actions अस्थायी रूप से उपलब्ध नहीं हैं।",
|
||||
"routeUnavailableGeneric": "यह model route अभी उपयोग नहीं किया जा सकता।"
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "ओपनकोड प्रदाता सूची",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "परीक्षण",
|
||||
"failed": "असफल",
|
||||
"unknown": "अज्ञात",
|
||||
"default": "डिफ़ॉल्ट"
|
||||
"default": "डिफ़ॉल्ट",
|
||||
"knownRoute": "ज्ञात route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API कुंजी विन्यास, लेकिन अभी तक सत्यापित नहीं",
|
||||
"apiKeyModeMissingCredential": "API कुंजी मोड चुना गया है, लेकिन कोई API कुंजी कॉन्फ़िगर किया गया है",
|
||||
"connectedVia": "कनेक्टेड by {{method}}",
|
||||
"unableToVerify": "सत्यापित करने में असमर्थ"
|
||||
"unableToVerify": "सत्यापित करने में असमर्थ",
|
||||
"modelsAvailable": "मॉडल उपलब्ध हैं"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "चयनित auth: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "सत्र",
|
||||
"stallNudge": "स्टाल",
|
||||
"start": "प्रारंभ",
|
||||
"workSync": "कार्य सिंक"
|
||||
"workSync": "कार्य सिंक",
|
||||
"agentError": "Agent Error",
|
||||
"apiError": "API Error"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "बूटस्ट्रैप स्वीकार किया",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "जवाब दें"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "प्रगति में"
|
||||
"inProgress": "प्रगति में",
|
||||
"expandInProgress": "In progress फैलाएं",
|
||||
"collapseInProgress": "In progress समेटें",
|
||||
"reviewing": "review कर रहा है",
|
||||
"workingOn": "काम कर रहा है"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "विस्तारित संदेश दृश्य"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "टीम डेटा एक बार पूरा करने का प्रावधान करेगा",
|
||||
"context": {
|
||||
"title": "संदर्भ"
|
||||
"title": "संदर्भ",
|
||||
"loading": "लोड हो रहा है...",
|
||||
"noSessionLoaded": "Session loaded नहीं",
|
||||
"closePanel": "{{team}} context panel बंद करें",
|
||||
"loadingContext": "Context लोड हो रहा है...",
|
||||
"openLeadSession": "Context देखने के लिए team lead session खोलें."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "कोई लॉग सूत्र नहीं मिला।",
|
||||
"ariaLabel": "लॉग स्रोत",
|
||||
"leadLabel": "लीड",
|
||||
"selectSourceEmpty": "लॉग स्रोत चुनें।"
|
||||
"selectSourceEmpty": "लॉग स्रोत चुनें।",
|
||||
"leadDescription": "Team Lead",
|
||||
"removedLabel": "हटाया गया",
|
||||
"removedDescription": "हटाया गया"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "{{count}} अधिक",
|
||||
"more_other": "{{count}} अधिक",
|
||||
"more_few": "{{count}} अधिक",
|
||||
"more_many": "{{count}} अधिक"
|
||||
"more_many": "{{count}} अधिक",
|
||||
"unsupportedProvider": "Provider समर्थित नहीं",
|
||||
"openCodeLogsDelayed": "OpenCode logs में देरी है",
|
||||
"logsUnavailable": "Logs उपलब्ध नहीं",
|
||||
"noRecentLogs": "कोई हालिया logs नहीं",
|
||||
"toolError": "Tool error",
|
||||
"toolResult": "Tool result",
|
||||
"toolUse": "Tool use",
|
||||
"thinking": "Thinking",
|
||||
"error": "Error",
|
||||
"logEvent": "Log event",
|
||||
"noErrorOutput": "कोई error output नहीं",
|
||||
"noOutput": "कोई output नहीं",
|
||||
"noInput": "कोई input नहीं"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "अवरोधन निर्भरता",
|
||||
"blocks": "ब्लॉक",
|
||||
"close": "बंद",
|
||||
"blockingHiddenTasks": "छिपे हुए कार्यों को अवरुद्ध करना",
|
||||
"blockedHiddenTasks": "छुपा कार्य अवरुद्ध"
|
||||
"blockedHiddenTasks": "छुपा कार्य अवरुद्ध",
|
||||
"links_one": "{{count}} लिंक",
|
||||
"links_other": "{{count}} लिंक",
|
||||
"hiddenBlockingLinks_one": "{{count}} छिपा blocking link",
|
||||
"hiddenBlockingLinks_other": "{{count}} छिपे blocking links",
|
||||
"hiddenTaskStack": "छिपे कार्यों का stack",
|
||||
"hiddenTasks_one": "{{count}} छिपा कार्य",
|
||||
"hiddenTasks_other": "{{count}} छिपे कार्य",
|
||||
"task": "कार्य",
|
||||
"openBlockerStack": "Blocker stack खोलें",
|
||||
"openBlockedStack": "Blocked stack खोलें",
|
||||
"openBlockerTask": "Blocker task खोलें",
|
||||
"openBlockedTask": "Blocked task खोलें"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "गतिविधि",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "ऑटो रिफ्रेश",
|
||||
"wrapLines": "लपेटें",
|
||||
"loadingTail": "प्रक्रिया लॉग पूंछ लोड हो रहा है...",
|
||||
"empty": "इस सदस्य के लिए अभी तक कोई प्रक्रिया लॉग फाइल नहीं है।"
|
||||
"empty": "इस सदस्य के लिए अभी तक कोई प्रक्रिया लॉग फाइल नहीं है।",
|
||||
"copy": "Copy",
|
||||
"fileEmpty": "Process log file खाली है.",
|
||||
"showingLast": "अंतिम {{bytes}} दिखा रहे हैं.",
|
||||
"showing": "{{bytes}} दिखा रहे हैं."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "इस सदस्य को कोई कार्य सौंपा नहीं गया"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "प्रदाता स्टेटस कार्ड से OpenCode रनटाइम को इंस्टॉल या रीट्री करें, फिर इस संवाद को फिर से खोलें।",
|
||||
"openCodeAppMcpUnreachable": "ओपनकोड ऐप MCP पुल को रीफ्रेश करने के लिए रिट्री लॉन्च। यदि यह दोहराता है, तो ऐप और ओपनकोड रनटाइम को पुनः आरंभ करें।",
|
||||
"cliBinaryMissing": "सुनिश्चित करें कि स्थानीय क्लाउड CLI द्विआधारी मौजूद है और इसे शुरू किया जा सकता है, फिर इस संवाद को फिर से खोलना।",
|
||||
"default": "ऊपर इस मुद्दे को हल करें, फिर इस संवाद को फिर से खोलें।"
|
||||
"default": "ऊपर इस मुद्दे को हल करें, फिर इस संवाद को फिर से खोलें।",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI को Administrator के रूप में चलाएं, फिर launch दोबारा करें."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "रनिंग टीम"
|
||||
"title": "रनिंग टीम",
|
||||
"status": {
|
||||
"active": "सक्रिय",
|
||||
"provisioning": "शुरू हो रही है",
|
||||
"idle": "चल रही है"
|
||||
},
|
||||
"noProject": "कोई project नहीं"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "{{count}} पैन का अधिकतम प्रवेश"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "आपका कोडेक्स सत्र कहानी दिखाई देती है। जारी रखने के लिए कनेक्ट करें।",
|
||||
"useCode": "कोड"
|
||||
"useCode": "कोड",
|
||||
"generating": "बन रहा है...",
|
||||
"openLogin": "Login खोलें",
|
||||
"generateLink": "Link बनाएं"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "प्रयास स्तर (वैकल्पिक)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "कस्टम भूमिका...",
|
||||
"searchPlaceholder": "खोज भूमिकाओं...",
|
||||
"empty": "कोई भूमिका नहीं मिली।",
|
||||
"reservedRole": "यह भूमिका आरक्षित है"
|
||||
"reservedRole": "यह भूमिका आरक्षित है",
|
||||
"emptyCustomRole": "Role खाली नहीं हो सकती"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Tambah API Kunci",
|
||||
"addFirst": "Tambah kunci pertama Anda",
|
||||
"edit": "Sunting"
|
||||
"edit": "Sunting",
|
||||
"copied": "Disalin!",
|
||||
"copyEnvVarName": "Salin nama variabel env",
|
||||
"confirmDelete": "Klik lagi untuk mengonfirmasi",
|
||||
"delete": "Hapus"
|
||||
},
|
||||
"empty": {
|
||||
"title": "Tidak API kunci disimpan",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Disalin",
|
||||
"copy": "Salin diagnosa",
|
||||
"hints": "Petunjuk",
|
||||
"likelyCause": "Kemungkinan menyebabkan:"
|
||||
"likelyCause": "Kemungkinan menyebabkan:",
|
||||
"windowsSymlinkAdminHint": "Windows: jalankan Agent Teams AI sebagai Administrator"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "Ini sudah menjadi standar OpenCode yang dipilih.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "Cari model",
|
||||
"selectProjectBeforeTesting": "Pilih konteks projek sebelum pengujian model.",
|
||||
"selectProjectBeforeTestingDefaults": "Pilih konteks projek sebelum pengujian atau menyimpan baku OpenCode.",
|
||||
"useInTeamPicker": "Gunakan dalam tim picker"
|
||||
"useInTeamPicker": "Gunakan dalam tim picker",
|
||||
"testInProgress": "Pengujian model sudah berjalan.",
|
||||
"validationContextRequired": "Pilih validation context di atas untuk mengaktifkan Test dan Set default. Menyimpan untuk team picker hanya menyimpan route untuk tim baru.",
|
||||
"defaultSaveInProgress": "OpenCode default sedang disimpan.",
|
||||
"routeUnavailableAuth": "Provider ini memerlukan autentikasi sebelum model ini dapat digunakan.",
|
||||
"routeUnavailableFailed": "Model route ini gagal pada execution test terakhir.",
|
||||
"routeUnavailableUnknown": "Model ini adalah OpenCode default saat ini, tetapi belum tersedia di live catalog.",
|
||||
"actionsUnavailable": "Aksi sementara tidak tersedia.",
|
||||
"routeUnavailableGeneric": "Model route ini tidak dapat digunakan sekarang."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "Katalog penyedia OpenCode",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "membutuhkan tes",
|
||||
"failed": "gagal",
|
||||
"unknown": "tidak diketahui",
|
||||
"default": "baku"
|
||||
"default": "baku",
|
||||
"knownRoute": "route dikenal"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API kunci dikonfigurasi, tapi belum diverifikasi",
|
||||
"apiKeyModeMissingCredential": "API mode kunci dipilih, tapi tidak ada API kunci dikonfigurasi",
|
||||
"connectedVia": "Terhubung via {{method}}",
|
||||
"unableToVerify": "Tidak dapat memverifikasi"
|
||||
"unableToVerify": "Tidak dapat memverifikasi",
|
||||
"modelsAvailable": "Model tersedia"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Auth yang dipilih: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "sesi",
|
||||
"stallNudge": "nudge kios",
|
||||
"start": "awal",
|
||||
"workSync": "sinkronisasi kerja"
|
||||
"workSync": "sinkronisasi kerja",
|
||||
"agentError": "Kesalahan agen",
|
||||
"apiError": "Kesalahan API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap diakui",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Balas"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "Dalam proses"
|
||||
"inProgress": "Dalam proses",
|
||||
"expandInProgress": "Buka yang berlangsung",
|
||||
"collapseInProgress": "Tutup yang berlangsung",
|
||||
"reviewing": "meninjau",
|
||||
"workingOn": "mengerjakan"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Tampilan pesan yang diperluas"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Data tim akan muncul setelah pemberian selesai",
|
||||
"context": {
|
||||
"title": "Konteks"
|
||||
"title": "Konteks",
|
||||
"loading": "Memuat...",
|
||||
"noSessionLoaded": "Sesi belum dimuat",
|
||||
"closePanel": "Tutup panel konteks {{team}}",
|
||||
"loadingContext": "Memuat konteks...",
|
||||
"openLeadSession": "Buka sesi lead tim untuk melihat konteks."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "Tidak ditemukan sumber log.",
|
||||
"ariaLabel": "Sumber log",
|
||||
"leadLabel": "Lead",
|
||||
"selectSourceEmpty": "Pilih sumber log."
|
||||
"selectSourceEmpty": "Pilih sumber log.",
|
||||
"leadDescription": "Lead tim",
|
||||
"removedLabel": "dihapus",
|
||||
"removedDescription": "Dihapus"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} lagi",
|
||||
"more_other": "+{{count}} lagi",
|
||||
"more_few": "+{{count}} lagi",
|
||||
"more_many": "+{{count}} lagi"
|
||||
"more_many": "+{{count}} lagi",
|
||||
"unsupportedProvider": "Penyedia tidak didukung",
|
||||
"openCodeLogsDelayed": "Log OpenCode tertunda",
|
||||
"logsUnavailable": "Log tidak tersedia",
|
||||
"noRecentLogs": "Tidak ada log terbaru",
|
||||
"toolError": "Kesalahan alat",
|
||||
"toolResult": "Hasil alat",
|
||||
"toolUse": "Penggunaan alat",
|
||||
"thinking": "Berpikir",
|
||||
"error": "Kesalahan",
|
||||
"logEvent": "Peristiwa log",
|
||||
"noErrorOutput": "Tidak ada output error",
|
||||
"noOutput": "Tidak ada output",
|
||||
"noInput": "Tidak ada input"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Blocking Dependensi",
|
||||
"blocks": "blok",
|
||||
"close": "Tutup",
|
||||
"blockingHiddenTasks": "Memblokir tugas tersembunyi",
|
||||
"blockedHiddenTasks": "Diblokir tugas tersembunyi"
|
||||
"blockedHiddenTasks": "Diblokir tugas tersembunyi",
|
||||
"links_one": "{{count}} tautan",
|
||||
"links_other": "{{count}} tautan",
|
||||
"hiddenBlockingLinks_one": "{{count}} tautan pemblokir tersembunyi",
|
||||
"hiddenBlockingLinks_other": "{{count}} tautan pemblokir tersembunyi",
|
||||
"hiddenTaskStack": "Tumpukan tugas tersembunyi",
|
||||
"hiddenTasks_one": "{{count}} tugas tersembunyi",
|
||||
"hiddenTasks_other": "{{count}} tugas tersembunyi",
|
||||
"task": "Tugas",
|
||||
"openBlockerStack": "Buka tumpukan pemblokir",
|
||||
"openBlockedStack": "Buka tumpukan terblokir",
|
||||
"openBlockerTask": "Buka tugas pemblokir",
|
||||
"openBlockedTask": "Buka tugas terblokir"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Aktivitas",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Segarkan otomatis",
|
||||
"wrapLines": "Lipat baris",
|
||||
"loadingTail": "Memuat proses log tail...",
|
||||
"empty": "Belum ada berkas log proses yang ditangkap untuk anggota ini."
|
||||
"empty": "Belum ada berkas log proses yang ditangkap untuk anggota ini.",
|
||||
"copy": "Salin",
|
||||
"fileEmpty": "File log proses kosong.",
|
||||
"showingLast": "Menampilkan {{bytes}} terakhir.",
|
||||
"showing": "Menampilkan {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "Tidak ada tugas yang ditugaskan ke anggota ini"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Pasang atau coba ulang waktu berjalan OpenCode dari kartu status penyedia, kemudian buka kembali dialog ini.",
|
||||
"openCodeAppMcpUnreachable": "Coba lagi meluncurkan untuk menyegarkan aplikasi OpenCode MCP bridge. Jika berulang, restart aplikasi dan waktu berjalan OpenCode.",
|
||||
"cliBinaryMissing": "Pastikan Claude lokal CLI biner ada dan dapat dimulai, kemudian membuka kembali dialog ini.",
|
||||
"default": "Selesaikan masalah di atas, lalu buka kembali dialog ini."
|
||||
"default": "Selesaikan masalah di atas, lalu buka kembali dialog ini.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Jalankan Agent Teams AI sebagai Administrator, lalu coba launch lagi."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Menjalankan Tim"
|
||||
"title": "Menjalankan Tim",
|
||||
"status": {
|
||||
"active": "Aktif",
|
||||
"provisioning": "Meluncurkan",
|
||||
"idle": "Berjalan"
|
||||
},
|
||||
"noProject": "Tanpa proyek"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Maksimum {{count}} panel dicapai"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Sesi Codex Anda tampak basi. Reconnect untuk melanjutkan.",
|
||||
"useCode": "Gunakan kode"
|
||||
"useCode": "Gunakan kode",
|
||||
"generating": "Membuat...",
|
||||
"openLogin": "Buka login",
|
||||
"generateLink": "Buat tautan"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Tingkat benteng (opsional)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Peran kustom...",
|
||||
"searchPlaceholder": "Cari peran...",
|
||||
"empty": "Tidak ditemukan peran.",
|
||||
"reservedRole": "Peran ini dipesan"
|
||||
"reservedRole": "Peran ini dipesan",
|
||||
"emptyCustomRole": "Peran tidak boleh kosong"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "APIキーを追加",
|
||||
"addFirst": "最初のキーを追加",
|
||||
"edit": "編集"
|
||||
"edit": "編集",
|
||||
"copied": "コピーしました!",
|
||||
"copyEnvVarName": "環境変数名をコピー",
|
||||
"confirmDelete": "もう一度クリックして確認",
|
||||
"delete": "削除"
|
||||
},
|
||||
"empty": {
|
||||
"title": "保存されるAPIキー無し",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "コピッド",
|
||||
"copy": "コピー診断",
|
||||
"hints": "ヒント",
|
||||
"likelyCause": "同様に原因:"
|
||||
"likelyCause": "同様に原因:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI を管理者として実行してください"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "これは既に選択したOpenCodeのデフォルトです。",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "モデルを検索",
|
||||
"selectProjectBeforeTesting": "モデルをテストする前にプロジェクトコンテキストを選択します。",
|
||||
"selectProjectBeforeTestingDefaults": "OpenCode のデフォルトをテストまたは保存する前に、プロジェクトコンテキストを選択します。",
|
||||
"useInTeamPicker": "チームピッカーでの使用"
|
||||
"useInTeamPicker": "チームピッカーでの使用",
|
||||
"testInProgress": "モデルテストはすでに実行中です。",
|
||||
"validationContextRequired": "Test と Set default を有効にするには、上で validation context を選択してください。team picker への保存は新しいチーム用の route だけを保存します。",
|
||||
"defaultSaveInProgress": "OpenCode default を保存しています。",
|
||||
"routeUnavailableAuth": "この provider は、このモデルを使用する前に認証が必要です。",
|
||||
"routeUnavailableFailed": "この model route は前回の execution test に失敗しました。",
|
||||
"routeUnavailableUnknown": "このモデルは現在の OpenCode default ですが、まだ live catalog では利用できません。",
|
||||
"actionsUnavailable": "操作は一時的に利用できません。",
|
||||
"routeUnavailableGeneric": "この model route は現在使用できません。"
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "OpenCode プロバイダーカタログ",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "ニーズテスト",
|
||||
"failed": "失敗",
|
||||
"unknown": "インフォメーション",
|
||||
"default": "デフォルト"
|
||||
"default": "デフォルト",
|
||||
"knownRoute": "既知の route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API のキーは構成しましたが、まだ確認されません",
|
||||
"apiKeyModeMissingCredential": "API キーモードが選択されますが、API キーは構成されません",
|
||||
"connectedVia": "{{method}}で接続",
|
||||
"unableToVerify": "確認できない"
|
||||
"unableToVerify": "確認できない",
|
||||
"modelsAvailable": "利用可能なモデル"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "選択されたauth: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "セッション",
|
||||
"stallNudge": "ステルナッジ",
|
||||
"start": "スタート",
|
||||
"workSync": "作業同期"
|
||||
"workSync": "作業同期",
|
||||
"agentError": "エージェントエラー",
|
||||
"apiError": "API エラー"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "ブーツストラップが認めた",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "スタッフ"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "進行状況"
|
||||
"inProgress": "進行状況",
|
||||
"expandInProgress": "進行中を展開",
|
||||
"collapseInProgress": "進行中を折りたたむ",
|
||||
"reviewing": "レビュー中",
|
||||
"workingOn": "作業中"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "メッセージビューを拡大"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "チームデータが完成したら表示されます。",
|
||||
"context": {
|
||||
"title": "コンテンツ"
|
||||
"title": "コンテンツ",
|
||||
"loading": "読み込み中...",
|
||||
"noSessionLoaded": "セッションが読み込まれていません",
|
||||
"closePanel": "{{team}} のコンテキストパネルを閉じる",
|
||||
"loadingContext": "コンテキストを読み込み中...",
|
||||
"openLeadSession": "コンテキストを表示するにはチームリードのセッションを開いてください。"
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "ログソースが見つかりません。",
|
||||
"ariaLabel": "ログソース",
|
||||
"leadLabel": "リード",
|
||||
"selectSourceEmpty": "ログソースを選択します。"
|
||||
"selectSourceEmpty": "ログソースを選択します。",
|
||||
"leadDescription": "チームリード",
|
||||
"removedLabel": "削除済み",
|
||||
"removedDescription": "削除済み"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} より",
|
||||
"more_other": "+{{count}} より",
|
||||
"more_few": "+{{count}} より",
|
||||
"more_many": "+{{count}} より"
|
||||
"more_many": "+{{count}} より",
|
||||
"unsupportedProvider": "未対応のプロバイダー",
|
||||
"openCodeLogsDelayed": "OpenCode ログが遅延しています",
|
||||
"logsUnavailable": "ログを利用できません",
|
||||
"noRecentLogs": "最近のログはありません",
|
||||
"toolError": "ツールエラー",
|
||||
"toolResult": "ツール結果",
|
||||
"toolUse": "ツール使用",
|
||||
"thinking": "思考中",
|
||||
"error": "エラー",
|
||||
"logEvent": "ログイベント",
|
||||
"noErrorOutput": "エラー出力なし",
|
||||
"noOutput": "出力なし",
|
||||
"noInput": "入力なし"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "依存症のブロック",
|
||||
"blocks": "ブロック",
|
||||
"close": "ふりがな",
|
||||
"blockingHiddenTasks": "隠しタスクのブロック",
|
||||
"blockedHiddenTasks": "隠しタスクをブロック"
|
||||
"blockedHiddenTasks": "隠しタスクをブロック",
|
||||
"links_one": "{{count}} 件のリンク",
|
||||
"links_other": "{{count}} 件のリンク",
|
||||
"hiddenBlockingLinks_one": "{{count}} 件の非表示ブロックリンク",
|
||||
"hiddenBlockingLinks_other": "{{count}} 件の非表示ブロックリンク",
|
||||
"hiddenTaskStack": "非表示タスクスタック",
|
||||
"hiddenTasks_one": "{{count}} 件の非表示タスク",
|
||||
"hiddenTasks_other": "{{count}} 件の非表示タスク",
|
||||
"task": "タスク",
|
||||
"openBlockerStack": "ブロッカースタックを開く",
|
||||
"openBlockedStack": "ブロック済みスタックを開く",
|
||||
"openBlockerTask": "ブロッカータスクを開く",
|
||||
"openBlockedTask": "ブロック済みタスクを開く"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "活動内容",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "オートリフレッシュ",
|
||||
"wrapLines": "ラップライン",
|
||||
"loadingTail": "ローディングプロセスログテール...",
|
||||
"empty": "まだこのメンバーの処理ログファイルはありません。"
|
||||
"empty": "まだこのメンバーの処理ログファイルはありません。",
|
||||
"copy": "コピー",
|
||||
"fileEmpty": "プロセスログファイルは空です。",
|
||||
"showingLast": "最後の {{bytes}} を表示しています。",
|
||||
"showing": "{{bytes}} を表示しています。"
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "このメンバーに割り当てられたタスクはありません"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "プロバイダーのステータスカードからOpenCodeのランタイムをインストールまたは再試行し、このダイアログを再起動します。",
|
||||
"openCodeAppMcpUnreachable": "OpenCodeアプリのMCPブリッジをリフレッシュするためのリトリー起動。 繰り返すと、アプリとOpenCodeのランタイムを再起動します。",
|
||||
"cliBinaryMissing": "ローカルClaude CLIバイナリが存在し、起動できることを確認してください。その後、このダイアログが開きます。",
|
||||
"default": "上記の問題を解決し、このダイアログを再オープンします。"
|
||||
"default": "上記の問題を解決し、このダイアログを再オープンします。",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI を管理者として実行してから、launch を再試行してください。"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "ランニングチーム"
|
||||
"title": "ランニングチーム",
|
||||
"status": {
|
||||
"active": "アクティブ",
|
||||
"provisioning": "起動中",
|
||||
"idle": "実行中"
|
||||
},
|
||||
"noProject": "プロジェクトなし"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "{{count}}のパンが到達する最大"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Codex のセッションはストール表示されます。 続行する再接続。",
|
||||
"useCode": "コードを使用する"
|
||||
"useCode": "コードを使用する",
|
||||
"generating": "生成中...",
|
||||
"openLogin": "ログインを開く",
|
||||
"generateLink": "リンクを生成"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "努力レベル(任意)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "カスタムロール...",
|
||||
"searchPlaceholder": "役割を検索...",
|
||||
"empty": "役割が見つかりません。",
|
||||
"reservedRole": "この役割は、"
|
||||
"reservedRole": "この役割は、",
|
||||
"emptyCustomRole": "ロールを空にすることはできません"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "API 키 추가",
|
||||
"addFirst": "첫 키 추가",
|
||||
"edit": "제품정보"
|
||||
"edit": "제품정보",
|
||||
"copied": "복사됨!",
|
||||
"copyEnvVarName": "환경 변수 이름 복사",
|
||||
"confirmDelete": "다시 클릭하여 확인",
|
||||
"delete": "삭제"
|
||||
},
|
||||
"empty": {
|
||||
"title": "저장되는 API 열쇠 없음",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "뚱 베어",
|
||||
"copy": "복사 진단",
|
||||
"hints": "뚱 베어",
|
||||
"likelyCause": "같은 원인:"
|
||||
"likelyCause": "같은 원인:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI를 관리자 권한으로 실행하세요"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "이미 선택한 OpenCode 기본값입니다.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "검색 모델",
|
||||
"selectProjectBeforeTesting": "모델을 테스트하기 전에 프로젝트 컨텍스트를 선택하십시오.",
|
||||
"selectProjectBeforeTestingDefaults": "OpenCode 기본값을 테스트하거나 저장하기 전에 프로젝트 컨텍스트를 선택하십시오.",
|
||||
"useInTeamPicker": "팀 피커에서 사용"
|
||||
"useInTeamPicker": "팀 피커에서 사용",
|
||||
"testInProgress": "모델 테스트가 이미 실행 중입니다.",
|
||||
"validationContextRequired": "Test와 Set default를 활성화하려면 위에서 validation context를 선택하세요. team picker 저장은 새 팀용 route만 저장합니다.",
|
||||
"defaultSaveInProgress": "OpenCode default를 저장하는 중입니다.",
|
||||
"routeUnavailableAuth": "이 provider는 이 모델을 사용하기 전에 인증이 필요합니다.",
|
||||
"routeUnavailableFailed": "이 model route는 마지막 execution test에 실패했습니다.",
|
||||
"routeUnavailableUnknown": "이 모델은 현재 OpenCode default이지만 아직 live catalog에서 사용할 수 없습니다.",
|
||||
"actionsUnavailable": "작업을 일시적으로 사용할 수 없습니다.",
|
||||
"routeUnavailableGeneric": "이 model route는 지금 사용할 수 없습니다."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "OpenCode 공급자 카탈로그",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "자주 묻는 질문",
|
||||
"failed": "실패한",
|
||||
"unknown": "이름 *",
|
||||
"default": "기본 정보"
|
||||
"default": "기본 정보",
|
||||
"knownRoute": "알려진 route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API 키 구성, 하지만 아직 확인 되지",
|
||||
"apiKeyModeMissingCredential": "API 키 모드 선택, 하지만 API 키 구성",
|
||||
"connectedVia": "{{method}}를 통해 연결",
|
||||
"unableToVerify": "자주 묻는 질문"
|
||||
"unableToVerify": "자주 묻는 질문",
|
||||
"modelsAvailable": "사용 가능한 모델"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "선택된 오: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "이름 *",
|
||||
"stallNudge": "연락처",
|
||||
"start": "시작하기",
|
||||
"workSync": "작업 동기화"
|
||||
"workSync": "작업 동기화",
|
||||
"agentError": "에이전트 오류",
|
||||
"apiError": "API 오류"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "부트 스트랩 승인",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "이름 *"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "진행 중"
|
||||
"inProgress": "진행 중",
|
||||
"expandInProgress": "진행 중 펼치기",
|
||||
"collapseInProgress": "진행 중 접기",
|
||||
"reviewing": "검토 중",
|
||||
"workingOn": "작업 중"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "확장된 메시지 보기"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "팀 데이터는 일단 완료되면 나타납니다",
|
||||
"context": {
|
||||
"title": "설정하기"
|
||||
"title": "설정하기",
|
||||
"loading": "로딩 중...",
|
||||
"noSessionLoaded": "세션이 로드되지 않음",
|
||||
"closePanel": "{{team}} 컨텍스트 패널 닫기",
|
||||
"loadingContext": "컨텍스트 로딩 중...",
|
||||
"openLeadSession": "컨텍스트를 보려면 팀 리드 세션을 여세요."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "로그 소스가 없습니다.",
|
||||
"ariaLabel": "로그 소스",
|
||||
"leadLabel": "제품정보",
|
||||
"selectSourceEmpty": "로그 소스를 선택합니다."
|
||||
"selectSourceEmpty": "로그 소스를 선택합니다.",
|
||||
"leadDescription": "팀 리드",
|
||||
"removedLabel": "제거됨",
|
||||
"removedDescription": "제거됨"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} 더보기",
|
||||
"more_other": "+{{count}} 더보기",
|
||||
"more_few": "+{{count}} 더보기",
|
||||
"more_many": "+{{count}} 더보기"
|
||||
"more_many": "+{{count}} 더보기",
|
||||
"unsupportedProvider": "지원되지 않는 제공자",
|
||||
"openCodeLogsDelayed": "OpenCode 로그 지연됨",
|
||||
"logsUnavailable": "로그를 사용할 수 없음",
|
||||
"noRecentLogs": "최근 로그 없음",
|
||||
"toolError": "도구 오류",
|
||||
"toolResult": "도구 결과",
|
||||
"toolUse": "도구 사용",
|
||||
"thinking": "생각 중",
|
||||
"error": "오류",
|
||||
"logEvent": "로그 이벤트",
|
||||
"noErrorOutput": "오류 출력 없음",
|
||||
"noOutput": "출력 없음",
|
||||
"noInput": "입력 없음"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "블록 의존성",
|
||||
"blocks": "제품정보",
|
||||
"close": "이름 *",
|
||||
"blockingHiddenTasks": "숨겨진 작업을 차단",
|
||||
"blockedHiddenTasks": "숨겨진 작업을 차단"
|
||||
"blockedHiddenTasks": "숨겨진 작업을 차단",
|
||||
"links_one": "{{count}}개 링크",
|
||||
"links_other": "{{count}}개 링크",
|
||||
"hiddenBlockingLinks_one": "{{count}}개의 숨겨진 차단 링크",
|
||||
"hiddenBlockingLinks_other": "{{count}}개의 숨겨진 차단 링크",
|
||||
"hiddenTaskStack": "숨겨진 작업 스택",
|
||||
"hiddenTasks_one": "{{count}}개 숨겨진 작업",
|
||||
"hiddenTasks_other": "{{count}}개 숨겨진 작업",
|
||||
"task": "작업",
|
||||
"openBlockerStack": "차단 작업 스택 열기",
|
||||
"openBlockedStack": "차단된 작업 스택 열기",
|
||||
"openBlockerTask": "차단 작업 열기",
|
||||
"openBlockedTask": "차단된 작업 열기"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "- 연혁",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "자동차 수리",
|
||||
"wrapLines": "포장 라인",
|
||||
"loadingTail": "적재 공정 로그 꼬리...",
|
||||
"empty": "아직이 회원을 위해 캡처 된 프로세스 로그 파일 없음."
|
||||
"empty": "아직이 회원을 위해 캡처 된 프로세스 로그 파일 없음.",
|
||||
"copy": "복사",
|
||||
"fileEmpty": "프로세스 로그 파일이 비어 있습니다.",
|
||||
"showingLast": "마지막 {{bytes}} 표시 중.",
|
||||
"showing": "{{bytes}} 표시 중."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "이 회원에게 할당된 작업 없음"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "공급자 상태 카드에서 OpenCode 런타임을 설치하거나 재시작하면 이 대화 상자를 다시 엽니다.",
|
||||
"openCodeAppMcpUnreachable": "OpenCode 앱 MCP 브리지를 새로 고침합니다. 반복하면 앱과 OpenCode runtime을 다시 시작합니다.",
|
||||
"cliBinaryMissing": "로컬 클로드 CLI 바이너리가 존재하고 시작할 수 있는지 확인하고, 이 대화 상자를 다시 엽니다.",
|
||||
"default": "위의 문제를 해결 한 다음이 대화 상자를 다시 엽니다."
|
||||
"default": "위의 문제를 해결 한 다음이 대화 상자를 다시 엽니다.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI를 관리자 권한으로 실행한 다음 launch를 다시 시도하세요."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "팀 실행"
|
||||
"title": "팀 실행",
|
||||
"status": {
|
||||
"active": "활성",
|
||||
"provisioning": "시작 중",
|
||||
"idle": "실행 중"
|
||||
},
|
||||
"noProject": "프로젝트 없음"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "{{count}} 팬의 최대 도달"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Codex 세션은 stale이 나타납니다. 계속 연결.",
|
||||
"useCode": "사용 코드"
|
||||
"useCode": "사용 코드",
|
||||
"generating": "생성 중...",
|
||||
"openLogin": "로그인 열기",
|
||||
"generateLink": "링크 생성"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "(선택) Effort 수준",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "사용자 정의 역할...",
|
||||
"searchPlaceholder": "검색 역할...",
|
||||
"empty": "찾을 수 없음.",
|
||||
"reservedRole": "이 역할은"
|
||||
"reservedRole": "이 역할은",
|
||||
"emptyCustomRole": "역할은 비워 둘 수 없습니다"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Adicionar chave API",
|
||||
"addFirst": "Adicionar sua primeira chave",
|
||||
"edit": "Editar"
|
||||
"edit": "Editar",
|
||||
"copied": "Copiado!",
|
||||
"copyEnvVarName": "Copiar nome da variável env",
|
||||
"confirmDelete": "Clique novamente para confirmar",
|
||||
"delete": "Excluir"
|
||||
},
|
||||
"empty": {
|
||||
"title": "Nenhuma chave API salva",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Copiado",
|
||||
"copy": "Copiar diagnósticos",
|
||||
"hints": "Dica",
|
||||
"likelyCause": "Provável causa:"
|
||||
"likelyCause": "Provável causa:",
|
||||
"windowsSymlinkAdminHint": "Windows: execute o Agent Teams AI como administrador"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "Este já é o padrão OpenCode selecionado.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "Pesquisar modelos",
|
||||
"selectProjectBeforeTesting": "Selecione um contexto de projeto antes de testar modelos.",
|
||||
"selectProjectBeforeTestingDefaults": "Selecione um contexto de projeto antes de testar ou salvar padrões do OpenCode.",
|
||||
"useInTeamPicker": "Uso no selecionador de equipe"
|
||||
"useInTeamPicker": "Uso no selecionador de equipe",
|
||||
"testInProgress": "O teste do modelo já está em execução.",
|
||||
"validationContextRequired": "Selecione um contexto de validação acima para habilitar Test e Set default. Salvar para team picker apenas guarda a route para novas equipes.",
|
||||
"defaultSaveInProgress": "O OpenCode default está sendo salvo.",
|
||||
"routeUnavailableAuth": "Este provider exige autenticação antes que este modelo possa ser usado.",
|
||||
"routeUnavailableFailed": "Esta model route falhou no último execution test.",
|
||||
"routeUnavailableUnknown": "Este modelo é o OpenCode default atual, mas ainda não está disponível no live catalog.",
|
||||
"actionsUnavailable": "As ações estão temporariamente indisponíveis.",
|
||||
"routeUnavailableGeneric": "Esta model route não pode ser usada agora."
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "Catálogo de fornecedores OpenCode",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "teste das necessidades",
|
||||
"failed": "falhou",
|
||||
"unknown": "desconhecido",
|
||||
"default": "padrão"
|
||||
"default": "padrão",
|
||||
"knownRoute": "route conhecida"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "Chave API configurada, mas ainda não verificada",
|
||||
"apiKeyModeMissingCredential": "Modo chave API selecionado, mas nenhuma chave API está configurada",
|
||||
"connectedVia": "Ligado via {{method}}",
|
||||
"unableToVerify": "Não foi possível verificar"
|
||||
"unableToVerify": "Não foi possível verificar",
|
||||
"modelsAvailable": "Modelos disponíveis"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "Autorização seleccionada: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "sessão",
|
||||
"stallNudge": "empatar o empurrão",
|
||||
"start": "início",
|
||||
"workSync": "sincronização de trabalho"
|
||||
"workSync": "sincronização de trabalho",
|
||||
"agentError": "Erro do agente",
|
||||
"apiError": "Erro de API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap reconhecido",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Responder"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "Em curso"
|
||||
"inProgress": "Em curso",
|
||||
"expandInProgress": "Expandir em andamento",
|
||||
"collapseInProgress": "Recolher em andamento",
|
||||
"reviewing": "revisando",
|
||||
"workingOn": "trabalhando em"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Visualização de mensagens expandida"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Os dados da equipe aparecerão assim que o provimento terminar",
|
||||
"context": {
|
||||
"title": "Contexto"
|
||||
"title": "Contexto",
|
||||
"loading": "Carregando...",
|
||||
"noSessionLoaded": "Sessão não carregada",
|
||||
"closePanel": "Fechar painel de contexto de {{team}}",
|
||||
"loadingContext": "Carregando contexto...",
|
||||
"openLeadSession": "Abra a sessão do líder da equipe para ver o contexto."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "Nenhuma fonte de registro encontrada.",
|
||||
"ariaLabel": "Origem do registo",
|
||||
"leadLabel": "Chumbo",
|
||||
"selectSourceEmpty": "Selecione uma fonte de registro."
|
||||
"selectSourceEmpty": "Selecione uma fonte de registro.",
|
||||
"leadDescription": "Líder da equipe",
|
||||
"removedLabel": "removido",
|
||||
"removedDescription": "Removido"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} mais",
|
||||
"more_other": "+{{count}} mais",
|
||||
"more_few": "+{{count}} mais",
|
||||
"more_many": "+{{count}} mais"
|
||||
"more_many": "+{{count}} mais",
|
||||
"unsupportedProvider": "Provedor não compatível",
|
||||
"openCodeLogsDelayed": "Logs do OpenCode atrasados",
|
||||
"logsUnavailable": "Logs indisponíveis",
|
||||
"noRecentLogs": "Nenhum log recente",
|
||||
"toolError": "Erro da ferramenta",
|
||||
"toolResult": "Resultado da ferramenta",
|
||||
"toolUse": "Uso da ferramenta",
|
||||
"thinking": "Pensando",
|
||||
"error": "Erro",
|
||||
"logEvent": "Evento de log",
|
||||
"noErrorOutput": "Sem saída de erro",
|
||||
"noOutput": "Sem saída",
|
||||
"noInput": "Sem entrada"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Dependência de Bloqueamento",
|
||||
"blocks": "blocos",
|
||||
"close": "Fechar",
|
||||
"blockingHiddenTasks": "Bloqueando tarefas ocultas",
|
||||
"blockedHiddenTasks": "Tarefas ocultas bloqueadas"
|
||||
"blockedHiddenTasks": "Tarefas ocultas bloqueadas",
|
||||
"links_one": "{{count}} link",
|
||||
"links_other": "{{count}} links",
|
||||
"hiddenBlockingLinks_one": "{{count}} link bloqueante oculto",
|
||||
"hiddenBlockingLinks_other": "{{count}} links bloqueantes ocultos",
|
||||
"hiddenTaskStack": "Pilha de tarefas ocultas",
|
||||
"hiddenTasks_one": "{{count}} tarefa oculta",
|
||||
"hiddenTasks_other": "{{count}} tarefas ocultas",
|
||||
"task": "Tarefa",
|
||||
"openBlockerStack": "Abrir pilha bloqueadora",
|
||||
"openBlockedStack": "Abrir pilha bloqueada",
|
||||
"openBlockerTask": "Abrir tarefa bloqueadora",
|
||||
"openBlockedTask": "Abrir tarefa bloqueada"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Actividade",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Actualizar automaticamente",
|
||||
"wrapLines": "Quebrar linhas",
|
||||
"loadingTail": "A carregar a cauda do registo do processo...",
|
||||
"empty": "Nenhum arquivo de registro de processo capturado para este membro ainda."
|
||||
"empty": "Nenhum arquivo de registro de processo capturado para este membro ainda.",
|
||||
"copy": "Copiar",
|
||||
"fileEmpty": "O arquivo de log do processo está vazio.",
|
||||
"showingLast": "Mostrando os últimos {{bytes}}.",
|
||||
"showing": "Mostrando {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "Nenhuma tarefa atribuída a este membro"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Instale ou tente novamente o tempo de execução do OpenCode a partir do cartão de status do provedor e então reabra esta janela.",
|
||||
"openCodeAppMcpUnreachable": "Repetir o lançamento para atualizar o aplicativo OpenCode MCP ponte. Se repetir, reinicie o aplicativo e o tempo de execução do OpenCode.",
|
||||
"cliBinaryMissing": "Certifique-se de que o binário local Claude CLI exista e possa ser iniciado, e então reabra esta janela.",
|
||||
"default": "Resolver o problema acima e depois reabrir esta janela."
|
||||
"default": "Resolver o problema acima e depois reabrir esta janela.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Execute o Agent Teams AI como administrador e tente o launch novamente."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Equipas em Execução"
|
||||
"title": "Equipas em Execução",
|
||||
"status": {
|
||||
"active": "Ativa",
|
||||
"provisioning": "Iniciando",
|
||||
"idle": "Em execução"
|
||||
},
|
||||
"noProject": "Sem projeto"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Máximo de painéis {{count}} alcançados"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "A tua sessão do Códice parece estar estagnada. Reconectar para continuar.",
|
||||
"useCode": "Usar código"
|
||||
"useCode": "Usar código",
|
||||
"generating": "Gerando...",
|
||||
"openLogin": "Abrir login",
|
||||
"generateLink": "Gerar link"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Nível de esforço (opcional)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Papel personalizado...",
|
||||
"searchPlaceholder": "Procurar papéis...",
|
||||
"empty": "Nenhum papel encontrado.",
|
||||
"reservedRole": "Este papel é reservado"
|
||||
"reservedRole": "Este papel é reservado",
|
||||
"emptyCustomRole": "A função não pode estar vazia"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "Добавить API key",
|
||||
"addFirst": "Добавить первый key",
|
||||
"edit": "Редактировать"
|
||||
"edit": "Редактировать",
|
||||
"copied": "Скопировано!",
|
||||
"copyEnvVarName": "Копировать имя env-переменной",
|
||||
"confirmDelete": "Нажмите еще раз для подтверждения",
|
||||
"delete": "Удалить"
|
||||
},
|
||||
"empty": {
|
||||
"title": "API keys не сохранены",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "Скопировано",
|
||||
"copy": "Скопировать diagnostics",
|
||||
"hints": "Подсказки",
|
||||
"likelyCause": "Вероятная причина:"
|
||||
"likelyCause": "Вероятная причина:",
|
||||
"windowsSymlinkAdminHint": "Windows: запустите Agent Teams AI от имени администратора"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "Это уже выбранный OpenCode default.",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "session",
|
||||
"stallNudge": "stall nudge",
|
||||
"start": "start",
|
||||
"workSync": "work sync"
|
||||
"workSync": "work sync",
|
||||
"agentError": "Ошибка агента",
|
||||
"apiError": "Ошибка API"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "Bootstrap подтверждён",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "Ответить"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "В работе"
|
||||
"inProgress": "В работе",
|
||||
"expandInProgress": "Развернуть задачи в работе",
|
||||
"collapseInProgress": "Свернуть задачи в работе",
|
||||
"reviewing": "ревьюит",
|
||||
"workingOn": "работает над"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "Развёрнутый просмотр сообщения"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "Данные команды появятся после завершения provisioning",
|
||||
"context": {
|
||||
"title": "Контекст"
|
||||
"title": "Контекст",
|
||||
"loading": "Загрузка...",
|
||||
"noSessionLoaded": "Сессия не загружена",
|
||||
"closePanel": "Закрыть панель контекста {{team}}",
|
||||
"loadingContext": "Загрузка контекста...",
|
||||
"openLeadSession": "Откройте сессию лида команды, чтобы посмотреть контекст."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "Источники логов не найдены.",
|
||||
"ariaLabel": "Источник логов",
|
||||
"leadLabel": "Лид",
|
||||
"selectSourceEmpty": "Выберите источник логов."
|
||||
"selectSourceEmpty": "Выберите источник логов.",
|
||||
"leadDescription": "Лид команды",
|
||||
"removedLabel": "удален",
|
||||
"removedDescription": "Удален"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} ещё",
|
||||
"more_few": "+{{count}} ещё",
|
||||
"more_many": "+{{count}} ещё",
|
||||
"more_other": "+{{count}} ещё"
|
||||
"more_other": "+{{count}} ещё",
|
||||
"unsupportedProvider": "Провайдер не поддерживается",
|
||||
"openCodeLogsDelayed": "Логи OpenCode задерживаются",
|
||||
"logsUnavailable": "Логи недоступны",
|
||||
"noRecentLogs": "Нет недавних логов",
|
||||
"toolError": "Ошибка инструмента",
|
||||
"toolResult": "Результат инструмента",
|
||||
"toolUse": "Вызов инструмента",
|
||||
"thinking": "Размышление",
|
||||
"error": "Ошибка",
|
||||
"logEvent": "Событие лога",
|
||||
"noErrorOutput": "Нет вывода ошибки",
|
||||
"noOutput": "Нет вывода",
|
||||
"noInput": "Нет входных данных"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "Блокирующая зависимость",
|
||||
"blocks": "блокирует",
|
||||
"close": "Закрыть",
|
||||
"blockingHiddenTasks": "Скрытые блокирующие задачи",
|
||||
"blockedHiddenTasks": "Скрытые заблокированные задачи"
|
||||
"blockedHiddenTasks": "Скрытые заблокированные задачи",
|
||||
"links_one": "{{count}} связь",
|
||||
"links_other": "{{count}} связи",
|
||||
"hiddenBlockingLinks_one": "{{count}} скрытая блокирующая связь",
|
||||
"hiddenBlockingLinks_other": "{{count}} скрытые блокирующие связи",
|
||||
"hiddenTaskStack": "Стек скрытых задач",
|
||||
"hiddenTasks_one": "{{count}} скрытая задача",
|
||||
"hiddenTasks_other": "{{count}} скрытые задачи",
|
||||
"task": "Задача",
|
||||
"openBlockerStack": "Открыть стек блокирующих задач",
|
||||
"openBlockedStack": "Открыть стек заблокированных задач",
|
||||
"openBlockerTask": "Открыть блокирующую задачу",
|
||||
"openBlockedTask": "Открыть заблокированную задачу"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "Активность",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "Автообновление",
|
||||
"wrapLines": "Перенос строк",
|
||||
"loadingTail": "Загрузка хвоста лога процесса...",
|
||||
"empty": "Лог процесса для этого участника пока не сохранен."
|
||||
"empty": "Лог процесса для этого участника пока не сохранен.",
|
||||
"copy": "Копировать",
|
||||
"fileEmpty": "Файл лога процесса пуст.",
|
||||
"showingLast": "Показаны последние {{bytes}}.",
|
||||
"showing": "Показано {{bytes}}."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "У этого участника нет назначенных задач"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "Установите или повторите запуск runtime OpenCode из карточки статуса провайдера, затем откройте этот диалог заново.",
|
||||
"openCodeAppMcpUnreachable": "Повторите launch, чтобы обновить OpenCode app MCP bridge. Если повторится, перезапустите приложение и runtime OpenCode.",
|
||||
"cliBinaryMissing": "Убедитесь, что локальный бинарь Claude CLI существует и может запускаться, затем откройте этот диалог заново.",
|
||||
"default": "Исправьте проблему выше, затем откройте этот диалог заново."
|
||||
"default": "Исправьте проблему выше, затем откройте этот диалог заново.",
|
||||
"openCodeNodeModulesSymlinkPermission": "Запустите Agent Teams AI от имени администратора, затем повторите launch."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "Активные команды"
|
||||
"title": "Активные команды",
|
||||
"status": {
|
||||
"active": "Активна",
|
||||
"provisioning": "Запускается",
|
||||
"idle": "Работает"
|
||||
},
|
||||
"noProject": "Без проекта"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "Достигнут максимум панелей: {{count}}"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "Сессия Codex выглядит устаревшей. Переподключитесь, чтобы продолжить.",
|
||||
"useCode": "Использовать код"
|
||||
"useCode": "Использовать код",
|
||||
"generating": "Генерируется...",
|
||||
"openLogin": "Открыть вход",
|
||||
"generateLink": "Создать ссылку"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "Уровень усилий (опционально)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "Своя роль...",
|
||||
"searchPlaceholder": "Поиск ролей...",
|
||||
"empty": "Роли не найдены.",
|
||||
"reservedRole": "Эта роль зарезервирована"
|
||||
"reservedRole": "Эта роль зарезервирована",
|
||||
"emptyCustomRole": "Роль не может быть пустой"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "شامل کریں API کلید",
|
||||
"addFirst": "اپنی پہلی کلید کو شامل کریں",
|
||||
"edit": "مرتب"
|
||||
"edit": "مرتب",
|
||||
"copied": "Copy ہو گیا!",
|
||||
"copyEnvVarName": "Env var name copy کریں",
|
||||
"confirmDelete": "Confirm کے لیے دوبارہ کلک کریں",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"empty": {
|
||||
"title": "نہیں API کلید محفوظ کریں",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "کوس",
|
||||
"copy": "نقل و حمل",
|
||||
"hints": "حساب",
|
||||
"likelyCause": "غالباً وجہ:"
|
||||
"likelyCause": "غالباً وجہ:",
|
||||
"windowsSymlinkAdminHint": "Windows: Agent Teams AI کو Administrator کے طور پر چلائیں"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "یہ پہلے سے ہی منتخب اوپن سی ڈی کوڈ ہے.",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "تلاش کے ماڈل",
|
||||
"selectProjectBeforeTesting": "ماڈلوں کا ٹیسٹ کرنے سے پہلے منصوبہ بندی انتخاب کریں۔",
|
||||
"selectProjectBeforeTestingDefaults": "OpenCode دیس کو ٹیسٹ کرنے یا محفوظ کرنے سے پہلے منصوبہ بندی منتخب کریں۔",
|
||||
"useInTeamPicker": "ٹیم چیسٹر میں استعمال ہوتی ہے۔"
|
||||
"useInTeamPicker": "ٹیم چیسٹر میں استعمال ہوتی ہے۔",
|
||||
"testInProgress": "ماڈل ٹیسٹ پہلے ہی چل رہا ہے۔",
|
||||
"validationContextRequired": "Test اور Set default فعال کرنے کے لیے اوپر validation context منتخب کریں۔ team picker کے لیے محفوظ کرنا صرف نئی ٹیموں کے لیے route محفوظ کرتا ہے۔",
|
||||
"defaultSaveInProgress": "OpenCode default محفوظ ہو رہا ہے۔",
|
||||
"routeUnavailableAuth": "اس model کو استعمال کرنے سے پہلے اس provider کو authentication چاہیے۔",
|
||||
"routeUnavailableFailed": "یہ model route آخری execution test میں ناکام ہوا۔",
|
||||
"routeUnavailableUnknown": "یہ model موجودہ OpenCode default ہے، مگر ابھی live catalog میں دستیاب نہیں۔",
|
||||
"actionsUnavailable": "کارروائیاں عارضی طور پر دستیاب نہیں ہیں۔",
|
||||
"routeUnavailableGeneric": "یہ model route اس وقت استعمال نہیں ہو سکتا۔"
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "کھولیں",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "ضرورت",
|
||||
"failed": "ناکام ہوا",
|
||||
"unknown": "نامعلوم",
|
||||
"default": "طے شدہ"
|
||||
"default": "طے شدہ",
|
||||
"knownRoute": "معروف route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "API کلیدی ربط ، لیکن ابھی تصدیق نہیں ہوئی",
|
||||
"apiKeyModeMissingCredential": "API کلیدی طریقہ انتخاب کرتا ہے لیکن کوئی نہیں API کلیدی کلید",
|
||||
"connectedVia": "جواب {{method}}",
|
||||
"unableToVerify": "درستگی حاصل کرنے کے قابل"
|
||||
"unableToVerify": "درستگی حاصل کرنے کے قابل",
|
||||
"modelsAvailable": "ماڈلز دستیاب ہیں"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "منتخب شدہ Auth: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "سیشن",
|
||||
"stallNudge": "غیر متصل",
|
||||
"start": "شروع کریں",
|
||||
"workSync": "کامک"
|
||||
"workSync": "کامک",
|
||||
"agentError": "Agent Error",
|
||||
"apiError": "API Error"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "بوٹسٹرپ نے اعتراف کیا",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "انکار کرو"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "ترقی"
|
||||
"inProgress": "ترقی",
|
||||
"expandInProgress": "In progress پھیلائیں",
|
||||
"collapseInProgress": "In progress سمیٹیں",
|
||||
"reviewing": "review کر رہا ہے",
|
||||
"workingOn": "کام کر رہا ہے"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "پیغام کا نقطۂنظر"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "ٹیم کے اعداد و شمار ایک مرتبہ مکمل ہونے والی فراہمی نظر آئیں گے۔",
|
||||
"context": {
|
||||
"title": "پرنٹ"
|
||||
"title": "پرنٹ",
|
||||
"loading": "لوڈ ہو رہا ہے...",
|
||||
"noSessionLoaded": "Session loaded نہیں",
|
||||
"closePanel": "{{team}} context panel بند کریں",
|
||||
"loadingContext": "Context لوڈ ہو رہا ہے...",
|
||||
"openLeadSession": "Context دیکھنے کے لیے team lead session کھولیں."
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "کوئی لاگ چشمہ دریافت نہیں کیا گیا.",
|
||||
"ariaLabel": "لاگ سرسید",
|
||||
"leadLabel": "پیشوائی",
|
||||
"selectSourceEmpty": "لاگ ماخوذ منتخب کريں"
|
||||
"selectSourceEmpty": "لاگ ماخوذ منتخب کريں",
|
||||
"leadDescription": "Team Lead",
|
||||
"removedLabel": "ہٹا دیا گیا",
|
||||
"removedDescription": "ہٹا دیا گیا"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+{{count}} مزید",
|
||||
"more_other": "+{{count}} مزید",
|
||||
"more_few": "+{{count}} مزید",
|
||||
"more_many": "+{{count}} مزید"
|
||||
"more_many": "+{{count}} مزید",
|
||||
"unsupportedProvider": "Provider supported نہیں",
|
||||
"openCodeLogsDelayed": "OpenCode logs delayed ہیں",
|
||||
"logsUnavailable": "Logs available نہیں",
|
||||
"noRecentLogs": "کوئی حالیہ logs نہیں",
|
||||
"toolError": "Tool error",
|
||||
"toolResult": "Tool result",
|
||||
"toolUse": "Tool use",
|
||||
"thinking": "Thinking",
|
||||
"error": "Error",
|
||||
"logEvent": "Log event",
|
||||
"noErrorOutput": "کوئی error output نہیں",
|
||||
"noOutput": "کوئی output نہیں",
|
||||
"noInput": "کوئی input نہیں"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "حد بندی",
|
||||
"blocks": "بلاک",
|
||||
"close": "بندکرو",
|
||||
"blockingHiddenTasks": "خفیہ کام بند کرنا",
|
||||
"blockedHiddenTasks": "خفیہ کام بند کیا گیا"
|
||||
"blockedHiddenTasks": "خفیہ کام بند کیا گیا",
|
||||
"links_one": "{{count}} لنک",
|
||||
"links_other": "{{count}} لنکس",
|
||||
"hiddenBlockingLinks_one": "{{count}} پوشیدہ blocking link",
|
||||
"hiddenBlockingLinks_other": "{{count}} پوشیدہ blocking links",
|
||||
"hiddenTaskStack": "پوشیدہ کاموں کا stack",
|
||||
"hiddenTasks_one": "{{count}} پوشیدہ کام",
|
||||
"hiddenTasks_other": "{{count}} پوشیدہ کام",
|
||||
"task": "کام",
|
||||
"openBlockerStack": "Blocker stack کھولیں",
|
||||
"openBlockedStack": "Blocked stack کھولیں",
|
||||
"openBlockerTask": "Blocker task کھولیں",
|
||||
"openBlockedTask": "Blocked task کھولیں"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "غیر متصل",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "خود کار محفوظ",
|
||||
"wrapLines": "لائنیں",
|
||||
"loadingTail": "عمل log ob...",
|
||||
"empty": "اس ممبر کے لیے ابھی تک کوئی عمل دخل log فائل نہیں لی گئی۔"
|
||||
"empty": "اس ممبر کے لیے ابھی تک کوئی عمل دخل log فائل نہیں لی گئی۔",
|
||||
"copy": "Copy",
|
||||
"fileEmpty": "Process log file خالی ہے.",
|
||||
"showingLast": "آخری {{bytes}} دکھا رہے ہیں.",
|
||||
"showing": "{{bytes}} دکھا رہے ہیں."
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "اس ممبر کو کوئی کام نہیں سونپا گیا"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "فراہم کُنندہ اسٹیٹ کارڈ سے وقتاً فوقتاً انسٹال کریں یا پھر اس پلگ ان انسٹال کریں۔",
|
||||
"openCodeAppMcpUnreachable": "اوپن کووڈ ایپ کو تازگی بخشنے کے لئے دوبارہ آغاز MCP بریگیڈ. اگر اسے دوبارہ بحال کیا جائے تو ایپ اور اوپنCode وقت کو دوبارہ شروع کریں۔",
|
||||
"cliBinaryMissing": "مقامی پلگ ان کو یقینی بنائیں CLI binary موجود ہے اور شروع کیا جا سکتا ہے، پھر اسے دوبارہ کھول.",
|
||||
"default": "اوپر کے شمارے پر غور کریں، پھر اس کو دوبارہ کھول دیں۔"
|
||||
"default": "اوپر کے شمارے پر غور کریں، پھر اس کو دوبارہ کھول دیں۔",
|
||||
"openCodeNodeModulesSymlinkPermission": "Agent Teams AI کو Administrator کے طور پر چلائیں، پھر launch دوبارہ آزمائیں."
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "ٹیمیں"
|
||||
"title": "ٹیمیں",
|
||||
"status": {
|
||||
"active": "فعال",
|
||||
"provisioning": "شروع ہو رہی ہے",
|
||||
"idle": "چل رہی ہے"
|
||||
},
|
||||
"noProject": "کوئی project نہیں"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "جواب {{count}} جلدیں پہنچ گئیں"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "آپ کا تقرر سیشن غیر متصل ہوتا ہے. جاری رہنے کے لئے دوبارہ کوشش کریں.",
|
||||
"useCode": "کوڈ استعمال کریں"
|
||||
"useCode": "کوڈ استعمال کریں",
|
||||
"generating": "بن رہا ہے...",
|
||||
"openLogin": "Login کھولیں",
|
||||
"generateLink": "Link بنائیں"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "فعال سطح (اختیاری)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "دوبارہ کردار",
|
||||
"searchPlaceholder": "تلاش کردار...",
|
||||
"empty": "کوئی کردار نہیں ملا.",
|
||||
"reservedRole": "یہ کردار محفوظ ہے۔"
|
||||
"reservedRole": "یہ کردار محفوظ ہے۔",
|
||||
"emptyCustomRole": "Role خالی نہیں ہو سکتی"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -589,7 +589,11 @@
|
|||
"actions": {
|
||||
"add": "添加 API 密钥",
|
||||
"addFirst": "添加您的第一个密钥",
|
||||
"edit": "编辑"
|
||||
"edit": "编辑",
|
||||
"copied": "已复制!",
|
||||
"copyEnvVarName": "复制环境变量名",
|
||||
"confirmDelete": "再次点击确认",
|
||||
"delete": "删除"
|
||||
},
|
||||
"empty": {
|
||||
"title": "没有保存 ZXCVKEN0ZXCV 密钥",
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@
|
|||
"copiedShort": "复制",
|
||||
"copy": "复制诊断",
|
||||
"hints": "提示",
|
||||
"likelyCause": "可能的原因是:"
|
||||
"likelyCause": "可能的原因是:",
|
||||
"windowsSymlinkAdminHint": "Windows: 以管理员身份运行 Agent Teams AI"
|
||||
},
|
||||
"models": {
|
||||
"alreadyDefault": "这已经是所选的 OpenCode 默认值 。",
|
||||
|
|
@ -64,7 +65,15 @@
|
|||
"searchPlaceholder": "搜索模式",
|
||||
"selectProjectBeforeTesting": "在测试模型前选择项目上下文 。",
|
||||
"selectProjectBeforeTestingDefaults": "在测试或保存 OpenCode 默认值之前选择工程上下文 。",
|
||||
"useInTeamPicker": "用于团队拾取器"
|
||||
"useInTeamPicker": "用于团队拾取器",
|
||||
"testInProgress": "模型测试已在运行。",
|
||||
"validationContextRequired": "请先在上方选择验证上下文, 才能启用 Test 和 Set default。保存到 team picker 只会为新团队记录 route。",
|
||||
"defaultSaveInProgress": "正在保存 OpenCode default。",
|
||||
"routeUnavailableAuth": "此 provider 需要先完成身份验证, 才能使用此模型。",
|
||||
"routeUnavailableFailed": "此 model route 未通过上次 execution test。",
|
||||
"routeUnavailableUnknown": "此模型是当前 OpenCode default, 但尚未出现在 live catalog 中。",
|
||||
"actionsUnavailable": "操作暂时不可用。",
|
||||
"routeUnavailableGeneric": "此 model route 当前无法使用。"
|
||||
},
|
||||
"providers": {
|
||||
"catalog": "OpenCode 提供者目录",
|
||||
|
|
@ -108,7 +117,8 @@
|
|||
"needsTest": "需要测试",
|
||||
"failed": "失败",
|
||||
"unknown": "不详",
|
||||
"default": "默认"
|
||||
"default": "默认",
|
||||
"knownRoute": "已知 route"
|
||||
},
|
||||
"compatibleEndpoint": {
|
||||
"baseUrlPlaceholder": "http://localhost:1234 苏维埃社会主义共和国"
|
||||
|
|
@ -894,7 +904,8 @@
|
|||
"apiKeyConfiguredNotVerified": "配置了 API 密钥,但尚未验证",
|
||||
"apiKeyModeMissingCredential": "选择了 API 密钥模式,但没有配置 API 密钥",
|
||||
"connectedVia": "通过{{method}}连接",
|
||||
"unableToVerify": "无法校验"
|
||||
"unableToVerify": "无法校验",
|
||||
"modelsAvailable": "模型可用"
|
||||
},
|
||||
"mode": {
|
||||
"selectedAuth": "选中的认证: {{authMode}}",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
"session": "届会",
|
||||
"stallNudge": "缓冲",
|
||||
"start": "开始",
|
||||
"workSync": "工作同步"
|
||||
"workSync": "工作同步",
|
||||
"agentError": "代理错误",
|
||||
"apiError": "API 错误"
|
||||
},
|
||||
"bootstrap": {
|
||||
"acknowledged": "靴子已经确认",
|
||||
|
|
@ -77,7 +79,11 @@
|
|||
"action": "答复"
|
||||
},
|
||||
"activeTasks": {
|
||||
"inProgress": "进行中"
|
||||
"inProgress": "进行中",
|
||||
"expandInProgress": "展开进行中任务",
|
||||
"collapseInProgress": "折叠进行中任务",
|
||||
"reviewing": "正在审查",
|
||||
"workingOn": "正在处理"
|
||||
},
|
||||
"expandDialog": {
|
||||
"description": "扩展信件视图"
|
||||
|
|
@ -349,7 +355,12 @@
|
|||
},
|
||||
"waitingForProvisioning": "一旦提供完毕,小组数据就会出现",
|
||||
"context": {
|
||||
"title": "背景情况"
|
||||
"title": "背景情况",
|
||||
"loading": "正在加载...",
|
||||
"noSessionLoaded": "未加载会话",
|
||||
"closePanel": "关闭 {{team}} 上下文面板",
|
||||
"loadingContext": "正在加载上下文...",
|
||||
"openLeadSession": "打开团队负责人会话以查看上下文。"
|
||||
}
|
||||
},
|
||||
"review": {
|
||||
|
|
@ -1571,7 +1582,10 @@
|
|||
"emptyMessage": "未找到日志来源 。",
|
||||
"ariaLabel": "日志来源",
|
||||
"leadLabel": "铅",
|
||||
"selectSourceEmpty": "选择日志源 。"
|
||||
"selectSourceEmpty": "选择日志源 。",
|
||||
"leadDescription": "团队负责人",
|
||||
"removedLabel": "已移除",
|
||||
"removedDescription": "已移除"
|
||||
}
|
||||
},
|
||||
"agentGraph": {
|
||||
|
|
@ -1620,14 +1634,39 @@
|
|||
"more_one": "+ 键{{count}}更多",
|
||||
"more_other": "+ 键{{count}}更多",
|
||||
"more_few": "+ 键{{count}}更多",
|
||||
"more_many": "+ 键{{count}}更多"
|
||||
"more_many": "+ 键{{count}}更多",
|
||||
"unsupportedProvider": "不支持的提供商",
|
||||
"openCodeLogsDelayed": "OpenCode 日志延迟",
|
||||
"logsUnavailable": "日志不可用",
|
||||
"noRecentLogs": "没有最近日志",
|
||||
"toolError": "工具错误",
|
||||
"toolResult": "工具结果",
|
||||
"toolUse": "工具使用",
|
||||
"thinking": "思考中",
|
||||
"error": "错误",
|
||||
"logEvent": "日志事件",
|
||||
"noErrorOutput": "没有错误输出",
|
||||
"noOutput": "没有输出",
|
||||
"noInput": "没有输入"
|
||||
},
|
||||
"blockingEdge": {
|
||||
"title": "封锁依赖性",
|
||||
"blocks": "块",
|
||||
"close": "关闭",
|
||||
"blockingHiddenTasks": "屏蔽隐藏任务",
|
||||
"blockedHiddenTasks": "已屏蔽隐藏任务"
|
||||
"blockedHiddenTasks": "已屏蔽隐藏任务",
|
||||
"links_one": "{{count}} 个链接",
|
||||
"links_other": "{{count}} 个链接",
|
||||
"hiddenBlockingLinks_one": "{{count}} 个隐藏阻塞链接",
|
||||
"hiddenBlockingLinks_other": "{{count}} 个隐藏阻塞链接",
|
||||
"hiddenTaskStack": "隐藏任务堆栈",
|
||||
"hiddenTasks_one": "{{count}} 个隐藏任务",
|
||||
"hiddenTasks_other": "{{count}} 个隐藏任务",
|
||||
"task": "任务",
|
||||
"openBlockerStack": "打开阻塞方堆栈",
|
||||
"openBlockedStack": "打开被阻塞方堆栈",
|
||||
"openBlockerTask": "打开阻塞任务",
|
||||
"openBlockedTask": "打开被阻塞任务"
|
||||
},
|
||||
"activityHud": {
|
||||
"activity": "活动",
|
||||
|
|
@ -1778,7 +1817,11 @@
|
|||
"autoRefresh": "自动更新",
|
||||
"wrapLines": "环行",
|
||||
"loadingTail": "正在装入进程日志尾巴...",
|
||||
"empty": "尚未为这个成员捕获进程日志文件 。"
|
||||
"empty": "尚未为这个成员捕获进程日志文件 。",
|
||||
"copy": "复制",
|
||||
"fileEmpty": "进程日志文件为空。",
|
||||
"showingLast": "显示最后 {{bytes}}。",
|
||||
"showing": "显示 {{bytes}}。"
|
||||
},
|
||||
"tasks": {
|
||||
"empty": "没有指派给该成员的任务"
|
||||
|
|
@ -2029,7 +2072,8 @@
|
|||
"openCodeRuntimeMissing": "从提供者状态卡安装或重试 OpenCode 运行时间, 然后重新打开此对话框 。",
|
||||
"openCodeAppMcpUnreachable": "重试发射刷新OpenCodeapp MCP桥. 如果重复,请重新启动应用程序和 OpenCode 运行时间 。",
|
||||
"cliBinaryMissing": "确保本地的 Claude CLI 二进制存在并可以启动,然后重新打开此对话框 。",
|
||||
"default": "解决上面的问题, 然后重开这个对话框 。"
|
||||
"default": "解决上面的问题, 然后重开这个对话框 。",
|
||||
"openCodeNodeModulesSymlinkPermission": "以管理员身份运行 Agent Teams AI, 然后重试启动。"
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
|
|
@ -2404,14 +2448,23 @@
|
|||
}
|
||||
},
|
||||
"runningTeams": {
|
||||
"title": "运行团队"
|
||||
"title": "运行团队",
|
||||
"status": {
|
||||
"active": "活跃",
|
||||
"provisioning": "启动中",
|
||||
"idle": "运行中"
|
||||
},
|
||||
"noProject": "无项目"
|
||||
},
|
||||
"layout": {
|
||||
"maxPanesReached": "达到的最大 {{count}} 面板"
|
||||
},
|
||||
"codexReconnect": {
|
||||
"description": "您的编码会话似乎已停滞 。 重新连接继续 。",
|
||||
"useCode": "使用代码"
|
||||
"useCode": "使用代码",
|
||||
"generating": "正在生成...",
|
||||
"openLogin": "打开登录",
|
||||
"generateLink": "生成链接"
|
||||
},
|
||||
"effortLevel": {
|
||||
"label": "努力级别( 可选)",
|
||||
|
|
@ -2428,6 +2481,7 @@
|
|||
"customRole": "自定义角色...",
|
||||
"searchPlaceholder": "搜索角色...",
|
||||
"empty": "没有找到角色 。",
|
||||
"reservedRole": "这个角色是保留下来的"
|
||||
"reservedRole": "这个角色是保留下来的",
|
||||
"emptyCustomRole": "角色不能为空"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1117,6 +1117,10 @@ export default interface Resources {
|
|||
actions: {
|
||||
add: 'Add API Key';
|
||||
addFirst: 'Add your first key';
|
||||
confirmDelete: 'Click again to confirm';
|
||||
copied: 'Copied!';
|
||||
copyEnvVarName: 'Copy env var name';
|
||||
delete: 'Delete';
|
||||
edit: 'Edit';
|
||||
};
|
||||
description: 'Securely store API keys for auto-filling when installing MCP servers.';
|
||||
|
|
@ -2886,6 +2890,7 @@ export default interface Resources {
|
|||
copy: 'Copy diagnostics';
|
||||
hints: 'Hints';
|
||||
likelyCause: 'Likely cause:';
|
||||
windowsSymlinkAdminHint: 'Windows: run Agent Teams AI as Administrator';
|
||||
};
|
||||
modelRoutes: {
|
||||
searchPlaceholder: 'Search model routes';
|
||||
|
|
@ -3016,7 +3021,11 @@ export default interface Resources {
|
|||
restartTeam: 'Restart team';
|
||||
};
|
||||
activeTasks: {
|
||||
collapseInProgress: 'Collapse in progress';
|
||||
expandInProgress: 'Expand in progress';
|
||||
inProgress: 'In progress';
|
||||
reviewing: 'reviewing';
|
||||
workingOn: 'working on';
|
||||
};
|
||||
authError: {
|
||||
description: 'Authentication failed. Restarting the team will refresh the session and may resolve this issue. If the problem persists, check your API credentials or try again later.';
|
||||
|
|
@ -3027,6 +3036,8 @@ export default interface Resources {
|
|||
workSyncBody: 'Asked teammate to sync current work';
|
||||
};
|
||||
badges: {
|
||||
agentError: 'Agent Error';
|
||||
apiError: 'API Error';
|
||||
automation: 'automation';
|
||||
bootstrap: 'bootstrap';
|
||||
command: 'command';
|
||||
|
|
@ -3123,16 +3134,41 @@ export default interface Resources {
|
|||
blockingHiddenTasks: 'Blocking hidden tasks';
|
||||
blocks: 'blocks';
|
||||
close: 'Close';
|
||||
hiddenBlockingLinks_one: '{{count}} hidden blocking link';
|
||||
hiddenBlockingLinks_other: '{{count}} hidden blocking links';
|
||||
hiddenTasks_one: '{{count}} hidden task';
|
||||
hiddenTasks_other: '{{count}} hidden tasks';
|
||||
hiddenTaskStack: 'Hidden task stack';
|
||||
links_one: '{{count}} link';
|
||||
links_other: '{{count}} links';
|
||||
openBlockedStack: 'Open blocked stack';
|
||||
openBlockedTask: 'Open blocked task';
|
||||
openBlockerStack: 'Open blocker stack';
|
||||
openBlockerTask: 'Open blocker task';
|
||||
task: 'Task';
|
||||
title: 'Blocking Dependency';
|
||||
};
|
||||
logPreview: {
|
||||
error: 'Error';
|
||||
logEvent: 'Log event';
|
||||
loading: 'Loading logs';
|
||||
logs: 'Logs';
|
||||
logsUnavailable: 'Logs unavailable';
|
||||
more: '+{{count}} more';
|
||||
more_few: '+{{count}} more';
|
||||
more_many: '+{{count}} more';
|
||||
more_one: '+{{count}} more';
|
||||
more_other: '+{{count}} more';
|
||||
noErrorOutput: 'No error output';
|
||||
noInput: 'No input';
|
||||
noOutput: 'No output';
|
||||
noRecentLogs: 'No recent logs';
|
||||
openCodeLogsDelayed: 'OpenCode logs delayed';
|
||||
thinking: 'Thinking';
|
||||
toolError: 'Tool error';
|
||||
toolResult: 'Tool result';
|
||||
toolUse: 'Tool use';
|
||||
unsupportedProvider: 'Unsupported provider';
|
||||
};
|
||||
popover: {
|
||||
externalTeam: 'External team';
|
||||
|
|
@ -3220,8 +3256,11 @@ export default interface Resources {
|
|||
sourceSelect: {
|
||||
ariaLabel: 'Log source';
|
||||
emptyMessage: 'No log sources found.';
|
||||
leadDescription: 'Team Lead';
|
||||
leadLabel: 'Lead';
|
||||
placeholder: 'Select log source...';
|
||||
removedDescription: 'Removed';
|
||||
removedLabel: 'removed';
|
||||
searchPlaceholder: 'Search log sources...';
|
||||
selectSourceEmpty: 'Select a log source.';
|
||||
};
|
||||
|
|
@ -3230,6 +3269,9 @@ export default interface Resources {
|
|||
};
|
||||
codexReconnect: {
|
||||
description: 'Your Codex session appears stale. Reconnect to continue.';
|
||||
generateLink: 'Generate link';
|
||||
generating: 'Generating...';
|
||||
openLogin: 'Open login';
|
||||
useCode: 'Use code';
|
||||
};
|
||||
contextLimit: {
|
||||
|
|
@ -3330,6 +3372,11 @@ export default interface Resources {
|
|||
visualize: 'Visualize';
|
||||
};
|
||||
context: {
|
||||
closePanel: 'Close {{team}} context panel';
|
||||
loading: 'Loading...';
|
||||
loadingContext: 'Loading context...';
|
||||
noSessionLoaded: 'No session loaded';
|
||||
openLeadSession: 'Open the team lead session to view context.';
|
||||
title: 'Context';
|
||||
};
|
||||
deleteTeam: {
|
||||
|
|
@ -4144,8 +4191,12 @@ export default interface Resources {
|
|||
};
|
||||
runtimeLogs: {
|
||||
autoRefresh: 'Auto-refresh';
|
||||
copy: 'Copy';
|
||||
empty: 'No process log file captured for this member yet.';
|
||||
fileEmpty: 'Process log file is empty.';
|
||||
loadingTail: 'Loading process log tail...';
|
||||
showing: 'Showing {{bytes}}.';
|
||||
showingLast: 'Showing last {{bytes}}.';
|
||||
wrapLines: 'Wrap lines';
|
||||
};
|
||||
runtimeTelemetry: {
|
||||
|
|
@ -4617,6 +4668,7 @@ export default interface Resources {
|
|||
openCodeAccessDenied: 'Fix folder permissions or move the project to a user-writable folder. Running as administrator is only a temporary workaround.';
|
||||
openCodeAppMcpUnreachable: 'Retry launch to refresh the OpenCode app MCP bridge. If it repeats, restart the app and OpenCode runtime.';
|
||||
openCodeBridgeNoOutput: 'Restart the app and OpenCode runtime, then retry. If it repeats, copy diagnostics.';
|
||||
openCodeNodeModulesSymlinkPermission: 'Run Agent Teams AI as Administrator, then retry launch.';
|
||||
openCodeRuntimeMissing: 'Install or retry OpenCode runtime from the provider status card, then reopen this dialog.';
|
||||
runtimeProviderNotConfigured: 'Configure the selected provider runtime, then reopen this dialog.';
|
||||
workingDirectoryMissing: 'Choose an existing working directory, then reopen this dialog.';
|
||||
|
|
@ -4993,11 +5045,18 @@ export default interface Resources {
|
|||
roleSelect: {
|
||||
customRole: 'Custom role...';
|
||||
empty: 'No roles found.';
|
||||
emptyCustomRole: 'Role cannot be empty';
|
||||
noRole: 'No role';
|
||||
reservedRole: 'This role is reserved';
|
||||
searchPlaceholder: 'Search roles...';
|
||||
};
|
||||
runningTeams: {
|
||||
noProject: 'No project';
|
||||
status: {
|
||||
active: 'Active';
|
||||
idle: 'Running';
|
||||
provisioning: 'Launching';
|
||||
};
|
||||
title: 'Running Teams';
|
||||
};
|
||||
schedule: {
|
||||
|
|
|
|||
|
|
@ -34,12 +34,20 @@ function formatBytes(bytes: number | undefined): string {
|
|||
return `${mb.toFixed(mb >= 10 ? 0 : 1)} MB`;
|
||||
}
|
||||
|
||||
function buildStatusText(log: MemberRuntimeLogTailResponse | null): string | null {
|
||||
function buildStatusText(
|
||||
log: MemberRuntimeLogTailResponse | null,
|
||||
labels: {
|
||||
empty: string;
|
||||
fileEmpty: string;
|
||||
showingLast: (bytes: string) => string;
|
||||
showing: (bytes: string) => string;
|
||||
}
|
||||
): string | null {
|
||||
if (!log) return null;
|
||||
if (log.missing) return 'No process log file captured for this member yet.';
|
||||
if (!log.content) return 'Process log file is empty.';
|
||||
if (log.truncated) return `Showing last ${formatBytes(log.bytesRead)}.`;
|
||||
return `Showing ${formatBytes(log.bytesRead)}.`;
|
||||
if (log.missing) return labels.empty;
|
||||
if (!log.content) return labels.fileEmpty;
|
||||
if (log.truncated) return labels.showingLast(formatBytes(log.bytesRead));
|
||||
return labels.showing(formatBytes(log.bytesRead));
|
||||
}
|
||||
|
||||
function ProcessLogKindTabs({
|
||||
|
|
@ -204,7 +212,12 @@ export function MemberRuntimeProcessLogsPanel({
|
|||
}
|
||||
}, [log?.content]);
|
||||
|
||||
const statusText = buildStatusText(log);
|
||||
const statusText = buildStatusText(log, {
|
||||
empty: t('members.runtimeLogs.empty'),
|
||||
fileEmpty: t('members.runtimeLogs.fileEmpty'),
|
||||
showingLast: (bytes) => t('members.runtimeLogs.showingLast', { bytes }),
|
||||
showing: (bytes) => t('members.runtimeLogs.showing', { bytes }),
|
||||
});
|
||||
const hasContent = Boolean(log?.content);
|
||||
|
||||
return (
|
||||
|
|
@ -252,7 +265,7 @@ export function MemberRuntimeProcessLogsPanel({
|
|||
disabled={!hasContent}
|
||||
>
|
||||
{copied ? <Check size={13} /> : <Clipboard size={13} />}
|
||||
{copied ? 'Copied' : 'Copy'}
|
||||
{copied ? tCommon('actions.copied') : t('members.runtimeLogs.copy')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -17,36 +17,54 @@ export interface RunningTeamRowModel {
|
|||
taskCounts?: TaskStatusCounts;
|
||||
}
|
||||
|
||||
function getStatusLabel(status: RunningTeamDashboardEntry['status']): string {
|
||||
export interface RunningTeamsSectionText {
|
||||
status: Record<RunningTeamDashboardEntry['status'], string>;
|
||||
noProject: string;
|
||||
}
|
||||
|
||||
const DEFAULT_TEXT: RunningTeamsSectionText = {
|
||||
status: {
|
||||
active: 'Active',
|
||||
provisioning: 'Launching',
|
||||
idle: 'Running',
|
||||
},
|
||||
noProject: 'No project',
|
||||
};
|
||||
|
||||
function getStatusLabel(
|
||||
status: RunningTeamDashboardEntry['status'],
|
||||
text: RunningTeamsSectionText
|
||||
): string {
|
||||
switch (status) {
|
||||
case 'active':
|
||||
return 'Active';
|
||||
return text.status.active;
|
||||
case 'provisioning':
|
||||
return 'Launching';
|
||||
return text.status.provisioning;
|
||||
case 'idle':
|
||||
return 'Running';
|
||||
return text.status.idle;
|
||||
}
|
||||
}
|
||||
|
||||
function getProjectLabel(projectPath?: string): string {
|
||||
function getProjectLabel(projectPath: string | undefined, text: RunningTeamsSectionText): string {
|
||||
if (!projectPath) {
|
||||
return 'No project';
|
||||
return text.noProject;
|
||||
}
|
||||
|
||||
return getBaseName(projectPath) || projectPath;
|
||||
}
|
||||
|
||||
export function adaptRunningTeamsSection(
|
||||
teams: RunningTeamDashboardEntry[]
|
||||
teams: RunningTeamDashboardEntry[],
|
||||
text: RunningTeamsSectionText = DEFAULT_TEXT
|
||||
): RunningTeamRowModel[] {
|
||||
return teams.map((team) => ({
|
||||
id: team.teamName,
|
||||
teamName: team.teamName,
|
||||
displayName: team.displayName,
|
||||
projectPath: team.projectPath,
|
||||
projectLabel: getProjectLabel(team.projectPath),
|
||||
projectLabel: getProjectLabel(team.projectPath, text),
|
||||
status: team.status,
|
||||
statusLabel: getStatusLabel(team.status),
|
||||
statusLabel: getStatusLabel(team.status, text),
|
||||
iconColor: team.color
|
||||
? getTeamColorSet(team.color).border
|
||||
: nameColorSet(team.displayName).border,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
|
||||
import { useAppTranslation } from '@features/localization/renderer';
|
||||
import { api } from '@renderer/api';
|
||||
import { useStore } from '@renderer/store';
|
||||
import {
|
||||
|
|
@ -58,6 +59,7 @@ function toCandidate(input: {
|
|||
}
|
||||
|
||||
export function useRunningTeamsSection(searchQuery: string): RunningTeamsSectionState {
|
||||
const { t } = useAppTranslation('team');
|
||||
const {
|
||||
teams,
|
||||
globalTasks,
|
||||
|
|
@ -172,7 +174,14 @@ export function useRunningTeamsSection(searchQuery: string): RunningTeamsSection
|
|||
),
|
||||
});
|
||||
|
||||
return adaptRunningTeamsSection(runningTeams);
|
||||
return adaptRunningTeamsSection(runningTeams, {
|
||||
status: {
|
||||
active: t('runningTeams.status.active'),
|
||||
provisioning: t('runningTeams.status.provisioning'),
|
||||
idle: t('runningTeams.status.idle'),
|
||||
},
|
||||
noProject: t('runningTeams.noProject'),
|
||||
});
|
||||
}, [
|
||||
aliveTeams,
|
||||
globalTasks,
|
||||
|
|
@ -182,6 +191,7 @@ export function useRunningTeamsSection(searchQuery: string): RunningTeamsSection
|
|||
provisioningTeamNames,
|
||||
searchActive,
|
||||
teams,
|
||||
t,
|
||||
]);
|
||||
|
||||
const openRunningTeam = useCallback(
|
||||
|
|
|
|||
|
|
@ -42,7 +42,10 @@ import {
|
|||
shouldShowProviderStatusSkeleton,
|
||||
} from '@renderer/components/runtime/providerConnectionUi';
|
||||
import { ProviderModelBadges } from '@renderer/components/runtime/ProviderModelBadges';
|
||||
import { getProviderRuntimeBackendSummary } from '@renderer/components/runtime/ProviderRuntimeBackendSelector';
|
||||
import {
|
||||
buildProviderRuntimeBackendSummaryText,
|
||||
getProviderRuntimeBackendSummary,
|
||||
} from '@renderer/components/runtime/ProviderRuntimeBackendSelector';
|
||||
import {
|
||||
getProviderTerminalCommand,
|
||||
getProviderTerminalLogoutCommand,
|
||||
|
|
@ -839,6 +842,11 @@ const InstalledBanner = ({
|
|||
}: InstalledBannerProps): React.JSX.Element => {
|
||||
const { t } = useAppTranslation('dashboard');
|
||||
const { t: settingsT } = useAppTranslation('settings');
|
||||
const { t: commonT } = useAppTranslation('common');
|
||||
const runtimeBackendSummaryText = useMemo(
|
||||
() => buildProviderRuntimeBackendSummaryText(commonT),
|
||||
[commonT]
|
||||
);
|
||||
const openExtensionsTab = useStore((s) => s.openExtensionsTab);
|
||||
const styles = VARIANT_STYLES[variant];
|
||||
const visibleProviders = useMemo(
|
||||
|
|
@ -966,7 +974,7 @@ const InstalledBanner = ({
|
|||
const actionDisabled = isBusy || !cliStatus.binaryPath;
|
||||
const runtimeSummary = isConnectionManagedRuntimeProvider(provider)
|
||||
? getProviderCurrentRuntimeSummary(provider, settingsT)
|
||||
: getProviderRuntimeBackendSummary(provider);
|
||||
: getProviderRuntimeBackendSummary(provider, runtimeBackendSummaryText);
|
||||
const connectionModeSummary = getProviderConnectionModeSummary(provider, settingsT);
|
||||
const credentialSummary = getProviderCredentialSummary(provider, settingsT);
|
||||
const dashboardRateLimits = getDashboardRateLimitsForProvider(provider);
|
||||
|
|
|
|||
|
|
@ -95,7 +95,9 @@ export const ApiKeyCard = ({ apiKey, onEdit }: ApiKeyCardProps): React.JSX.Eleme
|
|||
)}
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>{copied ? 'Copied!' : 'Copy env var name'}</TooltipContent>
|
||||
<TooltipContent>
|
||||
{copied ? t('apiKeys.actions.copied') : t('apiKeys.actions.copyEnvVarName')}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
|
|
@ -135,7 +137,9 @@ export const ApiKeyCard = ({ apiKey, onEdit }: ApiKeyCardProps): React.JSX.Eleme
|
|||
<Trash2 className="size-3.5" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>{confirmDelete ? 'Click again to confirm' : 'Delete'}</TooltipContent>
|
||||
<TooltipContent>
|
||||
{confirmDelete ? t('apiKeys.actions.confirmDelete') : t('apiKeys.actions.delete')}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -16,6 +16,52 @@ interface Props {
|
|||
onSelect: (providerId: CliProviderStatus['providerId'], backendId: string) => void;
|
||||
}
|
||||
|
||||
export interface ProviderRuntimeBackendSummaryText {
|
||||
auto: string;
|
||||
autoCurrently: (backend: string) => string;
|
||||
audienceInternal: string;
|
||||
states: {
|
||||
locked: string;
|
||||
disabled: string;
|
||||
authRequired: string;
|
||||
runtimeMissing: string;
|
||||
degraded: string;
|
||||
unavailable: string;
|
||||
};
|
||||
}
|
||||
|
||||
export function buildProviderRuntimeBackendSummaryText(
|
||||
t: ReturnType<typeof useAppTranslation>['t']
|
||||
): ProviderRuntimeBackendSummaryText {
|
||||
return {
|
||||
auto: t('runtimeBackendSelector.auto'),
|
||||
autoCurrently: (backend) => t('runtimeBackendSelector.autoCurrently', { backend }),
|
||||
audienceInternal: t('runtimeBackendSelector.audience.internal'),
|
||||
states: {
|
||||
locked: t('runtimeBackendSelector.states.locked'),
|
||||
disabled: t('runtimeBackendSelector.states.disabled'),
|
||||
authRequired: t('runtimeBackendSelector.states.authRequired'),
|
||||
runtimeMissing: t('runtimeBackendSelector.states.runtimeMissing'),
|
||||
degraded: t('runtimeBackendSelector.states.degraded'),
|
||||
unavailable: t('runtimeBackendSelector.states.unavailable'),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const DEFAULT_SUMMARY_TEXT: ProviderRuntimeBackendSummaryText = {
|
||||
auto: 'Auto',
|
||||
autoCurrently: (backend) => `Auto (currently: ${backend})`,
|
||||
audienceInternal: 'Internal',
|
||||
states: {
|
||||
locked: 'Locked',
|
||||
disabled: 'Disabled',
|
||||
authRequired: 'Auth required',
|
||||
runtimeMissing: 'Runtime missing',
|
||||
degraded: 'Degraded',
|
||||
unavailable: 'Unavailable',
|
||||
},
|
||||
};
|
||||
|
||||
export function getProviderRuntimeBackendStateLabel(
|
||||
option: NonNullable<CliProviderStatus['availableBackends']>[number]
|
||||
): string | null {
|
||||
|
|
@ -78,7 +124,47 @@ export function getOptionDisplayLabel(
|
|||
return 'Auto';
|
||||
}
|
||||
|
||||
export function getProviderRuntimeBackendSummary(provider: CliProviderStatus): string | null {
|
||||
function getOptionSummaryDisplayLabel(
|
||||
provider: CliProviderStatus,
|
||||
option: NonNullable<CliProviderStatus['availableBackends']>[number],
|
||||
resolvedOption: NonNullable<CliProviderStatus['availableBackends']>[number] | null,
|
||||
text: ProviderRuntimeBackendSummaryText
|
||||
): string {
|
||||
if (option.id !== 'auto') {
|
||||
return getOptionDisplayLabel(provider, option, resolvedOption);
|
||||
}
|
||||
if (resolvedOption?.label) {
|
||||
return text.autoCurrently(resolvedOption.label);
|
||||
}
|
||||
return text.auto;
|
||||
}
|
||||
|
||||
function getProviderRuntimeBackendStateSummaryLabel(
|
||||
option: NonNullable<CliProviderStatus['availableBackends']>[number],
|
||||
text: ProviderRuntimeBackendSummaryText
|
||||
): string | null {
|
||||
switch (getProviderRuntimeBackendStateLabel(option)) {
|
||||
case 'Locked':
|
||||
return text.states.locked;
|
||||
case 'Disabled':
|
||||
return text.states.disabled;
|
||||
case 'Auth required':
|
||||
return text.states.authRequired;
|
||||
case 'Runtime missing':
|
||||
return text.states.runtimeMissing;
|
||||
case 'Degraded':
|
||||
return text.states.degraded;
|
||||
case 'Unavailable':
|
||||
return text.states.unavailable;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function getProviderRuntimeBackendSummary(
|
||||
provider: CliProviderStatus,
|
||||
text: ProviderRuntimeBackendSummaryText = DEFAULT_SUMMARY_TEXT
|
||||
): string | null {
|
||||
const options = provider.availableBackends ?? [];
|
||||
if (options.length === 0) {
|
||||
return null;
|
||||
|
|
@ -87,9 +173,11 @@ export function getProviderRuntimeBackendSummary(provider: CliProviderStatus): s
|
|||
const selectedBackendId = provider.selectedBackendId ?? options[0]?.id ?? '';
|
||||
const selectedOption = options.find((option) => option.id === selectedBackendId) ?? options[0];
|
||||
const resolvedOption = options.find((option) => option.id === provider.resolvedBackendId) ?? null;
|
||||
const parts = [getOptionDisplayLabel(provider, selectedOption, resolvedOption)];
|
||||
const audienceLabel = getProviderRuntimeBackendAudienceLabel(selectedOption);
|
||||
const stateLabel = getProviderRuntimeBackendStateLabel(selectedOption);
|
||||
const parts = [getOptionSummaryDisplayLabel(provider, selectedOption, resolvedOption, text)];
|
||||
const audienceLabel = getProviderRuntimeBackendAudienceLabel(selectedOption)
|
||||
? text.audienceInternal
|
||||
: null;
|
||||
const stateLabel = getProviderRuntimeBackendStateSummaryLabel(selectedOption, text);
|
||||
|
||||
if (audienceLabel) {
|
||||
parts.push(audienceLabel.toLowerCase());
|
||||
|
|
@ -107,6 +195,7 @@ export const ProviderRuntimeBackendSelector = ({
|
|||
onSelect,
|
||||
}: Props): React.JSX.Element | null => {
|
||||
const { t } = useAppTranslation('common');
|
||||
const summaryText = buildProviderRuntimeBackendSummaryText(t);
|
||||
const options = getVisibleProviderRuntimeBackendOptions(provider);
|
||||
if (options.length === 0) {
|
||||
return null;
|
||||
|
|
@ -150,9 +239,9 @@ export const ProviderRuntimeBackendSelector = ({
|
|||
): string => {
|
||||
if (option.id === 'auto') {
|
||||
if (resolvedOption?.label) {
|
||||
return t('runtimeBackendSelector.autoCurrently', { backend: resolvedOption.label });
|
||||
return summaryText.autoCurrently(resolvedOption.label);
|
||||
}
|
||||
return t('runtimeBackendSelector.auto');
|
||||
return summaryText.auto;
|
||||
}
|
||||
return getOptionDisplayLabel(provider, option, resolvedOption);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import {
|
|||
isConnectionManagedRuntimeProvider,
|
||||
} from './providerConnectionUi';
|
||||
import {
|
||||
buildProviderRuntimeBackendSummaryText,
|
||||
getProviderRuntimeBackendSummary,
|
||||
getVisibleProviderRuntimeBackendOptions,
|
||||
ProviderRuntimeBackendSelector,
|
||||
|
|
@ -792,6 +793,11 @@ export const ProviderRuntimeSettingsDialog = ({
|
|||
onRequestLogin,
|
||||
}: Props): React.JSX.Element => {
|
||||
const { t } = useAppTranslation('settings');
|
||||
const { t: commonT } = useAppTranslation('common');
|
||||
const runtimeBackendSummaryText = useMemo(
|
||||
() => buildProviderRuntimeBackendSummaryText(commonT),
|
||||
[commonT]
|
||||
);
|
||||
const [selectedProviderId, setSelectedProviderId] = useState<CliProviderId>(initialProviderId);
|
||||
const [activeApiKeyFormProviderId, setActiveApiKeyFormProviderId] =
|
||||
useState<ApiKeyProviderId | null>(null);
|
||||
|
|
@ -987,7 +993,7 @@ export const ProviderRuntimeSettingsDialog = ({
|
|||
? providerStatusLoading[selectedProvider.providerId] === true
|
||||
: false;
|
||||
const runtimeSummary = selectedProvider
|
||||
? getProviderRuntimeBackendSummary(selectedProvider)
|
||||
? getProviderRuntimeBackendSummary(selectedProvider, runtimeBackendSummaryText)
|
||||
: null;
|
||||
const codexConnection =
|
||||
selectedProvider?.providerId === 'codex' ? (selectedProvider.connection?.codex ?? null) : null;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ import {
|
|||
shouldShowProviderStatusSkeleton,
|
||||
} from '@renderer/components/runtime/providerConnectionUi';
|
||||
import { ProviderModelBadges } from '@renderer/components/runtime/ProviderModelBadges';
|
||||
import { getProviderRuntimeBackendSummary } from '@renderer/components/runtime/ProviderRuntimeBackendSelector';
|
||||
import {
|
||||
buildProviderRuntimeBackendSummaryText,
|
||||
getProviderRuntimeBackendSummary,
|
||||
} from '@renderer/components/runtime/ProviderRuntimeBackendSelector';
|
||||
import { ProviderRuntimeSettingsDialog } from '@renderer/components/runtime/ProviderRuntimeSettingsDialog';
|
||||
import {
|
||||
getProviderTerminalCommand,
|
||||
|
|
@ -129,6 +132,11 @@ function getProviderLabel(providerId: CliProviderId): string {
|
|||
|
||||
export const CliStatusSection = (): React.JSX.Element | null => {
|
||||
const { t } = useAppTranslation('settings');
|
||||
const { t: commonT } = useAppTranslation('common');
|
||||
const runtimeBackendSummaryText = useMemo(
|
||||
() => buildProviderRuntimeBackendSummaryText(commonT),
|
||||
[commonT]
|
||||
);
|
||||
const isElectron = useMemo(() => isElectronMode(), []);
|
||||
const appConfig = useStore((s) => s.appConfig);
|
||||
const selectedProjectId = useStore((s) => s.selectedProjectId);
|
||||
|
|
@ -493,7 +501,7 @@ export const CliStatusSection = (): React.JSX.Element | null => {
|
|||
isCodexSnapshotPending(provider, codexSnapshotPending);
|
||||
const runtimeSummary = isConnectionManagedRuntimeProvider(provider)
|
||||
? getProviderCurrentRuntimeSummary(provider, t)
|
||||
: getProviderRuntimeBackendSummary(provider);
|
||||
: getProviderRuntimeBackendSummary(provider, runtimeBackendSummaryText);
|
||||
const sourceProvider =
|
||||
loadingCliProviderMap.get(provider.providerId) ?? null;
|
||||
const maskNegativeBootstrapState = shouldMaskCodexNegativeBootstrapState(
|
||||
|
|
|
|||
|
|
@ -141,9 +141,14 @@ const TeamLogsSourceSelector = ({
|
|||
getMemberLabel={(member) =>
|
||||
isLeadMember(member)
|
||||
? t('claudeLogs.sourceSelect.leadLabel')
|
||||
: formatMemberLogSourceLabel(member)
|
||||
: formatMemberLogSourceLabel(member, t('claudeLogs.sourceSelect.removedLabel'))
|
||||
}
|
||||
getMemberDescription={(member) =>
|
||||
formatMemberLogSourceDescription(member, {
|
||||
lead: t('claudeLogs.sourceSelect.leadDescription'),
|
||||
removed: t('claudeLogs.sourceSelect.removedDescription'),
|
||||
})
|
||||
}
|
||||
getMemberDescription={formatMemberLogSourceDescription}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1159,14 +1159,16 @@ const LeadLoadBridge = memo(function LeadLoadBridge({
|
|||
{t('detail.context.title')}
|
||||
</p>
|
||||
<p className="text-[10px] text-[var(--color-text-muted)]">
|
||||
{leadSessionLoading ? 'Loading…' : 'No session loaded'}
|
||||
{leadSessionLoading
|
||||
? t('detail.context.loading')
|
||||
: t('detail.context.noSessionLoaded')}
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
className="rounded p-1 text-[var(--color-text-muted)] transition-colors hover:bg-[var(--color-surface-raised)] hover:text-[var(--color-text)]"
|
||||
onClick={() => setContextPanelVisible(false)}
|
||||
aria-label={`Close ${teamName} context panel`}
|
||||
aria-label={t('detail.context.closePanel', { team: teamName })}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
|
|
@ -1174,8 +1176,8 @@ const LeadLoadBridge = memo(function LeadLoadBridge({
|
|||
<div className="flex flex-1 items-center justify-center p-4">
|
||||
<p className="text-xs text-[var(--color-text-muted)]">
|
||||
{leadSessionLoading
|
||||
? 'Loading context…'
|
||||
: 'Open the team lead session to view context.'}
|
||||
? t('detail.context.loadingContext')
|
||||
: t('detail.context.openLeadSession')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1208,7 +1210,7 @@ const LeadLoadBridge = memo(function LeadLoadBridge({
|
|||
leadSessionLoaded
|
||||
? `Session: ${leadSessionId}`
|
||||
: leadSessionLoading
|
||||
? 'Loading context…'
|
||||
? t('detail.context.loadingContext')
|
||||
: leadSessionId
|
||||
}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,11 @@ export const ActiveTasksBlock = memo(function ActiveTasksBlock({
|
|||
type="button"
|
||||
className="flex min-w-0 items-center gap-1.5 text-[10px] font-medium uppercase tracking-wide text-[var(--color-text-muted)] transition-colors hover:text-[var(--color-text-secondary)]"
|
||||
onClick={() => setCollapsed((v) => !v)}
|
||||
aria-label={collapsed ? 'Expand in progress' : 'Collapse in progress'}
|
||||
aria-label={
|
||||
collapsed
|
||||
? t('activity.activeTasks.expandInProgress')
|
||||
: t('activity.activeTasks.collapseInProgress')
|
||||
}
|
||||
>
|
||||
<ChevronRight
|
||||
size={10}
|
||||
|
|
@ -106,7 +110,10 @@ export const ActiveTasksBlock = memo(function ActiveTasksBlock({
|
|||
);
|
||||
const dotPing = kind === 'reviewing' ? 'bg-amber-400' : 'bg-emerald-400';
|
||||
const dotSolid = kind === 'reviewing' ? 'bg-amber-500' : 'bg-emerald-500';
|
||||
const activityLabel = kind === 'reviewing' ? 'reviewing' : 'working on';
|
||||
const activityLabel =
|
||||
kind === 'reviewing'
|
||||
? t('activity.activeTasks.reviewing')
|
||||
: t('activity.activeTasks.workingOn');
|
||||
|
||||
return (
|
||||
<article
|
||||
|
|
|
|||
|
|
@ -1225,12 +1225,14 @@ export const ActivityItem = memo(
|
|||
<AlertTriangle size={10} />
|
||||
{t('activity.badges.rateLimited')}
|
||||
</span>
|
||||
) : isApiError ? (
|
||||
<span className="inline-flex items-center gap-1 rounded-full bg-red-500/20 px-1.5 py-0.5 text-[10px] font-medium text-red-400">
|
||||
<AlertTriangle size={10} />
|
||||
{message.messageKind === 'agent_error' ? 'Agent Error' : 'API Error'}
|
||||
</span>
|
||||
) : null;
|
||||
) : isApiError ? (
|
||||
<span className="inline-flex items-center gap-1 rounded-full bg-red-500/20 px-1.5 py-0.5 text-[10px] font-medium text-red-400">
|
||||
<AlertTriangle size={10} />
|
||||
{message.messageKind === 'agent_error'
|
||||
? t('activity.badges.agentError')
|
||||
: t('activity.badges.apiError')}
|
||||
</span>
|
||||
) : null;
|
||||
|
||||
const recipientBadge =
|
||||
commentTaskRef && commentTaskDisplayId ? (
|
||||
|
|
|
|||
|
|
@ -128,7 +128,11 @@ export const CodexReconnectPrompt = ({
|
|||
}}
|
||||
>
|
||||
<LogIn className="size-3" />
|
||||
{reconnectBusy ? 'Generating...' : authUrl ? 'Open login' : 'Generate link'}
|
||||
{reconnectBusy
|
||||
? t('codexReconnect.generating')
|
||||
: authUrl
|
||||
? t('codexReconnect.openLogin')
|
||||
: t('codexReconnect.generateLink')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { useState } from 'react';
|
||||
|
||||
import { useAppTranslation } from '@features/localization/renderer';
|
||||
import { Button } from '@renderer/components/ui/button';
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
|
||||
import { cn } from '@renderer/lib/utils';
|
||||
|
|
@ -24,6 +25,7 @@ export const MemberLaunchDiagnosticsButton = ({
|
|||
size = label ? 'sm' : 'icon',
|
||||
attention = false,
|
||||
}: MemberLaunchDiagnosticsButtonProps): React.JSX.Element => {
|
||||
const { t } = useAppTranslation('team');
|
||||
const [copied, setCopied] = useState(false);
|
||||
|
||||
const copyDiagnostics = async (event: React.MouseEvent<HTMLButtonElement>): Promise<void> => {
|
||||
|
|
@ -39,7 +41,7 @@ export const MemberLaunchDiagnosticsButton = ({
|
|||
};
|
||||
|
||||
const icon = copied ? <Check size={13} /> : <ClipboardList size={13} />;
|
||||
const tooltip = copied ? 'Diagnostics copied' : 'Copy diagnostics';
|
||||
const tooltip = copied ? t('provisioning.diagnosticsCopied') : t('provisioning.copyDiagnostics');
|
||||
|
||||
return (
|
||||
<Tooltip>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { useState } from 'react';
|
||||
|
||||
import { useAppTranslation } from '@features/localization/renderer';
|
||||
import { RoleSelect } from '@renderer/components/team/RoleSelect';
|
||||
import { Button } from '@renderer/components/ui/button';
|
||||
import { CUSTOM_ROLE, FORBIDDEN_ROLES, NO_ROLE, PRESET_ROLES } from '@renderer/constants/teamRoles';
|
||||
|
|
@ -18,6 +19,7 @@ export const MemberRoleEditor = ({
|
|||
onCancel,
|
||||
saving,
|
||||
}: MemberRoleEditorProps): React.JSX.Element => {
|
||||
const { t } = useAppTranslation('team');
|
||||
const isPreset = currentRole && (PRESET_ROLES as readonly string[]).includes(currentRole);
|
||||
const [selectValue, setSelectValue] = useState<string>(
|
||||
!currentRole ? NO_ROLE : isPreset ? currentRole : CUSTOM_ROLE
|
||||
|
|
@ -44,11 +46,11 @@ export const MemberRoleEditor = ({
|
|||
}
|
||||
const trimmed = customInput.trim();
|
||||
if (!trimmed) {
|
||||
setError('Role cannot be empty');
|
||||
setError(t('roleSelect.emptyCustomRole'));
|
||||
return;
|
||||
}
|
||||
if (FORBIDDEN_ROLES.has(trimmed.toLowerCase())) {
|
||||
setError('This role is reserved');
|
||||
setError(t('roleSelect.reservedRole'));
|
||||
return;
|
||||
}
|
||||
void onSave(trimmed);
|
||||
|
|
@ -68,7 +70,7 @@ export const MemberRoleEditor = ({
|
|||
inputClassName="h-7 w-28 text-xs"
|
||||
customRoleError={error}
|
||||
onCustomRoleValidate={(val) => {
|
||||
if (FORBIDDEN_ROLES.has(val.trim().toLowerCase())) return 'This role is reserved';
|
||||
if (FORBIDDEN_ROLES.has(val.trim().toLowerCase())) return t('roleSelect.reservedRole');
|
||||
return null;
|
||||
}}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -26,13 +26,19 @@ export function getMemberNameFromLogSourceKey(sourceKey: TeamLogSourceKey): stri
|
|||
return sourceKey.slice('member:'.length);
|
||||
}
|
||||
|
||||
export function formatMemberLogSourceLabel(member: ResolvedTeamMember): string {
|
||||
return member.removedAt ? `${member.name} (removed)` : member.name;
|
||||
export function formatMemberLogSourceLabel(member: ResolvedTeamMember, removedLabel = 'removed'): string {
|
||||
return member.removedAt ? `${member.name} (${removedLabel})` : member.name;
|
||||
}
|
||||
|
||||
export function formatMemberLogSourceDescription(member: ResolvedTeamMember): string | null {
|
||||
if (isLeadMember(member)) return 'Team Lead';
|
||||
if (member.removedAt) return 'Removed';
|
||||
export function formatMemberLogSourceDescription(
|
||||
member: ResolvedTeamMember,
|
||||
labels?: {
|
||||
lead?: string;
|
||||
removed?: string;
|
||||
}
|
||||
): string | null {
|
||||
if (isLeadMember(member)) return labels?.lead ?? 'Team Lead';
|
||||
if (member.removedAt) return labels?.removed ?? 'Removed';
|
||||
return formatAgentRole(member.role) ?? formatAgentRole(member.agentType) ?? null;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue