fix(i18n): cover missing ui translations

This commit is contained in:
777genius 2026-05-28 18:36:34 +03:00
parent d35f03b396
commit 371bf948c2
87 changed files with 2362 additions and 429 deletions

View file

@ -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,

View file

@ -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),

View file

@ -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 />

View file

@ -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/'}`;

View file

@ -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>

View file

@ -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>

View file

@ -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() {

View file

@ -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);

View file

@ -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>

View file

@ -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 "";

View file

@ -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": "التوثيق"
}
},

View file

@ -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": "নথিপত্র"
}
},

View file

@ -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"
}
},

View file

@ -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"
}
},

View file

@ -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"
}
},

View file

@ -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"
}
},

View file

@ -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": "दस्तावेज़"
}
},

View file

@ -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"
}
},

View file

@ -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": "ドキュメント"
}
},

View file

@ -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": "문서"
}
},

View file

@ -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"
}
},

View file

@ -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": "Документация"
}
},

View file

@ -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": "دستاویز"
}
},

View file

@ -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": "文档"
}
},

View file

@ -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,
@ -871,7 +878,8 @@ export class TeamGraphAdapter {
label:
edge.aggregateCount > 1 &&
(edge.source.includes(':overflow:') || edge.target.includes(':overflow:'))
? `${edge.aggregateCount} hidden blocking links`
? (text?.hiddenBlockingLinks(edge.aggregateCount) ??
`${edge.aggregateCount} hidden blocking links`)
: undefined,
}))
);

View file

@ -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(() => {

View file

@ -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>

View file

@ -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 ? (

View file

@ -589,7 +589,11 @@
"actions": {
"add": "مضافا إليها API المفتاح",
"addFirst": "أضف مفتاحك الأول",
"edit": "Edit"
"edit": "Edit",
"copied": "تم النسخ!",
"copyEnvVarName": "نسخ اسم متغير env",
"confirmDelete": "انقر مرة أخرى للتأكيد",
"delete": "حذف"
},
"empty": {
"title": "لا API المفاتيح الموفرة",

View file

@ -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}}",

View file

@ -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": "لا يمكن أن يكون الدور فارغا"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "যোগ করুন API কি",
"addFirst": "প্রথমে কি যোগ করুন",
"edit": "সম্পাদনা"
"edit": "সম্পাদনা",
"copied": "কপি হয়েছে!",
"copyEnvVarName": "Env var name copy করুন",
"confirmDelete": "Confirm করতে আবার ক্লিক করুন",
"delete": "Delete"
},
"empty": {
"title": "না API সংরক্ষিত কি",

View file

@ -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}}",

View file

@ -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 খালি হতে পারে না"
}
}

View file

@ -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",

View file

@ -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}}",

View file

@ -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"
}
}

View file

@ -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",

View file

@ -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.",

View file

@ -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"
}
}

View file

@ -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",

View file

@ -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}}",

View file

@ -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"
}
}

View file

@ -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",

View file

@ -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}}",

View file

@ -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"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "API कुंजी जोड़ें",
"addFirst": "अपनी पहली कुंजी जोड़ें",
"edit": "संपादित करें"
"edit": "संपादित करें",
"copied": "कॉपी हो गया!",
"copyEnvVarName": "Env var name copy करें",
"confirmDelete": "Confirm करने के लिए फिर क्लिक करें",
"delete": "Delete"
},
"empty": {
"title": "No API कुंजी बचाया",

View file

@ -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}}",

View file

@ -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 खाली नहीं हो सकती"
}
}

View file

@ -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",

View file

@ -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}}",

View file

@ -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"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "APIキーを追加",
"addFirst": "最初のキーを追加",
"edit": "編集"
"edit": "編集",
"copied": "コピーしました!",
"copyEnvVarName": "環境変数名をコピー",
"confirmDelete": "もう一度クリックして確認",
"delete": "削除"
},
"empty": {
"title": "保存されるAPIキー無し",

View file

@ -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}}",

View file

@ -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": "ロールを空にすることはできません"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "API 키 추가",
"addFirst": "첫 키 추가",
"edit": "제품정보"
"edit": "제품정보",
"copied": "복사됨!",
"copyEnvVarName": "환경 변수 이름 복사",
"confirmDelete": "다시 클릭하여 확인",
"delete": "삭제"
},
"empty": {
"title": "저장되는 API 열쇠 없음",

View file

@ -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}}",

View file

@ -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": "역할은 비워 둘 수 없습니다"
}
}

View file

@ -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",

View file

@ -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}}",

View file

@ -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"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "Добавить API key",
"addFirst": "Добавить первый key",
"edit": "Редактировать"
"edit": "Редактировать",
"copied": "Скопировано!",
"copyEnvVarName": "Копировать имя env-переменной",
"confirmDelete": "Нажмите еще раз для подтверждения",
"delete": "Удалить"
},
"empty": {
"title": "API keys не сохранены",

View file

@ -46,7 +46,8 @@
"copiedShort": "Скопировано",
"copy": "Скопировать diagnostics",
"hints": "Подсказки",
"likelyCause": "Вероятная причина:"
"likelyCause": "Вероятная причина:",
"windowsSymlinkAdminHint": "Windows: запустите Agent Teams AI от имени администратора"
},
"models": {
"alreadyDefault": "Это уже выбранный OpenCode default.",

View file

@ -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": "Роль не может быть пустой"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "شامل کریں API کلید",
"addFirst": "اپنی پہلی کلید کو شامل کریں",
"edit": "مرتب"
"edit": "مرتب",
"copied": "Copy ہو گیا!",
"copyEnvVarName": "Env var name copy کریں",
"confirmDelete": "Confirm کے لیے دوبارہ کلک کریں",
"delete": "Delete"
},
"empty": {
"title": "نہیں API کلید محفوظ کریں",

View file

@ -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}}",

View file

@ -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 خالی نہیں ہو سکتی"
}
}

View file

@ -589,7 +589,11 @@
"actions": {
"add": "添加 API 密钥",
"addFirst": "添加您的第一个密钥",
"edit": "编辑"
"edit": "编辑",
"copied": "已复制!",
"copyEnvVarName": "复制环境变量名",
"confirmDelete": "再次点击确认",
"delete": "删除"
},
"empty": {
"title": "没有保存 ZXCVKEN0ZXCV 密钥",

View file

@ -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}}",

View file

@ -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": "角色不能为空"
}
}

View file

@ -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: {

View file

@ -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>

View file

@ -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,

View file

@ -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(

View file

@ -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);

View file

@ -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>

View file

@ -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);
};

View file

@ -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;

View file

@ -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(

View file

@ -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>
);

View file

@ -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
}
>

View file

@ -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

View file

@ -1228,7 +1228,9 @@ export const ActivityItem = memo(
) : 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'}
{message.messageKind === 'agent_error'
? t('activity.badges.agentError')
: t('activity.badges.apiError')}
</span>
) : null;

View file

@ -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>

View file

@ -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>

View file

@ -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;
}}
/>

View file

@ -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;
}