diff --git a/next.config.ts b/next.config.ts index 33648b1..e8b885f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -9,7 +9,18 @@ const withNextIntl = createNextIntlPlugin({ messages: { path: "./src/i18n/messages", format: "json", - locales: ["en", "zh-CN", "zh-TW"], + locales: [ + "en", + "zh-CN", + "zh-TW", + "ja", + "ko", + "es", + "de", + "fr", + "pt", + "ar", + ], precompile: true, }, }, diff --git a/src-tauri/src/models/system.rs b/src-tauri/src/models/system.rs index 8b5a9e6..fb2412d 100644 --- a/src-tauri/src/models/system.rs +++ b/src-tauri/src/models/system.rs @@ -13,6 +13,13 @@ pub enum AppLocale { En, ZhCn, ZhTw, + Ja, + Ko, + Es, + De, + Fr, + Pt, + Ar, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)] diff --git a/src/components/i18n-provider.tsx b/src/components/i18n-provider.tsx index b5a9ad5..a521fcb 100644 --- a/src/components/i18n-provider.tsx +++ b/src/components/i18n-provider.tsx @@ -239,6 +239,7 @@ export function AppI18nProvider({ useEffect(() => { document.documentElement.lang = activeIntlLocale + document.documentElement.dir = activeIntlLocale === "ar" ? "rtl" : "ltr" }, [activeIntlLocale]) const contextValue = useMemo( diff --git a/src/components/settings/system-network-settings.tsx b/src/components/settings/system-network-settings.tsx index c0b0fd1..b90b8b0 100644 --- a/src/components/settings/system-network-settings.tsx +++ b/src/components/settings/system-network-settings.tsx @@ -36,9 +36,10 @@ import { normalizeAppUpdateError, relaunchApp, } from "@/lib/updater" +import { APP_LOCALES } from "@/lib/i18n" const PROXY_EXAMPLE = "http://127.0.0.1:7890" -const APP_LANGUAGE_VALUES = ["en", "zh_cn", "zh_tw"] as const +const APP_LANGUAGE_VALUES = APP_LOCALES type LanguageSelectValue = "system" | AppLocale @@ -83,6 +84,13 @@ export function SystemNetworkSettings() { en: tLanguage("english"), zh_cn: tLanguage("simplifiedChinese"), zh_tw: tLanguage("traditionalChinese"), + ja: tLanguage("japanese"), + ko: tLanguage("korean"), + es: tLanguage("spanish"), + de: tLanguage("german"), + fr: tLanguage("french"), + pt: tLanguage("portuguese"), + ar: tLanguage("arabic"), }), [tLanguage] ) @@ -362,6 +370,13 @@ export function SystemNetworkSettings() { {languageLabels.en} {languageLabels.zh_cn} {languageLabels.zh_tw} + {languageLabels.ja} + {languageLabels.ko} + {languageLabels.es} + {languageLabels.de} + {languageLabels.fr} + {languageLabels.pt} + {languageLabels.ar} diff --git a/src/i18n/global.d.ts b/src/i18n/global.d.ts index 3bb6d65..3c5a7c0 100644 --- a/src/i18n/global.d.ts +++ b/src/i18n/global.d.ts @@ -2,7 +2,17 @@ import type enMessages from "@/i18n/messages/en.json" declare module "next-intl" { interface AppConfig { - Locale: "en" | "zh-CN" | "zh-TW" + Locale: + | "en" + | "zh-CN" + | "zh-TW" + | "ja" + | "ko" + | "es" + | "de" + | "fr" + | "pt" + | "ar" Messages: typeof enMessages } } diff --git a/src/i18n/messages.ts b/src/i18n/messages.ts index 807a09a..5738b93 100644 --- a/src/i18n/messages.ts +++ b/src/i18n/messages.ts @@ -12,6 +12,20 @@ async function loadMessages(locale: AppLocale): Promise { return (await import("@/i18n/messages/zh-CN.json")).default case "zh_tw": return (await import("@/i18n/messages/zh-TW.json")).default + case "ja": + return (await import("@/i18n/messages/ja.json")).default + case "ko": + return (await import("@/i18n/messages/ko.json")).default + case "es": + return (await import("@/i18n/messages/es.json")).default + case "de": + return (await import("@/i18n/messages/de.json")).default + case "fr": + return (await import("@/i18n/messages/fr.json")).default + case "pt": + return (await import("@/i18n/messages/pt.json")).default + case "ar": + return (await import("@/i18n/messages/ar.json")).default case "en": default: return enMessages diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json new file mode 100644 index 0000000..2c83cf2 --- /dev/null +++ b/src/i18n/messages/ar.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "اتباع النظام", + "english": "الإنجليزية", + "simplifiedChinese": "الصينية المبسطة", + "traditionalChinese": "الصينية التقليدية", + "japanese": "اليابانية", + "korean": "الكورية", + "spanish": "الإسبانية", + "german": "الألمانية", + "french": "الفرنسية", + "portuguese": "البرتغالية", + "arabic": "العربية" + }, + "WelcomePage": { + "title": "مرحبًا بك في Codeg", + "openSettings": "فتح الإعدادات", + "searchPlaceholder": "ابحث في المجلدات...", + "loading": "جارٍ التحميل...", + "emptyFolders": "لا توجد مجلدات بعد", + "removeFromHistory": "إزالة من السجل", + "openFolder": "فتح مجلد", + "cloneRepository": "استنساخ المستودع", + "softwareVersion": "الإصدار {version}", + "toasts": { + "loadFolderHistoryFailed": "فشل تحميل سجل المجلدات", + "openFolderFailed": "فشل فتح المجلد", + "removeFromHistoryFailed": "فشل إزالة المجلد من السجل", + "openSettingsFailed": "فشل فتح الإعدادات", + "cloneFailed": "فشل استنساخ المستودع" + }, + "errors": { + "unknown": "حدث خطأ غير متوقع", + "invalidInput": "إدخال غير صالح.", + "notFound": "المورد غير موجود.", + "alreadyExists": "المورد موجود بالفعل.", + "dependencyMissing": "هناك اعتماد مطلوب مفقود.", + "databaseError": "فشلت عملية قاعدة البيانات.", + "ioError": "فشلت عملية الملف.", + "externalCommandFailed": "فشل تنفيذ الأمر الخارجي.", + "windowOperationFailed": "فشلت عملية النافذة.", + "gitNotInstalled": "Git غير مثبت. يرجى تثبيت Git أولًا.", + "targetDirectoryNotEmpty": "مجلد الهدف موجود بالفعل وليس فارغًا.", + "repositoryNotFound": "المستودع غير موجود. تحقق من الرابط وصلاحيات الوصول.", + "networkUnavailable": "الشبكة غير متاحة. تحقق من الاتصال وحاول مرة أخرى.", + "authenticationFailed": "فشلت المصادقة. تحقق من بيانات الاعتماد أو مفتاح SSH.", + "permissionDenied": "تم رفض الإذن. تحقق من صلاحيات المجلد." + }, + "cloneDialog": { + "title": "استنساخ مستودع", + "repositoryUrl": "رابط المستودع", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "المجلد", + "directoryPlaceholder": "اختر مجلد الهدف...", + "browseDirectory": "تصفح المجلد", + "cancel": "إلغاء", + "clone": "استنساخ" + } + }, + "SettingsShell": { + "title": "الإعدادات", + "preferences": "التفضيلات", + "nav": { + "appearance": "المظهر", + "agents": "الوكلاء", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "الاختصارات", + "system": "النظام" + } + }, + "AppearanceSettings": { + "sectionTitle": "مظهر السمة", + "sectionDescription": "اختر الفاتح أو الداكن أو اتباع النظام. يتم حفظ الإعدادات تلقائيًا.", + "themeMode": "وضع السمة", + "placeholder": "اختر وضع السمة", + "system": "اتباع النظام", + "light": "فاتح", + "dark": "داكن", + "currentTheme": "السمة الفعالة الحالية: {theme}", + "resolvedTheme": { + "light": "فاتح", + "dark": "داكن", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "جارٍ التحميل...", + "sectionTitle": "إدارة النظام", + "sectionDescription": "إدارة وكيل الشبكة وتحديثات التطبيق وتفضيلات اللغة.", + "proxyTitle": "وكيل الشبكة", + "proxyDescription": "عند التفعيل، ستُفضَّل إعدادات هذا الوكيل في طلبات الشبكة اللاحقة (بما في ذلك دردشة ACP وتثبيت الوكلاء وعمليات Git البعيدة).", + "loadFailed": "فشل التحميل: {message}", + "enableProxy": "تفعيل وكيل النظام", + "proxyAddress": "عنوان الوكيل", + "proxyHint": "يدعم http(s)/socks5، مثال: {example}. يعمل فقط عند تفعيل وكيل النظام.", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "proxyRequired": "عنوان URL للوكيل مطلوب عند تفعيل الوكيل", + "saveSuccess": "تم حفظ إعدادات وكيل النظام", + "saveFailed": "فشل الحفظ: {message}", + "languageTitle": "اللغة", + "languageDescription": "حدد لغة التطبيق. عند اتباع لغة النظام، ستعود اللغات غير المدعومة إلى الإنجليزية.", + "appLanguage": "لغة التطبيق", + "languageSaveSuccess": "تم حفظ إعدادات اللغة", + "languageSaveFailed": "فشل حفظ إعدادات اللغة: {message}", + "updateTitle": "تحديث التطبيق", + "updateDescription": "تحقق من المصدر المهيأ للإصدارات الأحدث وثبّت التحديث مباشرة عند توفره.", + "currentVersion": "الإصدار الحالي", + "upgradableVersion": "الإصدار المتاح", + "none": "لا يوجد", + "lastChecked": "آخر فحص: {time}", + "updateError": "خطأ في التحديث: {message}", + "checking": "جارٍ التحقق...", + "checkUpdate": "التحقق من التحديثات", + "updating": "جارٍ التثبيت...", + "upgradeTo": "الترقية إلى v{version}", + "foundUpdate": "تم العثور على إصدار جديد v{version}", + "alreadyLatest": "أنت على أحدث إصدار", + "checkUpdateFailed": "فشل التحقق من التحديثات: {message}", + "installSuccess": "تم تثبيت التحديث. جارٍ إعادة تشغيل التطبيق.", + "installFailed": "فشل التحديث: {message}", + "updateErrors": { + "sourceUnavailable": "تعذر الوصول إلى مصدر التحديث. تحقق من الشبكة أو الوكيل ثم أعد المحاولة.", + "network": "فشل اتصال الشبكة. تحقق من الشبكة أو الوكيل ثم أعد المحاولة.", + "downloadFailed": "فشل تنزيل حزمة التحديث. يرجى المحاولة مرة أخرى لاحقًا.", + "installFailed": "فشل تثبيت التحديث. يرجى إغلاق التطبيق ثم إعادة المحاولة.", + "unknown": "فشل التحديث. يرجى المحاولة مرة أخرى لاحقًا." + } + }, + "ShortcutSettings": { + "sectionTitle": "الاختصارات", + "resetDefault": "استعادة الإعدادات الافتراضية", + "recordInstruction": "انقر الزر في الجهة اليمنى ثم اضغط تركيبة مفاتيح. استخدم Ctrl/Cmd وAlt وShift. اضغط Esc لإلغاء التسجيل.", + "recording": "اضغط اختصارًا...", + "toasts": { + "conflict": "الاختصار مستخدم بالفعل بواسطة \"{title}\"", + "updated": "تم تحديث الاختصار", + "invalid": "اختصار غير صالح، يرجى المحاولة مرة أخرى", + "reset": "تمت استعادة الاختصارات الافتراضية" + }, + "actions": { + "toggle_search": { + "title": "فتح البحث", + "description": "إظهار أو إخفاء لوحة البحث في المحادثات" + }, + "toggle_sidebar": { + "title": "تبديل الشريط الجانبي الأيسر", + "description": "إظهار أو إخفاء الشريط الجانبي لقائمة المحادثات" + }, + "toggle_terminal": { + "title": "تبديل الطرفية", + "description": "إظهار أو إخفاء لوحة الطرفية السفلية" + }, + "new_terminal_tab": { + "title": "طرفية جديدة", + "description": "إنشاء تبويب طرفية جديد عندما يكون التركيز على الطرفية" + }, + "close_current_terminal_tab": { + "title": "إغلاق الطرفية الحالية", + "description": "إغلاق تبويب الطرفية الحالي عندما يكون التركيز على الطرفية" + }, + "toggle_aux_panel": { + "title": "تبديل اللوحة اليمنى", + "description": "إظهار أو إخفاء لوحة المعلومات المساعدة" + }, + "new_conversation": { + "title": "محادثة جديدة", + "description": "إنشاء تبويب محادثة جديد في المجلد الحالي" + }, + "open_folder": { + "title": "فتح مجلد", + "description": "فتح منتقي المجلدات وفتح المجلد في نافذة جديدة" + }, + "open_settings": { + "title": "فتح الإعدادات", + "description": "فتح نافذة الإعدادات" + }, + "close_current_tab": { + "title": "إغلاق التبويب الحالي", + "description": "إغلاق المحادثة الحالية أو تبويب الملف الحالي" + }, + "close_all_file_tabs": { + "title": "إغلاق جميع تبويبات الملفات", + "description": "إغلاق جميع تبويبات الملفات في وضع الملفات فقط" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "اختر Skill من الجهة اليسرى. تعرض الجهة اليمنى معاينة Markdown بشكل افتراضي؛ انتقل إلى وضع التحرير للتعديل والحفظ.", + "loadingAgents": "جارٍ تحميل الوكلاء الذين يدعمون Skills...", + "emptyNoManageableAgents": "لا توجد وكلاء متاحة لإدارة Skills.", + "managedTarget": "الهدف المُدار", + "selectAgentPlaceholder": "اختر وكيلًا", + "searchPlaceholder": "ابحث بالاسم / المعرّف / المسار...", + "skillsList": "قائمة Skills", + "loadingSkills": "جارٍ تحميل Skills...", + "agentNotSupported": "الوكيل الحالي لا يدعم إدارة Skills.", + "emptySkills": "لا توجد Skills بعد. انقر \"Skill جديدة\" لإنشاء واحدة.", + "newSkillTitle": "Skill جديدة", + "skillInfo": "معلومات Skill", + "skillIdPlaceholder": "skill-id (حروف/أرقام/-/_/.)", + "skillsDirectoryWithPath": "دليل Skills: {path}", + "skillsDirectoryNeedId": "دليل Skills: أدخل معرّف Skill لإنشاء المسار الكامل", + "markdownContent": "محتوى Markdown", + "editingStatus": "جارٍ التحرير", + "previewStatus": "معاينة", + "contentPlaceholder": "أدخل محتوى Markdown للSkill...", + "metadataTitle": "بيانات Skills الوصفية", + "onlyYamlMetadata": "تحتوي هذه Skill على بيانات YAML الوصفية فقط.", + "emptyContentHint": "لا يوجد محتوى بعد. انقر \"تحرير\" للبدء.", + "loadingSkill": "جارٍ تحميل Skill...", + "emptyNoAgents": "لا يوجد وكيل متاح.", + "actions": { + "preview": "معاينة", + "edit": "تحرير", + "openInWindow": "فتح في نافذة جديدة", + "delete": "حذف", + "deleting": "جارٍ الحذف...", + "refresh": "تحديث", + "newSkill": "Skill جديدة", + "reset": "إعادة تعيين", + "save": "حفظ", + "saving": "جارٍ الحفظ...", + "cancel": "إلغاء" + }, + "deleteDialog": { + "title": "حذف Skill", + "confirm": "هل تريد حذف Skill الحالية؟ لا يمكن التراجع عن هذا الإجراء.", + "confirmWithNamePrefix": "حذف Skill", + "confirmWithNameSuffix": "؟ لا يمكن التراجع عن هذا الإجراء." + }, + "toasts": { + "loadFailed": "فشل تحميل Skill", + "openFolderFailed": "فشل فتح المجلد", + "noSkillDirectory": "لم يتم العثور على دليل Skills متاح للوكيل الحالي", + "nameRequired": "لا يمكن أن يكون اسم Skill فارغًا", + "updated": "تم تحديث Skill", + "created": "تم إنشاء Skill", + "saveFailed": "فشل حفظ Skill", + "deleted": "تم حذف Skill", + "deleteFailed": "فشل حذف Skill" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "جارٍ التحميل...", + "summary": { + "missingCommand": "(لا يوجد أمر)", + "missingUrl": "(لا يوجد رابط)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "يرجى اختيار بروتوكول التثبيت", + "fieldRequired": "{field} مطلوب", + "fieldNeedsBoolean": "{field} يجب أن يكون true أو false", + "fieldNeedsNumber": "{field} يجب أن يكون رقمًا", + "fieldNeedsInteger": "{field} يجب أن يكون عددًا صحيحًا", + "fieldInvalidJson": "{field} يحتوي JSON غير صالح: {message}", + "fieldOutOfRange": "قيمة {field} خارج النطاق المسموح", + "jsonEmpty": "{name} لا يمكن أن يكون فارغًا", + "jsonInvalid": "{name} ليس JSON صالحًا: {message}", + "jsonMustBeObject": "{name} يجب أن يكون كائن JSON" + }, + "jsonNames": { + "localConfig": "إعداد MCP", + "installConfig": "إعداد التثبيت" + }, + "toasts": { + "uninstalled": "تمت إزالة MCP", + "uninstallFailed": "فشل الإزالة: {message}", + "selectAtLeastOneApp": "يرجى اختيار تطبيق هدف واحد على الأقل", + "saveSuccess": "تم الحفظ", + "saveFailed": "فشل الحفظ: {message}", + "installed": "تم تثبيت {name}", + "installFailed": "فشل التثبيت: {message}" + }, + "installDialog": { + "title": "تأكيد تثبيت MCP", + "descriptionWithName": "تثبيت {name} في الإعداد المحلي.", + "description": "اختر التطبيقات المستهدفة للتثبيت.", + "protocol": "البروتوكول", + "selectProtocol": "اختر البروتوكول", + "parameters": "معلمات الإعداد", + "booleanPlaceholder": "يرجى اختيار true/false", + "selectOneValue": "اختر قيمة", + "targetApps": "التطبيقات المستهدفة" + }, + "actions": { + "cancel": "إلغاء", + "confirmInstall": "تأكيد التثبيت", + "installing": "جارٍ التثبيت", + "uninstall": "إزالة التثبيت", + "uninstalling": "جارٍ الإزالة", + "viewDetails": "عرض التفاصيل", + "save": "حفظ", + "saving": "جارٍ الحفظ", + "install": "تثبيت" + }, + "tabs": { + "local": "MCP المحلي", + "market": "سوق MCP" + }, + "local": { + "filterPlaceholder": "تصفية MCP المحلي...", + "loadFailed": "فشل التحميل: {message}", + "empty": "لم يتم اكتشاف MCP محلي.", + "description": "يمكن تعديل إعداد MCP المحلي وحفظه مباشرة.", + "enabledApps": "التطبيقات المفعلة", + "configJson": "إعداد MCP (JSON)" + }, + "market": { + "selectMarketplace": "اختر السوق", + "searchPlaceholder": "ابحث عن MCP...", + "searchFailed": "فشل البحث: {message}", + "loadingList": "جارٍ تحميل قائمة MCP...", + "empty": "لا توجد نتائج MCP.", + "loadingDetail": "جارٍ تحميل تفاصيل السوق...", + "detailLoadFailed": "فشل تحميل التفاصيل: {message}", + "owner": "المالك: {owner}", + "namespace": "المجال: {namespace}", + "defaultInstallProtocol": "بروتوكول التثبيت الافتراضي", + "currentOptionParameterCount": "عدد معلمات الخيار الحالي: {count}", + "installConfigDescription": "إعداد التثبيت (JSON، قابل للتعديل قبل التثبيت؛ ستتجاوز التعديلات نموذج البروتوكول/المعلمات)", + "selectLeftToView": "اختر MCP من السوق في الجهة اليسرى لعرض التفاصيل." + }, + "badges": { + "verified": "موثّق", + "remote": "بعيد", + "hasHomepage": "له صفحة رئيسية", + "uses": "{count} استخدام", + "deployed": "منشور", + "notDeployed": "غير منشور" + }, + "selectLeftMcp": "اختر MCP من الجهة اليسرى." + }, + "AcpAgentSettings": { + "title": "إدارة Agent SDK", + "description": "أدر اتصال Agent SDK وحالة التمكين ومتغيرات البيئة وإدارة الإعدادات ومعلومات فحص الإصدار المسبق في مكان واحد.", + "loadingAgents": "جارٍ تحميل قائمة الوكلاء...", + "agentList": "قائمة الوكلاء", + "emptyNoAgent": "لا يوجد وكيل متاح.", + "configManagement": "إدارة الإعدادات", + "envVars": "متغيرات البيئة", + "nativeJsonConfig": "إعداد JSON أصلي", + "modelHintDefault": "اتركه فارغًا لاستخدام النموذج الافتراضي للنظام.", + "generalConfigDescriptionClaude": "يدعم الإعداد السريع لـ API URL وAPI Key ونماذج Claude، ويتزامن مع إعداد JSON الأصلي.", + "generalConfigDescriptionDefault": "يدعم إدخال الإعدادات المهمة (API URL وAPI Key وModel) وإدارة إعداد JSON الأصلي.", + "actions": { + "dragSort": "اسحب لإعادة الترتيب", + "dragSortAgent": "اسحب لإعادة ترتيب {name}", + "refreshCheck": "تحديث الفحص", + "refreshCheckAgent": "تحديث فحص {name}", + "clickEnable": "انقر لتفعيل {name}", + "clickDisable": "انقر لتعطيل {name}", + "install": "تثبيت", + "upgrade": "ترقية", + "uninstall": "إزالة التثبيت", + "uninstalling": "جارٍ إزالة التثبيت...", + "saveEnvVars": "حفظ متغيرات البيئة", + "saving": "جارٍ الحفظ...", + "saveCodexConfig": "حفظ إعداد Codex", + "saveGeminiConfig": "حفظ إعداد Gemini", + "saveOpenCodeConfig": "حفظ إعداد OpenCode", + "saveOpenClawConfig": "حفظ إعداد OpenClaw", + "saveConfigManagement": "حفظ إدارة الإعدادات", + "saveCurrentProvider": "حفظ المزود الحالي", + "showApiKey": "إظهار مفتاح API", + "hideApiKey": "إخفاء مفتاح API", + "showKey": "إظهار المفتاح", + "hideKey": "إخفاء المفتاح", + "showToken": "إظهار الرمز", + "hideToken": "إخفاء الرمز", + "cancel": "إلغاء", + "delete": "حذف", + "deleting": "جارٍ الحذف...", + "confirmDelete": "تأكيد الحذف", + "confirmUninstall": "تأكيد إزالة التثبيت" + }, + "status": { + "enabled": "مفعّل", + "disabled": "معطّل", + "unchecked": "غير مفحوص", + "agentEnabledAria": "{name} مفعّل", + "agentEnabledSwitch": "مفتاح تفعيل {name}" + }, + "preflight": { + "count": "عناصر الفحص المسبق: {count}", + "notRun": "لم يتم تشغيل الفحوصات بعد." + }, + "codex": { + "configDescription": "يدعم الإعداد السريع لعنوان API ومفتاح API واسم النموذج وجهد الاستدلال، مع المزامنة مع `auth.json` / `config.toml`.", + "selectProvider": "اختر المزود", + "modelName": "اسم النموذج", + "selectReasoningEffort": "اختر Reasoning Effort", + "enableWebsocket": "تفعيل WebSocket", + "enableWebsocketAria": "تفعيل WebSocket لـ Codex Provider", + "authJsonNative": "auth.json (أصلي)", + "configTomlNative": "config.toml (أصلي)" + }, + "gemini": { + "authConfig": "إعداد مصادقة Gemini", + "authConfigDescription": "متوافق مع وثائق مصادقة Gemini CLI، ويدعم endpoint مخصص وتسجيل دخول Google وGemini API Key وVertex AI ‏(ADC / حساب خدمة / API Key).", + "authMode": "وضع المصادقة", + "selectAuthMode": "اختر وضع المصادقة", + "viewAuthDoc": "عرض وثائق المصادقة", + "mode": { + "custom": "Endpoint مخصص", + "loginGoogle": "تسجيل دخول Google (OAuth)", + "vertexServiceAccount": "Vertex AI (حساب خدمة)" + }, + "hint": { + "custom": "أدخل API URL وAPI Key وModel؛ وسيتم ربطها بـ GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.", + "loginGoogle": "شغّل gemini في الطرفية وأكمل تسجيل دخول Google أولًا؛ لا حاجة إلى API key.", + "geminiApiKey": "أدخل GEMINI_API_KEY عند استخدام Gemini API.", + "vertexAdc": "استخدم gcloud ADC؛ ويوصى بتعيين GOOGLE_CLOUD_PROJECT وGOOGLE_CLOUD_LOCATION.", + "vertexServiceAccount": "عيّن مسار JSON لحساب الخدمة في GOOGLE_APPLICATION_CREDENTIALS.", + "vertexApiKey": "أدخل GOOGLE_API_KEY عند استخدام مفتاح Vertex AI API." + } + }, + "openCode": { + "configManagement": "إدارة إعداد OpenCode", + "configDescription": "متوافق مع مخطط `provider` في OpenCode، ويدعم إدارة متعددة المزودات ومزامنة ثنائية الاتجاه مع ملفات JSON الأصلية.", + "providerManagement": "إدارة المزودات", + "providerCount": "{count} مزودات", + "addProvider": "إضافة مزود", + "emptyProvider": "لا يوجد مزود بعد. أدخل معرّفًا ثم انقر \"إضافة مزود\".", + "providerEnabledState": "حالة تفعيل {providerId}", + "selectProviderNpm": "اختر provider.npm", + "notSet": "غير مضبوط", + "modelManagement": "إدارة النماذج", + "modelCount": "{count} نماذج", + "modelDescription": "متوافق مع `provider.models` في OpenCode. الإدارة السريعة تدعم حاليًا `name` / `id`؛ بينما تُحفظ الحقول المتقدمة الأخرى ويمكن تعديلها في JSON الأصلي أدناه.", + "addModel": "إضافة نموذج", + "emptyModel": "لا يوجد نموذج بعد. أدخل model id ثم انقر \"إضافة نموذج\".", + "modelId": "معرّف النموذج", + "modelName": "اسم النموذج", + "deleteModel": "حذف النموذج {modelId}", + "nativeJsonConfig": "إعداد JSON الأصلي لـ OpenCode" + }, + "openClaw": { + "gatewayConfig": "إعداد Gateway", + "gatewayDescription": "قم بإعداد اتصال OpenClaw Gateway. يدعم gateway محليًا أو بعيدًا.", + "gatewayUrlHint": "اتركه فارغًا لاستخدام gateway.remote.url من إعداد openclaw المحلي.", + "gatewayTokenPlaceholder": "رمز مصادقة Gateway", + "gatewayTokenHint": "يُفضّل استخدام token-file بدل الرمز النصي متى أمكن؛ قم بالإعداد عبر openclaw CLI.", + "sessionKeyHint": "اختياري. حدّد مفتاح جلسة gateway؛ واتركه فارغًا للتعيين التلقائي لجلسة معزولة." + }, + "claude": { + "mainModel": "النموذج الرئيسي", + "reasoningModel": "نموذج الاستدلال (thinking)", + "haikuDefaultModel": "نموذج Haiku الافتراضي", + "sonnetDefaultModel": "نموذج Sonnet الافتراضي", + "opusDefaultModel": "نموذج Opus الافتراضي" + }, + "dialogs": { + "confirmDeleteProvider": "حذف المزود {providerId}؟", + "confirmDeleteProviderDescription": "سيتم تحديث إعداد OpenCode وauth JSON معًا. لا يمكن التراجع عن هذا الإجراء.", + "confirmUninstall": "إزالة تثبيت {name}؟", + "confirmUninstallDescription": "سيؤدي هذا إلى إزالة الإصدار المثبت محليًا. يمكنك إعادة التثبيت لاحقًا." + }, + "errors": { + "nativeJsonMustBeObject": "يجب أن يكون إعداد JSON الأصلي كائنًا", + "nativeJsonInvalid": "خطأ في تنسيق إعداد JSON الأصلي: {message}", + "openCodeAuthMustBeObject": "يجب أن يكون OpenCode auth.json كائن JSON", + "openCodeAuthInvalid": "خطأ في تنسيق OpenCode auth.json: {message}", + "authMustBeObject": "يجب أن يكون auth.json كائن JSON", + "authInvalid": "خطأ في تنسيق auth.json: {message}", + "providerIdPattern": "يدعم معرّف المزود الأحرف والأرقام والشرطة السفلية والنقطة والشرطة فقط", + "providerExists": "المزوّد '{providerId}' موجود بالفعل", + "modelIdPattern": "يدعم معرّف النموذج الأحرف والأرقام والشرطة السفلية والنقطة والنقطتين والشرطة فقط", + "modelExists": "النموذج '{modelId}' موجود بالفعل" + }, + "warnings": { + "nativeJsonRecoveredStructured": "إعداد JSON الأصلي غير صالح؛ تمت إعادة التعيين إلى إعداد مُهيكل", + "nativeJsonRecoveredOpenCode": "إعداد JSON الأصلي غير صالح؛ تمت إعادة التعيين إلى إعداد OpenCode المُهيكل", + "openCodeAuthRecovered": "ملف OpenCode auth.json غير صالح؛ تمت إعادة التعيين إلى الإعداد الافتراضي", + "authRecoveredStructured": "ملف auth.json غير صالح؛ تمت إعادة التعيين إلى إعداد مُهيكل" + }, + "toasts": { + "agentActionCompleted": "اكتمل {action} لـ {name}", + "agentActionFailed": "فشل {action} لـ {name}", + "localVersion": "الإصدار المحلي: {version}", + "installCompletedVersionLater": "اكتمل التثبيت، سيتم تحديث الإصدار عند الفحص التالي", + "uninstallCompleted": "اكتملت إزالة تثبيت {name}", + "uninstallFailed": "فشلت إزالة تثبيت {name}", + "localVersionRemoved": "تمت إزالة الإصدار المحلي", + "saveAgentOrderFailed": "فشل حفظ ترتيب Agent", + "saveAgentSwitchFailed": "فشل حفظ مفتاح Agent", + "saveEnvFailed": "فشل حفظ متغيرات البيئة", + "codexSaved": "تم حفظ إعداد Codex", + "saveCodexNativeFailed": "فشل حفظ إعداد Codex الأصلي", + "geminiSaved": "تم حفظ إعداد Gemini", + "saveGeminiFailed": "فشل حفظ إعداد Gemini", + "providerDeleted": "تم حذف المزود {providerId}", + "providerDeleteFailed": "فشل حذف المزود {providerId}", + "providerSaved": "تم حفظ المزود {providerId}", + "saveProviderFailed": "فشل حفظ المزود {providerId}", + "openCodeConfigSynced": "تمت مزامنة إعداد OpenCode وauth JSON.", + "openCodeSaved": "تم حفظ إعداد OpenCode", + "saveOpenCodeFailed": "فشل حفظ إعداد OpenCode", + "openClawSaved": "تم حفظ إعداد OpenClaw", + "saveOpenClawFailed": "فشل حفظ إعداد OpenClaw", + "configSaved": "تم حفظ الإعداد", + "saveConfigManagementFailed": "فشل حفظ إدارة الإعدادات" + }, + "version": { + "statusLabel": "حالة الإصدار", + "notInstalled": "غير مثبت", + "remoteLocal": "البعيد: {remoteVersion} · المحلي: {localVersion}", + "platformUnsupported": "{versionText}. المنصة الحالية لا تدعم هذا الوكيل.", + "clickInstall": "{versionText}. انقر تثبيت في الجهة اليمنى.", + "localUnrecognized": "{versionText}. الإصدار المحلي غير قابل للمقارنة؛ جرّب الترقية للكتابة فوق التثبيت.", + "upgradeAvailable": "{versionText}. تتوفر ترقية.", + "remoteUnavailable": "{versionText}. الإصدار البعيد غير متاح حاليًا.", + "latest": "{versionText}. أنت على أحدث إصدار." + } + }, + "SettingsPages": { + "agentsLoading": "جارٍ تحميل إعدادات الوكلاء..." + }, + "CommitPage": { + "title": "التزام", + "invalidFolderId": "معرّف المجلد غير صالح", + "loadingRepo": "جارٍ تحميل المستودع..." + }, + "Folder": { + "common": { + "all": "الكل", + "cancel": "إلغاء", + "close": "إغلاق", + "closeOthers": "إغلاق البقية", + "closeAll": "إغلاق الكل", + "confirm": "تأكيد", + "save": "حفظ", + "delete": "حذف", + "rename": "إعادة تسمية", + "loading": "جارٍ التحميل...", + "refresh": "تحديث", + "refreshing": "جارٍ التحديث...", + "create": "إنشاء", + "createAndSwitch": "إنشاء والتبديل", + "openFile": "فتح الملف", + "viewDiff": "عرض Diff" + }, + "modes": { + "conversation": "وضع المحادثة", + "fusion": "وضع الدمج", + "files": "وضع الملفات", + "workspaceModesAria": "أوضاع مساحة العمل" + }, + "statusLabels": { + "in_progress": "قيد التنفيذ", + "pending_review": "مراجعة", + "completed": "مكتمل", + "cancelled": "ملغى" + }, + "sidebar": { + "title": "المحادثات", + "locateActiveConversation": "تحديد المحادثة النشطة", + "expandAllGroups": "توسيع كل المجموعات", + "collapseAllGroups": "طي كل المجموعات", + "newConversation": "محادثة جديدة", + "noConversationsFound": "لم يتم العثور على محادثات.", + "importLocalSessions": "استيراد الجلسات المحلية", + "importing": "جارٍ الاستيراد...", + "error": "خطأ: {message}", + "completeAllSessions": "إكمال جميع الجلسات", + "completeAllReviewTitle": "إكمال جميع جلسات المراجعة؟", + "completeAllReviewDescription": "سيؤدي ذلك إلى وضع علامة مكتمل على جميع {count, plural, one {# جلسة} other {# جلسات}} في المراجعة.", + "completing": "جارٍ الإكمال...", + "toasts": { + "importedSessions": "تم استيراد {imported, plural, one {# جلسة} other {# جلسات}}، وتم تخطي {skipped}", + "noNewSessionsFound": "لم يتم العثور على جلسات جديدة (تم تخطي {skipped})", + "importFailed": "فشل الاستيراد: {message}", + "reviewCompleted": "تم وضع علامة مكتمل على {count, plural, one {# جلسة مراجعة} other {# جلسات مراجعة}}", + "completeReviewFailed": "فشل إكمال جلسات المراجعة: {message}" + } + }, + "conversation": { + "reloadFailed": "فشل إعادة تحميل المحادثة: {message}", + "reloaded": "تمت إعادة تحميل المحادثة", + "reload": "إعادة تحميل", + "newConversation": "محادثة جديدة", + "closeConversation": "إغلاق المحادثة" + }, + "conversationCard": { + "untitledConversation": "محادثة بدون عنوان", + "newConversation": "محادثة جديدة", + "rename": "إعادة تسمية", + "status": "الحالة", + "delete": "حذف", + "importLocalSessions": "استيراد الجلسات المحلية", + "importing": "جارٍ الاستيراد...", + "renameConversation": "إعادة تسمية المحادثة", + "deleteConversationTitle": "حذف المحادثة؟", + "deleteConversationDescription": "سيؤدي ذلك إلى حذف \"{title}\". لا يمكن التراجع عن هذا الإجراء.", + "cancel": "إلغاء", + "save": "حفظ" + }, + "search": { + "dialogTitle": "البحث في المحادثات", + "placeholder": "البحث في المحادثات...", + "allAgents": "الكل", + "searching": "جارٍ البحث...", + "typeToSearch": "اكتب للبحث في المحادثات", + "noResults": "لم يتم العثور على نتائج.", + "untitledConversation": "محادثة بدون عنوان" + }, + "folderTitleBar": { + "showSidebar": "إظهار الشريط الجانبي", + "hideSidebar": "إخفاء الشريط الجانبي", + "toggleTerminal": "تبديل الطرفية", + "toggleAuxPanel": "تبديل اللوحة المساعدة", + "search": "بحث", + "openSettings": "فتح الإعدادات", + "withShortcut": "{label} (اختصار: {shortcut})" + }, + "statusBar": { + "connection": { + "connected": "متصل", + "connecting": "جارٍ الاتصال...", + "downloading": "جارٍ التنزيل...", + "prompting": "جارٍ الرد...", + "error": "خطأ في الاتصال", + "disconnected": "غير متصل", + "tooltip": "{agent}: {status}", + "tooltipError": "{agent}: {error}" + }, + "tasks": { + "title": "المهام" + }, + "alerts": { + "title": "التنبيهات", + "empty": "لا توجد تنبيهات" + }, + "stats": { + "conversations": "{count} محادثة", + "summary": "{conversations} محادثة / {messages} رسالة" + }, + "tokens": { + "contextWindowUsageAria": "استخدام نافذة السياق", + "contextWindow": "نافذة السياق", + "usedMax": "المستخدم / الحد الأقصى", + "tokenUsage": "استخدام الرموز", + "input": "إدخال", + "output": "إخراج", + "cacheRead": "قراءة الكاش", + "cacheWrite": "كتابة الكاش", + "total": "الإجمالي" + } + }, + "auxPanel": { + "tabs": { + "diff": "الفرق", + "files": "الملفات", + "changes": "التغييرات", + "commits": "الالتزامات" + } + }, + "windowControls": { + "minimizeWindow": "تصغير النافذة", + "minimize": "تصغير", + "maximizeWindow": "تكبير النافذة", + "maximize": "تكبير", + "restoreWindow": "استعادة النافذة", + "restore": "استعادة", + "closeWindow": "إغلاق النافذة", + "close": "إغلاق" + }, + "tabs": { + "closeConversationTab": "إغلاق تبويب المحادثة", + "close": "إغلاق", + "closeOthers": "إغلاق البقية", + "closeAll": "إغلاق الكل" + }, + "fileWorkspace": { + "files": "الملفات", + "closeFileTab": "إغلاق تبويب الملف", + "close": "إغلاق", + "closeOthers": "إغلاق البقية", + "closeAll": "إغلاق الكل" + }, + "terminal": { + "rename": "إعادة تسمية", + "close": "إغلاق", + "closeOthers": "إغلاق البقية", + "closeAll": "إغلاق الكل", + "hideTerminal": "إخفاء الطرفية ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "الاستجابة الحالية", + "noDiffDataAvailable": "لا توجد بيانات diff متاحة لـ {filePath}", + "loading": "جارٍ التحميل...", + "noFileChangesInConversation": "لم يتم العثور على تغييرات ملفات في هذه المحادثة", + "openConversationToSeeChanges": "افتح محادثة لرؤية تغييرات الملفات الخاصة بها", + "remove": "إزالة", + "changeCount": "{count, plural, one {# تغيير} other {# تغييرات}}", + "fileCount": "{count, plural, one {# ملف} other {# ملفات}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "مجلد", + "openFolder": "فتح مجلد", + "cloneRepository": "استنساخ المستودع", + "opened": "مفتوح", + "recentOpen": "المفتوح مؤخرًا" + }, + "fileWorkspacePanel": { + "viewDiff": "عرض Diff", + "openFile": "فتح الملف", + "fileCount": "{count, plural, one {# ملف} other {# ملفات}}", + "openFileOrDiff": "افتح ملفًا أو diff من اللوحة اليمنى", + "disk": "القرص", + "head": "HEAD", + "unsaved": "غير محفوظ", + "workingTree": "شجرة العمل", + "loading": "جارٍ التحميل...", + "compareWithBranch": "{path} · مقارنة مع {branch}", + "hunkCount": "{count, plural, one {# مقطع} other {# مقاطع}}", + "prev": "السابق", + "next": "التالي", + "jumpToLine": "الانتقال إلى السطر {line}", + "noParsedDiffSections": "لا توجد أقسام diff محللة", + "loadingEditor": "جارٍ تحميل المحرر..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "اكتمل التزام الكود", + "committedFiles": "{count, plural, one {# ملف تم الالتزام به} other {# ملفات تم الالتزام بها}}", + "taskCompleted": "اكتمل {label}", + "taskFailed": "فشل {label}", + "mergeNoNewCommits": "{branchName} لا يحتوي على التزامات جديدة", + "mergedCommits": "{count, plural, one {# التزام تم دمجه} other {# التزامات تم دمجها}}", + "allFilesUpToDate": "كل الملفات محدثة", + "updatedFiles": "{count, plural, one {# ملف تم تحديثه} other {# ملفات تم تحديثها}}", + "openCommitWindowFailed": "فشل فتح نافذة الالتزام", + "upstreamSet": "تم تعيين فرع upstream", + "upstreamSetAndPushed": "تم تعيين فرع upstream ودفع {count, plural, one {# التزام} other {# التزامات}}", + "noCommitsToPush": "لا توجد التزامات للدفع", + "pushedCommits": "تم دفع {count, plural, one {# التزام} other {# التزامات}}" + }, + "tasks": { + "newBranch": "إنشاء الفرع {name}", + "newWorktree": "إنشاء worktree {name}", + "checkoutTo": "Checkout إلى {branchName}", + "mergeBranch": "دمج {branchName}", + "rebaseTo": "Rebase إلى {branchName}", + "deleteBranch": "حذف الفرع {branchName}", + "initGitRepo": "تهيئة مستودع Git", + "pullCode": "سحب الكود", + "fetchInfo": "جلب المعلومات", + "pushCode": "دفع الكود", + "stashChanges": "تخزين التغييرات في stash", + "stashPop": "استرجاع stash" + }, + "confirm": { + "mergeTitle": "دمج الفرع", + "rebaseTitle": "Rebase للفرع", + "deleteTitle": "حذف الفرع", + "mergeDescription": "دمج {branchName} في الفرع الحالي {currentBranch}؟", + "rebaseDescription": "إجراء rebase للفرع الحالي {currentBranch} على {branchName}؟", + "deleteDescription": "حذف الفرع {branchName}؟ لا يمكن التراجع عن هذا الإجراء." + }, + "current": "الحالي", + "switchToBranch": "التبديل إلى هذا الفرع", + "mergeBranchIntoCurrent": "دمج {branchName} في {currentBranch}", + "rebaseCurrentToBranch": "Rebase لـ {currentBranch} على {branchName}", + "deleteBranch": "حذف الفرع", + "versionControl": "التحكم في الإصدارات", + "initGitRepo": "تهيئة مستودع Git", + "pullCode": "سحب الكود", + "fetchRemoteBranches": "جلب الفروع البعيدة", + "openCommitWindow": "التزام الكود...", + "pushCode": "دفع...", + "newBranch": "فرع جديد...", + "newWorktree": "Worktree جديد...", + "stashChanges": "تخزين التغييرات في stash", + "stashPop": "استرجاع stash...", + "localBranches": "الفروع المحلية ({count, plural, one {#} other {#}})", + "noLocalBranches": "لا توجد فروع محلية", + "remoteBranches": "الفروع البعيدة ({count, plural, one {#} other {#}})", + "noRemoteBranches": "لا توجد فروع بعيدة", + "parentBranchHint": "تم إنشاء الفرع الحالي من {parentBranch}. انقر لدمج {parentBranch} في الفرع الحالي.", + "dialogs": { + "newBranchTitle": "فرع جديد", + "newBranchDescription": "إنشاء فرع جديد من الفرع الحالي {branch}", + "branchNamePlaceholder": "اسم الفرع", + "newWorktreeTitle": "Worktree جديد", + "newWorktreeDescription": "إنشاء worktree جديد من الفرع الحالي {branch}", + "branchNameLabel": "اسم الفرع", + "worktreePathLabel": "مسار worktree", + "worktreePathPlaceholder": "مسار worktree" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "اكتمل التزام الكود", + "committedFiles": "{count, plural, one {# ملف تم الالتزام به} other {# ملفات تم الالتزام بها}}", + "addedToVcs": "تمت الإضافة إلى VCS", + "addToVcsFailed": "فشلت الإضافة إلى VCS", + "fileDeleted": "تم حذف الملف", + "deleteFailed": "فشل الحذف", + "fileRolledBack": "تم التراجع عن الملف", + "rollbackFailed": "فشل التراجع" + }, + "confirm": { + "deleteTitle": "تأكيد الحذف", + "deleteDescription": "حذف الملف \"{file}\"؟ لا يمكن التراجع عن هذا الإجراء.", + "rollbackTitle": "تأكيد التراجع", + "rollbackDescription": "التراجع عن الملف \"{file}\" إلى HEAD؟ ستفقد التغييرات غير المحفوظة." + }, + "actions": { + "select": "تحديد", + "unselect": "إلغاء التحديد", + "rollback": "تراجع", + "addToVcs": "إضافة إلى VCS" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "إلغاء تحديد كل الملفات", + "selectAllFiles": "تحديد كل الملفات", + "unselectTracked": "إلغاء تحديد التغييرات المتعقبة", + "selectTracked": "تحديد التغييرات المتعقبة", + "unselectUntracked": "إلغاء تحديد الملفات غير المتعقبة", + "selectUntracked": "تحديد الملفات غير المتعقبة" + }, + "loading": "جارٍ التحميل...", + "selectionCount": "{selected} / {total} ملفات", + "emptyFiles": "لا توجد ملفات متغيرة", + "trackedChanges": "التغييرات المتعقبة ({count})", + "untrackedFiles": "الملفات غير المتعقبة ({count})", + "commitMessage": "رسالة الالتزام", + "commitMessagePlaceholder": "أدخل رسالة الالتزام...", + "commitButton": "التزام ({count})", + "head": "HEAD", + "workingTree": "شجرة العمل", + "clickFileToDiff": "انقر اسم الملف لعرض الفرق", + "loadingDiff": "جارٍ تحميل diff..." + }, + "gitLogTab": { + "filesTitle": "الملفات", + "expandAllFiles": "توسيع كل الملفات", + "collapseAllFiles": "طي كل الملفات", + "workspace": "مساحة العمل", + "retry": "إعادة المحاولة", + "noCommitsFound": "لم يتم العثور على التزامات", + "hash": "بصمة الالتزام", + "copyHash": "نسخ الـ hash", + "author": "المؤلف", + "noFileChangeDetails": "لا توجد تفاصيل تغييرات ملفات متاحة.", + "branchesTitle": "الفروع", + "loadingBranches": "جارٍ تحميل الفروع...", + "noContainingBranches": "لم يتم العثور على فروع تحتوي هذا الالتزام.", + "newBranch": "فرع جديد...", + "viewCommitDiffAria": "عرض diff للالتزام {hash}", + "copyFullCommitHashAria": "نسخ hash الكامل للالتزام {hash}", + "pushStatus": { + "pushed": "تم الدفع إلى البعيد", + "notPushed": "لم يتم الدفع إلى البعيد", + "unknown": "حالة الدفع غير معروفة (لم يتم إعداد upstream)" + }, + "time": { + "monthsAgo": "{count, plural, one {منذ # شهر} other {منذ # أشهر}}", + "daysAgo": "{count, plural, one {منذ # يوم} other {منذ # أيام}}", + "hoursAgo": "{count, plural, one {منذ # ساعة} other {منذ # ساعات}}", + "minsAgo": "{count, plural, one {منذ # دقيقة} other {منذ # دقائق}}", + "justNow": "الآن" + }, + "toasts": { + "createdAndSwitchedNewBranch": "تم إنشاء فرع جديد والتبديل إليه", + "newBranchFromCommit": "{name} (من {shortHash})", + "createBranchFailed": "فشل إنشاء الفرع" + }, + "branchSelector": { + "selectBranchPlaceholder": "اختر فرعًا...", + "localBranches": "الفروع المحلية", + "current": "الحالي", + "remoteBranches": "الفروع البعيدة", + "refreshCommitHistory": "تحديث سجل الالتزامات" + }, + "dialogs": { + "newBranchTitle": "فرع جديد", + "newBranchDescription": "إنشاء فرع جديد مع الالتزام {shortHash} كأحدث التزام.", + "branchNamePlaceholder": "اسم الفرع" + } + }, + "gitChangesTab": { + "workspace": "مساحة العمل", + "noChanges": "لا توجد تغييرات محلية", + "trackedChanges": "التغييرات المتعقبة ({count})", + "untrackedFiles": "الملفات غير المتعقبة ({count})", + "expandTracked": "توسيع التغييرات المتعقبة", + "collapseTracked": "طي التغييرات المتعقبة", + "expandUntracked": "توسيع الملفات غير المتعقبة", + "collapseUntracked": "طي الملفات غير المتعقبة", + "actions": { + "commitCode": "التزام الكود", + "rollback": "تراجع", + "addToVcs": "إضافة إلى VCS" + }, + "toasts": { + "noAddableFilesInDir": "لا توجد ملفات متغيرة في هذا الدليل يمكن إضافتها إلى VCS", + "noRollbackFilesInDir": "لا توجد ملفات متغيرة في هذا الدليل يمكن التراجع عنها", + "addedToVcs": "تمت إضافة {name} إلى VCS", + "addToVcsFailed": "فشلت الإضافة إلى VCS", + "openCommitWindowFailed": "فشل فتح نافذة الالتزام", + "rolledBack": "تم التراجع عن {name}", + "rollbackFailed": "فشل التراجع", + "addedFilesToVcs": "تمت إضافة {count, plural, one {# ملف} other {# ملفات}} إلى VCS", + "rolledBackFiles": "تم التراجع عن {count, plural, one {# ملف} other {# ملفات}}" + }, + "directoryDialog": { + "descriptionAdd": "اختر ملفات داخل الدليل {path} لإضافتها إلى VCS.", + "descriptionRollback": "اختر ملفات داخل الدليل {path} للتراجع عنها.", + "descriptionFallback": "اختر ملفات للمتابعة.", + "selectionCount": "تم تحديد {selected} / {total} ملف", + "selectAll": "تحديد الكل", + "unselectAll": "إلغاء تحديد الكل", + "loadingCandidates": "جارٍ تحميل تغييرات الدليل...", + "noOperableFiles": "لا توجد ملفات قابلة للتشغيل" + }, + "rollbackConfirm": { + "title": "تأكيد التراجع", + "descriptionWithTarget": "التراجع عن التغييرات المحلية لـ {kind} \"{name}\"؟", + "descriptionFallback": "التراجع عن التغييرات المحلية؟", + "kindDirectory": "الدليل", + "kindFile": "الملف" + } + }, + "tabContext": { + "loadingConversation": "جارٍ التحميل...", + "untitledConversation": "محادثة بدون عنوان", + "newConversation": "محادثة جديدة" + }, + "fileTreeTab": { + "workspace": "مساحة العمل", + "retry": "إعادة المحاولة", + "git": "Git", + "openInFileManager": "فتح في مدير الملفات", + "openInFinder": "فتح في Finder", + "openInExplorer": "فتح في Explorer", + "attachToCurrentSession": "إرفاق بالجلسة الحالية", + "compareWithBranch": "المقارنة مع الفرع...", + "reloadFromDisk": "إعادة التحميل من القرص", + "openIn": "فتح في", + "openInTerminal": "فتح في الطرفية", + "actions": { + "select": "تحديد", + "unselect": "إلغاء التحديد", + "commitCode": "تنفيذ الالتزام بالكود", + "rollback": "التراجع", + "addToVcs": "إضافة إلى VCS" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "فشل فتح المجلد", + "openBuiltinTerminalFailed": "تعذر فتح الطرفية المدمجة", + "openCommitWindowFailed": "فشل فتح نافذة الالتزام", + "noAddableFilesInDir": "لا توجد ملفات متغيرة في هذا المجلد يمكن إضافتها إلى VCS", + "noRollbackFilesInDir": "لا توجد ملفات متغيرة في هذا المجلد يمكن التراجع عنها", + "addedToVcs": "تمت إضافة {name} إلى VCS", + "addToVcsFailed": "فشلت الإضافة إلى VCS", + "loadBranchesFailed": "فشل تحميل الفروع", + "renameFailed": "فشل إعادة التسمية", + "deleteFailed": "فشل الحذف", + "rolledBack": "تم التراجع عن {name}", + "rollbackFailed": "فشل التراجع", + "addedFilesToVcs": "{count, plural, one {تمت إضافة ملف واحد إلى VCS} other {تمت إضافة # ملفات إلى VCS}}", + "rolledBackFiles": "{count, plural, one {تم التراجع عن ملف واحد} other {تم التراجع عن # ملفات}}", + "savedAsCopy": "تم الحفظ كنسخة", + "saveCopyFailed": "فشل الحفظ كنسخة", + "watchStartFailed": "فشل بدء مراقبة الملفات" + }, + "renameDialog": { + "renameDirectory": "إعادة تسمية المجلد", + "renameFile": "إعادة تسمية الملف", + "description": "أدخل اسمًا جديدًا (الاسم فقط، بدون مسار).", + "placeholderDirectory": "اسم-مجلد-جديد", + "placeholderFile": "اسم-ملف-جديد.ext" + }, + "directoryDialog": { + "descriptionAdd": "حدد الملفات ضمن المجلد {path} لإضافتها إلى VCS.", + "descriptionRollback": "حدد الملفات ضمن المجلد {path} للتراجع عنها.", + "descriptionFallback": "حدد الملفات للمتابعة.", + "selectionCount": "تم تحديد {selected} من {total} ملف", + "selectAll": "تحديد الكل", + "unselectAll": "إلغاء تحديد الكل", + "loadingCandidates": "جارٍ تحميل تغييرات المجلد...", + "noOperableFiles": "لا توجد ملفات قابلة للمعالجة" + }, + "compareDialog": { + "title": "المقارنة مع الفرع", + "descriptionWithTarget": "حدد فرعًا وقارن مع {kind} {path}", + "descriptionFallback": "حدد فرعًا للمقارنة.", + "kindDirectory": "مجلد", + "kindFile": "ملف", + "filterPlaceholder": "تصفية الفروع، مثال: main / origin/main", + "singleClickHint": "انقر على فرع للمقارنة مباشرة", + "loadingBranches": "جارٍ تحميل الفروع...", + "recentBranches": "الفروع الحديثة ({count})", + "noCurrentBranch": "لا يوجد فرع حالي", + "localBranches": "الفروع المحلية ({count})", + "remoteBranches": "الفروع البعيدة ({count})", + "noMatchingBranches": "لا توجد فروع مطابقة" + }, + "externalConflictDialog": { + "title": "تم اكتشاف تغييرات خارجية في الملفات", + "descriptionWithPath": "تم تغيير الملف {path} على القرص، والتعديلات الحالية غير محفوظة.", + "descriptionFallback": "تم تغيير الملف الحالي على القرص، والتعديلات الحالية غير محفوظة.", + "compare": "مقارنة", + "savingCopy": "جارٍ حفظ نسخة...", + "saveAsCopy": "حفظ كنسخة", + "reload": "إعادة التحميل" + }, + "deleteConfirm": { + "title": "تأكيد الحذف", + "descriptionWithTarget": "حذف {kind} \"{name}\"؟ لا يمكن التراجع عن هذا الإجراء.", + "descriptionFallback": "لا يمكن التراجع عن هذا الإجراء.", + "kindDirectory": "مجلد", + "kindFile": "ملف" + }, + "rollbackConfirm": { + "title": "تأكيد التراجع", + "descriptionWithTarget": "التراجع عن التغييرات المحلية للملف \"{name}\"؟", + "descriptionFallback": "التراجع عن التغييرات المحلية لهذا الملف؟" + }, + "terminalTitle": "الطرفية · {name}" + }, + "commandDropdown": { + "loading": "جارٍ التحميل...", + "addCommand": "إضافة أمر", + "manageCommands": "إدارة الأوامر...", + "runCommandTitle": "تشغيل: {command}", + "stopCommandTitle": "إيقاف: {command}", + "manageDialog": { + "title": "إدارة الأوامر", + "empty": "لا توجد أوامر بعد", + "namePlaceholder": "الاسم", + "commandPlaceholder": "الأمر", + "add": "إضافة", + "saving": "جارٍ الحفظ..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "إغلاق \"{title}\" بدون حفظ؟", + "confirmCloseOtherDirtyTabs": "إغلاق التبويبات الأخرى التي تحتوي تغييرات غير محفوظة؟", + "confirmCloseAllDirtyTabs": "إغلاق جميع التبويبات التي تحتوي تغييرات غير محفوظة؟", + "unableLoadContent": "تعذر تحميل المحتوى.\n\n{message}", + "previewRequestTimedOut": "انتهت مهلة طلب المعاينة", + "diffRequestTimedOut": "انتهت مهلة طلب Diff", + "branchCompareRequestTimedOut": "انتهت مهلة طلب مقارنة الفروع", + "commitDiffRequestTimedOut": "انتهت مهلة طلب Diff للالتزام", + "saveRequestTimedOut": "انتهت مهلة طلب الحفظ", + "reloadRequestTimedOut": "انتهت مهلة طلب إعادة التحميل", + "noChanges": "لا توجد تغييرات.", + "noDiffOutput": "لا يوجد مخرجات diff.", + "diffTitleWorkspace": "Diff · مساحة العمل", + "diffDescriptionWorkingTree": "شجرة العمل (HEAD)", + "diffTitleFile": "الفرق · {name}", + "compareTitleFile": "مقارنة · {name}", + "compareTitleBranch": "مقارنة · {branch}", + "compareDescriptionPath": "{path} · مقارنة مع {branch}", + "compareDescriptionBranch": "مقارنة مع {branch}", + "diffTitleCommitFile": "الفرق · {name} @ {hash}", + "diffTitleCommit": "الفرق · {hash}", + "diffDescriptionCommitPath": "{path} · الالتزام {commit}", + "diffDescriptionCommit": "الالتزام {commit}", + "diffTitleConflictFile": "تعارض · {name}", + "diffDescriptionConflict": "{path} · القرص مقابل غير المحفوظ" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "فتح إعدادات الوكلاء", + "retry": "إعادة المحاولة" + }, + "agentsSetupHint": "افتح الإعدادات > الوكلاء لإدارة التثبيت.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "تعذر قراءة إعدادات الوكيل الحالية.", + "disabled": "{agent} معطّل في إعدادات الوكلاء. قم بتمكينه قبل الاتصال.", + "unavailable": "{agent} غير متاح على المنصة الحالية.", + "sdkMissing": "لم يتم تثبيت SDK الخاص بـ {agent}" + }, + "unableReadAgentConfig": "تعذر قراءة إعدادات الوكيل: {message}", + "autoLinkFailedTitle": "فشل الربط التلقائي لـ {agent}", + "preflightCheckFailedDefault": "فشلت فحوصات ما قبل التشغيل. تحقق من إعدادات الوكلاء.", + "preflightFailedTitle": "فشل فحص ما قبل التشغيل لـ {agent}", + "autoLinkPreflightFailed": "فشل فحص ما قبل التشغيل للربط التلقائي: {message}", + "connectFailedTitle": "فشل اتصال {agent}", + "toolFallbackTitle": "أداة", + "eventErrorTitle": "خطأ الوكيل" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "جارٍ الاتصال بـ {agent}", + "connectingDescription": "جارٍ إنشاء الاتصال", + "loadingSelectorsTitle": "جارٍ تحميل محددات {agent}", + "loadingSelectorsDescription": "جارٍ جلب خيارات الوضع وإعدادات الجلسة" + }, + "errors": { + "connectionFailed": "فشل الاتصال" + } + }, + "shared": { + "attachedResources": "الموارد المرفقة", + "toolCallFailed": "فشل استدعاء الأداة", + "planUpdated": "تم تحديث الخطة" + }, + "messageThread": { + "emptyTitle": "لا توجد رسائل بعد", + "emptyDescription": "ابدأ محادثة لرؤية الرسائل هنا" + }, + "chatInput": { + "connecting": "جارٍ الاتصال...", + "agentResponding": "الوكيل يرد...", + "sendMessage": "أرسل رسالة..." + }, + "messageInput": { + "askAnything": "اسأل أي شيء...", + "removeAttachmentAria": "إزالة {name}", + "attachFiles": "إرفاق ملفات", + "dropFilesToAttach": "أسقط الملفات لإرفاقها", + "loadingSettings": "جارٍ تحميل الإعدادات...", + "loadingMode": "جارٍ تحميل الوضع...", + "cancel": "إلغاء", + "send": "إرسال" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "الإعدادات > الوكلاء", + "autoConnectFallback": "انقر لفتح {path} وإدارة التثبيت.", + "autoConnectAppend": "{message}. انقر لفتح {path} وإدارة التثبيت.", + "enableAgentFirstPlaceholder": "فعّل وكيلًا واحدًا على الأقل قبل بدء جلسة...", + "askAnythingPlaceholder": "اسأل أي شيء..." + }, + "agentSelector": { + "noEnabledAgents": "لا يوجد وكلاء مفعّلون", + "openAgentsSettings": "فتح إعدادات الوكلاء" + }, + "liveMessageBlock": { + "assistantThinkingAria": "المساعد يفكر" + }, + "agentPlanOverlay": { + "title": "خطة الوكيل", + "collapsePlanAria": "طي الخطة", + "collapsedSummary": "الخطة {completed}/{total}", + "status": { + "completed": "مكتمل", + "inProgress": "قيد التنفيذ", + "pending": "قيد الانتظار", + "unknown": "غير معروف" + }, + "priority": { + "high": "مرتفع", + "medium": "متوسط", + "low": "منخفض", + "unknown": "غير معروف" + } + }, + "permissionDialog": { + "subtitle": "يطلب الوكيل إذنًا لمتابعة هذا الدور.", + "kindFallbackTool": "أداة", + "command": "أمر", + "cwd": "دليل العمل: {cwd}", + "filesSummary": "الملفات: {count}", + "moreFiles": "+{count} ملف إضافي", + "plan": "الخطة", + "targetMode": "وضع الهدف: {mode}" + }, + "messageBranch": { + "previousBranchAria": "الفرع السابق", + "nextBranchAria": "الفرع التالي", + "pageOf": "{current} من {total}" + }, + "terminal": { + "title": "الطرفية", + "running": "قيد التشغيل" + }, + "reasoning": { + "thinking": "جارٍ التفكير...", + "thoughtForFewSeconds": "فكر لبضع ثوانٍ", + "thoughtForSeconds": "فكر لمدة {duration} ثانية" + }, + "messageList": { + "attachedResources": "الموارد المرفقة", + "loading": "جارٍ التحميل...", + "error": "خطأ: {message}", + "emptyConversation": "لا توجد رسائل في هذه المحادثة." + }, + "liveTurnStats": { + "thinking": "جارٍ التفكير...", + "streaming": "جارٍ البث", + "elapsedMinutes": "{value}د", + "elapsedSeconds": "{value}ث", + "toolUseCount": "{count} أداة {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "المعلمات", + "error": "خطأ", + "result": "النتيجة", + "status": { + "approvalRequested": "بانتظار الموافقة", + "approvalResponded": "تم الرد", + "inputAvailable": "قيد التشغيل", + "inputStreaming": "قيد الانتظار", + "outputAvailable": "مكتمل", + "outputDenied": "مرفوض", + "outputError": "خطأ" + } + }, + "toolCallBlock": { + "tool": "أداة", + "error": "خطأ", + "result": "النتيجة" + }, + "contentParts": { + "showingTailOutput": "يتم عرض نهاية المخرجات أثناء البث لتحسين الأداء.", + "result": "النتيجة", + "unknown": "غير معروف", + "replaceAll": "استبدال الكل", + "filesCount": "الملفات: {count}", + "update": "تحديث", + "moreFiles": "+{count} ملف إضافي", + "timeoutMs": "المهلة: {timeout}ms", + "backgroundTrue": "الخلفية: true", + "offset": "الإزاحة: {offset}", + "limit": "الحد: {limit}", + "pages": "الصفحات: {pages}", + "mode": "الوضع: {mode}", + "cell": "الخلية: {cell}", + "pathLabel": "المسار:", + "globLabel": "نمط glob:", + "typeLabel": "النوع:", + "outputLabel": "المخرجات:", + "caseInsensitive": "غير حساس لحالة الأحرف", + "multiline": "متعدد الأسطر", + "promptLabel": "المطالبة", + "subjectLabel": "الموضوع", + "taskLabel": "المهمة", + "nameLabel": "الاسم:", + "field": { + "file": "ملف", + "notebook": "دفتر", + "command": "أمر", + "old": "قديم", + "new": "جديد", + "pattern": "النمط", + "path": "المسار", + "query": "الاستعلام", + "url": "URL:", + "description": "الوصف", + "content": "المحتوى", + "source": "المصدر", + "prompt": "المطالبة", + "subject": "الموضوع", + "taskId": "معرف المهمة", + "status": "الحالة", + "skill": "Skill", + "args": "الوسائط", + "offset": "الإزاحة", + "limit": "الحد", + "glob": "نمط glob", + "type": "النوع", + "output": "المخرجات", + "replaceAll": "استبدال الكل", + "language": "اللغة", + "timeout": "المهلة", + "background": "الخلفية", + "agentType": "نوع الوكيل", + "library": "المكتبة", + "libraryId": "معرف المكتبة" + }, + "title": { + "edit": "تحرير", + "command": "أمر", + "todoWrite": "TodoWrite (تحديث المهام)", + "read": "قراءة", + "write": "كتابة", + "notebookEdit": "NotebookEdit (تحرير الدفتر)", + "editFiles": "تحرير ({count} ملفًا)", + "editWithTarget": "تحرير {target}", + "readWithTarget": "قراءة {target}", + "writeWithTarget": "كتابة {target}", + "notebookEditWithTarget": "NotebookEdit ({target})", + "globWithPattern": "نمط glob {pattern}", + "grepWithPattern": "نمط grep {pattern}", + "taskCreateWithSubject": "إنشاء مهمة: {subject}", + "taskUpdateWithStatus": "تحديث المهمة #{id} -> {status}", + "taskUpdate": "تحديث المهمة #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "بحث الويب: {query}", + "todosProgress": "المهام ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "تمت الإضافة", + "deleted": "تم الحذف", + "renamed": "تمت إعادة التسمية", + "modified": "تم التعديل" + }, + "hunkLabel": "مقطع {index}", + "loadingHunk": "جارٍ تحميل hunk...", + "noDiffData": "لا توجد بيانات diff" + } + } +} diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json new file mode 100644 index 0000000..c64a8fa --- /dev/null +++ b/src/i18n/messages/de.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "Systemsprache verwenden", + "english": "Englisch", + "simplifiedChinese": "Vereinfachtes Chinesisch", + "traditionalChinese": "Traditionelles Chinesisch", + "japanese": "Japanisch", + "korean": "Koreanisch", + "spanish": "Spanisch", + "german": "Deutsch", + "french": "Französisch", + "portuguese": "Portugiesisch", + "arabic": "Arabisch" + }, + "WelcomePage": { + "title": "Willkommen bei Codeg", + "openSettings": "Einstellungen öffnen", + "searchPlaceholder": "Ordner suchen...", + "loading": "Wird geladen...", + "emptyFolders": "Noch keine Ordner", + "removeFromHistory": "Aus Verlauf entfernen", + "openFolder": "Ordner öffnen", + "cloneRepository": "Repository klonen", + "softwareVersion": "Version {version}", + "toasts": { + "loadFolderHistoryFailed": "Ordnerverlauf konnte nicht geladen werden", + "openFolderFailed": "Ordner konnte nicht geöffnet werden", + "removeFromHistoryFailed": "Ordner konnte nicht entfernt werden", + "openSettingsFailed": "Einstellungen konnten nicht geöffnet werden", + "cloneFailed": "Repository konnte nicht geklont werden" + }, + "errors": { + "unknown": "Unerwarteter Fehler", + "invalidInput": "Ungültige Eingabe.", + "notFound": "Ressource nicht gefunden.", + "alreadyExists": "Ressource existiert bereits.", + "dependencyMissing": "Erforderliche Abhängigkeit fehlt.", + "databaseError": "Datenbankoperation fehlgeschlagen.", + "ioError": "Dateioperation fehlgeschlagen.", + "externalCommandFailed": "Externer Befehl fehlgeschlagen.", + "windowOperationFailed": "Fensteroperation fehlgeschlagen.", + "gitNotInstalled": "Git ist nicht installiert. Bitte installiere zuerst Git.", + "targetDirectoryNotEmpty": "Das Zielverzeichnis existiert bereits und ist nicht leer.", + "repositoryNotFound": "Repository nicht gefunden. Prüfe URL und Zugriffsrechte.", + "networkUnavailable": "Netzwerk ist nicht verfügbar. Prüfe die Verbindung und versuche es erneut.", + "authenticationFailed": "Authentifizierung fehlgeschlagen. Prüfe Zugangsdaten oder SSH-Schlüssel.", + "permissionDenied": "Zugriff verweigert. Prüfe die Verzeichnisrechte." + }, + "cloneDialog": { + "title": "Repository klonen", + "repositoryUrl": "Repository-URL", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "Verzeichnis", + "directoryPlaceholder": "Zielverzeichnis auswählen...", + "browseDirectory": "Verzeichnis durchsuchen", + "cancel": "Abbrechen", + "clone": "Klonen" + } + }, + "SettingsShell": { + "title": "Einstellungen", + "preferences": "Präferenzen", + "nav": { + "appearance": "Darstellung", + "agents": "Agenten", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "Kurzbefehle", + "system": "Systemeinstellungen" + } + }, + "AppearanceSettings": { + "sectionTitle": "Design", + "sectionDescription": "Wähle hell, dunkel oder Systemvorgabe. Einstellungen werden automatisch gespeichert.", + "themeMode": "Designmodus", + "placeholder": "Designmodus auswählen", + "system": "Systemvorgabe", + "light": "Hell", + "dark": "Dunkel", + "currentTheme": "Aktuell wirksames Design: {theme}", + "resolvedTheme": { + "light": "Hell", + "dark": "Dunkel", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "Wird geladen...", + "sectionTitle": "Systemverwaltung", + "sectionDescription": "Verwalte Netzwerk-Proxy, App-Updates und Spracheinstellungen.", + "proxyTitle": "Netzwerk-Proxy", + "proxyDescription": "Wenn aktiviert, werden nachfolgende Netzwerkanfragen bevorzugt über diesen Proxy ausgeführt (einschließlich ACP-Chat, Agent-Installation und Git-Remote-Operationen).", + "loadFailed": "Laden fehlgeschlagen: {message}", + "enableProxy": "System-Proxy aktivieren", + "proxyAddress": "Proxy-Adresse", + "proxyHint": "Unterstützt http(s)/socks5, Beispiel: {example}. Wirksam nur bei aktiviertem System-Proxy.", + "save": "Speichern", + "saving": "Wird gespeichert...", + "proxyRequired": "Bei aktiviertem Proxy ist eine Proxy-URL erforderlich", + "saveSuccess": "System-Proxy-Einstellungen wurden gespeichert", + "saveFailed": "Speichern fehlgeschlagen: {message}", + "languageTitle": "Sprache", + "languageDescription": "Lege die App-Sprache fest. Bei Systemsprache wird bei nicht unterstützten Sprachen auf Englisch zurückgefallen.", + "appLanguage": "App-Sprache", + "languageSaveSuccess": "Spracheinstellungen wurden gespeichert", + "languageSaveFailed": "Spracheinstellungen konnten nicht gespeichert werden: {message}", + "updateTitle": "App-Update", + "updateDescription": "Prüft die konfigurierte Release-Quelle auf neue Versionen und installiert sie bei Verfügbarkeit direkt.", + "currentVersion": "Aktuelle Version", + "upgradableVersion": "Verfügbare Version", + "none": "Keine", + "lastChecked": "Zuletzt geprüft: {time}", + "updateError": "Update-Fehler: {message}", + "checking": "Wird geprüft...", + "checkUpdate": "Nach Updates suchen", + "updating": "Wird installiert...", + "upgradeTo": "Auf v{version} aktualisieren", + "foundUpdate": "Neue Version v{version} gefunden", + "alreadyLatest": "Du verwendest bereits die neueste Version", + "checkUpdateFailed": "Update-Prüfung fehlgeschlagen: {message}", + "installSuccess": "Update installiert. App wird neu gestartet.", + "installFailed": "Update fehlgeschlagen: {message}", + "updateErrors": { + "sourceUnavailable": "Die Update-Quelle ist nicht erreichbar. Prüfe Netzwerk oder Proxy und versuche es erneut.", + "network": "Netzwerkverbindung fehlgeschlagen. Prüfe Netzwerk oder Proxy und versuche es erneut.", + "downloadFailed": "Das Update-Paket konnte nicht heruntergeladen werden. Bitte später erneut versuchen.", + "installFailed": "Das Update konnte nicht installiert werden. Bitte App schließen und erneut versuchen.", + "unknown": "Update fehlgeschlagen. Bitte später erneut versuchen." + } + }, + "ShortcutSettings": { + "sectionTitle": "Kurzbefehle", + "resetDefault": "Standardwerte zurücksetzen", + "recordInstruction": "Klicke auf die rechte Schaltfläche und drücke dann eine Tastenkombination. Verwende Ctrl/Cmd, Alt und Shift. Drücke Esc, um die Aufzeichnung abzubrechen.", + "recording": "Kurzbefehl drücken...", + "toasts": { + "conflict": "Der Kurzbefehl wird bereits von \"{title}\" verwendet", + "updated": "Kurzbefehl aktualisiert", + "invalid": "Ungültiger Kurzbefehl, bitte erneut versuchen", + "reset": "Standard-Kurzbefehle wurden wiederhergestellt" + }, + "actions": { + "toggle_search": { + "title": "Suche öffnen", + "description": "Zeigt das Konversations-Suchpanel an oder blendet es aus" + }, + "toggle_sidebar": { + "title": "Linke Seitenleiste umschalten", + "description": "Zeigt die Seitenleiste mit der Konversationsliste an oder blendet sie aus" + }, + "toggle_terminal": { + "title": "Terminal umschalten", + "description": "Zeigt das untere Terminal-Panel an oder blendet es aus" + }, + "new_terminal_tab": { + "title": "Neues Terminal", + "description": "Erstellt einen neuen Terminal-Tab, wenn das Terminal fokussiert ist" + }, + "close_current_terminal_tab": { + "title": "Aktuelles Terminal schließen", + "description": "Schließt den aktuellen Terminal-Tab, wenn das Terminal fokussiert ist" + }, + "toggle_aux_panel": { + "title": "Rechtes Panel umschalten", + "description": "Zeigt das Zusatzinformations-Panel an oder blendet es aus" + }, + "new_conversation": { + "title": "Neue Konversation", + "description": "Erstellt einen neuen Konversations-Tab im aktuellen Ordner" + }, + "open_folder": { + "title": "Ordner öffnen", + "description": "Öffnet die Ordnerauswahl und den Ordner in einem neuen Fenster" + }, + "open_settings": { + "title": "Einstellungen öffnen", + "description": "Öffnet das Einstellungsfenster" + }, + "close_current_tab": { + "title": "Aktuellen Tab schließen", + "description": "Schließt den aktuellen Konversations- oder Dateitab" + }, + "close_all_file_tabs": { + "title": "Alle Dateitabs schließen", + "description": "Schließt alle Dateitabs nur im Dateimodus" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "Wähle links einen Skill aus. Rechts wird standardmäßig eine Markdown-Vorschau angezeigt; wechsle zum Bearbeiten, um zu ändern und zu speichern.", + "loadingAgents": "Agenten mit Skill-Unterstützung werden geladen...", + "emptyNoManageableAgents": "Keine Agenten für Skill-Verwaltung verfügbar.", + "managedTarget": "Verwaltetes Ziel", + "selectAgentPlaceholder": "Agent auswählen", + "searchPlaceholder": "Nach Name / ID / Pfad suchen...", + "skillsList": "Skill-Liste", + "loadingSkills": "Skills werden geladen...", + "agentNotSupported": "Der aktuelle Agent unterstützt keine Skill-Verwaltung.", + "emptySkills": "Noch keine Skills. Klicke auf „Neuer Skill“, um einen zu erstellen.", + "newSkillTitle": "Neuer Skill", + "skillInfo": "Skill-Info", + "skillIdPlaceholder": "skill-id (Buchstaben/Zahlen/-/_/.)", + "skillsDirectoryWithPath": "Skill-Verzeichnis: {path}", + "skillsDirectoryNeedId": "Skill-Verzeichnis: Skill-ID eingeben, um den vollständigen Pfad zu erzeugen", + "markdownContent": "Markdown-Inhalt", + "editingStatus": "Bearbeiten", + "previewStatus": "Vorschau", + "contentPlaceholder": "Markdown-Inhalt des Skills eingeben...", + "metadataTitle": "Skill-Metadaten", + "onlyYamlMetadata": "Dieser Skill enthält nur YAML-Metadaten.", + "emptyContentHint": "Noch kein Inhalt. Klicke auf „Bearbeiten“, um zu starten.", + "loadingSkill": "Skill wird geladen...", + "emptyNoAgents": "Kein verfügbarer Agent.", + "actions": { + "preview": "Vorschau", + "edit": "Bearbeiten", + "openInWindow": "In neuem Fenster öffnen", + "delete": "Löschen", + "deleting": "Wird gelöscht...", + "refresh": "Aktualisieren", + "newSkill": "Neuer Skill", + "reset": "Zurücksetzen", + "save": "Speichern", + "saving": "Wird gespeichert...", + "cancel": "Abbrechen" + }, + "deleteDialog": { + "title": "Skill löschen", + "confirm": "Aktuellen Skill löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "confirmWithNamePrefix": "Skill", + "confirmWithNameSuffix": "löschen? Diese Aktion kann nicht rückgängig gemacht werden." + }, + "toasts": { + "loadFailed": "Skill konnte nicht geladen werden", + "openFolderFailed": "Ordner konnte nicht geöffnet werden", + "noSkillDirectory": "Kein verfügbares Skill-Verzeichnis für den aktuellen Agenten gefunden", + "nameRequired": "Skill-Name darf nicht leer sein", + "updated": "Skill aktualisiert", + "created": "Skill erstellt", + "saveFailed": "Skill konnte nicht gespeichert werden", + "deleted": "Skill gelöscht", + "deleteFailed": "Skill konnte nicht gelöscht werden" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "Wird geladen...", + "summary": { + "missingCommand": "(fehlender Befehl)", + "missingUrl": "(fehlende URL)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "Bitte ein Installationsprotokoll auswählen", + "fieldRequired": "{field} ist erforderlich", + "fieldNeedsBoolean": "{field} muss true oder false sein", + "fieldNeedsNumber": "{field} muss eine Zahl sein", + "fieldNeedsInteger": "{field} muss eine Ganzzahl sein", + "fieldInvalidJson": "{field} enthält ungültiges JSON: {message}", + "fieldOutOfRange": "Der Wert von {field} liegt außerhalb des erlaubten Bereichs", + "jsonEmpty": "{name} darf nicht leer sein", + "jsonInvalid": "{name} ist kein gültiges JSON: {message}", + "jsonMustBeObject": "{name} muss ein JSON-Objekt sein" + }, + "jsonNames": { + "localConfig": "MCP-Konfiguration", + "installConfig": "Installationskonfiguration" + }, + "toasts": { + "uninstalled": "MCP deinstalliert", + "uninstallFailed": "Deinstallation fehlgeschlagen: {message}", + "selectAtLeastOneApp": "Bitte mindestens eine Ziel-App auswählen", + "saveSuccess": "Gespeichert", + "saveFailed": "Speichern fehlgeschlagen: {message}", + "installed": "{name} installiert", + "installFailed": "Installation fehlgeschlagen: {message}" + }, + "installDialog": { + "title": "MCP-Installation bestätigen", + "descriptionWithName": "{name} in lokale Konfiguration installieren.", + "description": "Ziel-Apps für die Installation auswählen.", + "protocol": "Protokoll", + "selectProtocol": "Protokoll auswählen", + "parameters": "Konfigurationsparameter", + "booleanPlaceholder": "Bitte true/false auswählen", + "selectOneValue": "Wert auswählen", + "targetApps": "Ziel-Apps" + }, + "actions": { + "cancel": "Abbrechen", + "confirmInstall": "Installation bestätigen", + "installing": "Installieren", + "uninstall": "Deinstallieren", + "uninstalling": "Deinstallieren", + "viewDetails": "Details anzeigen", + "save": "Speichern", + "saving": "Speichern", + "install": "Installieren" + }, + "tabs": { + "local": "Lokales MCP", + "market": "MCP-Marktplatz" + }, + "local": { + "filterPlaceholder": "Lokales MCP filtern...", + "loadFailed": "Laden fehlgeschlagen: {message}", + "empty": "Kein lokales MCP erkannt.", + "description": "Die lokale MCP-Konfiguration kann direkt bearbeitet und gespeichert werden.", + "enabledApps": "Aktivierte Apps", + "configJson": "MCP-Konfiguration (JSON)" + }, + "market": { + "selectMarketplace": "Marktplatz auswählen", + "searchPlaceholder": "MCP suchen...", + "searchFailed": "Suche fehlgeschlagen: {message}", + "loadingList": "MCP-Liste wird geladen...", + "empty": "Keine MCP-Ergebnisse.", + "loadingDetail": "Marktplatzdetails werden geladen...", + "detailLoadFailed": "Details konnten nicht geladen werden: {message}", + "owner": "Inhaber: {owner}", + "namespace": "Namensraum: {namespace}", + "defaultInstallProtocol": "Standard-Installationsprotokoll", + "currentOptionParameterCount": "Anzahl der Parameter der aktuellen Option: {count}", + "installConfigDescription": "Installationskonfiguration (JSON, vor der Installation bearbeitbar; Änderungen überschreiben das Protokoll-/Parameterformular)", + "selectLeftToView": "Wähle links ein Marktplatz-MCP aus, um Details anzuzeigen." + }, + "badges": { + "verified": "Verifiziert", + "remote": "Remote", + "hasHomepage": "Hat Homepage", + "uses": "{count} Nutzungen", + "deployed": "Bereitgestellt", + "notDeployed": "Nicht bereitgestellt" + }, + "selectLeftMcp": "Wähle links ein MCP aus." + }, + "AcpAgentSettings": { + "title": "Agent SDK-Verwaltung", + "description": "Verwalten Sie Agent-SDK-Verbindung, Aktivierungsstatus, Umgebungsvariablen, Konfigurationsverwaltung und Versions-Preflight-Infos zentral an einem Ort.", + "loadingAgents": "Agentenliste wird geladen...", + "agentList": "Agentenliste", + "emptyNoAgent": "Keine verfügbaren Agenten.", + "configManagement": "Konfigurationsverwaltung", + "envVars": "Umgebungsvariablen", + "nativeJsonConfig": "Natives JSON-Config", + "modelHintDefault": "Leer lassen, um das System-Standardmodell zu verwenden.", + "generalConfigDescriptionClaude": "Unterstützt schnelle Konfiguration von API-URL, API-Key und Claude-Modellen und synchronisiert mit der nativen JSON-Konfiguration.", + "generalConfigDescriptionDefault": "Unterstützt wichtige Konfigurationseingaben (API URL, API Key, Model) und native JSON-Konfigurationsverwaltung.", + "actions": { + "dragSort": "Zum Neuordnen ziehen", + "dragSortAgent": "{name} zum Neuordnen ziehen", + "refreshCheck": "Prüfung aktualisieren", + "refreshCheckAgent": "Prüfung für {name} aktualisieren", + "clickEnable": "Klicken, um {name} zu aktivieren", + "clickDisable": "Klicken, um {name} zu deaktivieren", + "install": "Installieren", + "upgrade": "Aktualisieren", + "uninstall": "Deinstallieren", + "uninstalling": "Wird deinstalliert...", + "saveEnvVars": "Umgebungsvariablen speichern", + "saving": "Speichern...", + "saveCodexConfig": "Codex-Konfiguration speichern", + "saveGeminiConfig": "Gemini-Konfiguration speichern", + "saveOpenCodeConfig": "OpenCode-Konfiguration speichern", + "saveOpenClawConfig": "OpenClaw-Konfiguration speichern", + "saveConfigManagement": "Konfigurationsverwaltung speichern", + "saveCurrentProvider": "Aktuellen Provider speichern", + "showApiKey": "API-Key anzeigen", + "hideApiKey": "API-Key ausblenden", + "showKey": "Schlüssel anzeigen", + "hideKey": "Schlüssel ausblenden", + "showToken": "Token anzeigen", + "hideToken": "Token ausblenden", + "cancel": "Abbrechen", + "delete": "Löschen", + "deleting": "Löschen...", + "confirmDelete": "Löschen bestätigen", + "confirmUninstall": "Deinstallation bestätigen" + }, + "status": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "unchecked": "Nicht geprüft", + "agentEnabledAria": "{name} aktiviert", + "agentEnabledSwitch": "{name} Aktivierungsschalter" + }, + "preflight": { + "count": "Preflight-Elemente: {count}", + "notRun": "Prüfungen wurden noch nicht ausgeführt." + }, + "codex": { + "configDescription": "Unterstützt schnelle Konfiguration von API-URL, API-Key, Modellname und reasoning effort und synchronisiert mit `auth.json` / `config.toml`.", + "selectProvider": "Provider auswählen", + "modelName": "Modellname", + "selectReasoningEffort": "Reasoning Effort auswählen", + "enableWebsocket": "WebSocket aktivieren", + "enableWebsocketAria": "WebSocket für Codex Provider aktivieren", + "authJsonNative": "auth.json (nativ)", + "configTomlNative": "config.toml (nativ)" + }, + "gemini": { + "authConfig": "Gemini-Auth-Konfiguration", + "authConfigDescription": "Ausgerichtet an den Gemini CLI-Authentifizierungsdokumenten, mit Unterstützung für benutzerdefinierten Endpoint, Google-Login, Gemini API Key und Vertex AI (ADC / Servicekonto / API Key).", + "authMode": "Auth-Modus", + "selectAuthMode": "Auth-Modus auswählen", + "viewAuthDoc": "Auth-Dokumentation anzeigen", + "mode": { + "custom": "Benutzerdefinierter Endpoint", + "loginGoogle": "Google-Login (OAuth)", + "vertexServiceAccount": "Vertex AI (Servicekonto)" + }, + "hint": { + "custom": "API URL, API Key und Modell ausfüllen; wird auf GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL abgebildet.", + "loginGoogle": "Gemini zuerst im Terminal ausführen und Google-Login abschließen; API key ist nicht erforderlich.", + "geminiApiKey": "Beim Verwenden der Gemini API GEMINI_API_KEY eintragen.", + "vertexAdc": "gcloud ADC verwenden; GOOGLE_CLOUD_PROJECT und GOOGLE_CLOUD_LOCATION werden empfohlen.", + "vertexServiceAccount": "Pfad zur Servicekonto-JSON in GOOGLE_APPLICATION_CREDENTIALS setzen.", + "vertexApiKey": "Beim Verwenden eines Vertex AI API Keys GOOGLE_API_KEY eintragen." + } + }, + "openCode": { + "configManagement": "OpenCode-Konfigurationsverwaltung", + "configDescription": "An OpenCode-`provider`-Schema ausgerichtet, unterstützt Multi-Provider-Verwaltung und bidirektionale Synchronisierung mit nativen JSON-Dateien.", + "providerManagement": "Provider-Verwaltung", + "providerCount": "{count} Provider", + "addProvider": "Provider hinzufügen", + "emptyProvider": "Noch kein Provider vorhanden. ID eingeben und dann auf „Provider hinzufügen“ klicken.", + "providerEnabledState": "{providerId} Aktivierungsstatus", + "selectProviderNpm": "provider.npm auswählen", + "notSet": "Nicht gesetzt", + "modelManagement": "Modellverwaltung", + "modelCount": "{count} Modelle", + "modelDescription": "Ausgerichtet an OpenCode `provider.models`. Schnellverwaltung unterstützt derzeit `name` / `id`; andere erweiterte Felder bleiben erhalten und können unten im nativen JSON bearbeitet werden.", + "addModel": "Modell hinzufügen", + "emptyModel": "Noch kein Modell vorhanden. model id eingeben und dann auf „Modell hinzufügen“ klicken.", + "modelId": "Modell-ID", + "modelName": "Modellname", + "deleteModel": "Modell {modelId} löschen", + "nativeJsonConfig": "OpenCode Native JSON-Konfiguration" + }, + "openClaw": { + "gatewayConfig": "Gateway-Konfiguration", + "gatewayDescription": "OpenClaw-Gateway-Verbindung konfigurieren. Unterstützt lokales oder entferntes Gateway.", + "gatewayUrlHint": "Leer lassen, um gateway.remote.url aus der lokalen openclaw-Konfiguration zu verwenden.", + "gatewayTokenPlaceholder": "Gateway-Auth-Token", + "gatewayTokenHint": "Wenn möglich token-file statt Klartext-Token verwenden; über openclaw CLI konfigurieren.", + "sessionKeyHint": "Optional. Gateway-Session-Key angeben; leer lassen für automatische Zuweisung einer isolierten Session." + }, + "claude": { + "mainModel": "Hauptmodell", + "reasoningModel": "Reasoning-Modell (thinking)", + "haikuDefaultModel": "Standard-Haiku-Modell", + "sonnetDefaultModel": "Standard-Sonnet-Modell", + "opusDefaultModel": "Standard-Opus-Modell" + }, + "dialogs": { + "confirmDeleteProvider": "Provider {providerId} löschen?", + "confirmDeleteProviderDescription": "OpenCode-Konfiguration und auth JSON werden zusammen aktualisiert. Diese Aktion kann nicht rückgängig gemacht werden.", + "confirmUninstall": "{name} deinstallieren?", + "confirmUninstallDescription": "Dadurch wird die lokal installierte Version entfernt. Eine Neuinstallation ist später möglich." + }, + "errors": { + "nativeJsonMustBeObject": "Native JSON-Konfiguration muss ein Objekt sein", + "nativeJsonInvalid": "Formatfehler in nativer JSON-Konfiguration: {message}", + "openCodeAuthMustBeObject": "OpenCode auth.json muss ein JSON-Objekt sein", + "openCodeAuthInvalid": "Formatfehler in OpenCode auth.json: {message}", + "authMustBeObject": "auth.json muss ein JSON-Objekt sein", + "authInvalid": "Formatfehler in auth.json: {message}", + "providerIdPattern": "Provider-ID unterstützt nur Buchstaben, Zahlen, Unterstrich, Punkt und Bindestrich", + "providerExists": "Provider '{providerId}' existiert bereits", + "modelIdPattern": "Model-ID unterstützt nur Buchstaben, Zahlen, Unterstrich, Punkt, Doppelpunkt und Bindestrich", + "modelExists": "Model '{modelId}' existiert bereits" + }, + "warnings": { + "nativeJsonRecoveredStructured": "Native JSON-Konfiguration ist ungültig; auf strukturierte Konfiguration zurückgesetzt", + "nativeJsonRecoveredOpenCode": "Native JSON-Konfiguration ist ungültig; auf OpenCode-strukturierte Konfiguration zurückgesetzt", + "openCodeAuthRecovered": "OpenCode auth.json ist ungültig; auf Standardkonfiguration zurückgesetzt", + "authRecoveredStructured": "auth.json ist ungültig; auf strukturierte Konfiguration zurückgesetzt" + }, + "toasts": { + "agentActionCompleted": "{name} {action} abgeschlossen", + "agentActionFailed": "{name} {action} fehlgeschlagen", + "localVersion": "Lokale Version: {version}", + "installCompletedVersionLater": "Installation abgeschlossen, Version wird bei der nächsten Prüfung aktualisiert", + "uninstallCompleted": "Deinstallation von {name} abgeschlossen", + "uninstallFailed": "Deinstallation von {name} fehlgeschlagen", + "localVersionRemoved": "Lokale Version entfernt", + "saveAgentOrderFailed": "Speichern der Agent-Reihenfolge fehlgeschlagen", + "saveAgentSwitchFailed": "Speichern des Agent-Schalters fehlgeschlagen", + "saveEnvFailed": "Speichern der Umgebungsvariablen fehlgeschlagen", + "codexSaved": "Codex-Konfiguration gespeichert", + "saveCodexNativeFailed": "Speichern der nativen Codex-Konfiguration fehlgeschlagen", + "geminiSaved": "Gemini-Konfiguration gespeichert", + "saveGeminiFailed": "Speichern der Gemini-Konfiguration fehlgeschlagen", + "providerDeleted": "Provider {providerId} gelöscht", + "providerDeleteFailed": "Löschen von Provider {providerId} fehlgeschlagen", + "providerSaved": "Provider {providerId} gespeichert", + "saveProviderFailed": "Speichern von Provider {providerId} fehlgeschlagen", + "openCodeConfigSynced": "OpenCode-Konfiguration und auth JSON wurden synchronisiert.", + "openCodeSaved": "OpenCode-Konfiguration gespeichert", + "saveOpenCodeFailed": "Speichern der OpenCode-Konfiguration fehlgeschlagen", + "openClawSaved": "OpenClaw-Konfiguration gespeichert", + "saveOpenClawFailed": "Speichern der OpenClaw-Konfiguration fehlgeschlagen", + "configSaved": "Konfiguration gespeichert", + "saveConfigManagementFailed": "Speichern der Konfigurationsverwaltung fehlgeschlagen" + }, + "version": { + "statusLabel": "Versionsstatus", + "notInstalled": "Nicht installiert", + "remoteLocal": "Remote: {remoteVersion} · Lokal: {localVersion}", + "platformUnsupported": "{versionText}. Aktuelle Plattform unterstützt diesen Agenten nicht.", + "clickInstall": "{versionText}. Rechts auf Installieren klicken.", + "localUnrecognized": "{versionText}. Lokale Version ist nicht vergleichbar; zum Überschreiben bitte Upgrade versuchen.", + "upgradeAvailable": "{versionText}. Upgrade verfügbar.", + "remoteUnavailable": "{versionText}. Remote-Version ist derzeit nicht verfügbar.", + "latest": "{versionText}. Bereits aktuell." + } + }, + "SettingsPages": { + "agentsLoading": "Agent-Einstellungen werden geladen..." + }, + "CommitPage": { + "title": "Einchecken", + "invalidFolderId": "Ungültige Ordner-ID", + "loadingRepo": "Repository wird geladen..." + }, + "Folder": { + "common": { + "all": "Alle", + "cancel": "Abbrechen", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeAll": "Alle schließen", + "confirm": "Bestätigen", + "save": "Speichern", + "delete": "Löschen", + "rename": "Umbenennen", + "loading": "Wird geladen...", + "refresh": "Aktualisieren", + "refreshing": "Aktualisierung...", + "create": "Erstellen", + "createAndSwitch": "Erstellen und wechseln", + "openFile": "Datei öffnen", + "viewDiff": "Diff anzeigen" + }, + "modes": { + "conversation": "Konversationsmodus", + "fusion": "Fusionsmodus", + "files": "Dateimodus", + "workspaceModesAria": "Workspace-Modi" + }, + "statusLabels": { + "in_progress": "In Bearbeitung", + "pending_review": "Prüfung", + "completed": "Abgeschlossen", + "cancelled": "Abgebrochen" + }, + "sidebar": { + "title": "Konversationen", + "locateActiveConversation": "Aktive Konversation finden", + "expandAllGroups": "Alle Gruppen erweitern", + "collapseAllGroups": "Alle Gruppen einklappen", + "newConversation": "Neue Konversation", + "noConversationsFound": "Keine Konversationen gefunden.", + "importLocalSessions": "Lokale Sitzungen importieren", + "importing": "Importiere...", + "error": "Fehler: {message}", + "completeAllSessions": "Alle Sitzungen abschließen", + "completeAllReviewTitle": "Alle Review-Sitzungen abschließen?", + "completeAllReviewDescription": "Dadurch werden alle {count, plural, one {# Sitzung} other {# Sitzungen}} im Review als abgeschlossen markiert.", + "completing": "Abschließen...", + "toasts": { + "importedSessions": "{imported, plural, one {# Sitzung} other {# Sitzungen}} importiert, {skipped} übersprungen", + "noNewSessionsFound": "Keine neuen Sitzungen gefunden ({skipped} übersprungen)", + "importFailed": "Import fehlgeschlagen: {message}", + "reviewCompleted": "{count, plural, one {# Review-Sitzung} other {# Review-Sitzungen}} als abgeschlossen markiert", + "completeReviewFailed": "Review-Sitzungen konnten nicht abgeschlossen werden: {message}" + } + }, + "conversation": { + "reloadFailed": "Konversation konnte nicht neu geladen werden: {message}", + "reloaded": "Konversation neu geladen", + "reload": "Neu laden", + "newConversation": "Neue Konversation", + "closeConversation": "Konversation schließen" + }, + "conversationCard": { + "untitledConversation": "Unbenannte Konversation", + "newConversation": "Neue Konversation", + "rename": "Umbenennen", + "status": "Zustand", + "delete": "Löschen", + "importLocalSessions": "Lokale Sitzungen importieren", + "importing": "Importiere...", + "renameConversation": "Konversation umbenennen", + "deleteConversationTitle": "Konversation löschen?", + "deleteConversationDescription": "\"{title}\" wird gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + "cancel": "Abbrechen", + "save": "Speichern" + }, + "search": { + "dialogTitle": "Konversationen suchen", + "placeholder": "Konversationen suchen...", + "allAgents": "Alle", + "searching": "Suche...", + "typeToSearch": "Tippen, um Konversationen zu suchen", + "noResults": "Keine Ergebnisse gefunden.", + "untitledConversation": "Unbenannte Konversation" + }, + "folderTitleBar": { + "showSidebar": "Seitenleiste anzeigen", + "hideSidebar": "Seitenleiste ausblenden", + "toggleTerminal": "Terminal umschalten", + "toggleAuxPanel": "Hilfspaneel umschalten", + "search": "Suchen", + "openSettings": "Einstellungen öffnen", + "withShortcut": "{label} (Tastenkürzel: {shortcut})" + }, + "statusBar": { + "connection": { + "connected": "Verbunden", + "connecting": "Verbinde...", + "downloading": "Lade herunter...", + "prompting": "Antworte...", + "error": "Verbindungsfehler", + "disconnected": "Getrennt", + "tooltip": "{agent}: {status}", + "tooltipError": "{agent}: {error}" + }, + "tasks": { + "title": "Aufgaben" + }, + "alerts": { + "title": "Warnungen", + "empty": "Keine Warnungen" + }, + "stats": { + "conversations": "{count} Konversationen", + "summary": "{conversations} Konversationen / {messages} Nachrichten" + }, + "tokens": { + "contextWindowUsageAria": "Kontextfenster-Nutzung", + "contextWindow": "Kontextfenster", + "usedMax": "Verwendet / Max", + "tokenUsage": "Token-Nutzung", + "input": "Eingabe", + "output": "Ausgabe", + "cacheRead": "Cache lesen", + "cacheWrite": "Cache schreiben", + "total": "Gesamt" + } + }, + "auxPanel": { + "tabs": { + "diff": "Unterschiede", + "files": "Dateien", + "changes": "Änderungen", + "commits": "Einträge" + } + }, + "windowControls": { + "minimizeWindow": "Fenster minimieren", + "minimize": "Minimieren", + "maximizeWindow": "Fenster maximieren", + "maximize": "Maximieren", + "restoreWindow": "Fenster wiederherstellen", + "restore": "Wiederherstellen", + "closeWindow": "Fenster schließen", + "close": "Schließen" + }, + "tabs": { + "closeConversationTab": "Konversationstab schließen", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeAll": "Alle schließen" + }, + "fileWorkspace": { + "files": "Dateien", + "closeFileTab": "Dateitab schließen", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeAll": "Alle schließen" + }, + "terminal": { + "rename": "Umbenennen", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeAll": "Alle schließen", + "hideTerminal": "Terminal ausblenden ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "Aktuelle Antwort", + "noDiffDataAvailable": "Keine Diff-Daten verfügbar für {filePath}", + "loading": "Wird geladen...", + "noFileChangesInConversation": "Keine Dateiänderungen in dieser Konversation gefunden", + "openConversationToSeeChanges": "Öffne eine Konversation, um Dateiänderungen zu sehen", + "remove": "Entfernen", + "changeCount": "{count, plural, one {# Änderung} other {# Änderungen}}", + "fileCount": "{count, plural, one {# Datei} other {# Dateien}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "Ordner", + "openFolder": "Ordner öffnen", + "cloneRepository": "Repository klonen", + "opened": "Geöffnet", + "recentOpen": "Zuletzt geöffnet" + }, + "fileWorkspacePanel": { + "viewDiff": "Diff anzeigen", + "openFile": "Datei öffnen", + "fileCount": "{count, plural, one {# Datei} other {# Dateien}}", + "openFileOrDiff": "Öffne eine Datei oder Diff im rechten Panel", + "disk": "Datenträger", + "head": "HEAD", + "unsaved": "Ungespeichert", + "workingTree": "Arbeitsverzeichnis", + "loading": "Wird geladen...", + "compareWithBranch": "{path} · vergleichen mit {branch}", + "hunkCount": "{count, plural, one {# Hunk} other {# Hunks}}", + "prev": "Zurück", + "next": "Weiter", + "jumpToLine": "Zu Zeile {line} springen", + "noParsedDiffSections": "Keine geparsten Diff-Abschnitte", + "loadingEditor": "Editor wird geladen..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "Code-Commit abgeschlossen", + "committedFiles": "{count, plural, one {# Datei committet} other {# Dateien committet}}", + "taskCompleted": "{label} abgeschlossen", + "taskFailed": "{label} fehlgeschlagen", + "mergeNoNewCommits": "{branchName} hat keine neuen Commits", + "mergedCommits": "{count, plural, one {# Commit zusammengeführt} other {# Commits zusammengeführt}}", + "allFilesUpToDate": "Alle Dateien sind aktuell", + "updatedFiles": "{count, plural, one {# Datei aktualisiert} other {# Dateien aktualisiert}}", + "openCommitWindowFailed": "Commit-Fenster konnte nicht geöffnet werden", + "upstreamSet": "Upstream-Branch wurde gesetzt", + "upstreamSetAndPushed": "Upstream-Branch gesetzt und {count, plural, one {# Commit} other {# Commits}} gepusht", + "noCommitsToPush": "Keine Commits zum Pushen", + "pushedCommits": "{count, plural, one {# Commit gepusht} other {# Commits gepusht}}" + }, + "tasks": { + "newBranch": "Branch {name} erstellen", + "newWorktree": "Worktree {name} erstellen", + "checkoutTo": "Zu {branchName} wechseln", + "mergeBranch": "{branchName} mergen", + "rebaseTo": "Auf {branchName} rebasen", + "deleteBranch": "Branch {branchName} löschen", + "initGitRepo": "Git-Repository initialisieren", + "pullCode": "Code pullen", + "fetchInfo": "Informationen fetchen", + "pushCode": "Code pushen", + "stashChanges": "Änderungen stashen", + "stashPop": "Stash anwenden" + }, + "confirm": { + "mergeTitle": "Branch mergen", + "rebaseTitle": "Branch rebasen", + "deleteTitle": "Branch löschen", + "mergeDescription": "{branchName} in den aktuellen Branch {currentBranch} mergen?", + "rebaseDescription": "Aktuellen Branch {currentBranch} auf {branchName} rebasen?", + "deleteDescription": "Branch {branchName} löschen? Diese Aktion kann nicht rückgängig gemacht werden." + }, + "current": "Aktuell", + "switchToBranch": "Zu diesem Branch wechseln", + "mergeBranchIntoCurrent": "{branchName} in {currentBranch} mergen", + "rebaseCurrentToBranch": "{currentBranch} auf {branchName} rebasen", + "deleteBranch": "Branch löschen", + "versionControl": "Versionskontrolle", + "initGitRepo": "Git-Repository initialisieren", + "pullCode": "Code pullen", + "fetchRemoteBranches": "Remote-Branches fetchen", + "openCommitWindow": "Code committen...", + "pushCode": "Hochladen...", + "newBranch": "Neuer Branch...", + "newWorktree": "Neuer Worktree...", + "stashChanges": "Änderungen stashen", + "stashPop": "Stash anwenden...", + "localBranches": "Lokale Branches ({count, plural, one {#} other {#}})", + "noLocalBranches": "Keine lokalen Branches", + "remoteBranches": "Remote-Branches ({count, plural, one {#} other {#}})", + "noRemoteBranches": "Keine Remote-Branches", + "parentBranchHint": "Der aktuelle Branch wurde von {parentBranch} erstellt. Klicken, um {parentBranch} in den aktuellen Branch zu mergen.", + "dialogs": { + "newBranchTitle": "Neuer Branch", + "newBranchDescription": "Neuen Branch vom aktuellen Branch {branch} erstellen", + "branchNamePlaceholder": "Branch-Name", + "newWorktreeTitle": "Neuer Worktree", + "newWorktreeDescription": "Neuen Worktree vom aktuellen Branch {branch} erstellen", + "branchNameLabel": "Branch-Name", + "worktreePathLabel": "Worktree-Pfad", + "worktreePathPlaceholder": "Worktree-Pfad" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "Code-Commit abgeschlossen", + "committedFiles": "{count, plural, one {# Datei committet} other {# Dateien committet}}", + "addedToVcs": "Zu VCS hinzugefügt", + "addToVcsFailed": "Hinzufügen zu VCS fehlgeschlagen", + "fileDeleted": "Datei gelöscht", + "deleteFailed": "Löschen fehlgeschlagen", + "fileRolledBack": "Datei zurückgesetzt", + "rollbackFailed": "Rollback fehlgeschlagen" + }, + "confirm": { + "deleteTitle": "Löschen bestätigen", + "deleteDescription": "Datei \"{file}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "rollbackTitle": "Rollback bestätigen", + "rollbackDescription": "Datei \"{file}\" auf HEAD zurücksetzen? Ungespeicherte Änderungen gehen verloren." + }, + "actions": { + "select": "Auswählen", + "unselect": "Auswahl aufheben", + "rollback": "Zurücksetzen", + "addToVcs": "Zu VCS hinzufügen" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "Auswahl aller Dateien aufheben", + "selectAllFiles": "Alle Dateien auswählen", + "unselectTracked": "Auswahl verfolgter Änderungen aufheben", + "selectTracked": "Verfolgte Änderungen auswählen", + "unselectUntracked": "Auswahl nicht verfolgter Dateien aufheben", + "selectUntracked": "Nicht verfolgte Dateien auswählen" + }, + "loading": "Wird geladen...", + "selectionCount": "{selected} / {total} Dateien", + "emptyFiles": "Keine geänderten Dateien", + "trackedChanges": "Verfolgte Änderungen ({count})", + "untrackedFiles": "Nicht verfolgte Dateien ({count})", + "commitMessage": "Commit-Nachricht", + "commitMessagePlaceholder": "Commit-Nachricht eingeben...", + "commitButton": "Einchecken ({count})", + "head": "HEAD", + "workingTree": "Arbeitsverzeichnis", + "clickFileToDiff": "Dateinamen anklicken, um Diff zu sehen", + "loadingDiff": "Diff wird geladen..." + }, + "gitLogTab": { + "filesTitle": "Dateien", + "expandAllFiles": "Alle Dateien ausklappen", + "collapseAllFiles": "Alle Dateien einklappen", + "workspace": "Arbeitsbereich", + "retry": "Erneut versuchen", + "noCommitsFound": "Keine Commits gefunden", + "hash": "Hash-Wert", + "copyHash": "Hash kopieren", + "author": "Autor", + "noFileChangeDetails": "Keine Details zu Dateiänderungen verfügbar.", + "branchesTitle": "Zweige", + "loadingBranches": "Branches werden geladen...", + "noContainingBranches": "Keine enthaltenen Branches gefunden.", + "newBranch": "Neuer Branch...", + "viewCommitDiffAria": "Diff für Commit {hash} anzeigen", + "copyFullCommitHashAria": "Vollständigen Commit-Hash {hash} kopieren", + "pushStatus": { + "pushed": "Zum Remote gepusht", + "notPushed": "Nicht zum Remote gepusht", + "unknown": "Push-Status unbekannt (kein Upstream konfiguriert)" + }, + "time": { + "monthsAgo": "{count, plural, one {vor # Monat} other {vor # Monaten}}", + "daysAgo": "{count, plural, one {vor # Tag} other {vor # Tagen}}", + "hoursAgo": "{count, plural, one {vor # Stunde} other {vor # Stunden}}", + "minsAgo": "{count, plural, one {vor # Min} other {vor # Min}}", + "justNow": "gerade eben" + }, + "toasts": { + "createdAndSwitchedNewBranch": "Neuen Branch erstellt und gewechselt", + "newBranchFromCommit": "{name} (aus {shortHash})", + "createBranchFailed": "Branch konnte nicht erstellt werden" + }, + "branchSelector": { + "selectBranchPlaceholder": "Branch auswählen...", + "localBranches": "Lokale Branches", + "current": "Aktuell", + "remoteBranches": "Remote-Branches", + "refreshCommitHistory": "Commit-Verlauf aktualisieren" + }, + "dialogs": { + "newBranchTitle": "Neuer Branch", + "newBranchDescription": "Erstelle einen neuen Branch mit Commit {shortHash} als letztem Commit.", + "branchNamePlaceholder": "Branch-Name" + } + }, + "gitChangesTab": { + "workspace": "Arbeitsbereich", + "noChanges": "Keine lokalen Änderungen", + "trackedChanges": "Verfolgte Änderungen ({count})", + "untrackedFiles": "Nicht verfolgte Dateien ({count})", + "expandTracked": "Verfolgte Änderungen ausklappen", + "collapseTracked": "Verfolgte Änderungen einklappen", + "expandUntracked": "Nicht verfolgte Dateien ausklappen", + "collapseUntracked": "Nicht verfolgte Dateien einklappen", + "actions": { + "commitCode": "Code committen", + "rollback": "Zurücksetzen", + "addToVcs": "Zu VCS hinzufügen" + }, + "toasts": { + "noAddableFilesInDir": "Keine geänderten Dateien in diesem Verzeichnis können zu VCS hinzugefügt werden", + "noRollbackFilesInDir": "Keine geänderten Dateien in diesem Verzeichnis können zurückgesetzt werden", + "addedToVcs": "{name} zu VCS hinzugefügt", + "addToVcsFailed": "Hinzufügen zu VCS fehlgeschlagen", + "openCommitWindowFailed": "Commit-Fenster konnte nicht geöffnet werden", + "rolledBack": "{name} zurückgesetzt", + "rollbackFailed": "Rollback fehlgeschlagen", + "addedFilesToVcs": "{count, plural, one {# Datei} other {# Dateien}} zu VCS hinzugefügt", + "rolledBackFiles": "{count, plural, one {# Datei zurückgesetzt} other {# Dateien zurückgesetzt}}" + }, + "directoryDialog": { + "descriptionAdd": "Dateien unter Verzeichnis {path} auswählen, um sie zu VCS hinzuzufügen.", + "descriptionRollback": "Dateien unter Verzeichnis {path} auswählen, um sie zurückzusetzen.", + "descriptionFallback": "Dateien auswählen, um fortzufahren.", + "selectionCount": "{selected} / {total} Dateien ausgewählt", + "selectAll": "Alle auswählen", + "unselectAll": "Auswahl aller aufheben", + "loadingCandidates": "Verzeichnisänderungen werden geladen...", + "noOperableFiles": "Keine bearbeitbaren Dateien" + }, + "rollbackConfirm": { + "title": "Rollback bestätigen", + "descriptionWithTarget": "Lokale Änderungen für {kind} \"{name}\" zurücksetzen?", + "descriptionFallback": "Lokale Änderungen zurücksetzen?", + "kindDirectory": "Verzeichnis", + "kindFile": "Datei" + } + }, + "tabContext": { + "loadingConversation": "Wird geladen...", + "untitledConversation": "Unbenannte Konversation", + "newConversation": "Neue Konversation" + }, + "fileTreeTab": { + "workspace": "Arbeitsbereich", + "retry": "Erneut versuchen", + "git": "Git", + "openInFileManager": "Im Dateimanager öffnen", + "openInFinder": "In Finder öffnen", + "openInExplorer": "In Explorer öffnen", + "attachToCurrentSession": "An aktuelle Sitzung anhängen", + "compareWithBranch": "Mit Branch vergleichen...", + "reloadFromDisk": "Von Datenträger neu laden", + "openIn": "Öffnen in", + "openInTerminal": "Im Terminal öffnen", + "actions": { + "select": "Auswählen", + "unselect": "Auswahl aufheben", + "commitCode": "Code committen", + "rollback": "Zurücksetzen", + "addToVcs": "Zu VCS hinzufügen" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "Verzeichnis konnte nicht geöffnet werden", + "openBuiltinTerminalFailed": "Integriertes Terminal konnte nicht geöffnet werden", + "openCommitWindowFailed": "Commit-Fenster konnte nicht geöffnet werden", + "noAddableFilesInDir": "Keine geänderten Dateien in diesem Verzeichnis können zu VCS hinzugefügt werden", + "noRollbackFilesInDir": "Keine geänderten Dateien in diesem Verzeichnis können zurückgesetzt werden", + "addedToVcs": "{name} zu VCS hinzugefügt", + "addToVcsFailed": "Hinzufügen zu VCS fehlgeschlagen", + "loadBranchesFailed": "Branches konnten nicht geladen werden", + "renameFailed": "Umbenennen fehlgeschlagen", + "deleteFailed": "Löschen fehlgeschlagen", + "rolledBack": "{name} zurückgesetzt", + "rollbackFailed": "Zurücksetzen fehlgeschlagen", + "addedFilesToVcs": "{count, plural, one {# Datei zu VCS hinzugefügt} other {# Dateien zu VCS hinzugefügt}}", + "rolledBackFiles": "{count, plural, one {# Datei zurückgesetzt} other {# Dateien zurückgesetzt}}", + "savedAsCopy": "Als Kopie gespeichert", + "saveCopyFailed": "Speichern als Kopie fehlgeschlagen", + "watchStartFailed": "Dateiwatch konnte nicht gestartet werden" + }, + "renameDialog": { + "renameDirectory": "Verzeichnis umbenennen", + "renameFile": "Datei umbenennen", + "description": "Geben Sie einen neuen Namen ein (nur Name, kein Pfad).", + "placeholderDirectory": "neuer-ordnername", + "placeholderFile": "neuer-dateiname.ext" + }, + "directoryDialog": { + "descriptionAdd": "Wählen Sie Dateien im Verzeichnis {path} aus, um sie zu VCS hinzuzufügen.", + "descriptionRollback": "Wählen Sie Dateien im Verzeichnis {path} aus, um sie zurückzusetzen.", + "descriptionFallback": "Wählen Sie Dateien aus, um fortzufahren.", + "selectionCount": "{selected} / {total} Dateien ausgewählt", + "selectAll": "Alle auswählen", + "unselectAll": "Auswahl aufheben", + "loadingCandidates": "Verzeichnisänderungen werden geladen...", + "noOperableFiles": "Keine bearbeitbaren Dateien" + }, + "compareDialog": { + "title": "Mit Branch vergleichen", + "descriptionWithTarget": "Wählen Sie einen Branch und vergleichen Sie mit {kind} {path}", + "descriptionFallback": "Wählen Sie einen Branch zum Vergleichen.", + "kindDirectory": "Verzeichnis", + "kindFile": "Datei", + "filterPlaceholder": "Branches filtern, z. B. main / origin/main", + "singleClickHint": "Klicken Sie auf einen Branch, um direkt zu vergleichen", + "loadingBranches": "Branches werden geladen...", + "recentBranches": "Letzte Branches ({count})", + "noCurrentBranch": "Kein aktueller Branch", + "localBranches": "Lokale Branches ({count})", + "remoteBranches": "Remote-Branches ({count})", + "noMatchingBranches": "Keine passenden Branches" + }, + "externalConflictDialog": { + "title": "Externe Dateiänderungen erkannt", + "descriptionWithPath": "Datei {path} wurde auf dem Datenträger geändert, und aktuelle Bearbeitungen sind nicht gespeichert.", + "descriptionFallback": "Aktuelle Datei wurde auf dem Datenträger geändert, und aktuelle Bearbeitungen sind nicht gespeichert.", + "compare": "Vergleichen", + "savingCopy": "Kopie wird gespeichert...", + "saveAsCopy": "Als Kopie speichern", + "reload": "Neu laden" + }, + "deleteConfirm": { + "title": "Löschen bestätigen", + "descriptionWithTarget": "{kind} \"{name}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "descriptionFallback": "Diese Aktion kann nicht rückgängig gemacht werden.", + "kindDirectory": "Verzeichnis", + "kindFile": "Datei" + }, + "rollbackConfirm": { + "title": "Zurücksetzen bestätigen", + "descriptionWithTarget": "Lokale Änderungen für Datei \"{name}\" zurücksetzen?", + "descriptionFallback": "Lokale Änderungen für diese Datei zurücksetzen?" + }, + "terminalTitle": "Konsole · {name}" + }, + "commandDropdown": { + "loading": "Wird geladen...", + "addCommand": "Befehl hinzufügen", + "manageCommands": "Befehle verwalten...", + "runCommandTitle": "Ausführen: {command}", + "stopCommandTitle": "Stoppen: {command}", + "manageDialog": { + "title": "Befehle verwalten", + "empty": "Noch keine Befehle", + "namePlaceholder": "Bezeichnung", + "commandPlaceholder": "Befehl", + "add": "Hinzufügen", + "saving": "Speichern..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "„{title}“ ohne Speichern schließen?", + "confirmCloseOtherDirtyTabs": "Andere Tabs mit ungespeicherten Änderungen schließen?", + "confirmCloseAllDirtyTabs": "Alle Tabs mit ungespeicherten Änderungen schließen?", + "unableLoadContent": "Inhalt konnte nicht geladen werden.\n\n{message}", + "previewRequestTimedOut": "Vorschauanfrage hat das Zeitlimit überschritten", + "diffRequestTimedOut": "Diff-Anfrage hat das Zeitlimit überschritten", + "branchCompareRequestTimedOut": "Branch-Vergleichsanfrage hat das Zeitlimit überschritten", + "commitDiffRequestTimedOut": "Commit-Diff-Anfrage hat das Zeitlimit überschritten", + "saveRequestTimedOut": "Speicheranfrage hat das Zeitlimit überschritten", + "reloadRequestTimedOut": "Neuladeanfrage hat das Zeitlimit überschritten", + "noChanges": "Keine Änderungen.", + "noDiffOutput": "Keine Diff-Ausgabe.", + "diffTitleWorkspace": "Diff · Arbeitsbereich", + "diffDescriptionWorkingTree": "Working Tree (HEAD)", + "diffTitleFile": "Unterschied · {name}", + "compareTitleFile": "Vergleich · {name}", + "compareTitleBranch": "Vergleich · {branch}", + "compareDescriptionPath": "{path} · vergleichen mit {branch}", + "compareDescriptionBranch": "vergleichen mit {branch}", + "diffTitleCommitFile": "Unterschied · {name} @ {hash}", + "diffTitleCommit": "Unterschied · {hash}", + "diffDescriptionCommitPath": "{path} · Commit {commit}", + "diffDescriptionCommit": "Commit {commit}", + "diffTitleConflictFile": "Konflikt · {name}", + "diffDescriptionConflict": "{path} · Disk vs ungespeichert" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "Agenten-Einstellungen öffnen", + "retry": "Erneut versuchen" + }, + "agentsSetupHint": "Öffnen Sie Einstellungen > Agenten, um die Installation zu verwalten.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "Aktuelle Agenten-Konfiguration kann nicht gelesen werden.", + "disabled": "{agent} ist in den Agenten-Einstellungen deaktiviert. Aktivieren Sie ihn vor dem Verbinden.", + "unavailable": "{agent} ist auf der aktuellen Plattform nicht verfügbar.", + "sdkMissing": "{agent} SDK ist nicht installiert" + }, + "unableReadAgentConfig": "Agenten-Konfiguration kann nicht gelesen werden: {message}", + "autoLinkFailedTitle": "{agent} Auto-Link fehlgeschlagen", + "preflightCheckFailedDefault": "Preflight-Prüfungen fehlgeschlagen. Prüfen Sie die Agenten-Einstellungen.", + "preflightFailedTitle": "{agent} Preflight fehlgeschlagen", + "autoLinkPreflightFailed": "Auto-Link-Preflight fehlgeschlagen: {message}", + "connectFailedTitle": "{agent} Verbindung fehlgeschlagen", + "toolFallbackTitle": "Werkzeug", + "eventErrorTitle": "Agentenfehler" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "Verbinde mit {agent}", + "connectingDescription": "Verbindung wird hergestellt", + "loadingSelectorsTitle": "{agent}-Selektoren werden geladen", + "loadingSelectorsDescription": "Modus- und Sitzungsoptionen werden abgerufen" + }, + "errors": { + "connectionFailed": "Verbindung fehlgeschlagen" + } + }, + "shared": { + "attachedResources": "Angehängte Ressourcen", + "toolCallFailed": "Tool-Aufruf fehlgeschlagen", + "planUpdated": "Plan aktualisiert" + }, + "messageThread": { + "emptyTitle": "Noch keine Nachrichten", + "emptyDescription": "Starten Sie eine Unterhaltung, um hier Nachrichten zu sehen" + }, + "chatInput": { + "connecting": "Verbinden...", + "agentResponding": "Agent antwortet...", + "sendMessage": "Nachricht senden..." + }, + "messageInput": { + "askAnything": "Fragen Sie alles...", + "removeAttachmentAria": "{name} entfernen", + "attachFiles": "Dateien anhängen", + "dropFilesToAttach": "Dateien zum Anhängen ablegen", + "loadingSettings": "Einstellungen werden geladen...", + "loadingMode": "Modus wird geladen...", + "cancel": "Abbrechen", + "send": "Senden" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "Einstellungen > Agenten", + "autoConnectFallback": "Klicken Sie, um {path} zu öffnen und die Installation zu verwalten.", + "autoConnectAppend": "{message}. Klicken Sie, um {path} zu öffnen und die Installation zu verwalten.", + "enableAgentFirstPlaceholder": "Aktivieren Sie mindestens einen Agenten, bevor Sie eine Sitzung starten...", + "askAnythingPlaceholder": "Fragen Sie alles..." + }, + "agentSelector": { + "noEnabledAgents": "Keine aktivierten Agenten", + "openAgentsSettings": "Agenten-Einstellungen öffnen" + }, + "liveMessageBlock": { + "assistantThinkingAria": "Assistent denkt nach" + }, + "agentPlanOverlay": { + "title": "Agentenplan", + "collapsePlanAria": "Plan einklappen", + "collapsedSummary": "Arbeitsplan {completed}/{total}", + "status": { + "completed": "Abgeschlossen", + "inProgress": "In Bearbeitung", + "pending": "Ausstehend", + "unknown": "Unbekannt" + }, + "priority": { + "high": "Hoch", + "medium": "Mittel", + "low": "Niedrig", + "unknown": "Unbekannt" + } + }, + "permissionDialog": { + "subtitle": "Agent fordert Berechtigung an, um diesen Zug fortzusetzen.", + "kindFallbackTool": "Tool", + "command": "Befehl", + "cwd": "Arbeitsverzeichnis: {cwd}", + "filesSummary": "Dateien: {count}", + "moreFiles": "+{count} weitere Dateien", + "plan": "Arbeitsplan", + "targetMode": "Zielmodus: {mode}" + }, + "messageBranch": { + "previousBranchAria": "Vorheriger Branch", + "nextBranchAria": "Nächster Branch", + "pageOf": "{current} von {total}" + }, + "terminal": { + "title": "Konsole", + "running": "Läuft" + }, + "reasoning": { + "thinking": "Denkt nach...", + "thoughtForFewSeconds": "Dachte einige Sekunden nach", + "thoughtForSeconds": "Dachte {duration} Sekunden nach" + }, + "messageList": { + "attachedResources": "Angehängte Ressourcen", + "loading": "Lädt...", + "error": "Fehler: {message}", + "emptyConversation": "Keine Nachrichten in dieser Unterhaltung." + }, + "liveTurnStats": { + "thinking": "Denkt nach...", + "streaming": "Übertragung", + "elapsedMinutes": "{value} Min", + "elapsedSeconds": "{value} Sek", + "toolUseCount": "{count} Tool {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "Parameter", + "error": "Fehler", + "result": "Ergebnis", + "status": { + "approvalRequested": "Warten auf Genehmigung", + "approvalResponded": "Beantwortet", + "inputAvailable": "Läuft", + "inputStreaming": "Ausstehend", + "outputAvailable": "Abgeschlossen", + "outputDenied": "Abgelehnt", + "outputError": "Fehler" + } + }, + "toolCallBlock": { + "tool": "Werkzeug", + "error": "Fehler", + "result": "Ergebnis" + }, + "contentParts": { + "showingTailOutput": "Zur besseren Performance wird während des Streamings nur die Endausgabe angezeigt.", + "result": "Ergebnis", + "unknown": "unbekannt", + "replaceAll": "ALLES ERSETZEN", + "filesCount": "Dateien: {count}", + "update": "aktualisieren", + "moreFiles": "+{count} weitere Dateien", + "timeoutMs": "Zeitlimit: {timeout}ms", + "backgroundTrue": "Hintergrund: true", + "offset": "Versatz: {offset}", + "limit": "Grenze: {limit}", + "pages": "Seiten: {pages}", + "mode": "Modus: {mode}", + "cell": "Zelle: {cell}", + "pathLabel": "Pfad:", + "globLabel": "Glob-Muster:", + "typeLabel": "Typ:", + "outputLabel": "Ausgabe:", + "caseInsensitive": "Groß-/Kleinschreibung ignorieren", + "multiline": "Mehrzeilig", + "promptLabel": "Eingabe", + "subjectLabel": "Betreff", + "taskLabel": "Aufgabe", + "nameLabel": "Bezeichnung:", + "field": { + "file": "Datei", + "notebook": "Notizbuch", + "command": "Befehl", + "old": "Alt", + "new": "Neu", + "pattern": "Muster", + "path": "Pfad", + "query": "Abfrage", + "url": "URL:", + "description": "Beschreibung", + "content": "Inhalt", + "source": "Quelle", + "prompt": "Eingabe", + "subject": "Betreff", + "taskId": "Aufgaben-ID", + "status": "Zustand", + "skill": "Skill", + "args": "Argumente", + "offset": "Versatz", + "limit": "Grenze", + "glob": "Glob-Muster", + "type": "Typ", + "output": "Ausgabe", + "replaceAll": "Alles ersetzen", + "language": "Sprache", + "timeout": "Zeitlimit", + "background": "Hintergrund", + "agentType": "Agent-Typ", + "library": "Bibliothek", + "libraryId": "Bibliotheks-ID" + }, + "title": { + "edit": "Bearbeiten", + "command": "Befehl", + "todoWrite": "TodoWrite (Aufgaben aktualisieren)", + "read": "Lesen", + "write": "Schreiben", + "notebookEdit": "NotebookEdit (Notizbuch bearbeiten)", + "editFiles": "Bearbeiten ({count} Dateien)", + "editWithTarget": "{target} bearbeiten", + "readWithTarget": "{target} lesen", + "writeWithTarget": "{target} schreiben", + "notebookEditWithTarget": "NotebookEdit ({target})", + "globWithPattern": "Glob-Muster {pattern}", + "grepWithPattern": "Grep-Muster {pattern}", + "taskCreateWithSubject": "Aufgabe erstellen: {subject}", + "taskUpdateWithStatus": "Aufgabe aktualisieren #{id} -> {status}", + "taskUpdate": "Aufgabe aktualisieren #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "Websuche: {query}", + "todosProgress": "Aufgaben ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "Hinzugefügt", + "deleted": "Gelöscht", + "renamed": "Umbenannt", + "modified": "Geändert" + }, + "hunkLabel": "Block {index}", + "loadingHunk": "Hunk wird geladen...", + "noDiffData": "Keine Diff-Daten" + } + } +} diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index f3c867a..c8fd48d 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -3,7 +3,14 @@ "followSystem": "Follow System", "english": "English", "simplifiedChinese": "Simplified Chinese", - "traditionalChinese": "Traditional Chinese" + "traditionalChinese": "Traditional Chinese", + "japanese": "Japanese", + "korean": "Korean", + "spanish": "Spanish", + "german": "German", + "french": "French", + "portuguese": "Portuguese", + "arabic": "Arabic" }, "WelcomePage": { "title": "Welcome to Codeg", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json new file mode 100644 index 0000000..788189c --- /dev/null +++ b/src/i18n/messages/es.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "Seguir el sistema", + "english": "Inglés", + "simplifiedChinese": "Chino simplificado", + "traditionalChinese": "Chino tradicional", + "japanese": "Japonés", + "korean": "Coreano", + "spanish": "Español", + "german": "Alemán", + "french": "Francés", + "portuguese": "Portugués", + "arabic": "Árabe" + }, + "WelcomePage": { + "title": "Bienvenido a Codeg", + "openSettings": "Abrir configuración", + "searchPlaceholder": "Buscar carpetas...", + "loading": "Cargando...", + "emptyFolders": "Aún no hay carpetas", + "removeFromHistory": "Quitar del historial", + "openFolder": "Abrir carpeta", + "cloneRepository": "Clonar repositorio", + "softwareVersion": "versión {version}", + "toasts": { + "loadFolderHistoryFailed": "No se pudo cargar el historial de carpetas", + "openFolderFailed": "No se pudo abrir la carpeta", + "removeFromHistoryFailed": "No se pudo quitar la carpeta", + "openSettingsFailed": "No se pudo abrir la configuración", + "cloneFailed": "No se pudo clonar el repositorio" + }, + "errors": { + "unknown": "Error inesperado", + "invalidInput": "Entrada no válida.", + "notFound": "Recurso no encontrado.", + "alreadyExists": "El recurso ya existe.", + "dependencyMissing": "Falta una dependencia requerida.", + "databaseError": "Falló la operación de base de datos.", + "ioError": "Falló la operación de archivos.", + "externalCommandFailed": "Falló el comando externo.", + "windowOperationFailed": "Falló la operación de ventana.", + "gitNotInstalled": "Git no está instalado. Instala Git primero.", + "targetDirectoryNotEmpty": "El directorio de destino ya existe y no está vacío.", + "repositoryNotFound": "Repositorio no encontrado. Revisa la URL y los permisos de acceso.", + "networkUnavailable": "La red no está disponible. Revisa tu conexión e inténtalo de nuevo.", + "authenticationFailed": "Autenticación fallida. Revisa credenciales o clave SSH.", + "permissionDenied": "Permiso denegado. Revisa los permisos del directorio." + }, + "cloneDialog": { + "title": "Clonar repositorio", + "repositoryUrl": "URL del repositorio", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "Directorio", + "directoryPlaceholder": "Selecciona el directorio de destino...", + "browseDirectory": "Explorar directorio", + "cancel": "Cancelar", + "clone": "Clonar" + } + }, + "SettingsShell": { + "title": "Configuración", + "preferences": "Preferencias", + "nav": { + "appearance": "Apariencia", + "agents": "Agentes", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "Atajos", + "system": "Sistema" + } + }, + "AppearanceSettings": { + "sectionTitle": "Apariencia del tema", + "sectionDescription": "Elige claro, oscuro o seguir el sistema. La configuración se guarda automáticamente.", + "themeMode": "Modo de tema", + "placeholder": "Selecciona el modo de tema", + "system": "Seguir el sistema", + "light": "Claro", + "dark": "Oscuro", + "currentTheme": "Tema efectivo actual: {theme}", + "resolvedTheme": { + "light": "Claro", + "dark": "Oscuro", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "Cargando...", + "sectionTitle": "Administración del sistema", + "sectionDescription": "Administra el proxy de red, las actualizaciones de la app y las preferencias de idioma.", + "proxyTitle": "Proxy de red", + "proxyDescription": "Cuando está activado, las solicitudes de red posteriores usarán este proxy preferentemente (incluyendo chat ACP, instalación de agentes y operaciones remotas de Git).", + "loadFailed": "Error al cargar: {message}", + "enableProxy": "Activar proxy del sistema", + "proxyAddress": "Dirección del proxy", + "proxyHint": "Compatible con http(s)/socks5, ejemplo: {example}. Solo funciona cuando el proxy del sistema está activado.", + "save": "Guardar", + "saving": "Guardando...", + "proxyRequired": "Se requiere URL del proxy cuando el proxy está activado", + "saveSuccess": "La configuración del proxy del sistema se guardó", + "saveFailed": "Error al guardar: {message}", + "languageTitle": "Idioma", + "languageDescription": "Configura el idioma de la app. Al seguir el idioma del sistema, los no compatibles vuelven a inglés.", + "appLanguage": "Idioma de la app", + "languageSaveSuccess": "La configuración de idioma se guardó", + "languageSaveFailed": "No se pudo guardar la configuración de idioma: {message}", + "updateTitle": "Actualización de la app", + "updateDescription": "Comprueba versiones más nuevas en la fuente de versiones configurada e instálalas directamente cuando estén disponibles.", + "currentVersion": "Versión actual", + "upgradableVersion": "Versión disponible", + "none": "Ninguna", + "lastChecked": "Última comprobación: {time}", + "updateError": "Error de actualización: {message}", + "checking": "Comprobando...", + "checkUpdate": "Buscar actualizaciones", + "updating": "Instalando...", + "upgradeTo": "Actualizar a v{version}", + "foundUpdate": "Nueva versión v{version} encontrada", + "alreadyLatest": "Ya tienes la versión más reciente", + "checkUpdateFailed": "No se pudo buscar actualizaciones: {message}", + "installSuccess": "Actualización instalada. Reiniciando la app.", + "installFailed": "La actualización falló: {message}", + "updateErrors": { + "sourceUnavailable": "No se puede acceder al origen de actualización. Revisa tu red o proxy e inténtalo de nuevo.", + "network": "Falló la conexión de red. Revisa tu red o proxy e inténtalo de nuevo.", + "downloadFailed": "No se pudo descargar el paquete de actualización. Inténtalo más tarde.", + "installFailed": "No se pudo instalar la actualización. Cierra la app e inténtalo de nuevo.", + "unknown": "La actualización falló. Inténtalo más tarde." + } + }, + "ShortcutSettings": { + "sectionTitle": "Atajos", + "resetDefault": "Restablecer valores predeterminados", + "recordInstruction": "Haz clic en el botón derecho y luego pulsa una combinación de teclas. Usa Ctrl/Cmd, Alt y Shift. Pulsa Esc para cancelar la grabación.", + "recording": "Pulsa un atajo...", + "toasts": { + "conflict": "El atajo ya está en uso por \"{title}\"", + "updated": "Atajo actualizado", + "invalid": "Atajo no válido, inténtalo de nuevo", + "reset": "Se restauraron los atajos predeterminados" + }, + "actions": { + "toggle_search": { + "title": "Abrir búsqueda", + "description": "Muestra u oculta el panel de búsqueda de conversaciones" + }, + "toggle_sidebar": { + "title": "Alternar barra lateral izquierda", + "description": "Muestra u oculta la barra lateral de lista de conversaciones" + }, + "toggle_terminal": { + "title": "Alternar terminal", + "description": "Muestra u oculta el panel de terminal inferior" + }, + "new_terminal_tab": { + "title": "Nueva terminal", + "description": "Crea una nueva pestaña de terminal cuando el foco está en la terminal" + }, + "close_current_terminal_tab": { + "title": "Cerrar terminal actual", + "description": "Cierra la pestaña de terminal actual cuando el foco está en la terminal" + }, + "toggle_aux_panel": { + "title": "Alternar panel derecho", + "description": "Muestra u oculta el panel de información auxiliar" + }, + "new_conversation": { + "title": "Nueva conversación", + "description": "Crea una nueva pestaña de conversación en la carpeta actual" + }, + "open_folder": { + "title": "Abrir carpeta", + "description": "Abre el selector de carpetas y la carpeta en una nueva ventana" + }, + "open_settings": { + "title": "Abrir configuración", + "description": "Abre la ventana de configuración" + }, + "close_current_tab": { + "title": "Cerrar pestaña actual", + "description": "Cierra la conversación o pestaña de archivo actual" + }, + "close_all_file_tabs": { + "title": "Cerrar todas las pestañas de archivos", + "description": "Cierra todas las pestañas de archivos solo en modo de archivos" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "Selecciona una Skill a la izquierda. A la derecha se muestra una vista previa de Markdown por defecto; cambia a edición para modificar y guardar.", + "loadingAgents": "Cargando agentes compatibles con Skills...", + "emptyNoManageableAgents": "No hay agentes disponibles para gestionar Skills.", + "managedTarget": "Objetivo gestionado", + "selectAgentPlaceholder": "Selecciona un agente", + "searchPlaceholder": "Buscar por nombre / ID / ruta...", + "skillsList": "Lista de Skills", + "loadingSkills": "Cargando Skills...", + "agentNotSupported": "El agente actual no admite gestión de Skills.", + "emptySkills": "Aún no hay Skills. Haz clic en \"Nueva Skill\" para crear una.", + "newSkillTitle": "Nueva Skill", + "skillInfo": "Información de la Skill", + "skillIdPlaceholder": "skill-id (letras/números/-/_/.)", + "skillsDirectoryWithPath": "Directorio de Skills: {path}", + "skillsDirectoryNeedId": "Directorio de Skills: introduce el ID de Skill para generar la ruta completa", + "markdownContent": "Contenido Markdown", + "editingStatus": "Editando", + "previewStatus": "Vista previa", + "contentPlaceholder": "Introduce el contenido Markdown de la Skill...", + "metadataTitle": "Metadatos de Skills", + "onlyYamlMetadata": "Esta Skill solo contiene metadatos YAML.", + "emptyContentHint": "Aún no hay contenido. Haz clic en \"Editar\" para empezar.", + "loadingSkill": "Cargando Skill...", + "emptyNoAgents": "No hay agentes disponibles.", + "actions": { + "preview": "Vista previa", + "edit": "Editar", + "openInWindow": "Abrir en nueva ventana", + "delete": "Eliminar", + "deleting": "Eliminando...", + "refresh": "Actualizar", + "newSkill": "Nueva Skill", + "reset": "Restablecer", + "save": "Guardar", + "saving": "Guardando...", + "cancel": "Cancelar" + }, + "deleteDialog": { + "title": "Eliminar Skill", + "confirm": "¿Eliminar la Skill actual? Esta acción no se puede deshacer.", + "confirmWithNamePrefix": "¿Eliminar la Skill", + "confirmWithNameSuffix": "? Esta acción no se puede deshacer." + }, + "toasts": { + "loadFailed": "No se pudo cargar la Skill", + "openFolderFailed": "No se pudo abrir la carpeta", + "noSkillDirectory": "No se encontró un directorio de Skills disponible para el agente actual", + "nameRequired": "El nombre de la Skill no puede estar vacío", + "updated": "Skill actualizada", + "created": "Skill creada", + "saveFailed": "No se pudo guardar la Skill", + "deleted": "Skill eliminada", + "deleteFailed": "No se pudo eliminar la Skill" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "Cargando...", + "summary": { + "missingCommand": "(comando faltante)", + "missingUrl": "(URL faltante)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "Selecciona un protocolo de instalación", + "fieldRequired": "{field} es obligatorio", + "fieldNeedsBoolean": "{field} debe ser true o false", + "fieldNeedsNumber": "{field} debe ser un número", + "fieldNeedsInteger": "{field} debe ser un entero", + "fieldInvalidJson": "{field} tiene JSON inválido: {message}", + "fieldOutOfRange": "El valor de {field} está fuera del rango permitido", + "jsonEmpty": "{name} no puede estar vacío", + "jsonInvalid": "{name} no es un JSON válido: {message}", + "jsonMustBeObject": "{name} debe ser un objeto JSON" + }, + "jsonNames": { + "localConfig": "Configuración MCP", + "installConfig": "Configuración de instalación" + }, + "toasts": { + "uninstalled": "MCP desinstalado", + "uninstallFailed": "Error al desinstalar: {message}", + "selectAtLeastOneApp": "Selecciona al menos una app de destino", + "saveSuccess": "Guardado", + "saveFailed": "Error al guardar: {message}", + "installed": "{name} instalado", + "installFailed": "Error al instalar: {message}" + }, + "installDialog": { + "title": "Confirmar instalación de MCP", + "descriptionWithName": "Instalar {name} en la configuración local.", + "description": "Selecciona las apps de destino para la instalación.", + "protocol": "Protocolo", + "selectProtocol": "Seleccionar protocolo", + "parameters": "Parámetros de configuración", + "booleanPlaceholder": "Selecciona true/false", + "selectOneValue": "Selecciona un valor", + "targetApps": "Apps de destino" + }, + "actions": { + "cancel": "Cancelar", + "confirmInstall": "Confirmar instalación", + "installing": "Instalando", + "uninstall": "Desinstalar", + "uninstalling": "Desinstalando", + "viewDetails": "Ver detalles", + "save": "Guardar", + "saving": "Guardando", + "install": "Instalar" + }, + "tabs": { + "local": "MCP local", + "market": "Marketplace MCP" + }, + "local": { + "filterPlaceholder": "Filtrar MCP local...", + "loadFailed": "Error de carga: {message}", + "empty": "No se detectó MCP local.", + "description": "La configuración de MCP local se puede editar y guardar directamente.", + "enabledApps": "Apps habilitadas", + "configJson": "Configuración MCP (JSON)" + }, + "market": { + "selectMarketplace": "Seleccionar marketplace", + "searchPlaceholder": "Buscar MCP...", + "searchFailed": "Error de búsqueda: {message}", + "loadingList": "Cargando lista de MCP...", + "empty": "Sin resultados de MCP.", + "loadingDetail": "Cargando detalles del marketplace...", + "detailLoadFailed": "No se pudieron cargar los detalles: {message}", + "owner": "Propietario: {owner}", + "namespace": "Espacio de nombres: {namespace}", + "defaultInstallProtocol": "Protocolo de instalación predeterminado", + "currentOptionParameterCount": "Cantidad de parámetros de la opción actual: {count}", + "installConfigDescription": "Configuración de instalación (JSON, editable antes de instalar; las ediciones sobrescribirán el formulario de protocolo/parámetros)", + "selectLeftToView": "Selecciona un MCP del marketplace a la izquierda para ver detalles." + }, + "badges": { + "verified": "Verificado", + "remote": "Remoto", + "hasHomepage": "Tiene página web", + "uses": "{count} usos", + "deployed": "Desplegado", + "notDeployed": "No desplegado" + }, + "selectLeftMcp": "Selecciona un MCP a la izquierda." + }, + "AcpAgentSettings": { + "title": "Gestión del SDK de agentes", + "description": "Gestiona en un solo lugar la conexión del SDK de agentes, estado habilitado, variables de entorno, gestión de configuración e información de preflight de versión.", + "loadingAgents": "Cargando lista de agentes...", + "agentList": "Lista de agentes", + "emptyNoAgent": "No hay agentes disponibles.", + "configManagement": "Gestión de configuración", + "envVars": "Variables de entorno", + "nativeJsonConfig": "Configuración JSON nativa", + "modelHintDefault": "Déjalo vacío para usar el modelo predeterminado del sistema.", + "generalConfigDescriptionClaude": "Admite configuración rápida de API URL, API Key y modelos de Claude, y sincroniza con la configuración JSON nativa.", + "generalConfigDescriptionDefault": "Admite entrada de configuración importante (API URL, API Key, Model) y gestión de configuración JSON nativa.", + "actions": { + "dragSort": "Arrastrar para reordenar", + "dragSortAgent": "Arrastrar para reordenar {name}", + "refreshCheck": "Actualizar comprobación", + "refreshCheckAgent": "Actualizar comprobación de {name}", + "clickEnable": "Haz clic para habilitar {name}", + "clickDisable": "Haz clic para deshabilitar {name}", + "install": "Instalar", + "upgrade": "Actualizar", + "uninstall": "Desinstalar", + "uninstalling": "Desinstalando...", + "saveEnvVars": "Guardar variables de entorno", + "saving": "Guardando...", + "saveCodexConfig": "Guardar configuración de Codex", + "saveGeminiConfig": "Guardar configuración de Gemini", + "saveOpenCodeConfig": "Guardar configuración de OpenCode", + "saveOpenClawConfig": "Guardar configuración de OpenClaw", + "saveConfigManagement": "Guardar gestión de configuración", + "saveCurrentProvider": "Guardar proveedor actual", + "showApiKey": "Mostrar API Key", + "hideApiKey": "Ocultar API Key", + "showKey": "Mostrar clave", + "hideKey": "Ocultar clave", + "showToken": "Mostrar token", + "hideToken": "Ocultar token", + "cancel": "Cancelar", + "delete": "Eliminar", + "deleting": "Eliminando...", + "confirmDelete": "Confirmar eliminación", + "confirmUninstall": "Confirmar desinstalación" + }, + "status": { + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "unchecked": "Sin comprobar", + "agentEnabledAria": "{name} habilitado", + "agentEnabledSwitch": "Interruptor de habilitación de {name}" + }, + "preflight": { + "count": "Elementos de preflight: {count}", + "notRun": "Las comprobaciones aún no se han ejecutado." + }, + "codex": { + "configDescription": "Admite configuración rápida de URL de API, API Key, nombre del modelo y reasoning effort, y sincroniza con `auth.json` / `config.toml`.", + "selectProvider": "Seleccionar proveedor", + "modelName": "Nombre del modelo", + "selectReasoningEffort": "Seleccionar Reasoning Effort", + "enableWebsocket": "Habilitar WebSocket", + "enableWebsocketAria": "Habilitar WebSocket para Codex Provider", + "authJsonNative": "auth.json (nativo)", + "configTomlNative": "config.toml (nativo)" + }, + "gemini": { + "authConfig": "Configuración de autenticación de Gemini", + "authConfigDescription": "Alineado con la documentación de autenticación de Gemini CLI, con soporte para endpoint personalizado, inicio de sesión de Google, Gemini API Key y Vertex AI (ADC / cuenta de servicio / API Key).", + "authMode": "Modo de autenticación", + "selectAuthMode": "Seleccionar modo de autenticación", + "viewAuthDoc": "Ver documentación de autenticación", + "mode": { + "custom": "Endpoint personalizado", + "loginGoogle": "Inicio de sesión de Google (OAuth)", + "vertexServiceAccount": "Vertex AI (Cuenta de servicio)" + }, + "hint": { + "custom": "Completa API URL, API Key y Modelo; se mapean a GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.", + "loginGoogle": "Ejecuta gemini en terminal y completa primero el inicio de sesión de Google; no se requiere API key.", + "geminiApiKey": "Completa GEMINI_API_KEY cuando uses la API de Gemini.", + "vertexAdc": "Usa gcloud ADC; se recomienda configurar GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION.", + "vertexServiceAccount": "Establece la ruta del JSON de la cuenta de servicio en GOOGLE_APPLICATION_CREDENTIALS.", + "vertexApiKey": "Completa GOOGLE_API_KEY cuando uses API key de Vertex AI." + } + }, + "openCode": { + "configManagement": "Gestión de configuración de OpenCode", + "configDescription": "Alineado con el esquema `provider` de OpenCode, admite gestión de múltiples proveedores y sincronización bidireccional con archivos JSON nativos.", + "providerManagement": "Gestión de proveedores", + "providerCount": "{count} proveedores", + "addProvider": "Agregar proveedor", + "emptyProvider": "Aún no hay proveedor. Introduce un ID y haz clic en \"Agregar proveedor\".", + "providerEnabledState": "Estado habilitado de {providerId}", + "selectProviderNpm": "Seleccionar provider.npm", + "notSet": "No establecido", + "modelManagement": "Gestión de modelos", + "modelCount": "{count} modelos", + "modelDescription": "Alineado con `provider.models` de OpenCode. La gestión rápida actualmente soporta `name` / `id`; otros campos avanzados se conservan y se pueden editar en el JSON nativo de abajo.", + "addModel": "Agregar modelo", + "emptyModel": "Aún no hay modelo. Introduce model id y haz clic en \"Agregar modelo\".", + "modelId": "ID de modelo", + "modelName": "Nombre del modelo", + "deleteModel": "Eliminar modelo {modelId}", + "nativeJsonConfig": "Configuración JSON nativa de OpenCode" + }, + "openClaw": { + "gatewayConfig": "Configuración de Gateway", + "gatewayDescription": "Configura la conexión de OpenClaw Gateway. Admite gateway local o remoto.", + "gatewayUrlHint": "Déjalo vacío para usar gateway.remote.url desde la configuración local de openclaw.", + "gatewayTokenPlaceholder": "Token de autenticación de Gateway", + "gatewayTokenHint": "Usa token-file en lugar de token en texto plano cuando sea posible; configúralo con el CLI de openclaw.", + "sessionKeyHint": "Opcional. Especifica la session key del gateway; si se deja vacío se asigna automáticamente una sesión aislada." + }, + "claude": { + "mainModel": "Modelo principal", + "reasoningModel": "Modelo de razonamiento (thinking)", + "haikuDefaultModel": "Modelo Haiku predeterminado", + "sonnetDefaultModel": "Modelo Sonnet predeterminado", + "opusDefaultModel": "Modelo Opus predeterminado" + }, + "dialogs": { + "confirmDeleteProvider": "¿Eliminar proveedor {providerId}?", + "confirmDeleteProviderDescription": "La configuración de OpenCode y auth JSON se actualizarán juntos. Esta acción no se puede deshacer.", + "confirmUninstall": "¿Desinstalar {name}?", + "confirmUninstallDescription": "Esto elimina la versión instalada localmente. Puedes reinstalar más tarde." + }, + "errors": { + "nativeJsonMustBeObject": "La configuración JSON nativa debe ser un objeto", + "nativeJsonInvalid": "Error de formato en JSON nativo: {message}", + "openCodeAuthMustBeObject": "OpenCode auth.json debe ser un objeto JSON", + "openCodeAuthInvalid": "Error de formato en OpenCode auth.json: {message}", + "authMustBeObject": "auth.json debe ser un objeto JSON", + "authInvalid": "Error de formato en auth.json: {message}", + "providerIdPattern": "El ID de proveedor solo admite letras, números, guion bajo, punto y guion", + "providerExists": "El proveedor '{providerId}' ya existe", + "modelIdPattern": "El ID de modelo solo admite letras, números, guion bajo, punto, dos puntos y guion", + "modelExists": "El modelo '{modelId}' ya existe" + }, + "warnings": { + "nativeJsonRecoveredStructured": "La configuración JSON nativa es inválida; se restableció a configuración estructurada", + "nativeJsonRecoveredOpenCode": "La configuración JSON nativa es inválida; se restableció a configuración estructurada de OpenCode", + "openCodeAuthRecovered": "OpenCode auth.json es inválido; se restableció a configuración predeterminada", + "authRecoveredStructured": "auth.json es inválido; se restableció a configuración estructurada" + }, + "toasts": { + "agentActionCompleted": "{name} {action} completado", + "agentActionFailed": "{name} {action} falló", + "localVersion": "Versión local: {version}", + "installCompletedVersionLater": "Instalación completada, la versión se actualizará en la próxima comprobación", + "uninstallCompleted": "Desinstalación de {name} completada", + "uninstallFailed": "Desinstalación de {name} fallida", + "localVersionRemoved": "Versión local eliminada", + "saveAgentOrderFailed": "No se pudo guardar el orden de Agent", + "saveAgentSwitchFailed": "No se pudo guardar el switch de Agent", + "saveEnvFailed": "No se pudieron guardar las variables de entorno", + "codexSaved": "Configuración de Codex guardada", + "saveCodexNativeFailed": "No se pudo guardar la configuración nativa de Codex", + "geminiSaved": "Configuración de Gemini guardada", + "saveGeminiFailed": "No se pudo guardar la configuración de Gemini", + "providerDeleted": "Proveedor {providerId} eliminado", + "providerDeleteFailed": "No se pudo eliminar el proveedor {providerId}", + "providerSaved": "Proveedor {providerId} guardado", + "saveProviderFailed": "No se pudo guardar el proveedor {providerId}", + "openCodeConfigSynced": "La configuración de OpenCode y auth JSON se sincronizaron.", + "openCodeSaved": "Configuración de OpenCode guardada", + "saveOpenCodeFailed": "No se pudo guardar la configuración de OpenCode", + "openClawSaved": "Configuración de OpenClaw guardada", + "saveOpenClawFailed": "No se pudo guardar la configuración de OpenClaw", + "configSaved": "Configuración guardada", + "saveConfigManagementFailed": "No se pudo guardar la gestión de configuración" + }, + "version": { + "statusLabel": "Estado de versión", + "notInstalled": "No instalado", + "remoteLocal": "Remota: {remoteVersion} · Local: {localVersion}", + "platformUnsupported": "{versionText}. La plataforma actual no soporta este agente.", + "clickInstall": "{versionText}. Haz clic en Instalar a la derecha.", + "localUnrecognized": "{versionText}. La versión local no es comparable; intenta actualizar para sobrescribir la instalación.", + "upgradeAvailable": "{versionText}. Hay actualización disponible.", + "remoteUnavailable": "{versionText}. La versión remota no está disponible por ahora.", + "latest": "{versionText}. Ya está en la última versión." + } + }, + "SettingsPages": { + "agentsLoading": "Cargando configuración de agentes..." + }, + "CommitPage": { + "title": "Confirmación", + "invalidFolderId": "ID de carpeta no válido", + "loadingRepo": "Cargando repositorio..." + }, + "Folder": { + "common": { + "all": "Todo", + "cancel": "Cancelar", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeAll": "Cerrar todo", + "confirm": "Confirmar", + "save": "Guardar", + "delete": "Eliminar", + "rename": "Renombrar", + "loading": "Cargando...", + "refresh": "Actualizar", + "refreshing": "Actualizando...", + "create": "Crear", + "createAndSwitch": "Crear y cambiar", + "openFile": "Abrir archivo", + "viewDiff": "Ver Diff" + }, + "modes": { + "conversation": "Modo conversación", + "fusion": "Modo fusión", + "files": "Modo archivos", + "workspaceModesAria": "Modos del espacio de trabajo" + }, + "statusLabels": { + "in_progress": "En progreso", + "pending_review": "Revisión", + "completed": "Completado", + "cancelled": "Cancelado" + }, + "sidebar": { + "title": "Conversaciones", + "locateActiveConversation": "Ubicar conversación activa", + "expandAllGroups": "Expandir todos los grupos", + "collapseAllGroups": "Colapsar todos los grupos", + "newConversation": "Nueva conversación", + "noConversationsFound": "No se encontraron conversaciones.", + "importLocalSessions": "Importar sesiones locales", + "importing": "Importando...", + "error": "Error del sistema: {message}", + "completeAllSessions": "Completar todas las sesiones", + "completeAllReviewTitle": "¿Completar todas las sesiones en revisión?", + "completeAllReviewDescription": "Esto marcará como completadas todas las {count, plural, one {# sesión} other {# sesiones}} en Revisión.", + "completing": "Completando...", + "toasts": { + "importedSessions": "Se importaron {imported, plural, one {# sesión} other {# sesiones}}, se omitieron {skipped}", + "noNewSessionsFound": "No se encontraron sesiones nuevas (omitidas {skipped})", + "importFailed": "Error al importar: {message}", + "reviewCompleted": "Se marcaron como completadas {count, plural, one {# sesión en revisión} other {# sesiones en revisión}}", + "completeReviewFailed": "Error al completar sesiones en revisión: {message}" + } + }, + "conversation": { + "reloadFailed": "No se pudo recargar la conversación: {message}", + "reloaded": "Conversación recargada", + "reload": "Recargar", + "newConversation": "Nueva conversación", + "closeConversation": "Cerrar conversación" + }, + "conversationCard": { + "untitledConversation": "Conversación sin título", + "newConversation": "Nueva conversación", + "rename": "Renombrar", + "status": "Estado", + "delete": "Eliminar", + "importLocalSessions": "Importar sesiones locales", + "importing": "Importando...", + "renameConversation": "Renombrar conversación", + "deleteConversationTitle": "¿Eliminar conversación?", + "deleteConversationDescription": "Esto eliminará \"{title}\". Esta acción no se puede deshacer.", + "cancel": "Cancelar", + "save": "Guardar" + }, + "search": { + "dialogTitle": "Buscar conversaciones", + "placeholder": "Buscar conversaciones...", + "allAgents": "Todo", + "searching": "Buscando...", + "typeToSearch": "Escribe para buscar conversaciones", + "noResults": "No se encontraron resultados.", + "untitledConversation": "Conversación sin título" + }, + "folderTitleBar": { + "showSidebar": "Mostrar barra lateral", + "hideSidebar": "Ocultar barra lateral", + "toggleTerminal": "Alternar terminal", + "toggleAuxPanel": "Alternar panel auxiliar", + "search": "Buscar", + "openSettings": "Abrir configuración", + "withShortcut": "{label} (atajo: {shortcut})" + }, + "statusBar": { + "connection": { + "connected": "Conectado", + "connecting": "Conectando...", + "downloading": "Descargando...", + "prompting": "Respondiendo...", + "error": "Error de conexión", + "disconnected": "Desconectado", + "tooltip": "{agent}: {status}", + "tooltipError": "{agent}: {error}" + }, + "tasks": { + "title": "Tareas" + }, + "alerts": { + "title": "Alertas", + "empty": "Sin alertas" + }, + "stats": { + "conversations": "{count} conversaciones", + "summary": "{conversations} conversaciones / {messages} mensajes" + }, + "tokens": { + "contextWindowUsageAria": "Uso de la ventana de contexto", + "contextWindow": "Ventana de contexto", + "usedMax": "Usado / Máx", + "tokenUsage": "Uso de tokens", + "input": "Entrada", + "output": "Salida", + "cacheRead": "Lectura de caché", + "cacheWrite": "Escritura de caché", + "total": "Total de tokens" + } + }, + "auxPanel": { + "tabs": { + "diff": "Diferencias", + "files": "Archivos", + "changes": "Cambios", + "commits": "Confirmaciones" + } + }, + "windowControls": { + "minimizeWindow": "Minimizar ventana", + "minimize": "Minimizar", + "maximizeWindow": "Maximizar ventana", + "maximize": "Maximizar", + "restoreWindow": "Restaurar ventana", + "restore": "Restaurar", + "closeWindow": "Cerrar ventana", + "close": "Cerrar" + }, + "tabs": { + "closeConversationTab": "Cerrar pestaña de conversación", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeAll": "Cerrar todo" + }, + "fileWorkspace": { + "files": "Archivos", + "closeFileTab": "Cerrar pestaña de archivo", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeAll": "Cerrar todo" + }, + "terminal": { + "rename": "Renombrar", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeAll": "Cerrar todo", + "hideTerminal": "Ocultar terminal ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "Respuesta actual", + "noDiffDataAvailable": "No hay datos de diff disponibles para {filePath}", + "loading": "Cargando...", + "noFileChangesInConversation": "No se encontraron cambios de archivos en esta conversación", + "openConversationToSeeChanges": "Abre una conversación para ver sus cambios de archivos", + "remove": "Quitar", + "changeCount": "{count, plural, one {# cambio} other {# cambios}}", + "fileCount": "{count, plural, one {# archivo} other {# archivos}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "Carpeta", + "openFolder": "Abrir carpeta", + "cloneRepository": "Clonar repositorio", + "opened": "Abierto", + "recentOpen": "Abiertos recientemente" + }, + "fileWorkspacePanel": { + "viewDiff": "Ver Diff", + "openFile": "Abrir archivo", + "fileCount": "{count, plural, one {# archivo} other {# archivos}}", + "openFileOrDiff": "Abre un archivo o diff desde el panel derecho", + "disk": "Disco", + "head": "HEAD (referencia)", + "unsaved": "Sin guardar", + "workingTree": "Árbol de trabajo", + "loading": "Cargando...", + "compareWithBranch": "{path} · comparar con {branch}", + "hunkCount": "{count, plural, one {# bloque} other {# bloques}}", + "prev": "Anterior", + "next": "Siguiente", + "jumpToLine": "Ir a la línea {line}", + "noParsedDiffSections": "No hay secciones de diff analizadas", + "loadingEditor": "Cargando editor..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "Commit de código completado", + "committedFiles": "{count, plural, one {# archivo confirmado} other {# archivos confirmados}}", + "taskCompleted": "{label} completado", + "taskFailed": "{label} falló", + "mergeNoNewCommits": "{branchName} no tiene commits nuevos", + "mergedCommits": "{count, plural, one {# commit fusionado} other {# commits fusionados}}", + "allFilesUpToDate": "Todos los archivos están actualizados", + "updatedFiles": "{count, plural, one {# archivo actualizado} other {# archivos actualizados}}", + "openCommitWindowFailed": "No se pudo abrir la ventana de commit", + "upstreamSet": "La rama upstream se ha configurado", + "upstreamSetAndPushed": "Rama upstream configurada y se enviaron {count, plural, one {# commit} other {# commits}}", + "noCommitsToPush": "No hay commits para enviar", + "pushedCommits": "Se enviaron {count, plural, one {# commit} other {# commits}}" + }, + "tasks": { + "newBranch": "Crear rama {name}", + "newWorktree": "Crear worktree {name}", + "checkoutTo": "Cambiar a {branchName}", + "mergeBranch": "Fusionar {branchName}", + "rebaseTo": "Rebase a {branchName}", + "deleteBranch": "Eliminar rama {branchName}", + "initGitRepo": "Inicializar repositorio Git", + "pullCode": "Hacer pull del código", + "fetchInfo": "Obtener información", + "pushCode": "Enviar código", + "stashChanges": "Guardar cambios en stash", + "stashPop": "Aplicar stash" + }, + "confirm": { + "mergeTitle": "Fusionar rama", + "rebaseTitle": "Rebase de rama", + "deleteTitle": "Eliminar rama", + "mergeDescription": "¿Fusionar {branchName} en la rama actual {currentBranch}?", + "rebaseDescription": "¿Hacer rebase de la rama actual {currentBranch} sobre {branchName}?", + "deleteDescription": "¿Eliminar la rama {branchName}? Esta acción no se puede deshacer." + }, + "current": "Actual", + "switchToBranch": "Cambiar a esta rama", + "mergeBranchIntoCurrent": "Fusionar {branchName} en {currentBranch}", + "rebaseCurrentToBranch": "Rebase de {currentBranch} sobre {branchName}", + "deleteBranch": "Eliminar rama", + "versionControl": "Control de versiones", + "initGitRepo": "Inicializar repositorio Git", + "pullCode": "Hacer pull del código", + "fetchRemoteBranches": "Obtener ramas remotas", + "openCommitWindow": "Commit de código...", + "pushCode": "Enviar...", + "newBranch": "Nueva rama...", + "newWorktree": "Nuevo worktree...", + "stashChanges": "Guardar cambios en stash", + "stashPop": "Aplicar stash...", + "localBranches": "Ramas locales ({count, plural, one {#} other {#}})", + "noLocalBranches": "Sin ramas locales", + "remoteBranches": "Ramas remotas ({count, plural, one {#} other {#}})", + "noRemoteBranches": "Sin ramas remotas", + "parentBranchHint": "La rama actual fue creada desde {parentBranch}. Haz clic para fusionar {parentBranch} en la rama actual.", + "dialogs": { + "newBranchTitle": "Nueva rama", + "newBranchDescription": "Crear una nueva rama desde la rama actual {branch}", + "branchNamePlaceholder": "Nombre de la rama", + "newWorktreeTitle": "Nuevo worktree", + "newWorktreeDescription": "Crear un nuevo worktree desde la rama actual {branch}", + "branchNameLabel": "Nombre de la rama", + "worktreePathLabel": "Ruta del worktree", + "worktreePathPlaceholder": "Ruta del worktree" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "Commit de código completado", + "committedFiles": "{count, plural, one {# archivo confirmado} other {# archivos confirmados}}", + "addedToVcs": "Añadido a VCS", + "addToVcsFailed": "No se pudo añadir a VCS", + "fileDeleted": "Archivo eliminado", + "deleteFailed": "Error al eliminar", + "fileRolledBack": "Archivo revertido", + "rollbackFailed": "Error al revertir" + }, + "confirm": { + "deleteTitle": "Confirmar eliminación", + "deleteDescription": "¿Eliminar el archivo \"{file}\"? Esta acción no se puede deshacer.", + "rollbackTitle": "Confirmar reversión", + "rollbackDescription": "¿Revertir el archivo \"{file}\" a HEAD? Se perderán los cambios sin guardar." + }, + "actions": { + "select": "Seleccionar", + "unselect": "Deseleccionar", + "rollback": "Revertir", + "addToVcs": "Añadir a VCS" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "Deseleccionar todos los archivos", + "selectAllFiles": "Seleccionar todos los archivos", + "unselectTracked": "Deseleccionar cambios rastreados", + "selectTracked": "Seleccionar cambios rastreados", + "unselectUntracked": "Deseleccionar archivos no rastreados", + "selectUntracked": "Seleccionar archivos no rastreados" + }, + "loading": "Cargando...", + "selectionCount": "{selected} / {total} archivos", + "emptyFiles": "No hay archivos cambiados", + "trackedChanges": "Cambios rastreados ({count})", + "untrackedFiles": "Archivos no rastreados ({count})", + "commitMessage": "Mensaje de commit", + "commitMessagePlaceholder": "Introduce el mensaje de commit...", + "commitButton": "Confirmar ({count})", + "head": "HEAD", + "workingTree": "Árbol de trabajo", + "clickFileToDiff": "Haz clic en un nombre de archivo para ver diff", + "loadingDiff": "Cargando diff..." + }, + "gitLogTab": { + "filesTitle": "Archivos", + "expandAllFiles": "Expandir todos los archivos", + "collapseAllFiles": "Colapsar todos los archivos", + "workspace": "espacio de trabajo", + "retry": "Reintentar", + "noCommitsFound": "No se encontraron commits", + "hash": "Hash del commit", + "copyHash": "Copiar hash", + "author": "Autor", + "noFileChangeDetails": "No hay detalles de cambios de archivo disponibles.", + "branchesTitle": "Ramas", + "loadingBranches": "Cargando ramas...", + "noContainingBranches": "No se encontraron ramas contenedoras.", + "newBranch": "Nueva rama...", + "viewCommitDiffAria": "Ver diff del commit {hash}", + "copyFullCommitHashAria": "Copiar hash completo del commit {hash}", + "pushStatus": { + "pushed": "Enviado al remoto", + "notPushed": "No enviado al remoto", + "unknown": "Estado de push desconocido (sin upstream configurado)" + }, + "time": { + "monthsAgo": "{count, plural, one {hace # mes} other {hace # meses}}", + "daysAgo": "{count, plural, one {hace # día} other {hace # días}}", + "hoursAgo": "{count, plural, one {hace # hora} other {hace # horas}}", + "minsAgo": "{count, plural, one {hace # min} other {hace # mins}}", + "justNow": "justo ahora" + }, + "toasts": { + "createdAndSwitchedNewBranch": "Nueva rama creada y activada", + "newBranchFromCommit": "{name} (desde {shortHash})", + "createBranchFailed": "No se pudo crear la rama" + }, + "branchSelector": { + "selectBranchPlaceholder": "Seleccionar rama...", + "localBranches": "Ramas locales", + "current": "Actual", + "remoteBranches": "Ramas remotas", + "refreshCommitHistory": "Actualizar historial de commits" + }, + "dialogs": { + "newBranchTitle": "Nueva rama", + "newBranchDescription": "Crea una nueva rama con el commit {shortHash} como último commit.", + "branchNamePlaceholder": "Nombre de la rama" + } + }, + "gitChangesTab": { + "workspace": "espacio de trabajo", + "noChanges": "No hay cambios locales", + "trackedChanges": "Cambios rastreados ({count})", + "untrackedFiles": "Archivos no rastreados ({count})", + "expandTracked": "Expandir cambios rastreados", + "collapseTracked": "Colapsar cambios rastreados", + "expandUntracked": "Expandir archivos no rastreados", + "collapseUntracked": "Colapsar archivos no rastreados", + "actions": { + "commitCode": "Hacer commit del código", + "rollback": "Revertir", + "addToVcs": "Añadir a VCS" + }, + "toasts": { + "noAddableFilesInDir": "No hay archivos cambiados en este directorio para añadir a VCS", + "noRollbackFilesInDir": "No hay archivos cambiados en este directorio para revertir", + "addedToVcs": "Se añadió {name} a VCS", + "addToVcsFailed": "No se pudo añadir a VCS", + "openCommitWindowFailed": "No se pudo abrir la ventana de commit", + "rolledBack": "Se revirtió {name}", + "rollbackFailed": "Error al revertir", + "addedFilesToVcs": "Se añadieron {count, plural, one {# archivo} other {# archivos}} a VCS", + "rolledBackFiles": "Se revirtieron {count, plural, one {# archivo} other {# archivos}}" + }, + "directoryDialog": { + "descriptionAdd": "Selecciona archivos bajo el directorio {path} para añadir a VCS.", + "descriptionRollback": "Selecciona archivos bajo el directorio {path} para revertir.", + "descriptionFallback": "Selecciona archivos para continuar.", + "selectionCount": "Seleccionados {selected} / {total} archivos", + "selectAll": "Seleccionar todo", + "unselectAll": "Deseleccionar todo", + "loadingCandidates": "Cargando cambios del directorio...", + "noOperableFiles": "No hay archivos operables" + }, + "rollbackConfirm": { + "title": "Confirmar reversión", + "descriptionWithTarget": "¿Revertir cambios locales de {kind} \"{name}\"?", + "descriptionFallback": "¿Revertir cambios locales?", + "kindDirectory": "directorio", + "kindFile": "archivo" + } + }, + "tabContext": { + "loadingConversation": "Cargando...", + "untitledConversation": "Conversación sin título", + "newConversation": "Nueva conversación" + }, + "fileTreeTab": { + "workspace": "Espacio de trabajo", + "retry": "Reintentar", + "git": "Git", + "openInFileManager": "Abrir en el gestor de archivos", + "openInFinder": "Abrir en Finder", + "openInExplorer": "Abrir en Explorer", + "attachToCurrentSession": "Adjuntar a la sesión actual", + "compareWithBranch": "Comparar con rama...", + "reloadFromDisk": "Recargar desde disco", + "openIn": "Abrir en", + "openInTerminal": "Abrir en terminal", + "actions": { + "select": "Seleccionar", + "unselect": "Deseleccionar", + "commitCode": "Confirmar código", + "rollback": "Revertir", + "addToVcs": "Añadir a VCS" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "No se pudo abrir el directorio", + "openBuiltinTerminalFailed": "No se pudo abrir la terminal integrada", + "openCommitWindowFailed": "No se pudo abrir la ventana de commit", + "noAddableFilesInDir": "No hay archivos modificados en este directorio que se puedan añadir a VCS", + "noRollbackFilesInDir": "No hay archivos modificados en este directorio que se puedan revertir", + "addedToVcs": "Se añadió {name} a VCS", + "addToVcsFailed": "No se pudo añadir a VCS", + "loadBranchesFailed": "No se pudieron cargar las ramas", + "renameFailed": "Error al renombrar", + "deleteFailed": "Error al eliminar", + "rolledBack": "Se revirtió {name}", + "rollbackFailed": "Error al revertir", + "addedFilesToVcs": "{count, plural, one {Se añadió # archivo a VCS} other {Se añadieron # archivos a VCS}}", + "rolledBackFiles": "{count, plural, one {Se revirtió # archivo} other {Se revirtieron # archivos}}", + "savedAsCopy": "Guardado como copia", + "saveCopyFailed": "No se pudo guardar como copia", + "watchStartFailed": "No se pudo iniciar la vigilancia de archivos" + }, + "renameDialog": { + "renameDirectory": "Renombrar directorio", + "renameFile": "Renombrar archivo", + "description": "Introduce un nuevo nombre (solo nombre, sin ruta).", + "placeholderDirectory": "nuevo-nombre-carpeta", + "placeholderFile": "nuevo-nombre-archivo.ext" + }, + "directoryDialog": { + "descriptionAdd": "Selecciona archivos del directorio {path} para añadir a VCS.", + "descriptionRollback": "Selecciona archivos del directorio {path} para revertir.", + "descriptionFallback": "Selecciona archivos para continuar.", + "selectionCount": "Seleccionados {selected} / {total} archivos", + "selectAll": "Seleccionar todo", + "unselectAll": "Deseleccionar todo", + "loadingCandidates": "Cargando cambios del directorio...", + "noOperableFiles": "No hay archivos operables" + }, + "compareDialog": { + "title": "Comparar con rama", + "descriptionWithTarget": "Selecciona una rama y compara con {kind} {path}", + "descriptionFallback": "Selecciona una rama para comparar.", + "kindDirectory": "directorio", + "kindFile": "archivo", + "filterPlaceholder": "Filtra ramas, p. ej. main / origin/main", + "singleClickHint": "Haz clic en una rama para comparar directamente", + "loadingBranches": "Cargando ramas...", + "recentBranches": "Ramas recientes ({count})", + "noCurrentBranch": "Sin rama actual", + "localBranches": "Ramas locales ({count})", + "remoteBranches": "Ramas remotas ({count})", + "noMatchingBranches": "No hay ramas coincidentes" + }, + "externalConflictDialog": { + "title": "Se detectaron cambios externos en archivos", + "descriptionWithPath": "El archivo {path} cambió en disco y las ediciones actuales no están guardadas.", + "descriptionFallback": "El archivo actual cambió en disco y las ediciones actuales no están guardadas.", + "compare": "Comparar", + "savingCopy": "Guardando copia...", + "saveAsCopy": "Guardar como copia", + "reload": "Recargar" + }, + "deleteConfirm": { + "title": "Confirmar eliminación", + "descriptionWithTarget": "¿Eliminar {kind} \"{name}\"? Esta acción no se puede deshacer.", + "descriptionFallback": "Esta acción no se puede deshacer.", + "kindDirectory": "directorio", + "kindFile": "archivo" + }, + "rollbackConfirm": { + "title": "Confirmar reversión", + "descriptionWithTarget": "¿Revertir cambios locales del archivo \"{name}\"?", + "descriptionFallback": "¿Revertir cambios locales de este archivo?" + }, + "terminalTitle": "Consola · {name}" + }, + "commandDropdown": { + "loading": "Cargando...", + "addCommand": "Agregar comando", + "manageCommands": "Gestionar comandos...", + "runCommandTitle": "Ejecutar: {command}", + "stopCommandTitle": "Detener: {command}", + "manageDialog": { + "title": "Gestionar comandos", + "empty": "Aún no hay comandos", + "namePlaceholder": "Nombre", + "commandPlaceholder": "Comando", + "add": "Agregar", + "saving": "Guardando..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "¿Cerrar \"{title}\" sin guardar?", + "confirmCloseOtherDirtyTabs": "¿Cerrar otras pestañas con cambios sin guardar?", + "confirmCloseAllDirtyTabs": "¿Cerrar todas las pestañas con cambios sin guardar?", + "unableLoadContent": "No se puede cargar el contenido.\n\n{message}", + "previewRequestTimedOut": "La solicitud de vista previa agotó el tiempo", + "diffRequestTimedOut": "La solicitud de Diff agotó el tiempo", + "branchCompareRequestTimedOut": "La solicitud de comparación de ramas agotó el tiempo", + "commitDiffRequestTimedOut": "La solicitud de Diff de commit agotó el tiempo", + "saveRequestTimedOut": "La solicitud de guardado agotó el tiempo", + "reloadRequestTimedOut": "La solicitud de recarga agotó el tiempo", + "noChanges": "Sin cambios.", + "noDiffOutput": "Sin salida de diff.", + "diffTitleWorkspace": "Diferencias · Espacio de trabajo", + "diffDescriptionWorkingTree": "Árbol de trabajo (HEAD)", + "diffTitleFile": "Diferencias · {name}", + "compareTitleFile": "Comparar · {name}", + "compareTitleBranch": "Comparar · {branch}", + "compareDescriptionPath": "{path} · comparar con {branch}", + "compareDescriptionBranch": "comparar con {branch}", + "diffTitleCommitFile": "Diferencias · {name} @ {hash}", + "diffTitleCommit": "Diferencias · {hash}", + "diffDescriptionCommitPath": "{path} · confirmación {commit}", + "diffDescriptionCommit": "confirmación {commit}", + "diffTitleConflictFile": "Conflicto · {name}", + "diffDescriptionConflict": "{path} · disco vs sin guardar" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "Abrir ajustes de agentes", + "retry": "Reintentar" + }, + "agentsSetupHint": "Abre Ajustes > Agentes para gestionar la instalación.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "No se puede leer la configuración actual del agente.", + "disabled": "{agent} está deshabilitado en Ajustes de agentes. Actívalo antes de conectar.", + "unavailable": "{agent} no está disponible en la plataforma actual.", + "sdkMissing": "El SDK de {agent} no está instalado" + }, + "unableReadAgentConfig": "No se puede leer la configuración del agente: {message}", + "autoLinkFailedTitle": "Falló el autovínculo de {agent}", + "preflightCheckFailedDefault": "Fallaron las comprobaciones previas. Revisa los ajustes de agentes.", + "preflightFailedTitle": "Falló la verificación previa de {agent}", + "autoLinkPreflightFailed": "Falló la verificación previa del autovínculo: {message}", + "connectFailedTitle": "Falló la conexión de {agent}", + "toolFallbackTitle": "Herramienta", + "eventErrorTitle": "Error del agente" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "Conectando con {agent}", + "connectingDescription": "Estableciendo conexión", + "loadingSelectorsTitle": "Cargando selectores de {agent}", + "loadingSelectorsDescription": "Obteniendo opciones de modo y configuración de sesión" + }, + "errors": { + "connectionFailed": "Conexión fallida" + } + }, + "shared": { + "attachedResources": "Recursos adjuntos", + "toolCallFailed": "Falló la llamada de herramienta", + "planUpdated": "Plan actualizado" + }, + "messageThread": { + "emptyTitle": "Aún no hay mensajes", + "emptyDescription": "Inicia una conversación para ver mensajes aquí" + }, + "chatInput": { + "connecting": "Conectando...", + "agentResponding": "El agente está respondiendo...", + "sendMessage": "Enviar un mensaje..." + }, + "messageInput": { + "askAnything": "Pregunta lo que sea...", + "removeAttachmentAria": "Quitar {name}", + "attachFiles": "Adjuntar archivos", + "dropFilesToAttach": "Suelta archivos para adjuntar", + "loadingSettings": "Cargando ajustes...", + "loadingMode": "Cargando modo...", + "cancel": "Cancelar", + "send": "Enviar" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "Ajustes > Agentes", + "autoConnectFallback": "Haz clic para abrir {path} y gestionar la instalación.", + "autoConnectAppend": "{message}. Haz clic para abrir {path} y gestionar la instalación.", + "enableAgentFirstPlaceholder": "Habilita al menos un agente antes de iniciar una sesión...", + "askAnythingPlaceholder": "Pregunta lo que sea..." + }, + "agentSelector": { + "noEnabledAgents": "No hay agentes habilitados", + "openAgentsSettings": "Abrir ajustes de agentes" + }, + "liveMessageBlock": { + "assistantThinkingAria": "El asistente está pensando" + }, + "agentPlanOverlay": { + "title": "Plan del agente", + "collapsePlanAria": "Contraer plan", + "collapsedSummary": "Plan de trabajo {completed}/{total}", + "status": { + "completed": "Completado", + "inProgress": "En progreso", + "pending": "Pendiente", + "unknown": "Desconocido" + }, + "priority": { + "high": "Alta", + "medium": "Media", + "low": "Baja", + "unknown": "Desconocida" + } + }, + "permissionDialog": { + "subtitle": "El agente solicita permiso para continuar este turno.", + "kindFallbackTool": "herramienta", + "command": "Comando", + "cwd": "Directorio de trabajo: {cwd}", + "filesSummary": "Archivos: {count}", + "moreFiles": "+{count} archivos más", + "plan": "Plan de trabajo", + "targetMode": "Modo objetivo: {mode}" + }, + "messageBranch": { + "previousBranchAria": "Rama anterior", + "nextBranchAria": "Rama siguiente", + "pageOf": "{current} de {total}" + }, + "terminal": { + "title": "Consola", + "running": "En ejecución" + }, + "reasoning": { + "thinking": "Pensando...", + "thoughtForFewSeconds": "Pensó durante unos segundos", + "thoughtForSeconds": "Pensó durante {duration} segundos" + }, + "messageList": { + "attachedResources": "Recursos adjuntos", + "loading": "Cargando...", + "error": "Error del chat: {message}", + "emptyConversation": "No hay mensajes en esta conversación." + }, + "liveTurnStats": { + "thinking": "Pensando...", + "streaming": "Transmitiendo", + "elapsedMinutes": "{value} min", + "elapsedSeconds": "{value} s", + "toolUseCount": "{count} herramienta {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "Parámetros", + "error": "Error de herramienta", + "result": "Resultado", + "status": { + "approvalRequested": "Esperando aprobación", + "approvalResponded": "Respondido", + "inputAvailable": "En ejecución", + "inputStreaming": "Pendiente", + "outputAvailable": "Completado", + "outputDenied": "Denegado", + "outputError": "Error de salida" + } + }, + "toolCallBlock": { + "tool": "Herramienta", + "error": "Error de ejecución", + "result": "Resultado" + }, + "contentParts": { + "showingTailOutput": "Mostrando la salida final durante el streaming para mejorar el rendimiento.", + "result": "Resultado", + "unknown": "desconocido", + "replaceAll": "REEMPLAZAR TODO", + "filesCount": "Archivos: {count}", + "update": "actualizar", + "moreFiles": "+{count} archivos más", + "timeoutMs": "Tiempo de espera: {timeout}ms", + "backgroundTrue": "Segundo plano: true", + "offset": "Desplazamiento: {offset}", + "limit": "Límite: {limit}", + "pages": "Páginas: {pages}", + "mode": "Modo: {mode}", + "cell": "Celda: {cell}", + "pathLabel": "Ruta:", + "globLabel": "Patrón glob:", + "typeLabel": "Tipo:", + "outputLabel": "Salida:", + "caseInsensitive": "Sin distinguir mayúsculas/minúsculas", + "multiline": "Multilínea", + "promptLabel": "Instrucción", + "subjectLabel": "Asunto", + "taskLabel": "Tarea", + "nameLabel": "Nombre:", + "field": { + "file": "Archivo", + "notebook": "Cuaderno", + "command": "Comando", + "old": "Anterior", + "new": "Nuevo", + "pattern": "Patrón", + "path": "Ruta", + "query": "Consulta", + "url": "URL:", + "description": "Descripción", + "content": "Contenido", + "source": "Fuente", + "prompt": "Instrucción", + "subject": "Asunto", + "taskId": "ID de tarea", + "status": "Estado", + "skill": "Skill", + "args": "Argumentos", + "offset": "Desplazamiento", + "limit": "Límite", + "glob": "Patrón glob", + "type": "Tipo", + "output": "Salida", + "replaceAll": "Reemplazar todo", + "language": "Idioma", + "timeout": "Tiempo de espera", + "background": "Segundo plano", + "agentType": "Tipo de agente", + "library": "Biblioteca", + "libraryId": "ID de biblioteca" + }, + "title": { + "edit": "Editar", + "command": "Comando", + "todoWrite": "TodoWrite (actualización de tareas)", + "read": "Leer", + "write": "Escribir", + "notebookEdit": "NotebookEdit (edición de cuaderno)", + "editFiles": "Editar ({count} archivos)", + "editWithTarget": "Editar {target}", + "readWithTarget": "Leer {target}", + "writeWithTarget": "Escribir {target}", + "notebookEditWithTarget": "NotebookEdit ({target})", + "globWithPattern": "Patrón glob {pattern}", + "grepWithPattern": "Patrón grep {pattern}", + "taskCreateWithSubject": "Crear tarea: {subject}", + "taskUpdateWithStatus": "Actualizar tarea #{id} -> {status}", + "taskUpdate": "Actualizar tarea #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "Búsqueda web: {query}", + "todosProgress": "Tareas ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "Añadido", + "deleted": "Eliminado", + "renamed": "Renombrado", + "modified": "Modificado" + }, + "hunkLabel": "Bloque {index}", + "loadingHunk": "Cargando hunk...", + "noDiffData": "Sin datos de diff" + } + } +} diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json new file mode 100644 index 0000000..99a2f32 --- /dev/null +++ b/src/i18n/messages/fr.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "Suivre le système", + "english": "Anglais", + "simplifiedChinese": "Chinois simplifié", + "traditionalChinese": "Chinois traditionnel", + "japanese": "Japonais", + "korean": "Coréen", + "spanish": "Espagnol", + "german": "Allemand", + "french": "Français", + "portuguese": "Portugais", + "arabic": "Arabe" + }, + "WelcomePage": { + "title": "Bienvenue sur Codeg", + "openSettings": "Ouvrir les paramètres", + "searchPlaceholder": "Rechercher des dossiers...", + "loading": "Chargement...", + "emptyFolders": "Aucun dossier pour le moment", + "removeFromHistory": "Retirer de l’historique", + "openFolder": "Ouvrir un dossier", + "cloneRepository": "Cloner un dépôt", + "softwareVersion": "Version {version}", + "toasts": { + "loadFolderHistoryFailed": "Échec du chargement de l’historique des dossiers", + "openFolderFailed": "Échec de l’ouverture du dossier", + "removeFromHistoryFailed": "Échec de la suppression du dossier", + "openSettingsFailed": "Échec de l’ouverture des paramètres", + "cloneFailed": "Échec du clonage du dépôt" + }, + "errors": { + "unknown": "Erreur inattendue", + "invalidInput": "Entrée invalide.", + "notFound": "Ressource introuvable.", + "alreadyExists": "La ressource existe déjà.", + "dependencyMissing": "Une dépendance requise est manquante.", + "databaseError": "Échec de l’opération de base de données.", + "ioError": "Échec de l’opération de fichier.", + "externalCommandFailed": "La commande externe a échoué.", + "windowOperationFailed": "Échec de l’opération de fenêtre.", + "gitNotInstalled": "Git n’est pas installé. Veuillez installer Git d’abord.", + "targetDirectoryNotEmpty": "Le répertoire cible existe déjà et n’est pas vide.", + "repositoryNotFound": "Dépôt introuvable. Vérifiez l’URL et les autorisations d’accès.", + "networkUnavailable": "Le réseau est indisponible. Vérifiez votre connexion et réessayez.", + "authenticationFailed": "Échec de l’authentification. Vérifiez les identifiants ou la clé SSH.", + "permissionDenied": "Permission refusée. Vérifiez les autorisations du répertoire." + }, + "cloneDialog": { + "title": "Cloner un dépôt", + "repositoryUrl": "URL du dépôt", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "Répertoire", + "directoryPlaceholder": "Sélectionnez le répertoire cible...", + "browseDirectory": "Parcourir le répertoire", + "cancel": "Annuler", + "clone": "Cloner" + } + }, + "SettingsShell": { + "title": "Paramètres", + "preferences": "Préférences", + "nav": { + "appearance": "Apparence", + "agents": "Agents IA", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "Raccourcis", + "system": "Système" + } + }, + "AppearanceSettings": { + "sectionTitle": "Apparence du thème", + "sectionDescription": "Choisissez clair, sombre ou suivre le système. Les paramètres sont enregistrés automatiquement.", + "themeMode": "Mode du thème", + "placeholder": "Sélectionner le mode du thème", + "system": "Suivre le système", + "light": "Clair", + "dark": "Sombre", + "currentTheme": "Thème effectif actuel : {theme}", + "resolvedTheme": { + "light": "Clair", + "dark": "Sombre", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "Chargement...", + "sectionTitle": "Gestion du système", + "sectionDescription": "Gérez le proxy réseau, les mises à jour de l’app et les préférences de langue.", + "proxyTitle": "Proxy réseau", + "proxyDescription": "Lorsqu’il est activé, les requêtes réseau suivantes utilisent ce proxy en priorité (y compris le chat ACP, l’installation d’agents et les opérations Git distantes).", + "loadFailed": "Échec du chargement : {message}", + "enableProxy": "Activer le proxy système", + "proxyAddress": "Adresse du proxy", + "proxyHint": "Prend en charge http(s)/socks5, exemple : {example}. Actif uniquement lorsque le proxy système est activé.", + "save": "Enregistrer", + "saving": "Enregistrement...", + "proxyRequired": "L’URL du proxy est requise lorsque le proxy est activé", + "saveSuccess": "Les paramètres du proxy système ont été enregistrés", + "saveFailed": "Échec de l’enregistrement : {message}", + "languageTitle": "Langue", + "languageDescription": "Définissez la langue de l’app. En mode système, les langues non prises en charge reviennent à l’anglais.", + "appLanguage": "Langue de l’app", + "languageSaveSuccess": "Les paramètres de langue ont été enregistrés", + "languageSaveFailed": "Échec de l’enregistrement des paramètres de langue : {message}", + "updateTitle": "Mise à jour de l’app", + "updateDescription": "Vérifiez les nouvelles versions depuis la source de publication configurée et installez-les directement si disponibles.", + "currentVersion": "Version actuelle", + "upgradableVersion": "Version disponible", + "none": "Aucune", + "lastChecked": "Dernière vérification : {time}", + "updateError": "Erreur de mise à jour : {message}", + "checking": "Vérification...", + "checkUpdate": "Rechercher les mises à jour", + "updating": "Installation...", + "upgradeTo": "Mettre à jour vers v{version}", + "foundUpdate": "Nouvelle version v{version} trouvée", + "alreadyLatest": "Vous utilisez déjà la dernière version", + "checkUpdateFailed": "Échec de la recherche de mises à jour : {message}", + "installSuccess": "Mise à jour installée. Redémarrage de l’app.", + "installFailed": "Échec de la mise à jour : {message}", + "updateErrors": { + "sourceUnavailable": "Impossible d’atteindre la source de mise à jour. Vérifiez votre réseau ou proxy et réessayez.", + "network": "La connexion réseau a échoué. Vérifiez votre réseau ou proxy et réessayez.", + "downloadFailed": "Impossible de télécharger le paquet de mise à jour. Veuillez réessayer plus tard.", + "installFailed": "Impossible d’installer la mise à jour. Fermez l’app puis réessayez.", + "unknown": "La mise à jour a échoué. Veuillez réessayer plus tard." + } + }, + "ShortcutSettings": { + "sectionTitle": "Raccourcis", + "resetDefault": "Rétablir les valeurs par défaut", + "recordInstruction": "Cliquez sur le bouton à droite, puis appuyez sur une combinaison de touches. Utilisez Ctrl/Cmd, Alt et Shift. Appuyez sur Échap pour annuler l’enregistrement.", + "recording": "Appuyez sur un raccourci...", + "toasts": { + "conflict": "Le raccourci est déjà utilisé par \"{title}\"", + "updated": "Raccourci mis à jour", + "invalid": "Raccourci invalide, veuillez réessayer", + "reset": "Les raccourcis par défaut ont été restaurés" + }, + "actions": { + "toggle_search": { + "title": "Ouvrir la recherche", + "description": "Afficher ou masquer le panneau de recherche de conversations" + }, + "toggle_sidebar": { + "title": "Basculer la barre latérale gauche", + "description": "Afficher ou masquer la barre latérale de liste des conversations" + }, + "toggle_terminal": { + "title": "Basculer le terminal", + "description": "Afficher ou masquer le panneau terminal inférieur" + }, + "new_terminal_tab": { + "title": "Nouveau terminal", + "description": "Créer un nouvel onglet terminal lorsque le terminal a le focus" + }, + "close_current_terminal_tab": { + "title": "Fermer le terminal actuel", + "description": "Fermer l’onglet terminal actuel lorsque le terminal a le focus" + }, + "toggle_aux_panel": { + "title": "Basculer le panneau droit", + "description": "Afficher ou masquer le panneau d’informations auxiliaires" + }, + "new_conversation": { + "title": "Nouvelle conversation", + "description": "Créer un nouvel onglet de conversation dans le dossier actuel" + }, + "open_folder": { + "title": "Ouvrir un dossier", + "description": "Ouvrir le sélecteur de dossier et ouvrir dans une nouvelle fenêtre" + }, + "open_settings": { + "title": "Ouvrir les paramètres", + "description": "Ouvrir la fenêtre des paramètres" + }, + "close_current_tab": { + "title": "Fermer l’onglet actuel", + "description": "Fermer la conversation actuelle ou l’onglet de fichier" + }, + "close_all_file_tabs": { + "title": "Fermer tous les onglets de fichiers", + "description": "Fermer tous les onglets de fichiers uniquement en mode fichiers" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "Sélectionnez une Skill à gauche. À droite, un aperçu Markdown s’affiche par défaut ; passez en édition pour modifier et enregistrer.", + "loadingAgents": "Chargement des agents qui prennent en charge les Skills...", + "emptyNoManageableAgents": "Aucun agent disponible pour la gestion des Skills.", + "managedTarget": "Cible gérée", + "selectAgentPlaceholder": "Sélectionnez un agent", + "searchPlaceholder": "Rechercher par nom / ID / chemin...", + "skillsList": "Liste des Skills", + "loadingSkills": "Chargement des Skills...", + "agentNotSupported": "L’agent actuel ne prend pas en charge la gestion des Skills.", + "emptySkills": "Aucune Skill pour le moment. Cliquez sur « Nouvelle Skill » pour en créer une.", + "newSkillTitle": "Nouvelle Skill", + "skillInfo": "Infos de la Skill", + "skillIdPlaceholder": "skill-id (lettres/chiffres/-/_/.)", + "skillsDirectoryWithPath": "Répertoire des Skills : {path}", + "skillsDirectoryNeedId": "Répertoire des Skills : saisissez l’ID de Skill pour générer le chemin complet", + "markdownContent": "Contenu Markdown", + "editingStatus": "Édition", + "previewStatus": "Aperçu", + "contentPlaceholder": "Saisissez le contenu Markdown de la Skill...", + "metadataTitle": "Métadonnées des Skills", + "onlyYamlMetadata": "Cette Skill contient uniquement des métadonnées YAML.", + "emptyContentHint": "Aucun contenu pour le moment. Cliquez sur « Éditer » pour commencer.", + "loadingSkill": "Chargement de la Skill...", + "emptyNoAgents": "Aucun agent disponible.", + "actions": { + "preview": "Aperçu", + "edit": "Éditer", + "openInWindow": "Ouvrir dans une nouvelle fenêtre", + "delete": "Supprimer", + "deleting": "Suppression...", + "refresh": "Actualiser", + "newSkill": "Nouvelle Skill", + "reset": "Réinitialiser", + "save": "Enregistrer", + "saving": "Enregistrement...", + "cancel": "Annuler" + }, + "deleteDialog": { + "title": "Supprimer la Skill", + "confirm": "Supprimer la Skill actuelle ? Cette action est irréversible.", + "confirmWithNamePrefix": "Supprimer la Skill", + "confirmWithNameSuffix": "? Cette action est irréversible." + }, + "toasts": { + "loadFailed": "Échec du chargement de la Skill", + "openFolderFailed": "Échec de l’ouverture du dossier", + "noSkillDirectory": "Aucun répertoire de Skills disponible pour l’agent actuel", + "nameRequired": "Le nom de la Skill ne peut pas être vide", + "updated": "Skill mise à jour", + "created": "Skill créée", + "saveFailed": "Échec de l’enregistrement de la Skill", + "deleted": "Skill supprimée", + "deleteFailed": "Échec de la suppression de la Skill" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "Chargement...", + "summary": { + "missingCommand": "(commande manquante)", + "missingUrl": "(URL manquante)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "Veuillez sélectionner un protocole d’installation", + "fieldRequired": "{field} est requis", + "fieldNeedsBoolean": "{field} doit être true ou false", + "fieldNeedsNumber": "{field} doit être un nombre", + "fieldNeedsInteger": "{field} doit être un entier", + "fieldInvalidJson": "{field} contient un JSON invalide : {message}", + "fieldOutOfRange": "La valeur de {field} est hors de la plage autorisée", + "jsonEmpty": "{name} ne peut pas être vide", + "jsonInvalid": "{name} n’est pas un JSON valide : {message}", + "jsonMustBeObject": "{name} doit être un objet JSON" + }, + "jsonNames": { + "localConfig": "Configuration MCP", + "installConfig": "Configuration d’installation" + }, + "toasts": { + "uninstalled": "MCP désinstallé", + "uninstallFailed": "Échec de la désinstallation : {message}", + "selectAtLeastOneApp": "Veuillez sélectionner au moins une application cible", + "saveSuccess": "Enregistré", + "saveFailed": "Échec de l’enregistrement : {message}", + "installed": "{name} installé", + "installFailed": "Échec de l’installation : {message}" + }, + "installDialog": { + "title": "Confirmer l’installation MCP", + "descriptionWithName": "Installer {name} dans la configuration locale.", + "description": "Sélectionnez les applications cibles pour l’installation.", + "protocol": "Protocole", + "selectProtocol": "Sélectionner un protocole", + "parameters": "Paramètres de configuration", + "booleanPlaceholder": "Veuillez sélectionner true/false", + "selectOneValue": "Sélectionner une valeur", + "targetApps": "Applications cibles" + }, + "actions": { + "cancel": "Annuler", + "confirmInstall": "Confirmer l’installation", + "installing": "Installation", + "uninstall": "Désinstaller", + "uninstalling": "Désinstallation", + "viewDetails": "Voir les détails", + "save": "Enregistrer", + "saving": "Enregistrement", + "install": "Installer" + }, + "tabs": { + "local": "MCP local", + "market": "Marketplace MCP" + }, + "local": { + "filterPlaceholder": "Filtrer les MCP locaux...", + "loadFailed": "Échec du chargement : {message}", + "empty": "Aucun MCP local détecté.", + "description": "La configuration MCP locale peut être modifiée et enregistrée directement.", + "enabledApps": "Applications activées", + "configJson": "Configuration MCP (JSON)" + }, + "market": { + "selectMarketplace": "Sélectionner un marketplace", + "searchPlaceholder": "Rechercher MCP...", + "searchFailed": "Échec de la recherche : {message}", + "loadingList": "Chargement de la liste MCP...", + "empty": "Aucun résultat MCP.", + "loadingDetail": "Chargement des détails du marketplace...", + "detailLoadFailed": "Échec du chargement des détails : {message}", + "owner": "Propriétaire : {owner}", + "namespace": "Espace de noms : {namespace}", + "defaultInstallProtocol": "Protocole d’installation par défaut", + "currentOptionParameterCount": "Nombre de paramètres de l’option actuelle : {count}", + "installConfigDescription": "Configuration d’installation (JSON, modifiable avant installation ; les modifications remplaceront le formulaire protocole/paramètres)", + "selectLeftToView": "Sélectionnez un MCP du marketplace à gauche pour voir les détails." + }, + "badges": { + "verified": "Vérifié", + "remote": "Distant", + "hasHomepage": "A une page d’accueil", + "uses": "{count} utilisations", + "deployed": "Déployé", + "notDeployed": "Non déployé" + }, + "selectLeftMcp": "Sélectionnez un MCP à gauche." + }, + "AcpAgentSettings": { + "title": "Gestion du SDK des agents", + "description": "Gérez en un seul endroit la connexion SDK des agents, l'état activé, les variables d'environnement, la gestion de configuration et les informations de préflight de version.", + "loadingAgents": "Chargement de la liste des agents...", + "agentList": "Liste des agents", + "emptyNoAgent": "Aucun agent disponible.", + "configManagement": "Gestion de configuration", + "envVars": "Variables d'environnement", + "nativeJsonConfig": "Configuration JSON native", + "modelHintDefault": "Laissez vide pour utiliser le modèle système par défaut.", + "generalConfigDescriptionClaude": "Prend en charge la configuration rapide de l'API URL, API Key et des modèles Claude, et synchronise avec la configuration JSON native.", + "generalConfigDescriptionDefault": "Prend en charge les entrées de configuration importantes (API URL, API Key, Model) et la gestion de la configuration JSON native.", + "actions": { + "dragSort": "Glisser pour réordonner", + "dragSortAgent": "Glisser pour réordonner {name}", + "refreshCheck": "Actualiser la vérification", + "refreshCheckAgent": "Actualiser la vérification de {name}", + "clickEnable": "Cliquer pour activer {name}", + "clickDisable": "Cliquer pour désactiver {name}", + "install": "Installer", + "upgrade": "Mettre à niveau", + "uninstall": "Désinstaller", + "uninstalling": "Désinstallation...", + "saveEnvVars": "Enregistrer les variables d’environnement", + "saving": "Enregistrement...", + "saveCodexConfig": "Enregistrer la config Codex", + "saveGeminiConfig": "Enregistrer la config Gemini", + "saveOpenCodeConfig": "Enregistrer la config OpenCode", + "saveOpenClawConfig": "Enregistrer la config OpenClaw", + "saveConfigManagement": "Enregistrer la gestion de config", + "saveCurrentProvider": "Enregistrer le provider actuel", + "showApiKey": "Afficher la clé API", + "hideApiKey": "Masquer la clé API", + "showKey": "Afficher la clé", + "hideKey": "Masquer la clé", + "showToken": "Afficher le token", + "hideToken": "Masquer le token", + "cancel": "Annuler", + "delete": "Supprimer", + "deleting": "Suppression...", + "confirmDelete": "Confirmer la suppression", + "confirmUninstall": "Confirmer la désinstallation" + }, + "status": { + "enabled": "Activé", + "disabled": "Désactivé", + "unchecked": "Non vérifié", + "agentEnabledAria": "{name} activé", + "agentEnabledSwitch": "Interrupteur d’activation {name}" + }, + "preflight": { + "count": "Éléments de pré-vérification : {count}", + "notRun": "Les vérifications n’ont pas encore été exécutées." + }, + "codex": { + "configDescription": "Prend en charge la configuration rapide de l’URL API, de la clé API, du nom du modèle et du reasoning effort, avec synchronisation vers `auth.json` / `config.toml`.", + "selectProvider": "Sélectionner un provider", + "modelName": "Nom du modèle", + "selectReasoningEffort": "Sélectionner Reasoning Effort", + "enableWebsocket": "Activer WebSocket", + "enableWebsocketAria": "Activer WebSocket pour Codex Provider", + "authJsonNative": "auth.json (natif)", + "configTomlNative": "config.toml (natif)" + }, + "gemini": { + "authConfig": "Configuration d’authentification Gemini", + "authConfigDescription": "Alignée sur la documentation d’authentification Gemini CLI, avec prise en charge d’un endpoint personnalisé, connexion Google, Gemini API Key et Vertex AI (ADC / compte de service / API Key).", + "authMode": "Mode d’authentification", + "selectAuthMode": "Sélectionner un mode d’authentification", + "viewAuthDoc": "Voir la documentation d’authentification", + "mode": { + "custom": "Endpoint personnalisé", + "loginGoogle": "Connexion Google (OAuth)", + "vertexServiceAccount": "Vertex AI (Compte de service)" + }, + "hint": { + "custom": "Renseignez API URL, API Key et Model, mappés sur GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.", + "loginGoogle": "Exécutez d’abord gemini dans le terminal et terminez la connexion Google ; la clé API n’est pas requise.", + "geminiApiKey": "Renseignez GEMINI_API_KEY lors de l’utilisation de l’API Gemini.", + "vertexAdc": "Utilisez gcloud ADC ; GOOGLE_CLOUD_PROJECT et GOOGLE_CLOUD_LOCATION sont recommandés.", + "vertexServiceAccount": "Définissez le chemin JSON du compte de service dans GOOGLE_APPLICATION_CREDENTIALS.", + "vertexApiKey": "Renseignez GOOGLE_API_KEY lors de l’utilisation d’une clé API Vertex AI." + } + }, + "openCode": { + "configManagement": "Gestion de configuration OpenCode", + "configDescription": "Alignée sur le schéma `provider` d’OpenCode, prend en charge la gestion multi-provider et la synchronisation bidirectionnelle avec les fichiers JSON natifs.", + "providerManagement": "Gestion des providers", + "providerCount": "{count} fournisseurs", + "addProvider": "Ajouter un provider", + "emptyProvider": "Aucun provider pour le moment. Saisissez un ID puis cliquez sur « Ajouter un provider ».", + "providerEnabledState": "État activé de {providerId}", + "selectProviderNpm": "Sélectionner provider.npm", + "notSet": "Non défini", + "modelManagement": "Gestion des modèles", + "modelCount": "{count} modèles", + "modelDescription": "Aligné sur `provider.models` d’OpenCode. La gestion rapide prend actuellement en charge `name` / `id` ; les autres champs avancés sont conservés et peuvent être modifiés dans le JSON natif ci-dessous.", + "addModel": "Ajouter un modèle", + "emptyModel": "Aucun modèle pour le moment. Saisissez model id puis cliquez sur « Ajouter un modèle ».", + "modelId": "ID du modèle", + "modelName": "Nom du modèle", + "deleteModel": "Supprimer le modèle {modelId}", + "nativeJsonConfig": "Configuration JSON native OpenCode" + }, + "openClaw": { + "gatewayConfig": "Configuration Gateway", + "gatewayDescription": "Configure la connexion OpenClaw Gateway. Prend en charge une gateway locale ou distante.", + "gatewayUrlHint": "Laisser vide pour utiliser gateway.remote.url depuis la configuration locale openclaw.", + "gatewayTokenPlaceholder": "Token d’authentification Gateway", + "gatewayTokenHint": "Utilisez token-file plutôt qu’un token en clair si possible ; configurez-le via le CLI openclaw.", + "sessionKeyHint": "Optionnel. Spécifie la session key de la gateway ; laisser vide pour auto-attribuer une session isolée." + }, + "claude": { + "mainModel": "Modèle principal", + "reasoningModel": "Modèle de raisonnement (thinking)", + "haikuDefaultModel": "Modèle Haiku par défaut", + "sonnetDefaultModel": "Modèle Sonnet par défaut", + "opusDefaultModel": "Modèle Opus par défaut" + }, + "dialogs": { + "confirmDeleteProvider": "Supprimer le provider {providerId} ?", + "confirmDeleteProviderDescription": "La configuration OpenCode et auth JSON seront mises à jour ensemble. Cette action est irréversible.", + "confirmUninstall": "Désinstaller {name} ?", + "confirmUninstallDescription": "Cela supprime la version installée localement. Vous pouvez réinstaller plus tard." + }, + "errors": { + "nativeJsonMustBeObject": "La configuration JSON native doit être un objet", + "nativeJsonInvalid": "Erreur de format de configuration JSON native : {message}", + "openCodeAuthMustBeObject": "OpenCode auth.json doit être un objet JSON", + "openCodeAuthInvalid": "Erreur de format OpenCode auth.json : {message}", + "authMustBeObject": "auth.json doit être un objet JSON", + "authInvalid": "Erreur de format auth.json : {message}", + "providerIdPattern": "L’ID du provider n’accepte que lettres, chiffres, underscore, point et tiret", + "providerExists": "Le provider '{providerId}' existe déjà", + "modelIdPattern": "L’ID du modèle n’accepte que lettres, chiffres, underscore, point, deux-points et tiret", + "modelExists": "Le modèle '{modelId}' existe déjà" + }, + "warnings": { + "nativeJsonRecoveredStructured": "La configuration JSON native est invalide ; réinitialisée en configuration structurée", + "nativeJsonRecoveredOpenCode": "La configuration JSON native est invalide ; réinitialisée en configuration structurée OpenCode", + "openCodeAuthRecovered": "OpenCode auth.json est invalide ; réinitialisé en configuration par défaut", + "authRecoveredStructured": "auth.json est invalide ; réinitialisé en configuration structurée" + }, + "toasts": { + "agentActionCompleted": "{name} {action} terminé", + "agentActionFailed": "{name} {action} échoué", + "localVersion": "Version locale : {version}", + "installCompletedVersionLater": "Installation terminée, la version sera mise à jour à la prochaine vérification", + "uninstallCompleted": "Désinstallation de {name} terminée", + "uninstallFailed": "Échec de la désinstallation de {name}", + "localVersionRemoved": "Version locale supprimée", + "saveAgentOrderFailed": "Échec de l’enregistrement de l’ordre des agents", + "saveAgentSwitchFailed": "Échec de l’enregistrement du switch agent", + "saveEnvFailed": "Échec de l’enregistrement des variables d’environnement", + "codexSaved": "Configuration Codex enregistrée", + "saveCodexNativeFailed": "Échec de l’enregistrement de la configuration native Codex", + "geminiSaved": "Configuration Gemini enregistrée", + "saveGeminiFailed": "Échec de l’enregistrement de la configuration Gemini", + "providerDeleted": "Provider {providerId} supprimé", + "providerDeleteFailed": "Échec de suppression du provider {providerId}", + "providerSaved": "Provider {providerId} enregistré", + "saveProviderFailed": "Échec d’enregistrement du provider {providerId}", + "openCodeConfigSynced": "La configuration OpenCode et auth JSON ont été synchronisés.", + "openCodeSaved": "Configuration OpenCode enregistrée", + "saveOpenCodeFailed": "Échec de l’enregistrement de la configuration OpenCode", + "openClawSaved": "Configuration OpenClaw enregistrée", + "saveOpenClawFailed": "Échec de l’enregistrement de la configuration OpenClaw", + "configSaved": "Configuration enregistrée", + "saveConfigManagementFailed": "Échec de l’enregistrement de la gestion de configuration" + }, + "version": { + "statusLabel": "Statut de version", + "notInstalled": "Non installé", + "remoteLocal": "Distant : {remoteVersion} · Local : {localVersion}", + "platformUnsupported": "{versionText}. La plateforme actuelle ne prend pas en charge cet agent.", + "clickInstall": "{versionText}. Cliquez sur Installer à droite.", + "localUnrecognized": "{versionText}. La version locale n’est pas comparable ; essayez une mise à niveau pour écraser l’installation.", + "upgradeAvailable": "{versionText}. Mise à niveau disponible.", + "remoteUnavailable": "{versionText}. La version distante est actuellement indisponible.", + "latest": "{versionText}. Déjà à jour." + } + }, + "SettingsPages": { + "agentsLoading": "Chargement des paramètres des agents..." + }, + "CommitPage": { + "title": "Valider", + "invalidFolderId": "ID de dossier invalide", + "loadingRepo": "Chargement du dépôt..." + }, + "Folder": { + "common": { + "all": "Tout", + "cancel": "Annuler", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeAll": "Tout fermer", + "confirm": "Confirmer", + "save": "Enregistrer", + "delete": "Supprimer", + "rename": "Renommer", + "loading": "Chargement...", + "refresh": "Actualiser", + "refreshing": "Actualisation...", + "create": "Créer", + "createAndSwitch": "Créer et basculer", + "openFile": "Ouvrir le fichier", + "viewDiff": "Voir le Diff" + }, + "modes": { + "conversation": "Mode conversation", + "fusion": "Mode fusion", + "files": "Mode fichiers", + "workspaceModesAria": "Modes de l’espace de travail" + }, + "statusLabels": { + "in_progress": "En cours", + "pending_review": "Revue", + "completed": "Terminé", + "cancelled": "Annulé" + }, + "sidebar": { + "title": "Discussions", + "locateActiveConversation": "Localiser la conversation active", + "expandAllGroups": "Développer tous les groupes", + "collapseAllGroups": "Réduire tous les groupes", + "newConversation": "Nouvelle conversation", + "noConversationsFound": "Aucune conversation trouvée.", + "importLocalSessions": "Importer les sessions locales", + "importing": "Import en cours...", + "error": "Erreur : {message}", + "completeAllSessions": "Terminer toutes les sessions", + "completeAllReviewTitle": "Terminer toutes les sessions en revue ?", + "completeAllReviewDescription": "Cela marquera comme terminées toutes les {count, plural, one {# session} other {# sessions}} en Revue.", + "completing": "Finalisation...", + "toasts": { + "importedSessions": "{imported, plural, one {# session} other {# sessions}} importée(s), {skipped} ignorée(s)", + "noNewSessionsFound": "Aucune nouvelle session trouvée ({skipped} ignorée(s))", + "importFailed": "Échec de l’import : {message}", + "reviewCompleted": "{count, plural, one {# session en revue} other {# sessions en revue}} marquée(s) comme terminée(s)", + "completeReviewFailed": "Échec de la finalisation des sessions en revue : {message}" + } + }, + "conversation": { + "reloadFailed": "Échec du rechargement de la conversation : {message}", + "reloaded": "Conversation rechargée", + "reload": "Recharger", + "newConversation": "Nouvelle conversation", + "closeConversation": "Fermer la conversation" + }, + "conversationCard": { + "untitledConversation": "Conversation sans titre", + "newConversation": "Nouvelle conversation", + "rename": "Renommer", + "status": "Statut", + "delete": "Supprimer", + "importLocalSessions": "Importer les sessions locales", + "importing": "Import en cours...", + "renameConversation": "Renommer la conversation", + "deleteConversationTitle": "Supprimer la conversation ?", + "deleteConversationDescription": "Cela supprimera \"{title}\". Cette action est irréversible.", + "cancel": "Annuler", + "save": "Enregistrer" + }, + "search": { + "dialogTitle": "Rechercher des conversations", + "placeholder": "Rechercher des conversations...", + "allAgents": "Tout", + "searching": "Recherche...", + "typeToSearch": "Tapez pour rechercher des conversations", + "noResults": "Aucun résultat trouvé.", + "untitledConversation": "Conversation sans titre" + }, + "folderTitleBar": { + "showSidebar": "Afficher la barre latérale", + "hideSidebar": "Masquer la barre latérale", + "toggleTerminal": "Basculer le terminal", + "toggleAuxPanel": "Basculer le panneau auxiliaire", + "search": "Rechercher", + "openSettings": "Ouvrir les paramètres", + "withShortcut": "{label} (raccourci : {shortcut})" + }, + "statusBar": { + "connection": { + "connected": "Connecté", + "connecting": "Connexion...", + "downloading": "Téléchargement...", + "prompting": "Réponse...", + "error": "Erreur de connexion", + "disconnected": "Déconnecté", + "tooltip": "{agent} : {status}", + "tooltipError": "{agent} : {error}" + }, + "tasks": { + "title": "Tâches" + }, + "alerts": { + "title": "Alertes", + "empty": "Aucune alerte" + }, + "stats": { + "conversations": "{count} discussions", + "summary": "{conversations} discussions / {messages} messages" + }, + "tokens": { + "contextWindowUsageAria": "Utilisation de la fenêtre de contexte", + "contextWindow": "Fenêtre de contexte", + "usedMax": "Utilisé / Max", + "tokenUsage": "Utilisation des tokens", + "input": "Entrée", + "output": "Sortie", + "cacheRead": "Lecture cache", + "cacheWrite": "Écriture cache", + "total": "Total des tokens" + } + }, + "auxPanel": { + "tabs": { + "diff": "Différences", + "files": "Fichiers", + "changes": "Changements", + "commits": "Validations" + } + }, + "windowControls": { + "minimizeWindow": "Minimiser la fenêtre", + "minimize": "Minimiser", + "maximizeWindow": "Maximiser la fenêtre", + "maximize": "Maximiser", + "restoreWindow": "Restaurer la fenêtre", + "restore": "Restaurer", + "closeWindow": "Fermer la fenêtre", + "close": "Fermer" + }, + "tabs": { + "closeConversationTab": "Fermer l’onglet de conversation", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeAll": "Tout fermer" + }, + "fileWorkspace": { + "files": "Fichiers", + "closeFileTab": "Fermer l’onglet fichier", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeAll": "Tout fermer" + }, + "terminal": { + "rename": "Renommer", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeAll": "Tout fermer", + "hideTerminal": "Masquer le terminal ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "Réponse actuelle", + "noDiffDataAvailable": "Aucune donnée de diff disponible pour {filePath}", + "loading": "Chargement...", + "noFileChangesInConversation": "Aucun changement de fichier dans cette conversation", + "openConversationToSeeChanges": "Ouvrez une conversation pour voir ses changements de fichiers", + "remove": "Retirer", + "changeCount": "{count, plural, one {# changement} other {# changements}}", + "fileCount": "{count, plural, one {# fichier} other {# fichiers}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "Dossier", + "openFolder": "Ouvrir le dossier", + "cloneRepository": "Cloner le dépôt", + "opened": "Ouvert", + "recentOpen": "Ouvert récemment" + }, + "fileWorkspacePanel": { + "viewDiff": "Voir le Diff", + "openFile": "Ouvrir le fichier", + "fileCount": "{count, plural, one {# fichier} other {# fichiers}}", + "openFileOrDiff": "Ouvrez un fichier ou un diff depuis le panneau de droite", + "disk": "Disque", + "head": "HEAD", + "unsaved": "Non enregistré", + "workingTree": "Arbre de travail", + "loading": "Chargement...", + "compareWithBranch": "{path} · comparer avec {branch}", + "hunkCount": "{count, plural, one {# bloc} other {# blocs}}", + "prev": "Précédent", + "next": "Suivant", + "jumpToLine": "Aller à la ligne {line}", + "noParsedDiffSections": "Aucune section de diff analysée", + "loadingEditor": "Chargement de l’éditeur..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "Commit de code terminé", + "committedFiles": "{count, plural, one {# fichier commit} other {# fichiers commit}}", + "taskCompleted": "{label} terminé", + "taskFailed": "{label} échoué", + "mergeNoNewCommits": "{branchName} n’a pas de nouveaux commits", + "mergedCommits": "{count, plural, one {# commit fusionné} other {# commits fusionnés}}", + "allFilesUpToDate": "Tous les fichiers sont à jour", + "updatedFiles": "{count, plural, one {# fichier mis à jour} other {# fichiers mis à jour}}", + "openCommitWindowFailed": "Impossible d’ouvrir la fenêtre de commit", + "upstreamSet": "La branche upstream a été définie", + "upstreamSetAndPushed": "Branche upstream définie et {count, plural, one {# commit} other {# commits}} poussé(s)", + "noCommitsToPush": "Aucun commit à pousser", + "pushedCommits": "{count, plural, one {# commit poussé} other {# commits poussés}}" + }, + "tasks": { + "newBranch": "Créer la branche {name}", + "newWorktree": "Créer le worktree {name}", + "checkoutTo": "Basculer vers {branchName}", + "mergeBranch": "Fusionner {branchName}", + "rebaseTo": "Rebase vers {branchName}", + "deleteBranch": "Supprimer la branche {branchName}", + "initGitRepo": "Initialiser le dépôt Git", + "pullCode": "Pull du code", + "fetchInfo": "Récupérer les infos", + "pushCode": "Push du code", + "stashChanges": "Stash des changements", + "stashPop": "Appliquer le stash" + }, + "confirm": { + "mergeTitle": "Fusionner la branche", + "rebaseTitle": "Rebase de la branche", + "deleteTitle": "Supprimer la branche", + "mergeDescription": "Fusionner {branchName} dans la branche actuelle {currentBranch} ?", + "rebaseDescription": "Rebaser la branche actuelle {currentBranch} sur {branchName} ?", + "deleteDescription": "Supprimer la branche {branchName} ? Cette action est irréversible." + }, + "current": "Actuelle", + "switchToBranch": "Basculer vers cette branche", + "mergeBranchIntoCurrent": "Fusionner {branchName} dans {currentBranch}", + "rebaseCurrentToBranch": "Rebaser {currentBranch} sur {branchName}", + "deleteBranch": "Supprimer la branche", + "versionControl": "Contrôle de version", + "initGitRepo": "Initialiser le dépôt Git", + "pullCode": "Pull du code", + "fetchRemoteBranches": "Récupérer les branches distantes", + "openCommitWindow": "Commit du code...", + "pushCode": "Pousser...", + "newBranch": "Nouvelle branche...", + "newWorktree": "Nouveau worktree...", + "stashChanges": "Stash des changements", + "stashPop": "Appliquer le stash...", + "localBranches": "Branches locales ({count, plural, one {#} other {#}})", + "noLocalBranches": "Aucune branche locale", + "remoteBranches": "Branches distantes ({count, plural, one {#} other {#}})", + "noRemoteBranches": "Aucune branche distante", + "parentBranchHint": "La branche actuelle a été créée depuis {parentBranch}. Cliquez pour fusionner {parentBranch} dans la branche actuelle.", + "dialogs": { + "newBranchTitle": "Nouvelle branche", + "newBranchDescription": "Créer une nouvelle branche depuis la branche actuelle {branch}", + "branchNamePlaceholder": "Nom de la branche", + "newWorktreeTitle": "Nouveau worktree", + "newWorktreeDescription": "Créer un nouveau worktree depuis la branche actuelle {branch}", + "branchNameLabel": "Nom de la branche", + "worktreePathLabel": "Chemin du worktree", + "worktreePathPlaceholder": "Chemin du worktree" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "Commit de code terminé", + "committedFiles": "{count, plural, one {# fichier commit} other {# fichiers commit}}", + "addedToVcs": "Ajouté à VCS", + "addToVcsFailed": "Échec de l’ajout à VCS", + "fileDeleted": "Fichier supprimé", + "deleteFailed": "Échec de la suppression", + "fileRolledBack": "Fichier restauré", + "rollbackFailed": "Échec du rollback" + }, + "confirm": { + "deleteTitle": "Confirmer la suppression", + "deleteDescription": "Supprimer le fichier \"{file}\" ? Cette action est irréversible.", + "rollbackTitle": "Confirmer le rollback", + "rollbackDescription": "Restaurer le fichier \"{file}\" vers HEAD ? Les modifications non enregistrées seront perdues." + }, + "actions": { + "select": "Sélectionner", + "unselect": "Désélectionner", + "rollback": "Annuler", + "addToVcs": "Ajouter à VCS" + }, + "aria": { + "selectFile": "{action} : {path}", + "unselectAllFiles": "Désélectionner tous les fichiers", + "selectAllFiles": "Sélectionner tous les fichiers", + "unselectTracked": "Désélectionner les changements suivis", + "selectTracked": "Sélectionner les changements suivis", + "unselectUntracked": "Désélectionner les fichiers non suivis", + "selectUntracked": "Sélectionner les fichiers non suivis" + }, + "loading": "Chargement...", + "selectionCount": "{selected} / {total} fichiers", + "emptyFiles": "Aucun fichier modifié", + "trackedChanges": "Changements suivis ({count})", + "untrackedFiles": "Fichiers non suivis ({count})", + "commitMessage": "Message de commit", + "commitMessagePlaceholder": "Saisissez le message de commit...", + "commitButton": "Valider ({count})", + "head": "HEAD", + "workingTree": "Arbre de travail", + "clickFileToDiff": "Cliquez sur un nom de fichier pour voir le diff", + "loadingDiff": "Chargement du diff..." + }, + "gitLogTab": { + "filesTitle": "Fichiers", + "expandAllFiles": "Développer tous les fichiers", + "collapseAllFiles": "Réduire tous les fichiers", + "workspace": "espace de travail", + "retry": "Réessayer", + "noCommitsFound": "Aucun commit trouvé", + "hash": "Empreinte", + "copyHash": "Copier le hash", + "author": "Auteur", + "noFileChangeDetails": "Aucun détail de changement de fichier disponible.", + "branchesTitle": "Branches Git", + "loadingBranches": "Chargement des branches...", + "noContainingBranches": "Aucune branche contenant ce commit.", + "newBranch": "Nouvelle branche...", + "viewCommitDiffAria": "Voir le diff du commit {hash}", + "copyFullCommitHashAria": "Copier le hash complet du commit {hash}", + "pushStatus": { + "pushed": "Poussé vers le remote", + "notPushed": "Non poussé vers le remote", + "unknown": "Statut de push inconnu (aucun upstream configuré)" + }, + "time": { + "monthsAgo": "{count, plural, one {il y a # mois} other {il y a # mois}}", + "daysAgo": "{count, plural, one {il y a # jour} other {il y a # jours}}", + "hoursAgo": "{count, plural, one {il y a # heure} other {il y a # heures}}", + "minsAgo": "{count, plural, one {il y a # min} other {il y a # mins}}", + "justNow": "à l’instant" + }, + "toasts": { + "createdAndSwitchedNewBranch": "Nouvelle branche créée et activée", + "newBranchFromCommit": "{name} (depuis {shortHash})", + "createBranchFailed": "Échec de la création de la branche" + }, + "branchSelector": { + "selectBranchPlaceholder": "Sélectionner une branche...", + "localBranches": "Branches locales", + "current": "Actuelle", + "remoteBranches": "Branches distantes", + "refreshCommitHistory": "Actualiser l’historique des commits" + }, + "dialogs": { + "newBranchTitle": "Nouvelle branche", + "newBranchDescription": "Créer une nouvelle branche avec le commit {shortHash} comme dernier commit.", + "branchNamePlaceholder": "Nom de la branche" + } + }, + "gitChangesTab": { + "workspace": "espace de travail", + "noChanges": "Aucun changement local", + "trackedChanges": "Changements suivis ({count})", + "untrackedFiles": "Fichiers non suivis ({count})", + "expandTracked": "Développer les changements suivis", + "collapseTracked": "Réduire les changements suivis", + "expandUntracked": "Développer les fichiers non suivis", + "collapseUntracked": "Réduire les fichiers non suivis", + "actions": { + "commitCode": "Commit du code", + "rollback": "Annuler", + "addToVcs": "Ajouter à VCS" + }, + "toasts": { + "noAddableFilesInDir": "Aucun fichier modifié de ce répertoire ne peut être ajouté à VCS", + "noRollbackFilesInDir": "Aucun fichier modifié de ce répertoire ne peut être rollback", + "addedToVcs": "{name} ajouté à VCS", + "addToVcsFailed": "Échec de l’ajout à VCS", + "openCommitWindowFailed": "Impossible d’ouvrir la fenêtre de commit", + "rolledBack": "{name} restauré", + "rollbackFailed": "Échec du rollback", + "addedFilesToVcs": "{count, plural, one {# fichier} other {# fichiers}} ajouté(s) à VCS", + "rolledBackFiles": "{count, plural, one {# fichier restauré} other {# fichiers restaurés}}" + }, + "directoryDialog": { + "descriptionAdd": "Sélectionnez les fichiers du répertoire {path} à ajouter à VCS.", + "descriptionRollback": "Sélectionnez les fichiers du répertoire {path} à rollback.", + "descriptionFallback": "Sélectionnez les fichiers pour continuer.", + "selectionCount": "{selected} / {total} fichiers sélectionnés", + "selectAll": "Tout sélectionner", + "unselectAll": "Tout désélectionner", + "loadingCandidates": "Chargement des changements du répertoire...", + "noOperableFiles": "Aucun fichier opérable" + }, + "rollbackConfirm": { + "title": "Confirmer le rollback", + "descriptionWithTarget": "Rollback des changements locaux pour {kind} \"{name}\" ?", + "descriptionFallback": "Rollback des changements locaux ?", + "kindDirectory": "répertoire", + "kindFile": "fichier" + } + }, + "tabContext": { + "loadingConversation": "Chargement...", + "untitledConversation": "Conversation sans titre", + "newConversation": "Nouvelle conversation" + }, + "fileTreeTab": { + "workspace": "Espace de travail", + "retry": "Réessayer", + "git": "Git", + "openInFileManager": "Ouvrir dans le gestionnaire de fichiers", + "openInFinder": "Ouvrir dans Finder", + "openInExplorer": "Ouvrir dans Explorer", + "attachToCurrentSession": "Attacher à la session actuelle", + "compareWithBranch": "Comparer avec la branche...", + "reloadFromDisk": "Recharger depuis le disque", + "openIn": "Ouvrir dans", + "openInTerminal": "Ouvrir dans le terminal", + "actions": { + "select": "Sélectionner", + "unselect": "Désélectionner", + "commitCode": "Committer le code", + "rollback": "Annuler", + "addToVcs": "Ajouter au VCS" + }, + "aria": { + "selectPath": "{action} : {path}" + }, + "toasts": { + "openDirectoryFailed": "Échec de l'ouverture du dossier", + "openBuiltinTerminalFailed": "Impossible d'ouvrir le terminal intégré", + "openCommitWindowFailed": "Échec de l'ouverture de la fenêtre de commit", + "noAddableFilesInDir": "Aucun fichier modifié de ce dossier ne peut être ajouté au VCS", + "noRollbackFilesInDir": "Aucun fichier modifié de ce dossier ne peut être annulé", + "addedToVcs": "{name} ajouté au VCS", + "addToVcsFailed": "Échec de l'ajout au VCS", + "loadBranchesFailed": "Échec du chargement des branches", + "renameFailed": "Échec du renommage", + "deleteFailed": "Échec de la suppression", + "rolledBack": "{name} annulé", + "rollbackFailed": "Échec de l'annulation", + "addedFilesToVcs": "{count, plural, one {# fichier ajouté au VCS} other {# fichiers ajoutés au VCS}}", + "rolledBackFiles": "{count, plural, one {# fichier annulé} other {# fichiers annulés}}", + "savedAsCopy": "Enregistré en copie", + "saveCopyFailed": "Échec de l'enregistrement en copie", + "watchStartFailed": "Échec du démarrage de la surveillance de fichiers" + }, + "renameDialog": { + "renameDirectory": "Renommer le dossier", + "renameFile": "Renommer le fichier", + "description": "Saisissez un nouveau nom (nom uniquement, sans chemin).", + "placeholderDirectory": "nouveau-nom-dossier", + "placeholderFile": "nouveau-nom-fichier.ext" + }, + "directoryDialog": { + "descriptionAdd": "Sélectionnez des fichiers sous le dossier {path} à ajouter au VCS.", + "descriptionRollback": "Sélectionnez des fichiers sous le dossier {path} à annuler.", + "descriptionFallback": "Sélectionnez des fichiers pour continuer.", + "selectionCount": "{selected} / {total} fichiers sélectionnés", + "selectAll": "Tout sélectionner", + "unselectAll": "Tout désélectionner", + "loadingCandidates": "Chargement des changements du dossier...", + "noOperableFiles": "Aucun fichier exploitable" + }, + "compareDialog": { + "title": "Comparer avec la branche", + "descriptionWithTarget": "Sélectionnez une branche et comparez avec {kind} {path}", + "descriptionFallback": "Sélectionnez une branche à comparer.", + "kindDirectory": "dossier", + "kindFile": "fichier", + "filterPlaceholder": "Filtrer les branches, ex. main / origin/main", + "singleClickHint": "Cliquez sur une branche pour comparer directement", + "loadingBranches": "Chargement des branches...", + "recentBranches": "Branches récentes ({count})", + "noCurrentBranch": "Aucune branche courante", + "localBranches": "Branches locales ({count})", + "remoteBranches": "Branches distantes ({count})", + "noMatchingBranches": "Aucune branche correspondante" + }, + "externalConflictDialog": { + "title": "Modifications externes de fichiers détectées", + "descriptionWithPath": "Le fichier {path} a changé sur le disque et les modifications actuelles ne sont pas enregistrées.", + "descriptionFallback": "Le fichier actuel a changé sur le disque et les modifications actuelles ne sont pas enregistrées.", + "compare": "Comparer", + "savingCopy": "Enregistrement de la copie...", + "saveAsCopy": "Enregistrer en copie", + "reload": "Recharger" + }, + "deleteConfirm": { + "title": "Confirmer la suppression", + "descriptionWithTarget": "Supprimer {kind} \"{name}\" ? Cette action est irréversible.", + "descriptionFallback": "Cette action est irréversible.", + "kindDirectory": "dossier", + "kindFile": "fichier" + }, + "rollbackConfirm": { + "title": "Confirmer l'annulation", + "descriptionWithTarget": "Annuler les modifications locales du fichier \"{name}\" ?", + "descriptionFallback": "Annuler les modifications locales de ce fichier ?" + }, + "terminalTitle": "Console · {name}" + }, + "commandDropdown": { + "loading": "Chargement...", + "addCommand": "Ajouter une commande", + "manageCommands": "Gérer les commandes...", + "runCommandTitle": "Exécuter : {command}", + "stopCommandTitle": "Arrêter : {command}", + "manageDialog": { + "title": "Gérer les commandes", + "empty": "Aucune commande pour le moment", + "namePlaceholder": "Nom", + "commandPlaceholder": "Commande", + "add": "Ajouter", + "saving": "Enregistrement..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "Fermer « {title} » sans enregistrer ?", + "confirmCloseOtherDirtyTabs": "Fermer les autres onglets avec des modifications non enregistrées ?", + "confirmCloseAllDirtyTabs": "Fermer tous les onglets avec des modifications non enregistrées ?", + "unableLoadContent": "Impossible de charger le contenu.\n\n{message}", + "previewRequestTimedOut": "La requête de prévisualisation a expiré", + "diffRequestTimedOut": "La requête Diff a expiré", + "branchCompareRequestTimedOut": "La requête de comparaison de branches a expiré", + "commitDiffRequestTimedOut": "La requête de Diff de commit a expiré", + "saveRequestTimedOut": "La requête d’enregistrement a expiré", + "reloadRequestTimedOut": "La requête de rechargement a expiré", + "noChanges": "Aucun changement.", + "noDiffOutput": "Aucune sortie diff.", + "diffTitleWorkspace": "Diff · Espace de travail", + "diffDescriptionWorkingTree": "Arbre de travail (HEAD)", + "diffTitleFile": "Différence · {name}", + "compareTitleFile": "Comparer · {name}", + "compareTitleBranch": "Comparer · {branch}", + "compareDescriptionPath": "{path} · comparer avec {branch}", + "compareDescriptionBranch": "comparer avec {branch}", + "diffTitleCommitFile": "Différence · {name} @ {hash}", + "diffTitleCommit": "Différence · {hash}", + "diffDescriptionCommitPath": "{path} · validation {commit}", + "diffDescriptionCommit": "validation {commit}", + "diffTitleConflictFile": "Conflit · {name}", + "diffDescriptionConflict": "{path} · disque vs non enregistré" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "Ouvrir les paramètres des agents", + "retry": "Réessayer" + }, + "agentsSetupHint": "Ouvrez Paramètres > Agents pour gérer l'installation.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "Impossible de lire la configuration actuelle de l'agent.", + "disabled": "{agent} est désactivé dans les paramètres des agents. Activez-le avant de vous connecter.", + "unavailable": "{agent} n'est pas disponible sur la plateforme actuelle.", + "sdkMissing": "Le SDK de {agent} n'est pas installé" + }, + "unableReadAgentConfig": "Impossible de lire la configuration de l'agent : {message}", + "autoLinkFailedTitle": "Échec de l'auto-liaison de {agent}", + "preflightCheckFailedDefault": "Les vérifications préalables ont échoué. Vérifiez les paramètres des agents.", + "preflightFailedTitle": "Échec de la vérification préalable de {agent}", + "autoLinkPreflightFailed": "Échec de la vérification préalable de l'auto-liaison : {message}", + "connectFailedTitle": "Échec de la connexion de {agent}", + "toolFallbackTitle": "Outil", + "eventErrorTitle": "Erreur de l'agent" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "Connexion à {agent}", + "connectingDescription": "Établissement de la connexion", + "loadingSelectorsTitle": "Chargement des sélecteurs de {agent}", + "loadingSelectorsDescription": "Récupération des options de mode et de configuration de session" + }, + "errors": { + "connectionFailed": "Échec de la connexion" + } + }, + "shared": { + "attachedResources": "Ressources jointes", + "toolCallFailed": "Échec de l'appel d'outil", + "planUpdated": "Plan mis à jour" + }, + "messageThread": { + "emptyTitle": "Aucun message pour le moment", + "emptyDescription": "Commencez une conversation pour voir les messages ici" + }, + "chatInput": { + "connecting": "Connexion...", + "agentResponding": "L'agent répond...", + "sendMessage": "Envoyer un message..." + }, + "messageInput": { + "askAnything": "Posez n'importe quelle question...", + "removeAttachmentAria": "Retirer {name}", + "attachFiles": "Joindre des fichiers", + "dropFilesToAttach": "Déposez des fichiers à joindre", + "loadingSettings": "Chargement des paramètres...", + "loadingMode": "Chargement du mode...", + "cancel": "Annuler", + "send": "Envoyer" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "Paramètres > Agents", + "autoConnectFallback": "Cliquez pour ouvrir {path} et gérer l'installation.", + "autoConnectAppend": "{message}. Cliquez pour ouvrir {path} et gérer l'installation.", + "enableAgentFirstPlaceholder": "Activez au moins un agent avant de démarrer une session...", + "askAnythingPlaceholder": "Posez n'importe quelle question..." + }, + "agentSelector": { + "noEnabledAgents": "Aucun agent activé", + "openAgentsSettings": "Ouvrir les paramètres des agents" + }, + "liveMessageBlock": { + "assistantThinkingAria": "L'assistant réfléchit" + }, + "agentPlanOverlay": { + "title": "Plan de l'agent", + "collapsePlanAria": "Réduire le plan", + "collapsedSummary": "Plan de travail {completed}/{total}", + "status": { + "completed": "Terminé", + "inProgress": "En cours", + "pending": "En attente", + "unknown": "Inconnu" + }, + "priority": { + "high": "Haute", + "medium": "Moyenne", + "low": "Basse", + "unknown": "Inconnue" + } + }, + "permissionDialog": { + "subtitle": "L'agent demande une autorisation pour continuer ce tour.", + "kindFallbackTool": "outil", + "command": "Commande", + "cwd": "Répertoire de travail : {cwd}", + "filesSummary": "Fichiers : {count}", + "moreFiles": "+{count} fichiers supplémentaires", + "plan": "Plan de travail", + "targetMode": "Mode cible : {mode}" + }, + "messageBranch": { + "previousBranchAria": "Branche précédente", + "nextBranchAria": "Branche suivante", + "pageOf": "{current} sur {total}" + }, + "terminal": { + "title": "Console", + "running": "En cours" + }, + "reasoning": { + "thinking": "Réflexion...", + "thoughtForFewSeconds": "A réfléchi pendant quelques secondes", + "thoughtForSeconds": "A réfléchi pendant {duration} secondes" + }, + "messageList": { + "attachedResources": "Ressources jointes", + "loading": "Chargement...", + "error": "Erreur : {message}", + "emptyConversation": "Aucun message dans cette conversation." + }, + "liveTurnStats": { + "thinking": "Réflexion...", + "streaming": "Diffusion", + "elapsedMinutes": "{value} min", + "elapsedSeconds": "{value} s", + "toolUseCount": "{count} outil {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "Paramètres", + "error": "Erreur", + "result": "Résultat", + "status": { + "approvalRequested": "En attente d'approbation", + "approvalResponded": "Répondu", + "inputAvailable": "En cours", + "inputStreaming": "En attente", + "outputAvailable": "Terminé", + "outputDenied": "Refusé", + "outputError": "Erreur" + } + }, + "toolCallBlock": { + "tool": "Outil", + "error": "Erreur", + "result": "Résultat" + }, + "contentParts": { + "showingTailOutput": "Affichage de la fin de la sortie pendant le streaming pour de meilleures performances.", + "result": "Résultat", + "unknown": "inconnu", + "replaceAll": "TOUT REMPLACER", + "filesCount": "Fichiers : {count}", + "update": "mettre à jour", + "moreFiles": "+{count} fichiers supplémentaires", + "timeoutMs": "Délai d'expiration : {timeout}ms", + "backgroundTrue": "Arrière-plan : true", + "offset": "Décalage : {offset}", + "limit": "Limite : {limit}", + "pages": "Pages : {pages}", + "mode": "Mode : {mode}", + "cell": "Cellule : {cell}", + "pathLabel": "Chemin :", + "globLabel": "Glob :", + "typeLabel": "Type :", + "outputLabel": "Sortie :", + "caseInsensitive": "Insensible à la casse", + "multiline": "Multiligne", + "promptLabel": "Instruction", + "subjectLabel": "Sujet", + "taskLabel": "Tâche", + "nameLabel": "Nom :", + "field": { + "file": "Fichier", + "notebook": "Carnet", + "command": "Commande", + "old": "Ancien", + "new": "Nouveau", + "pattern": "Motif", + "path": "Chemin", + "query": "Requête", + "url": "URL :", + "description": "Détails", + "content": "Contenu", + "source": "Origine", + "prompt": "Instruction", + "subject": "Sujet", + "taskId": "ID de tâche", + "status": "Statut", + "skill": "Skill", + "args": "Arguments", + "offset": "Décalage", + "limit": "Limite", + "glob": "Motif glob", + "type": "Type de donnée", + "output": "Sortie", + "replaceAll": "Tout remplacer", + "language": "Langue", + "timeout": "Délai", + "background": "Arrière-plan", + "agentType": "Type d'agent", + "library": "Bibliothèque", + "libraryId": "ID de bibliothèque" + }, + "title": { + "edit": "Modifier", + "command": "Commande", + "todoWrite": "TodoWrite (mise à jour des tâches)", + "read": "Lire", + "write": "Écrire", + "notebookEdit": "NotebookEdit (édition du carnet)", + "editFiles": "Modifier ({count} fichiers)", + "editWithTarget": "Modifier {target}", + "readWithTarget": "Lire {target}", + "writeWithTarget": "Écrire {target}", + "notebookEditWithTarget": "NotebookEdit ({target})", + "globWithPattern": "Motif glob {pattern}", + "grepWithPattern": "Motif grep {pattern}", + "taskCreateWithSubject": "Créer une tâche : {subject}", + "taskUpdateWithStatus": "Mettre à jour la tâche #{id} -> {status}", + "taskUpdate": "Mettre à jour la tâche #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "Recherche web : {query}", + "todosProgress": "Tâches ({done}/{total})", + "skillWithName": "Skill : {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "Ajouté", + "deleted": "Supprimé", + "renamed": "Renommé", + "modified": "Modifié" + }, + "hunkLabel": "Bloc {index}", + "loadingHunk": "Chargement du hunk...", + "noDiffData": "Aucune donnée diff" + } + } +} diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json new file mode 100644 index 0000000..d476194 --- /dev/null +++ b/src/i18n/messages/ja.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "システムに従う", + "english": "英語", + "simplifiedChinese": "简体中文", + "traditionalChinese": "繁體中文", + "japanese": "日本語", + "korean": "韓国語", + "spanish": "スペイン語", + "german": "ドイツ語", + "french": "フランス語", + "portuguese": "ポルトガル語", + "arabic": "アラビア語" + }, + "WelcomePage": { + "title": "Codegへようこそ", + "openSettings": "設定を開く", + "searchPlaceholder": "フォルダを検索...", + "loading": "読み込み中...", + "emptyFolders": "フォルダがありません", + "removeFromHistory": "履歴から削除", + "openFolder": "フォルダを開く", + "cloneRepository": "リポジトリをクローン", + "softwareVersion": "バージョン {version}", + "toasts": { + "loadFolderHistoryFailed": "フォルダ履歴の読み込みに失敗しました", + "openFolderFailed": "フォルダを開けませんでした", + "removeFromHistoryFailed": "履歴からの削除に失敗しました", + "openSettingsFailed": "設定を開けませんでした", + "cloneFailed": "リポジトリのクローンに失敗しました" + }, + "errors": { + "unknown": "予期しないエラーが発生しました", + "invalidInput": "入力が無効です。", + "notFound": "リソースが見つかりません。", + "alreadyExists": "リソースは既に存在します。", + "dependencyMissing": "必要な依存関係が不足しています。", + "databaseError": "データベース操作に失敗しました。", + "ioError": "ファイル操作に失敗しました。", + "externalCommandFailed": "外部コマンドの実行に失敗しました。", + "windowOperationFailed": "ウィンドウ操作に失敗しました。", + "gitNotInstalled": "Git がインストールされていません。先に Git をインストールしてください。", + "targetDirectoryNotEmpty": "対象ディレクトリは既に存在し、空ではありません。", + "repositoryNotFound": "リポジトリが見つかりません。URL とアクセス権を確認してください。", + "networkUnavailable": "ネットワークに接続できません。接続を確認して再試行してください。", + "authenticationFailed": "認証に失敗しました。認証情報または SSH キーを確認してください。", + "permissionDenied": "権限がありません。ディレクトリ権限を確認してください。" + }, + "cloneDialog": { + "title": "リポジトリをクローン", + "repositoryUrl": "リポジトリ URL", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "ディレクトリ", + "directoryPlaceholder": "保存先ディレクトリを選択...", + "browseDirectory": "ディレクトリを参照", + "cancel": "キャンセル", + "clone": "クローン" + } + }, + "SettingsShell": { + "title": "設定", + "preferences": "環境設定", + "nav": { + "appearance": "外観", + "agents": "エージェント", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "ショートカット", + "system": "システム" + } + }, + "AppearanceSettings": { + "sectionTitle": "テーマ外観", + "sectionDescription": "ライト、ダーク、またはシステム追従を選択できます。設定は自動保存されます。", + "themeMode": "テーマモード", + "placeholder": "テーマモードを選択", + "system": "システムに従う", + "light": "ライト", + "dark": "ダーク", + "currentTheme": "現在の有効テーマ: {theme}", + "resolvedTheme": { + "light": "ライト", + "dark": "ダーク", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "読み込み中...", + "sectionTitle": "システム管理", + "sectionDescription": "ネットワークプロキシ、アプリ更新、言語設定を管理します。", + "proxyTitle": "ネットワークプロキシ", + "proxyDescription": "有効にすると、以降のネットワークリクエストはこのプロキシを優先して使用します(ACP チャット、エージェントのインストール、Git リモート操作を含む)。", + "loadFailed": "読み込みに失敗しました: {message}", + "enableProxy": "システムプロキシを有効化", + "proxyAddress": "プロキシアドレス", + "proxyHint": "http(s)/socks5 をサポート。例: {example}。システムプロキシ有効時のみ有効です。", + "save": "保存", + "saving": "保存中...", + "proxyRequired": "プロキシ有効時はプロキシ URL が必要です", + "saveSuccess": "システムプロキシ設定を保存しました", + "saveFailed": "保存に失敗しました: {message}", + "languageTitle": "言語", + "languageDescription": "アプリの言語を設定します。システムに従う場合、未対応言語は英語にフォールバックします。", + "appLanguage": "アプリ言語", + "languageSaveSuccess": "言語設定を保存しました", + "languageSaveFailed": "言語設定の保存に失敗しました: {message}", + "updateTitle": "アプリ更新", + "updateDescription": "設定されたリリースソースで新しいバージョンを確認し、利用可能なら直接インストールします。", + "currentVersion": "現在のバージョン", + "upgradableVersion": "利用可能なバージョン", + "none": "なし", + "lastChecked": "最終確認: {time}", + "updateError": "更新エラー: {message}", + "checking": "確認中...", + "checkUpdate": "更新を確認", + "updating": "インストール中...", + "upgradeTo": "v{version} にアップグレード", + "foundUpdate": "新しいバージョン v{version} が見つかりました", + "alreadyLatest": "すでに最新バージョンです", + "checkUpdateFailed": "更新確認に失敗しました: {message}", + "installSuccess": "更新をインストールしました。アプリを再起動します。", + "installFailed": "更新に失敗しました: {message}", + "updateErrors": { + "sourceUnavailable": "更新ソースに接続できません。ネットワークまたはプロキシを確認して再試行してください。", + "network": "ネットワーク接続に失敗しました。ネットワークまたはプロキシを確認して再試行してください。", + "downloadFailed": "更新パッケージのダウンロードに失敗しました。しばらくしてから再試行してください。", + "installFailed": "更新のインストールに失敗しました。アプリを閉じて再試行してください。", + "unknown": "更新に失敗しました。しばらくしてから再試行してください。" + } + }, + "ShortcutSettings": { + "sectionTitle": "ショートカット", + "resetDefault": "デフォルトに戻す", + "recordInstruction": "右側のボタンをクリックしてからキーの組み合わせを押してください。Ctrl/Cmd、Alt、Shift が使用できます。Esc で記録をキャンセルします。", + "recording": "ショートカットを入力...", + "toasts": { + "conflict": "ショートカットはすでに「{title}」で使用されています", + "updated": "ショートカットを更新しました", + "invalid": "無効なショートカットです。もう一度お試しください", + "reset": "デフォルトのショートカットを復元しました" + }, + "actions": { + "toggle_search": { + "title": "検索を開く", + "description": "会話検索パネルを表示または非表示にします" + }, + "toggle_sidebar": { + "title": "左サイドバーを切り替え", + "description": "会話一覧サイドバーを表示または非表示にします" + }, + "toggle_terminal": { + "title": "ターミナルを切り替え", + "description": "下部ターミナルパネルを表示または非表示にします" + }, + "new_terminal_tab": { + "title": "新しいターミナル", + "description": "ターミナルにフォーカスがあるとき新しいタブを作成します" + }, + "close_current_terminal_tab": { + "title": "現在のターミナルを閉じる", + "description": "ターミナルにフォーカスがあるとき現在のタブを閉じます" + }, + "toggle_aux_panel": { + "title": "右パネルを切り替え", + "description": "補助情報パネルを表示または非表示にします" + }, + "new_conversation": { + "title": "新しい会話", + "description": "現在のフォルダで新しい会話タブを作成します" + }, + "open_folder": { + "title": "フォルダを開く", + "description": "フォルダ選択を開き、新しいウィンドウで開きます" + }, + "open_settings": { + "title": "設定を開く", + "description": "設定ウィンドウを開きます" + }, + "close_current_tab": { + "title": "現在のタブを閉じる", + "description": "現在の会話またはファイルタブを閉じます" + }, + "close_all_file_tabs": { + "title": "すべてのファイルタブを閉じる", + "description": "ファイルモードでのみすべてのファイルタブを閉じます" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "左側でSkillを選択します。右側は既定でMarkdownプレビューです。編集に切り替えると変更して保存できます。", + "loadingAgents": "Skill対応エージェントを読み込み中...", + "emptyNoManageableAgents": "Skillを管理できるエージェントがありません。", + "managedTarget": "管理対象", + "selectAgentPlaceholder": "エージェントを選択", + "searchPlaceholder": "名前 / ID / パスで検索...", + "skillsList": "Skill一覧", + "loadingSkills": "Skillを読み込み中...", + "agentNotSupported": "現在のエージェントはSkill管理に対応していません。", + "emptySkills": "まだSkillがありません。「新規Skill」をクリックして作成してください。", + "newSkillTitle": "新規Skill", + "skillInfo": "Skill情報", + "skillIdPlaceholder": "skill-id(英数字/-/_/.)", + "skillsDirectoryWithPath": "Skillディレクトリ: {path}", + "skillsDirectoryNeedId": "Skillディレクトリ: Skill ID を入力すると完全なパスを生成します", + "markdownContent": "Markdown内容", + "editingStatus": "編集中", + "previewStatus": "プレビュー中", + "contentPlaceholder": "SkillのMarkdown内容を入力...", + "metadataTitle": "Skillメタデータ", + "onlyYamlMetadata": "このSkillにはYAMLメタデータのみが含まれています。", + "emptyContentHint": "まだ内容がありません。「編集」をクリックして開始してください。", + "loadingSkill": "Skillを読み込み中...", + "emptyNoAgents": "利用可能なエージェントがありません。", + "actions": { + "preview": "プレビュー", + "edit": "編集", + "openInWindow": "新しいウィンドウで開く", + "delete": "削除", + "deleting": "削除中...", + "refresh": "更新", + "newSkill": "新規Skill", + "reset": "リセット", + "save": "保存", + "saving": "保存中...", + "cancel": "キャンセル" + }, + "deleteDialog": { + "title": "Skillを削除", + "confirm": "現在のSkillを削除しますか?この操作は元に戻せません。", + "confirmWithNamePrefix": "Skill", + "confirmWithNameSuffix": "を削除しますか?この操作は元に戻せません。" + }, + "toasts": { + "loadFailed": "Skillの読み込みに失敗しました", + "openFolderFailed": "フォルダを開けませんでした", + "noSkillDirectory": "現在のエージェントで利用可能なSkillディレクトリが見つかりません", + "nameRequired": "Skill名は空にできません", + "updated": "Skillを更新しました", + "created": "Skillを作成しました", + "saveFailed": "Skillの保存に失敗しました", + "deleted": "Skillを削除しました", + "deleteFailed": "Skillの削除に失敗しました" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "読み込み中...", + "summary": { + "missingCommand": "(コマンド未設定)", + "missingUrl": "(URL未設定)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "インストールプロトコルを選択してください", + "fieldRequired": "{field} は必須です", + "fieldNeedsBoolean": "{field} は true または false である必要があります", + "fieldNeedsNumber": "{field} は数値である必要があります", + "fieldNeedsInteger": "{field} は整数である必要があります", + "fieldInvalidJson": "{field} のJSONが不正です: {message}", + "fieldOutOfRange": "{field} の値が許可範囲外です", + "jsonEmpty": "{name} は空にできません", + "jsonInvalid": "{name} は有効なJSONではありません: {message}", + "jsonMustBeObject": "{name} はJSONオブジェクトである必要があります" + }, + "jsonNames": { + "localConfig": "MCP設定", + "installConfig": "インストール設定" + }, + "toasts": { + "uninstalled": "MCPをアンインストールしました", + "uninstallFailed": "アンインストールに失敗しました: {message}", + "selectAtLeastOneApp": "対象アプリを少なくとも1つ選択してください", + "saveSuccess": "保存しました", + "saveFailed": "保存に失敗しました: {message}", + "installed": "{name} をインストールしました", + "installFailed": "インストールに失敗しました: {message}" + }, + "installDialog": { + "title": "MCPインストールの確認", + "descriptionWithName": "{name} をローカル設定にインストールします。", + "description": "インストール対象アプリを選択してください。", + "protocol": "プロトコル", + "selectProtocol": "プロトコルを選択", + "parameters": "設定パラメータ", + "booleanPlaceholder": "true/false を選択してください", + "selectOneValue": "値を選択", + "targetApps": "対象アプリ" + }, + "actions": { + "cancel": "キャンセル", + "confirmInstall": "インストールを確定", + "installing": "インストール中", + "uninstall": "アンインストール", + "uninstalling": "アンインストール中", + "viewDetails": "詳細を見る", + "save": "保存", + "saving": "保存中", + "install": "インストール" + }, + "tabs": { + "local": "ローカル MCP", + "market": "MCP マーケットプレイス" + }, + "local": { + "filterPlaceholder": "ローカルMCPを絞り込み...", + "loadFailed": "読み込み失敗: {message}", + "empty": "ローカルMCPが見つかりません。", + "description": "ローカルMCP設定は直接編集して保存できます。", + "enabledApps": "有効なアプリ", + "configJson": "MCP設定 (JSON)" + }, + "market": { + "selectMarketplace": "マーケットプレイスを選択", + "searchPlaceholder": "MCPを検索...", + "searchFailed": "検索に失敗しました: {message}", + "loadingList": "MCP一覧を読み込み中...", + "empty": "MCPの検索結果がありません。", + "loadingDetail": "マーケットプレイス詳細を読み込み中...", + "detailLoadFailed": "詳細の読み込みに失敗しました: {message}", + "owner": "オーナー: {owner}", + "namespace": "名前空間: {namespace}", + "defaultInstallProtocol": "デフォルトのインストールプロトコル", + "currentOptionParameterCount": "現在のオプションのパラメータ数: {count}", + "installConfigDescription": "インストール設定 (JSON、インストール前に編集可能。編集内容はプロトコル/パラメータフォームより優先されます)", + "selectLeftToView": "詳細を見るには左側のマーケットプレイスMCPを選択してください。" + }, + "badges": { + "verified": "認証済み", + "remote": "リモート", + "hasHomepage": "ホームページあり", + "uses": "{count} 回使用", + "deployed": "デプロイ済み", + "notDeployed": "未デプロイ" + }, + "selectLeftMcp": "左側でMCPを選択してください。" + }, + "AcpAgentSettings": { + "title": "Agent SDK 管理", + "description": "Agent SDK の接続、有効化状態、環境変数、設定管理、バージョン事前チェック情報を一元管理します。", + "loadingAgents": "エージェント一覧を読み込み中...", + "agentList": "エージェント一覧", + "emptyNoAgent": "利用可能なエージェントがありません。", + "configManagement": "設定管理", + "envVars": "環境変数", + "nativeJsonConfig": "ネイティブ JSON 設定", + "modelHintDefault": "空欄の場合はシステム既定モデルを使用します。", + "generalConfigDescriptionClaude": "API URL、API Key、Claude モデルをすばやく設定でき、ネイティブ JSON 設定と同期します。", + "generalConfigDescriptionDefault": "重要な設定入力(API URL、API Key、Model)とネイティブ JSON 設定管理をサポートします。", + "actions": { + "dragSort": "ドラッグして並べ替え", + "dragSortAgent": "{name} をドラッグして並べ替え", + "refreshCheck": "再チェック", + "refreshCheckAgent": "{name} を再チェック", + "clickEnable": "{name} を有効化", + "clickDisable": "{name} を無効化", + "install": "インストール", + "upgrade": "アップグレード", + "uninstall": "アンインストール", + "uninstalling": "アンインストール中...", + "saveEnvVars": "環境変数を保存", + "saving": "保存中...", + "saveCodexConfig": "Codex設定を保存", + "saveGeminiConfig": "Gemini設定を保存", + "saveOpenCodeConfig": "OpenCode設定を保存", + "saveOpenClawConfig": "OpenClaw設定を保存", + "saveConfigManagement": "設定管理を保存", + "saveCurrentProvider": "現在のプロバイダーを保存", + "showApiKey": "APIキーを表示", + "hideApiKey": "APIキーを非表示", + "showKey": "キーを表示", + "hideKey": "キーを非表示", + "showToken": "トークンを表示", + "hideToken": "トークンを非表示", + "cancel": "キャンセル", + "delete": "削除", + "deleting": "削除中...", + "confirmDelete": "削除を確認", + "confirmUninstall": "アンインストールを確認" + }, + "status": { + "enabled": "有効", + "disabled": "無効", + "unchecked": "未チェック", + "agentEnabledAria": "{name} は有効です", + "agentEnabledSwitch": "{name} 有効化スイッチ" + }, + "preflight": { + "count": "事前チェック項目: {count}", + "notRun": "チェックはまだ実行されていません。" + }, + "codex": { + "configDescription": "API URL、API Key、モデル名、reasoning effort を素早く設定でき、`auth.json` / `config.toml` と同期します。", + "selectProvider": "プロバイダーを選択", + "modelName": "モデル名", + "selectReasoningEffort": "Reasoning Effort を選択", + "enableWebsocket": "WebSocket を有効化", + "enableWebsocketAria": "Codex Provider の WebSocket を有効化", + "authJsonNative": "auth.json(ネイティブ)", + "configTomlNative": "config.toml(ネイティブ)" + }, + "gemini": { + "authConfig": "Gemini 認証設定", + "authConfigDescription": "Gemini CLI の認証ドキュメントに準拠し、カスタムエンドポイント、Google ログイン、Gemini API Key、Vertex AI(ADC / サービスアカウント / API Key)をサポートします。", + "authMode": "認証モード", + "selectAuthMode": "認証モードを選択", + "viewAuthDoc": "認証ドキュメントを見る", + "mode": { + "custom": "カスタムエンドポイント", + "loginGoogle": "Google ログイン(OAuth)", + "vertexServiceAccount": "Vertex AI(サービスアカウント)" + }, + "hint": { + "custom": "API URL、API Key、Model を入力してください。GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL に対応します。", + "loginGoogle": "先にターミナルで gemini を実行して Google ログインを完了してください。API key は不要です。", + "geminiApiKey": "Gemini API を使う場合は GEMINI_API_KEY を入力してください。", + "vertexAdc": "gcloud ADC を使用します。GOOGLE_CLOUD_PROJECT と GOOGLE_CLOUD_LOCATION の設定を推奨します。", + "vertexServiceAccount": "サービスアカウント JSON のパスを GOOGLE_APPLICATION_CREDENTIALS に設定してください。", + "vertexApiKey": "Vertex AI API key を使う場合は GOOGLE_API_KEY を入力してください。" + } + }, + "openCode": { + "configManagement": "OpenCode 設定管理", + "configDescription": "OpenCode の `provider` スキーマに準拠し、複数プロバイダー管理とネイティブ JSON ファイルとの双方向同期をサポートします。", + "providerManagement": "プロバイダー管理", + "providerCount": "{count} 個のプロバイダー", + "addProvider": "プロバイダーを追加", + "emptyProvider": "まだプロバイダーがありません。ID を入力して「プロバイダーを追加」をクリックしてください。", + "providerEnabledState": "{providerId} の有効状態", + "selectProviderNpm": "provider.npm を選択", + "notSet": "未設定", + "modelManagement": "モデル管理", + "modelCount": "{count} 個のモデル", + "modelDescription": "OpenCode の `provider.models` に準拠。高速管理では現在 `name` / `id` をサポートし、その他の高度な項目は保持され、下部のネイティブ JSON で編集できます。", + "addModel": "モデルを追加", + "emptyModel": "まだモデルがありません。model id を入力して「モデルを追加」をクリックしてください。", + "modelId": "モデル ID", + "modelName": "モデル名", + "deleteModel": "モデル {modelId} を削除", + "nativeJsonConfig": "OpenCode ネイティブ JSON 設定" + }, + "openClaw": { + "gatewayConfig": "Gateway 設定", + "gatewayDescription": "OpenClaw Gateway 接続を設定します。ローカルまたはリモートの gateway をサポートします。", + "gatewayUrlHint": "空欄の場合はローカル openclaw 設定の gateway.remote.url を使用します。", + "gatewayTokenPlaceholder": "Gateway 認証トークン", + "gatewayTokenHint": "可能な場合は平文トークンではなく token-file の使用を推奨します。openclaw CLI で設定してください。", + "sessionKeyHint": "任意。gateway の session key を指定します。空欄の場合は分離されたセッションが自動割り当てされます。" + }, + "claude": { + "mainModel": "メインモデル", + "reasoningModel": "推論モデル(thinking)", + "haikuDefaultModel": "デフォルト Haiku モデル", + "sonnetDefaultModel": "デフォルト Sonnet モデル", + "opusDefaultModel": "デフォルト Opus モデル" + }, + "dialogs": { + "confirmDeleteProvider": "Provider {providerId} を削除しますか?", + "confirmDeleteProviderDescription": "OpenCode config と auth JSON は同時に更新されます。この操作は元に戻せません。", + "confirmUninstall": "{name} をアンインストールしますか?", + "confirmUninstallDescription": "ローカルにインストールされたバージョンを削除します。後で再インストールできます。" + }, + "errors": { + "nativeJsonMustBeObject": "ネイティブJSON設定はオブジェクトである必要があります", + "nativeJsonInvalid": "ネイティブJSON設定の形式エラー: {message}", + "openCodeAuthMustBeObject": "OpenCode の auth.json はJSONオブジェクトである必要があります", + "openCodeAuthInvalid": "OpenCode の auth.json 形式エラー: {message}", + "authMustBeObject": "auth.json はJSONオブジェクトである必要があります", + "authInvalid": "auth.json 形式エラー: {message}", + "providerIdPattern": "Provider ID は英字・数字・アンダースコア・ドット・ハイフンのみ使用できます", + "providerExists": "Provider '{providerId}' はすでに存在します", + "modelIdPattern": "Model ID は英字・数字・アンダースコア・ドット・コロン・ハイフンのみ使用できます", + "modelExists": "Model '{modelId}' はすでに存在します" + }, + "warnings": { + "nativeJsonRecoveredStructured": "ネイティブJSON設定が不正のため、構造化設定にリセットしました", + "nativeJsonRecoveredOpenCode": "ネイティブJSON設定が不正のため、OpenCode構造化設定にリセットしました", + "openCodeAuthRecovered": "OpenCode の auth.json が不正のため、デフォルト設定にリセットしました", + "authRecoveredStructured": "auth.json が不正のため、構造化設定にリセットしました" + }, + "toasts": { + "agentActionCompleted": "{name} の {action} が完了しました", + "agentActionFailed": "{name} の {action} に失敗しました", + "localVersion": "ローカルバージョン: {version}", + "installCompletedVersionLater": "インストールが完了しました。バージョンは次回チェック時に更新されます", + "uninstallCompleted": "{name} のアンインストールが完了しました", + "uninstallFailed": "{name} のアンインストールに失敗しました", + "localVersionRemoved": "ローカルバージョンを削除しました", + "saveAgentOrderFailed": "Agent の並び順の保存に失敗しました", + "saveAgentSwitchFailed": "Agent の有効スイッチ保存に失敗しました", + "saveEnvFailed": "環境変数の保存に失敗しました", + "codexSaved": "Codex設定を保存しました", + "saveCodexNativeFailed": "Codexネイティブ設定の保存に失敗しました", + "geminiSaved": "Gemini設定を保存しました", + "saveGeminiFailed": "Gemini設定の保存に失敗しました", + "providerDeleted": "Provider {providerId} を削除しました", + "providerDeleteFailed": "Provider {providerId} の削除に失敗しました", + "providerSaved": "Provider {providerId} を保存しました", + "saveProviderFailed": "Provider {providerId} の保存に失敗しました", + "openCodeConfigSynced": "OpenCode config と auth JSON が同期されました。", + "openCodeSaved": "OpenCode設定を保存しました", + "saveOpenCodeFailed": "OpenCode設定の保存に失敗しました", + "openClawSaved": "OpenClaw設定を保存しました", + "saveOpenClawFailed": "OpenClaw設定の保存に失敗しました", + "configSaved": "設定を保存しました", + "saveConfigManagementFailed": "設定管理の保存に失敗しました" + }, + "version": { + "statusLabel": "バージョン状態", + "notInstalled": "未インストール", + "remoteLocal": "リモート: {remoteVersion} · ローカル: {localVersion}", + "platformUnsupported": "{versionText}。現在のプラットフォームではこのエージェントをサポートしていません。", + "clickInstall": "{versionText}。右側の「インストール」をクリックしてください。", + "localUnrecognized": "{versionText}。ローカルバージョンは比較できません。上書きインストールのためアップグレードを試してください。", + "upgradeAvailable": "{versionText}。アップグレード可能です。", + "remoteUnavailable": "{versionText}。現在リモートバージョンは取得できません。", + "latest": "{versionText}。すでに最新です。" + } + }, + "SettingsPages": { + "agentsLoading": "エージェント設定を読み込み中..." + }, + "CommitPage": { + "title": "コミット", + "invalidFolderId": "無効なフォルダID", + "loadingRepo": "リポジトリを読み込み中..." + }, + "Folder": { + "common": { + "all": "すべて", + "cancel": "キャンセル", + "close": "閉じる", + "closeOthers": "他を閉じる", + "closeAll": "すべて閉じる", + "confirm": "確認", + "save": "保存", + "delete": "削除", + "rename": "名前を変更", + "loading": "読み込み中...", + "refresh": "更新", + "refreshing": "更新中...", + "create": "作成", + "createAndSwitch": "作成して切り替え", + "openFile": "ファイルを開く", + "viewDiff": "差分を見る" + }, + "modes": { + "conversation": "会話モード", + "fusion": "フュージョンモード", + "files": "ファイルモード", + "workspaceModesAria": "ワークスペースモード" + }, + "statusLabels": { + "in_progress": "進行中", + "pending_review": "レビュー", + "completed": "完了", + "cancelled": "キャンセル済み" + }, + "sidebar": { + "title": "会話", + "locateActiveConversation": "アクティブな会話を表示", + "expandAllGroups": "すべてのグループを展開", + "collapseAllGroups": "すべてのグループを折りたたむ", + "newConversation": "新しい会話", + "noConversationsFound": "会話が見つかりません。", + "importLocalSessions": "ローカルセッションをインポート", + "importing": "インポート中...", + "error": "エラー: {message}", + "completeAllSessions": "すべてのセッションを完了", + "completeAllReviewTitle": "すべてのレビューセッションを完了しますか?", + "completeAllReviewDescription": "これにより、レビュー中の {count, plural, one {# 件のセッション} other {# 件のセッション}} が完了としてマークされます。", + "completing": "完了処理中...", + "toasts": { + "importedSessions": "{imported, plural, one {# 件のセッション} other {# 件のセッション}} をインポートし、{skipped} 件をスキップしました", + "noNewSessionsFound": "新しいセッションは見つかりませんでした({skipped} 件をスキップ)", + "importFailed": "インポートに失敗しました: {message}", + "reviewCompleted": "{count, plural, one {# 件のレビューセッション} other {# 件のレビューセッション}} を完了にしました", + "completeReviewFailed": "レビューセッションの完了処理に失敗しました: {message}" + } + }, + "conversation": { + "reloadFailed": "会話の再読み込みに失敗しました: {message}", + "reloaded": "会話を再読み込みしました", + "reload": "再読み込み", + "newConversation": "新しい会話", + "closeConversation": "会話を閉じる" + }, + "conversationCard": { + "untitledConversation": "無題の会話", + "newConversation": "新しい会話", + "rename": "名前を変更", + "status": "ステータス", + "delete": "削除", + "importLocalSessions": "ローカルセッションをインポート", + "importing": "インポート中...", + "renameConversation": "会話名を変更", + "deleteConversationTitle": "会話を削除しますか?", + "deleteConversationDescription": "\"{title}\" を削除します。この操作は元に戻せません。", + "cancel": "キャンセル", + "save": "保存" + }, + "search": { + "dialogTitle": "会話を検索", + "placeholder": "会話を検索...", + "allAgents": "すべて", + "searching": "検索中...", + "typeToSearch": "入力して会話を検索", + "noResults": "結果が見つかりません。", + "untitledConversation": "無題の会話" + }, + "folderTitleBar": { + "showSidebar": "サイドバーを表示", + "hideSidebar": "サイドバーを非表示", + "toggleTerminal": "ターミナルを切り替え", + "toggleAuxPanel": "補助パネルを切り替え", + "search": "検索", + "openSettings": "設定を開く", + "withShortcut": "{label}({shortcut})" + }, + "statusBar": { + "connection": { + "connected": "接続済み", + "connecting": "接続中...", + "downloading": "ダウンロード中...", + "prompting": "応答中...", + "error": "接続エラー", + "disconnected": "未接続", + "tooltip": "{agent}:{status}", + "tooltipError": "{agent}:{error}" + }, + "tasks": { + "title": "タスク" + }, + "alerts": { + "title": "アラート", + "empty": "アラートなし" + }, + "stats": { + "conversations": "{count} 件の会話", + "summary": "{conversations} 件の会話 / {messages} 件のメッセージ" + }, + "tokens": { + "contextWindowUsageAria": "コンテキストウィンドウ使用率", + "contextWindow": "コンテキストウィンドウ", + "usedMax": "使用 / 最大", + "tokenUsage": "トークン使用量", + "input": "入力", + "output": "出力", + "cacheRead": "キャッシュ読み取り", + "cacheWrite": "キャッシュ書き込み", + "total": "合計" + } + }, + "auxPanel": { + "tabs": { + "diff": "差分", + "files": "ファイル", + "changes": "変更", + "commits": "コミット" + } + }, + "windowControls": { + "minimizeWindow": "ウィンドウを最小化", + "minimize": "最小化", + "maximizeWindow": "ウィンドウを最大化", + "maximize": "最大化", + "restoreWindow": "ウィンドウを元に戻す", + "restore": "元に戻す", + "closeWindow": "ウィンドウを閉じる", + "close": "閉じる" + }, + "tabs": { + "closeConversationTab": "会話タブを閉じる", + "close": "閉じる", + "closeOthers": "他を閉じる", + "closeAll": "すべて閉じる" + }, + "fileWorkspace": { + "files": "ファイル", + "closeFileTab": "ファイルタブを閉じる", + "close": "閉じる", + "closeOthers": "他を閉じる", + "closeAll": "すべて閉じる" + }, + "terminal": { + "rename": "名前を変更", + "close": "閉じる", + "closeOthers": "他を閉じる", + "closeAll": "すべて閉じる", + "hideTerminal": "ターミナルを隠す ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "現在の応答", + "noDiffDataAvailable": "{filePath} の差分データがありません", + "loading": "読み込み中...", + "noFileChangesInConversation": "この会話にはファイル変更がありません", + "openConversationToSeeChanges": "会話を開いてファイル変更を表示してください", + "remove": "削除", + "changeCount": "{count, plural, one {# 件の変更} other {# 件の変更}}", + "fileCount": "{count, plural, one {# 個のファイル} other {# 個のファイル}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "フォルダ", + "openFolder": "フォルダを開く", + "cloneRepository": "リポジトリをクローン", + "opened": "開いているフォルダ", + "recentOpen": "最近開いたフォルダ" + }, + "fileWorkspacePanel": { + "viewDiff": "差分を見る", + "openFile": "ファイルを開く", + "fileCount": "{count, plural, one {# 個のファイル} other {# 個のファイル}}", + "openFileOrDiff": "右側パネルからファイルまたは差分を開いてください", + "disk": "ディスク", + "head": "HEAD", + "unsaved": "未保存", + "workingTree": "作業ツリー", + "loading": "読み込み中...", + "compareWithBranch": "{path} · {branch} と比較", + "hunkCount": "{count, plural, one {# 個のハンク} other {# 個のハンク}}", + "prev": "前", + "next": "次", + "jumpToLine": "{line} 行へ移動", + "noParsedDiffSections": "解析済みの差分セクションがありません", + "loadingEditor": "エディターを読み込み中..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "コードコミットが完了しました", + "committedFiles": "{count, plural, one {# 個のファイルをコミット} other {# 個のファイルをコミット}}", + "taskCompleted": "{label} が完了しました", + "taskFailed": "{label} が失敗しました", + "mergeNoNewCommits": "{branchName} に新しいコミットはありません", + "mergedCommits": "{count, plural, one {# 件のコミットをマージ} other {# 件のコミットをマージ}}", + "allFilesUpToDate": "すべてのファイルは最新です", + "updatedFiles": "{count, plural, one {# 個のファイルを更新} other {# 個のファイルを更新}}", + "openCommitWindowFailed": "コミットウィンドウを開けませんでした", + "upstreamSet": "アップストリームブランチを設定しました", + "upstreamSetAndPushed": "アップストリームブランチを設定し、{count, plural, one {# 件のコミット} other {# 件のコミット}}をプッシュしました", + "noCommitsToPush": "プッシュするコミットはありません", + "pushedCommits": "{count, plural, one {# 件のコミットをプッシュ} other {# 件のコミットをプッシュ}}" + }, + "tasks": { + "newBranch": "ブランチ {name} を作成", + "newWorktree": "ワークツリー {name} を作成", + "checkoutTo": "{branchName} にチェックアウト", + "mergeBranch": "{branchName} をマージ", + "rebaseTo": "{branchName} にリベース", + "deleteBranch": "ブランチ {branchName} を削除", + "initGitRepo": "Git リポジトリを初期化", + "pullCode": "コードをプル", + "fetchInfo": "情報をフェッチ", + "pushCode": "コードをプッシュ", + "stashChanges": "変更を stash", + "stashPop": "stash を pop" + }, + "confirm": { + "mergeTitle": "ブランチをマージ", + "rebaseTitle": "ブランチをリベース", + "deleteTitle": "ブランチを削除", + "mergeDescription": "{branchName} を現在のブランチ {currentBranch} にマージしますか?", + "rebaseDescription": "現在のブランチ {currentBranch} を {branchName} にリベースしますか?", + "deleteDescription": "ブランチ {branchName} を削除しますか?この操作は元に戻せません。" + }, + "current": "現在", + "switchToBranch": "このブランチに切り替え", + "mergeBranchIntoCurrent": "{branchName} を {currentBranch} にマージ", + "rebaseCurrentToBranch": "{currentBranch} を {branchName} にリベース", + "deleteBranch": "ブランチを削除", + "versionControl": "バージョン管理", + "initGitRepo": "Git リポジトリを初期化", + "pullCode": "コードをプル", + "fetchRemoteBranches": "リモートブランチをフェッチ", + "openCommitWindow": "コードをコミット...", + "pushCode": "プッシュ...", + "newBranch": "新規ブランチ...", + "newWorktree": "新規ワークツリー...", + "stashChanges": "変更を stash", + "stashPop": "stash を pop...", + "localBranches": "ローカルブランチ ({count, plural, one {#} other {#}})", + "noLocalBranches": "ローカルブランチはありません", + "remoteBranches": "リモートブランチ ({count, plural, one {#} other {#}})", + "noRemoteBranches": "リモートブランチはありません", + "parentBranchHint": "現在のブランチは {parentBranch} から作成されました。クリックして {parentBranch} を現在のブランチにマージします。", + "dialogs": { + "newBranchTitle": "新規ブランチ", + "newBranchDescription": "現在のブランチ {branch} から新しいブランチを作成", + "branchNamePlaceholder": "ブランチ名", + "newWorktreeTitle": "新規ワークツリー", + "newWorktreeDescription": "現在のブランチ {branch} から新しいワークツリーを作成", + "branchNameLabel": "ブランチ名", + "worktreePathLabel": "ワークツリーのパス", + "worktreePathPlaceholder": "ワークツリーのパス" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "コードコミットが完了しました", + "committedFiles": "{count, plural, one {# 個のファイルをコミット} other {# 個のファイルをコミット}}", + "addedToVcs": "VCS に追加しました", + "addToVcsFailed": "VCS への追加に失敗しました", + "fileDeleted": "ファイルを削除しました", + "deleteFailed": "削除に失敗しました", + "fileRolledBack": "ファイルをロールバックしました", + "rollbackFailed": "ロールバックに失敗しました" + }, + "confirm": { + "deleteTitle": "削除の確認", + "deleteDescription": "ファイル \"{file}\" を削除しますか?この操作は元に戻せません。", + "rollbackTitle": "ロールバックの確認", + "rollbackDescription": "ファイル \"{file}\" を HEAD にロールバックしますか?未保存の変更は失われます。" + }, + "actions": { + "select": "選択", + "unselect": "選択解除", + "rollback": "ロールバック", + "addToVcs": "VCS に追加" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "すべてのファイルの選択を解除", + "selectAllFiles": "すべてのファイルを選択", + "unselectTracked": "追跡中の変更の選択を解除", + "selectTracked": "追跡中の変更を選択", + "unselectUntracked": "未追跡ファイルの選択を解除", + "selectUntracked": "未追跡ファイルを選択" + }, + "loading": "読み込み中...", + "selectionCount": "{selected} / {total} ファイル", + "emptyFiles": "変更されたファイルはありません", + "trackedChanges": "追跡中の変更 ({count})", + "untrackedFiles": "未追跡ファイル ({count})", + "commitMessage": "コミットメッセージ", + "commitMessagePlaceholder": "コミットメッセージを入力...", + "commitButton": "コミット ({count})", + "head": "HEAD", + "workingTree": "作業ツリー", + "clickFileToDiff": "ファイル名をクリックして差分を表示", + "loadingDiff": "差分を読み込み中..." + }, + "gitLogTab": { + "filesTitle": "ファイル", + "expandAllFiles": "すべてのファイルを展開", + "collapseAllFiles": "すべてのファイルを折りたたむ", + "workspace": "ワークスペース", + "retry": "再試行", + "noCommitsFound": "コミットが見つかりません", + "hash": "ハッシュ", + "copyHash": "ハッシュをコピー", + "author": "作成者", + "noFileChangeDetails": "ファイル変更の詳細はありません。", + "branchesTitle": "ブランチ", + "loadingBranches": "ブランチを読み込み中...", + "noContainingBranches": "含まれるブランチが見つかりません。", + "newBranch": "新規ブランチ...", + "viewCommitDiffAria": "コミット {hash} の差分を表示", + "copyFullCommitHashAria": "完全なコミットハッシュ {hash} をコピー", + "pushStatus": { + "pushed": "リモートにプッシュ済み", + "notPushed": "リモートに未プッシュ", + "unknown": "プッシュ状態不明(upstream 未設定)" + }, + "time": { + "monthsAgo": "{count, plural, one {# か月前} other {# か月前}}", + "daysAgo": "{count, plural, one {# 日前} other {# 日前}}", + "hoursAgo": "{count, plural, one {# 時間前} other {# 時間前}}", + "minsAgo": "{count, plural, one {# 分前} other {# 分前}}", + "justNow": "たった今" + }, + "toasts": { + "createdAndSwitchedNewBranch": "新しいブランチを作成して切り替えました", + "newBranchFromCommit": "{name}({shortHash} から)", + "createBranchFailed": "ブランチ作成に失敗しました" + }, + "branchSelector": { + "selectBranchPlaceholder": "ブランチを選択...", + "localBranches": "ローカルブランチ", + "current": "現在", + "remoteBranches": "リモートブランチ", + "refreshCommitHistory": "コミット履歴を更新" + }, + "dialogs": { + "newBranchTitle": "新規ブランチ", + "newBranchDescription": "コミット {shortHash} を最新コミットとして新しいブランチを作成します。", + "branchNamePlaceholder": "ブランチ名" + } + }, + "gitChangesTab": { + "workspace": "ワークスペース", + "noChanges": "ローカルの変更はありません", + "trackedChanges": "追跡中の変更 ({count})", + "untrackedFiles": "未追跡ファイル ({count})", + "expandTracked": "追跡中の変更を展開", + "collapseTracked": "追跡中の変更を折りたたむ", + "expandUntracked": "未追跡ファイルを展開", + "collapseUntracked": "未追跡ファイルを折りたたむ", + "actions": { + "commitCode": "コードをコミット", + "rollback": "ロールバック", + "addToVcs": "VCS に追加" + }, + "toasts": { + "noAddableFilesInDir": "このディレクトリには VCS に追加できる変更ファイルがありません", + "noRollbackFilesInDir": "このディレクトリにはロールバックできる変更ファイルがありません", + "addedToVcs": "{name} を VCS に追加しました", + "addToVcsFailed": "VCS への追加に失敗しました", + "openCommitWindowFailed": "コミットウィンドウを開けませんでした", + "rolledBack": "{name} をロールバックしました", + "rollbackFailed": "ロールバックに失敗しました", + "addedFilesToVcs": "{count, plural, one {# 個のファイルを VCS に追加} other {# 個のファイルを VCS に追加}}", + "rolledBackFiles": "{count, plural, one {# 個のファイルをロールバック} other {# 個のファイルをロールバック}}" + }, + "directoryDialog": { + "descriptionAdd": "ディレクトリ {path} 配下で VCS に追加するファイルを選択してください。", + "descriptionRollback": "ディレクトリ {path} 配下でロールバックするファイルを選択してください。", + "descriptionFallback": "続行するファイルを選択してください。", + "selectionCount": "{selected} / {total} を選択", + "selectAll": "すべて選択", + "unselectAll": "すべて選択解除", + "loadingCandidates": "ディレクトリの変更を読み込み中...", + "noOperableFiles": "操作可能なファイルがありません" + }, + "rollbackConfirm": { + "title": "ロールバックの確認", + "descriptionWithTarget": "{kind} \"{name}\" のローカル変更をロールバックしますか?", + "descriptionFallback": "ローカル変更をロールバックしますか?", + "kindDirectory": "ディレクトリ", + "kindFile": "ファイル" + } + }, + "tabContext": { + "loadingConversation": "読み込み中...", + "untitledConversation": "無題の会話", + "newConversation": "新しい会話" + }, + "fileTreeTab": { + "workspace": "ワークスペース", + "retry": "再試行", + "git": "Git", + "openInFileManager": "ファイルマネージャーで開く", + "openInFinder": "Finderで開く", + "openInExplorer": "エクスプローラーで開く", + "attachToCurrentSession": "現在のセッションに添付", + "compareWithBranch": "ブランチと比較...", + "reloadFromDisk": "ディスクから再読み込み", + "openIn": "で開く", + "openInTerminal": "ターミナルで開く", + "actions": { + "select": "選択", + "unselect": "選択解除", + "commitCode": "コードをコミット", + "rollback": "ロールバック", + "addToVcs": "VCSに追加" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "ディレクトリを開けませんでした", + "openBuiltinTerminalFailed": "内蔵ターミナルを開けませんでした", + "openCommitWindowFailed": "コミットウィンドウを開けませんでした", + "noAddableFilesInDir": "このディレクトリには VCS に追加できる変更ファイルがありません", + "noRollbackFilesInDir": "このディレクトリにはロールバックできる変更ファイルがありません", + "addedToVcs": "{name} を VCS に追加しました", + "addToVcsFailed": "VCS への追加に失敗しました", + "loadBranchesFailed": "ブランチの読み込みに失敗しました", + "renameFailed": "名前の変更に失敗しました", + "deleteFailed": "削除に失敗しました", + "rolledBack": "{name} をロールバックしました", + "rollbackFailed": "ロールバックに失敗しました", + "addedFilesToVcs": "{count, plural, one {# 件のファイルを VCS に追加しました} other {# 件のファイルを VCS に追加しました}}", + "rolledBackFiles": "{count, plural, one {# 件のファイルをロールバックしました} other {# 件のファイルをロールバックしました}}", + "savedAsCopy": "コピーとして保存しました", + "saveCopyFailed": "コピーとして保存できませんでした", + "watchStartFailed": "ファイル監視の開始に失敗しました" + }, + "renameDialog": { + "renameDirectory": "ディレクトリ名を変更", + "renameFile": "ファイル名を変更", + "description": "新しい名前を入力してください(名前のみ、パスは不要)。", + "placeholderDirectory": "新しいフォルダ名", + "placeholderFile": "新しいファイル名.ext" + }, + "directoryDialog": { + "descriptionAdd": "ディレクトリ {path} 配下で VCS に追加するファイルを選択してください。", + "descriptionRollback": "ディレクトリ {path} 配下でロールバックするファイルを選択してください。", + "descriptionFallback": "続行するファイルを選択してください。", + "selectionCount": "{selected} / {total} ファイルを選択", + "selectAll": "すべて選択", + "unselectAll": "すべて選択解除", + "loadingCandidates": "ディレクトリの変更を読み込み中...", + "noOperableFiles": "操作可能なファイルがありません" + }, + "compareDialog": { + "title": "ブランチと比較", + "descriptionWithTarget": "ブランチを選択し、{kind} {path} と比較します", + "descriptionFallback": "比較するブランチを選択してください。", + "kindDirectory": "ディレクトリ", + "kindFile": "ファイル", + "filterPlaceholder": "ブランチを絞り込み(例: main / origin/main)", + "singleClickHint": "ブランチをクリックすると直接比較します", + "loadingBranches": "ブランチを読み込み中...", + "recentBranches": "最近のブランチ ({count})", + "noCurrentBranch": "現在のブランチがありません", + "localBranches": "ローカルブランチ ({count})", + "remoteBranches": "リモートブランチ ({count})", + "noMatchingBranches": "一致するブランチがありません" + }, + "externalConflictDialog": { + "title": "外部ファイルの変更を検出しました", + "descriptionWithPath": "ファイル {path} がディスク上で変更されました。現在の編集は未保存です。", + "descriptionFallback": "現在のファイルがディスク上で変更されました。現在の編集は未保存です。", + "compare": "比較", + "savingCopy": "コピーを保存中...", + "saveAsCopy": "コピーとして保存", + "reload": "再読み込み" + }, + "deleteConfirm": { + "title": "削除の確認", + "descriptionWithTarget": "{kind} \"{name}\" を削除しますか?この操作は元に戻せません。", + "descriptionFallback": "この操作は元に戻せません。", + "kindDirectory": "ディレクトリ", + "kindFile": "ファイル" + }, + "rollbackConfirm": { + "title": "ロールバックの確認", + "descriptionWithTarget": "ファイル \"{name}\" のローカル変更をロールバックしますか?", + "descriptionFallback": "このファイルのローカル変更をロールバックしますか?" + }, + "terminalTitle": "ターミナル · {name}" + }, + "commandDropdown": { + "loading": "読み込み中...", + "addCommand": "コマンドを追加", + "manageCommands": "コマンドを管理...", + "runCommandTitle": "実行: {command}", + "stopCommandTitle": "停止: {command}", + "manageDialog": { + "title": "コマンド管理", + "empty": "コマンドはまだありません", + "namePlaceholder": "名前", + "commandPlaceholder": "コマンド", + "add": "追加", + "saving": "保存中..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "保存せずに「{title}」を閉じますか?", + "confirmCloseOtherDirtyTabs": "未保存の変更がある他のタブを閉じますか?", + "confirmCloseAllDirtyTabs": "未保存の変更があるすべてのタブを閉じますか?", + "unableLoadContent": "内容を読み込めません。\n\n{message}", + "previewRequestTimedOut": "プレビュー要求がタイムアウトしました", + "diffRequestTimedOut": "Diff 要求がタイムアウトしました", + "branchCompareRequestTimedOut": "ブランチ比較要求がタイムアウトしました", + "commitDiffRequestTimedOut": "コミット Diff 要求がタイムアウトしました", + "saveRequestTimedOut": "保存要求がタイムアウトしました", + "reloadRequestTimedOut": "再読み込み要求がタイムアウトしました", + "noChanges": "変更はありません。", + "noDiffOutput": "Diff 出力がありません。", + "diffTitleWorkspace": "Diff · ワークスペース", + "diffDescriptionWorkingTree": "作業ツリー (HEAD)", + "diffTitleFile": "差分 · {name}", + "compareTitleFile": "比較 · {name}", + "compareTitleBranch": "比較 · {branch}", + "compareDescriptionPath": "{path} · {branch} と比較", + "compareDescriptionBranch": "{branch} と比較", + "diffTitleCommitFile": "差分 · {name} @ {hash}", + "diffTitleCommit": "差分 · {hash}", + "diffDescriptionCommitPath": "{path} · コミット {commit}", + "diffDescriptionCommit": "コミット {commit}", + "diffTitleConflictFile": "競合 · {name}", + "diffDescriptionConflict": "{path} · ディスク vs 未保存" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "エージェント設定を開く", + "retry": "再試行" + }, + "agentsSetupHint": "インストール管理は「設定 > エージェント」を開いてください。", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "現在のエージェント設定を読み取れません。", + "disabled": "{agent} はエージェント設定で無効になっています。接続前に有効化してください。", + "unavailable": "{agent} は現在のプラットフォームでは利用できません。", + "sdkMissing": "{agent} SDK がインストールされていません" + }, + "unableReadAgentConfig": "エージェント設定を読み取れません: {message}", + "autoLinkFailedTitle": "{agent} の自動リンクに失敗しました", + "preflightCheckFailedDefault": "事前チェックに失敗しました。エージェント設定を確認してください。", + "preflightFailedTitle": "{agent} の事前チェックに失敗しました", + "autoLinkPreflightFailed": "自動リンクの事前チェックに失敗しました: {message}", + "connectFailedTitle": "{agent} の接続に失敗しました", + "toolFallbackTitle": "ツール", + "eventErrorTitle": "エージェントエラー" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "{agent} に接続中", + "connectingDescription": "接続を確立しています", + "loadingSelectorsTitle": "{agent} のセレクターを読み込み中", + "loadingSelectorsDescription": "モードとセッション設定オプションを取得しています" + }, + "errors": { + "connectionFailed": "接続に失敗しました" + } + }, + "shared": { + "attachedResources": "添付リソース", + "toolCallFailed": "ツール呼び出しに失敗しました", + "planUpdated": "プランを更新しました" + }, + "messageThread": { + "emptyTitle": "まだメッセージはありません", + "emptyDescription": "会話を開始するとここにメッセージが表示されます" + }, + "chatInput": { + "connecting": "接続中...", + "agentResponding": "エージェントが応答中...", + "sendMessage": "メッセージを送信..." + }, + "messageInput": { + "askAnything": "何でも質問してください...", + "removeAttachmentAria": "{name} を削除", + "attachFiles": "ファイルを添付", + "dropFilesToAttach": "ファイルをドロップして添付", + "loadingSettings": "設定を読み込み中...", + "loadingMode": "モードを読み込み中...", + "cancel": "キャンセル", + "send": "送信" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "設定 > エージェント", + "autoConnectFallback": "{path} を開いてインストールを管理してください。", + "autoConnectAppend": "{message}。{path} を開いてインストールを管理してください。", + "enableAgentFirstPlaceholder": "セッション開始前に少なくとも1つのエージェントを有効化してください...", + "askAnythingPlaceholder": "何でも質問してください..." + }, + "agentSelector": { + "noEnabledAgents": "有効なエージェントがありません", + "openAgentsSettings": "エージェント設定を開く" + }, + "liveMessageBlock": { + "assistantThinkingAria": "アシスタントが考え中です" + }, + "agentPlanOverlay": { + "title": "エージェントプラン", + "collapsePlanAria": "プランを折りたたむ", + "collapsedSummary": "計画 {completed}/{total}", + "status": { + "completed": "完了", + "inProgress": "進行中", + "pending": "保留", + "unknown": "不明" + }, + "priority": { + "high": "高", + "medium": "中", + "low": "低", + "unknown": "不明" + } + }, + "permissionDialog": { + "subtitle": "エージェントがこのターンを続行するための許可を要求しています。", + "kindFallbackTool": "ツール", + "command": "コマンド", + "cwd": "作業ディレクトリ: {cwd}", + "filesSummary": "ファイル: {count}", + "moreFiles": "+{count} 件の追加ファイル", + "plan": "計画", + "targetMode": "対象モード: {mode}" + }, + "messageBranch": { + "previousBranchAria": "前のブランチ", + "nextBranchAria": "次のブランチ", + "pageOf": "{current} / {total}" + }, + "terminal": { + "title": "ターミナル", + "running": "実行中" + }, + "reasoning": { + "thinking": "考え中...", + "thoughtForFewSeconds": "数秒間考えました", + "thoughtForSeconds": "{duration} 秒間考えました" + }, + "messageList": { + "attachedResources": "添付リソース", + "loading": "読み込み中...", + "error": "エラー: {message}", + "emptyConversation": "この会話にはメッセージがありません。" + }, + "liveTurnStats": { + "thinking": "考え中...", + "streaming": "ストリーミング中", + "elapsedMinutes": "{value}分", + "elapsedSeconds": "{value}秒", + "toolUseCount": "{count} 個のツール {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "パラメーター", + "error": "エラー", + "result": "結果", + "status": { + "approvalRequested": "承認待ち", + "approvalResponded": "応答済み", + "inputAvailable": "実行中", + "inputStreaming": "保留中", + "outputAvailable": "完了", + "outputDenied": "拒否", + "outputError": "エラー" + } + }, + "toolCallBlock": { + "tool": "ツール", + "error": "エラー", + "result": "結果" + }, + "contentParts": { + "showingTailOutput": "パフォーマンスのため、ストリーミング中は末尾出力を表示しています。", + "result": "結果", + "unknown": "不明", + "replaceAll": "すべて置換", + "filesCount": "ファイル: {count}", + "update": "更新", + "moreFiles": "+{count} 件の追加ファイル", + "timeoutMs": "タイムアウト: {timeout}ms", + "backgroundTrue": "バックグラウンド: true", + "offset": "オフセット: {offset}", + "limit": "上限: {limit}", + "pages": "ページ: {pages}", + "mode": "モード: {mode}", + "cell": "セル: {cell}", + "pathLabel": "パス:", + "globLabel": "Glob パターン:", + "typeLabel": "タイプ:", + "outputLabel": "出力:", + "caseInsensitive": "大文字小文字を区別しない", + "multiline": "複数行", + "promptLabel": "プロンプト", + "subjectLabel": "件名", + "taskLabel": "タスク", + "nameLabel": "名前:", + "field": { + "file": "ファイル", + "notebook": "ノートブック", + "command": "コマンド", + "old": "旧", + "new": "新", + "pattern": "パターン", + "path": "パス", + "query": "クエリ", + "url": "URL:", + "description": "説明", + "content": "内容", + "source": "ソース", + "prompt": "プロンプト", + "subject": "件名", + "taskId": "タスク ID", + "status": "状態", + "skill": "Skill", + "args": "引数", + "offset": "オフセット", + "limit": "上限", + "glob": "Glob パターン", + "type": "タイプ", + "output": "出力", + "replaceAll": "すべて置換", + "language": "言語", + "timeout": "タイムアウト", + "background": "バックグラウンド", + "agentType": "エージェント種別", + "library": "ライブラリ", + "libraryId": "ライブラリ ID" + }, + "title": { + "edit": "編集", + "command": "コマンド", + "todoWrite": "TodoWrite(タスク更新)", + "read": "読み取り", + "write": "書き込み", + "notebookEdit": "NotebookEdit(ノート編集)", + "editFiles": "編集 ({count} 件のファイル)", + "editWithTarget": "{target} を編集", + "readWithTarget": "{target} を読み取り", + "writeWithTarget": "{target} に書き込み", + "notebookEditWithTarget": "NotebookEdit({target})", + "globWithPattern": "Glob パターン {pattern}", + "grepWithPattern": "Grep パターン {pattern}", + "taskCreateWithSubject": "タスク作成: {subject}", + "taskUpdateWithStatus": "タスク更新 #{id} -> {status}", + "taskUpdate": "タスク更新 #{id}", + "webFetchWithUrl": "WebFetch({url})", + "webSearchWithQuery": "WebSearch({query})", + "todosProgress": "タスク ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool}({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "追加", + "deleted": "削除", + "renamed": "名前変更", + "modified": "変更" + }, + "hunkLabel": "ハンク {index}", + "loadingHunk": "Hunk を読み込み中...", + "noDiffData": "Diff データがありません" + } + } +} diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json new file mode 100644 index 0000000..1f76f98 --- /dev/null +++ b/src/i18n/messages/ko.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "시스템 설정 따름", + "english": "영어", + "simplifiedChinese": "简体中文", + "traditionalChinese": "繁體中文", + "japanese": "일본어", + "korean": "한국어", + "spanish": "스페인어", + "german": "독일어", + "french": "프랑스어", + "portuguese": "포르투갈어", + "arabic": "아랍어" + }, + "WelcomePage": { + "title": "Codeg에 오신 것을 환영합니다", + "openSettings": "설정 열기", + "searchPlaceholder": "폴더 검색...", + "loading": "로딩 중...", + "emptyFolders": "폴더가 없습니다", + "removeFromHistory": "기록에서 제거", + "openFolder": "폴더 열기", + "cloneRepository": "저장소 클론", + "softwareVersion": "버전 {version}", + "toasts": { + "loadFolderHistoryFailed": "폴더 기록을 불러오지 못했습니다", + "openFolderFailed": "폴더를 열지 못했습니다", + "removeFromHistoryFailed": "기록에서 제거하지 못했습니다", + "openSettingsFailed": "설정을 열지 못했습니다", + "cloneFailed": "저장소 클론에 실패했습니다" + }, + "errors": { + "unknown": "예기치 않은 오류가 발생했습니다", + "invalidInput": "잘못된 입력입니다.", + "notFound": "리소스를 찾을 수 없습니다.", + "alreadyExists": "리소스가 이미 존재합니다.", + "dependencyMissing": "필수 의존성이 누락되었습니다.", + "databaseError": "데이터베이스 작업에 실패했습니다.", + "ioError": "파일 작업에 실패했습니다.", + "externalCommandFailed": "외부 명령 실행에 실패했습니다.", + "windowOperationFailed": "창 작업에 실패했습니다.", + "gitNotInstalled": "Git이 설치되어 있지 않습니다. 먼저 Git을 설치하세요.", + "targetDirectoryNotEmpty": "대상 디렉터리가 이미 존재하며 비어 있지 않습니다.", + "repositoryNotFound": "저장소를 찾을 수 없습니다. URL 및 접근 권한을 확인하세요.", + "networkUnavailable": "네트워크를 사용할 수 없습니다. 연결을 확인한 뒤 다시 시도하세요.", + "authenticationFailed": "인증에 실패했습니다. 자격 증명 또는 SSH 키를 확인하세요.", + "permissionDenied": "권한이 없습니다. 디렉터리 권한을 확인하세요." + }, + "cloneDialog": { + "title": "저장소 클론", + "repositoryUrl": "저장소 URL", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "디렉터리", + "directoryPlaceholder": "대상 디렉터리 선택...", + "browseDirectory": "디렉터리 찾아보기", + "cancel": "취소", + "clone": "클론" + } + }, + "SettingsShell": { + "title": "설정", + "preferences": "환경설정", + "nav": { + "appearance": "외관", + "agents": "에이전트", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "단축키", + "system": "시스템" + } + }, + "AppearanceSettings": { + "sectionTitle": "테마 모양", + "sectionDescription": "라이트, 다크 또는 시스템 설정을 선택할 수 있습니다. 설정은 자동으로 저장됩니다.", + "themeMode": "테마 모드", + "placeholder": "테마 모드 선택", + "system": "시스템 설정 따름", + "light": "라이트", + "dark": "다크", + "currentTheme": "현재 적용된 테마: {theme}", + "resolvedTheme": { + "light": "라이트", + "dark": "다크", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "로딩 중...", + "sectionTitle": "시스템 관리", + "sectionDescription": "네트워크 프록시, 앱 업데이트, 언어 설정을 관리합니다.", + "proxyTitle": "네트워크 프록시", + "proxyDescription": "활성화하면 이후 네트워크 요청에서 이 프록시를 우선 사용합니다(ACP 채팅, 에이전트 설치, Git 원격 작업 포함).", + "loadFailed": "불러오기 실패: {message}", + "enableProxy": "시스템 프록시 활성화", + "proxyAddress": "프록시 주소", + "proxyHint": "http(s)/socks5 지원, 예: {example}. 시스템 프록시를 활성화한 경우에만 적용됩니다.", + "save": "저장", + "saving": "저장 중...", + "proxyRequired": "프록시를 활성화하면 프록시 URL이 필요합니다", + "saveSuccess": "시스템 프록시 설정이 저장되었습니다", + "saveFailed": "저장 실패: {message}", + "languageTitle": "언어", + "languageDescription": "앱 언어를 설정합니다. 시스템 언어를 따를 때 지원되지 않는 언어는 영어로 대체됩니다.", + "appLanguage": "앱 언어", + "languageSaveSuccess": "언어 설정이 저장되었습니다", + "languageSaveFailed": "언어 설정 저장 실패: {message}", + "updateTitle": "앱 업데이트", + "updateDescription": "설정된 릴리스 소스에서 새 버전을 확인하고 가능하면 바로 설치합니다.", + "currentVersion": "현재 버전", + "upgradableVersion": "사용 가능한 버전", + "none": "없음", + "lastChecked": "마지막 확인: {time}", + "updateError": "업데이트 오류: {message}", + "checking": "확인 중...", + "checkUpdate": "업데이트 확인", + "updating": "설치 중...", + "upgradeTo": "v{version}로 업그레이드", + "foundUpdate": "새 버전 v{version}을 찾았습니다", + "alreadyLatest": "이미 최신 버전입니다", + "checkUpdateFailed": "업데이트 확인 실패: {message}", + "installSuccess": "업데이트가 설치되었습니다. 앱을 다시 시작합니다.", + "installFailed": "업데이트 실패: {message}", + "updateErrors": { + "sourceUnavailable": "업데이트 소스에 연결할 수 없습니다. 네트워크 또는 프록시를 확인한 뒤 다시 시도하세요.", + "network": "네트워크 연결에 실패했습니다. 네트워크 또는 프록시를 확인한 뒤 다시 시도하세요.", + "downloadFailed": "업데이트 패키지 다운로드에 실패했습니다. 잠시 후 다시 시도하세요.", + "installFailed": "업데이트 설치에 실패했습니다. 앱을 종료한 뒤 다시 시도하세요.", + "unknown": "업데이트에 실패했습니다. 잠시 후 다시 시도하세요." + } + }, + "ShortcutSettings": { + "sectionTitle": "단축키", + "resetDefault": "기본값으로 재설정", + "recordInstruction": "오른쪽 버튼을 클릭한 다음 키 조합을 누르세요. Ctrl/Cmd, Alt, Shift를 사용할 수 있습니다. Esc를 누르면 기록을 취소합니다.", + "recording": "단축키 입력...", + "toasts": { + "conflict": "단축키가 이미 \"{title}\"에서 사용 중입니다", + "updated": "단축키가 업데이트되었습니다", + "invalid": "유효하지 않은 단축키입니다. 다시 시도하세요", + "reset": "기본 단축키를 복원했습니다" + }, + "actions": { + "toggle_search": { + "title": "검색 열기", + "description": "대화 검색 패널을 표시하거나 숨깁니다" + }, + "toggle_sidebar": { + "title": "왼쪽 사이드바 전환", + "description": "대화 목록 사이드바를 표시하거나 숨깁니다" + }, + "toggle_terminal": { + "title": "터미널 전환", + "description": "하단 터미널 패널을 표시하거나 숨깁니다" + }, + "new_terminal_tab": { + "title": "새 터미널", + "description": "터미널에 포커스가 있을 때 새 터미널 탭을 만듭니다" + }, + "close_current_terminal_tab": { + "title": "현재 터미널 닫기", + "description": "터미널에 포커스가 있을 때 현재 터미널 탭을 닫습니다" + }, + "toggle_aux_panel": { + "title": "오른쪽 패널 전환", + "description": "보조 정보 패널을 표시하거나 숨깁니다" + }, + "new_conversation": { + "title": "새 대화", + "description": "현재 폴더에 새 대화 탭을 만듭니다" + }, + "open_folder": { + "title": "폴더 열기", + "description": "폴더 선택기를 열고 새 창에서 엽니다" + }, + "open_settings": { + "title": "설정 열기", + "description": "설정 창을 엽니다" + }, + "close_current_tab": { + "title": "현재 탭 닫기", + "description": "현재 대화 또는 파일 탭을 닫습니다" + }, + "close_all_file_tabs": { + "title": "모든 파일 탭 닫기", + "description": "파일 모드에서만 모든 파일 탭을 닫습니다" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "왼쪽에서 Skill을 선택하세요. 오른쪽은 기본적으로 Markdown 미리보기이며, 편집으로 전환해 수정 후 저장할 수 있습니다.", + "loadingAgents": "Skill을 지원하는 에이전트를 불러오는 중...", + "emptyNoManageableAgents": "Skill을 관리할 수 있는 에이전트가 없습니다.", + "managedTarget": "관리 대상", + "selectAgentPlaceholder": "에이전트 선택", + "searchPlaceholder": "이름 / ID / 경로로 검색...", + "skillsList": "Skill 목록", + "loadingSkills": "Skill 불러오는 중...", + "agentNotSupported": "현재 에이전트는 Skill 관리를 지원하지 않습니다.", + "emptySkills": "아직 Skill이 없습니다. \"새 Skill\"을 클릭해 생성하세요.", + "newSkillTitle": "새 Skill", + "skillInfo": "Skill 정보", + "skillIdPlaceholder": "skill-id(영문/숫자/-/_/.)", + "skillsDirectoryWithPath": "Skill 디렉터리: {path}", + "skillsDirectoryNeedId": "Skill 디렉터리: Skill ID를 입력하면 전체 경로를 생성합니다", + "markdownContent": "Markdown 내용", + "editingStatus": "편집 중", + "previewStatus": "미리보기 중", + "contentPlaceholder": "Skill Markdown 내용을 입력하세요...", + "metadataTitle": "Skill 메타데이터", + "onlyYamlMetadata": "이 Skill에는 YAML 메타데이터만 포함되어 있습니다.", + "emptyContentHint": "아직 내용이 없습니다. \"편집\"을 눌러 시작하세요.", + "loadingSkill": "Skill 불러오는 중...", + "emptyNoAgents": "사용 가능한 에이전트가 없습니다.", + "actions": { + "preview": "미리보기", + "edit": "편집", + "openInWindow": "새 창에서 열기", + "delete": "삭제", + "deleting": "삭제 중...", + "refresh": "새로고침", + "newSkill": "새 Skill", + "reset": "초기화", + "save": "저장", + "saving": "저장 중...", + "cancel": "취소" + }, + "deleteDialog": { + "title": "Skill 삭제", + "confirm": "현재 Skill을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "confirmWithNamePrefix": "Skill", + "confirmWithNameSuffix": "을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." + }, + "toasts": { + "loadFailed": "Skill을 불러오지 못했습니다", + "openFolderFailed": "폴더를 열지 못했습니다", + "noSkillDirectory": "현재 에이전트에서 사용할 수 있는 Skill 디렉터리를 찾지 못했습니다", + "nameRequired": "Skill 이름은 비워둘 수 없습니다", + "updated": "Skill이 업데이트되었습니다", + "created": "Skill이 생성되었습니다", + "saveFailed": "Skill 저장에 실패했습니다", + "deleted": "Skill이 삭제되었습니다", + "deleteFailed": "Skill 삭제에 실패했습니다" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "로딩 중...", + "summary": { + "missingCommand": "(명령 없음)", + "missingUrl": "(URL 없음)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "설치 프로토콜을 선택하세요", + "fieldRequired": "{field}은(는) 필수입니다", + "fieldNeedsBoolean": "{field}은(는) true 또는 false여야 합니다", + "fieldNeedsNumber": "{field}은(는) 숫자여야 합니다", + "fieldNeedsInteger": "{field}은(는) 정수여야 합니다", + "fieldInvalidJson": "{field}의 JSON이 잘못되었습니다: {message}", + "fieldOutOfRange": "{field} 값이 허용 범위를 벗어났습니다", + "jsonEmpty": "{name}은(는) 비워둘 수 없습니다", + "jsonInvalid": "{name}은(는) 유효한 JSON이 아닙니다: {message}", + "jsonMustBeObject": "{name}은(는) JSON 객체여야 합니다" + }, + "jsonNames": { + "localConfig": "MCP 구성", + "installConfig": "설치 구성" + }, + "toasts": { + "uninstalled": "MCP가 제거되었습니다", + "uninstallFailed": "제거 실패: {message}", + "selectAtLeastOneApp": "대상 앱을 최소 하나 선택하세요", + "saveSuccess": "저장됨", + "saveFailed": "저장 실패: {message}", + "installed": "{name} 설치됨", + "installFailed": "설치 실패: {message}" + }, + "installDialog": { + "title": "MCP 설치 확인", + "descriptionWithName": "{name}을(를) 로컬 구성에 설치합니다.", + "description": "설치할 대상 앱을 선택하세요.", + "protocol": "프로토콜", + "selectProtocol": "프로토콜 선택", + "parameters": "구성 매개변수", + "booleanPlaceholder": "true/false를 선택하세요", + "selectOneValue": "값 선택", + "targetApps": "대상 앱" + }, + "actions": { + "cancel": "취소", + "confirmInstall": "설치 확인", + "installing": "설치 중", + "uninstall": "제거", + "uninstalling": "제거 중", + "viewDetails": "상세 보기", + "save": "저장", + "saving": "저장 중", + "install": "설치" + }, + "tabs": { + "local": "로컬 MCP", + "market": "MCP 마켓플레이스" + }, + "local": { + "filterPlaceholder": "로컬 MCP 필터...", + "loadFailed": "로드 실패: {message}", + "empty": "감지된 로컬 MCP가 없습니다.", + "description": "로컬 MCP 구성은 직접 수정하고 저장할 수 있습니다.", + "enabledApps": "활성화된 앱", + "configJson": "MCP 구성 (JSON)" + }, + "market": { + "selectMarketplace": "마켓플레이스 선택", + "searchPlaceholder": "MCP 검색...", + "searchFailed": "검색 실패: {message}", + "loadingList": "MCP 목록을 불러오는 중...", + "empty": "MCP 검색 결과가 없습니다.", + "loadingDetail": "마켓플레이스 상세 정보를 불러오는 중...", + "detailLoadFailed": "상세 정보를 불러오지 못했습니다: {message}", + "owner": "소유자: {owner}", + "namespace": "네임스페이스: {namespace}", + "defaultInstallProtocol": "기본 설치 프로토콜", + "currentOptionParameterCount": "현재 옵션의 매개변수 수: {count}", + "installConfigDescription": "설치 구성 (JSON, 설치 전에 편집 가능; 편집 내용은 프로토콜/매개변수 폼을 덮어씁니다)", + "selectLeftToView": "상세 정보를 보려면 왼쪽에서 마켓플레이스 MCP를 선택하세요." + }, + "badges": { + "verified": "검증됨", + "remote": "원격", + "hasHomepage": "홈페이지 있음", + "uses": "{count}회 사용", + "deployed": "배포됨", + "notDeployed": "미배포" + }, + "selectLeftMcp": "왼쪽에서 MCP를 선택하세요." + }, + "AcpAgentSettings": { + "title": "Agent SDK 관리", + "description": "Agent SDK 연결, 활성화 상태, 환경 변수, 구성 관리, 버전 사전 점검 정보를 한곳에서 관리합니다.", + "loadingAgents": "에이전트 목록 불러오는 중...", + "agentList": "에이전트 목록", + "emptyNoAgent": "사용 가능한 에이전트가 없습니다.", + "configManagement": "구성 관리", + "envVars": "환경 변수", + "nativeJsonConfig": "네이티브 JSON 구성", + "modelHintDefault": "비워두면 시스템 기본 모델을 사용합니다.", + "generalConfigDescriptionClaude": "API URL, API Key, Claude 모델을 빠르게 설정하고 네이티브 JSON 구성과 동기화합니다.", + "generalConfigDescriptionDefault": "주요 구성 입력(API URL, API Key, Model)과 네이티브 JSON 구성 관리를 지원합니다.", + "actions": { + "dragSort": "드래그하여 순서 변경", + "dragSortAgent": "{name} 순서 변경", + "refreshCheck": "다시 확인", + "refreshCheckAgent": "{name} 다시 확인", + "clickEnable": "{name} 활성화", + "clickDisable": "{name} 비활성화", + "install": "설치", + "upgrade": "업그레이드", + "uninstall": "제거", + "uninstalling": "제거 중...", + "saveEnvVars": "환경 변수 저장", + "saving": "저장 중...", + "saveCodexConfig": "Codex 설정 저장", + "saveGeminiConfig": "Gemini 설정 저장", + "saveOpenCodeConfig": "OpenCode 설정 저장", + "saveOpenClawConfig": "OpenClaw 설정 저장", + "saveConfigManagement": "구성 관리 저장", + "saveCurrentProvider": "현재 Provider 저장", + "showApiKey": "API 키 보기", + "hideApiKey": "API 키 숨기기", + "showKey": "키 보기", + "hideKey": "키 숨기기", + "showToken": "토큰 보기", + "hideToken": "토큰 숨기기", + "cancel": "취소", + "delete": "삭제", + "deleting": "삭제 중...", + "confirmDelete": "삭제 확인", + "confirmUninstall": "제거 확인" + }, + "status": { + "enabled": "활성화됨", + "disabled": "비활성화됨", + "unchecked": "확인 안 됨", + "agentEnabledAria": "{name} 활성화됨", + "agentEnabledSwitch": "{name} 활성화 스위치" + }, + "preflight": { + "count": "사전 점검 항목: {count}", + "notRun": "점검이 아직 실행되지 않았습니다." + }, + "codex": { + "configDescription": "API URL, API Key, 모델 이름, reasoning effort를 빠르게 설정하고 `auth.json` / `config.toml`과 동기화합니다.", + "selectProvider": "Provider 선택", + "modelName": "모델 이름", + "selectReasoningEffort": "Reasoning Effort 선택", + "enableWebsocket": "WebSocket 활성화", + "enableWebsocketAria": "Codex Provider용 WebSocket 활성화", + "authJsonNative": "auth.json (네이티브)", + "configTomlNative": "config.toml (네이티브)" + }, + "gemini": { + "authConfig": "Gemini 인증 설정", + "authConfigDescription": "Gemini CLI 인증 문서와 정렬되며, 커스텀 엔드포인트, Google 로그인, Gemini API Key, Vertex AI(ADC / 서비스 계정 / API Key)를 지원합니다.", + "authMode": "인증 모드", + "selectAuthMode": "인증 모드 선택", + "viewAuthDoc": "인증 문서 보기", + "mode": { + "custom": "커스텀 엔드포인트", + "loginGoogle": "Google 로그인 (OAuth)", + "vertexServiceAccount": "Vertex AI (서비스 계정)" + }, + "hint": { + "custom": "API URL, API Key, Model을 입력하세요. GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL에 매핑됩니다.", + "loginGoogle": "먼저 터미널에서 gemini를 실행해 Google 로그인을 완료하세요. API key는 필요하지 않습니다.", + "geminiApiKey": "Gemini API 사용 시 GEMINI_API_KEY를 입력하세요.", + "vertexAdc": "gcloud ADC를 사용합니다. GOOGLE_CLOUD_PROJECT와 GOOGLE_CLOUD_LOCATION 설정을 권장합니다.", + "vertexServiceAccount": "서비스 계정 JSON 경로를 GOOGLE_APPLICATION_CREDENTIALS에 설정하세요.", + "vertexApiKey": "Vertex AI API key 사용 시 GOOGLE_API_KEY를 입력하세요." + } + }, + "openCode": { + "configManagement": "OpenCode 구성 관리", + "configDescription": "OpenCode `provider` 스키마에 맞추어 다중 Provider 관리와 네이티브 JSON 파일 양방향 동기화를 지원합니다.", + "providerManagement": "Provider 관리", + "providerCount": "Provider {count}개", + "addProvider": "Provider 추가", + "emptyProvider": "아직 Provider가 없습니다. ID를 입력한 뒤 \"Provider 추가\"를 클릭하세요.", + "providerEnabledState": "{providerId} 활성 상태", + "selectProviderNpm": "provider.npm 선택", + "notSet": "설정 안 됨", + "modelManagement": "모델 관리", + "modelCount": "모델 {count}개", + "modelDescription": "OpenCode `provider.models`와 정렬됩니다. 빠른 관리는 현재 `name` / `id`를 지원하며, 기타 고급 필드는 유지되고 아래 네이티브 JSON에서 편집할 수 있습니다.", + "addModel": "모델 추가", + "emptyModel": "아직 모델이 없습니다. model id를 입력한 뒤 \"모델 추가\"를 클릭하세요.", + "modelId": "모델 ID", + "modelName": "모델 이름", + "deleteModel": "모델 {modelId} 삭제", + "nativeJsonConfig": "OpenCode 네이티브 JSON 구성" + }, + "openClaw": { + "gatewayConfig": "Gateway 구성", + "gatewayDescription": "OpenClaw Gateway 연결을 구성합니다. 로컬 또는 원격 gateway를 지원합니다.", + "gatewayUrlHint": "비워두면 로컬 openclaw 설정의 gateway.remote.url을 사용합니다.", + "gatewayTokenPlaceholder": "Gateway 인증 토큰", + "gatewayTokenHint": "가능하면 평문 토큰 대신 token-file을 사용하세요. openclaw CLI로 설정하세요.", + "sessionKeyHint": "선택 사항입니다. gateway 세션 키를 지정합니다. 비워두면 격리된 세션이 자동 할당됩니다." + }, + "claude": { + "mainModel": "메인 모델", + "reasoningModel": "추론 모델 (thinking)", + "haikuDefaultModel": "기본 Haiku 모델", + "sonnetDefaultModel": "기본 Sonnet 모델", + "opusDefaultModel": "기본 Opus 모델" + }, + "dialogs": { + "confirmDeleteProvider": "Provider {providerId}를 삭제하시겠습니까?", + "confirmDeleteProviderDescription": "OpenCode config와 auth JSON이 함께 업데이트됩니다. 이 작업은 되돌릴 수 없습니다.", + "confirmUninstall": "{name}을(를) 제거하시겠습니까?", + "confirmUninstallDescription": "로컬 설치 버전을 제거합니다. 나중에 다시 설치할 수 있습니다." + }, + "errors": { + "nativeJsonMustBeObject": "네이티브 JSON 구성은 객체여야 합니다", + "nativeJsonInvalid": "네이티브 JSON 구성 형식 오류: {message}", + "openCodeAuthMustBeObject": "OpenCode auth.json은 JSON 객체여야 합니다", + "openCodeAuthInvalid": "OpenCode auth.json 형식 오류: {message}", + "authMustBeObject": "auth.json은 JSON 객체여야 합니다", + "authInvalid": "auth.json 형식 오류: {message}", + "providerIdPattern": "Provider ID는 문자, 숫자, 밑줄, 점, 하이픈만 지원합니다", + "providerExists": "Provider '{providerId}'가 이미 존재합니다", + "modelIdPattern": "Model ID는 문자, 숫자, 밑줄, 점, 콜론, 하이픈만 지원합니다", + "modelExists": "Model '{modelId}'가 이미 존재합니다" + }, + "warnings": { + "nativeJsonRecoveredStructured": "네이티브 JSON 구성이 잘못되어 구조화 구성으로 재설정했습니다", + "nativeJsonRecoveredOpenCode": "네이티브 JSON 구성이 잘못되어 OpenCode 구조화 구성으로 재설정했습니다", + "openCodeAuthRecovered": "OpenCode auth.json이 잘못되어 기본 구성으로 재설정했습니다", + "authRecoveredStructured": "auth.json이 잘못되어 구조화 구성으로 재설정했습니다" + }, + "toasts": { + "agentActionCompleted": "{name} {action} 완료", + "agentActionFailed": "{name} {action} 실패", + "localVersion": "로컬 버전: {version}", + "installCompletedVersionLater": "설치가 완료되었습니다. 버전은 다음 확인 시 업데이트됩니다", + "uninstallCompleted": "{name} 제거 완료", + "uninstallFailed": "{name} 제거 실패", + "localVersionRemoved": "로컬 버전이 제거되었습니다", + "saveAgentOrderFailed": "Agent 순서 저장 실패", + "saveAgentSwitchFailed": "Agent 스위치 저장 실패", + "saveEnvFailed": "환경 변수 저장 실패", + "codexSaved": "Codex 설정 저장됨", + "saveCodexNativeFailed": "Codex 네이티브 구성 저장 실패", + "geminiSaved": "Gemini 설정 저장됨", + "saveGeminiFailed": "Gemini 설정 저장 실패", + "providerDeleted": "Provider {providerId} 삭제됨", + "providerDeleteFailed": "Provider {providerId} 삭제 실패", + "providerSaved": "Provider {providerId} 저장됨", + "saveProviderFailed": "Provider {providerId} 저장 실패", + "openCodeConfigSynced": "OpenCode config와 auth JSON이 동기화되었습니다.", + "openCodeSaved": "OpenCode 설정 저장됨", + "saveOpenCodeFailed": "OpenCode 설정 저장 실패", + "openClawSaved": "OpenClaw 설정 저장됨", + "saveOpenClawFailed": "OpenClaw 설정 저장 실패", + "configSaved": "구성이 저장되었습니다", + "saveConfigManagementFailed": "구성 관리 저장 실패" + }, + "version": { + "statusLabel": "버전 상태", + "notInstalled": "설치되지 않음", + "remoteLocal": "원격: {remoteVersion} · 로컬: {localVersion}", + "platformUnsupported": "{versionText}. 현재 플랫폼에서는 이 에이전트를 지원하지 않습니다.", + "clickInstall": "{versionText}. 오른쪽의 설치를 클릭하세요.", + "localUnrecognized": "{versionText}. 로컬 버전을 비교할 수 없습니다. 덮어쓰기 설치를 위해 업그레이드를 시도하세요.", + "upgradeAvailable": "{versionText}. 업그레이드가 가능합니다.", + "remoteUnavailable": "{versionText}. 현재 원격 버전을 사용할 수 없습니다.", + "latest": "{versionText}. 이미 최신입니다." + } + }, + "SettingsPages": { + "agentsLoading": "에이전트 설정을 불러오는 중..." + }, + "CommitPage": { + "title": "커밋", + "invalidFolderId": "유효하지 않은 폴더 ID", + "loadingRepo": "저장소를 불러오는 중..." + }, + "Folder": { + "common": { + "all": "전체", + "cancel": "취소", + "close": "닫기", + "closeOthers": "다른 항목 닫기", + "closeAll": "모두 닫기", + "confirm": "확인", + "save": "저장", + "delete": "삭제", + "rename": "이름 변경", + "loading": "로딩 중...", + "refresh": "새로고침", + "refreshing": "새로고침 중...", + "create": "생성", + "createAndSwitch": "생성 후 전환", + "openFile": "파일 열기", + "viewDiff": "Diff 보기" + }, + "modes": { + "conversation": "대화 모드", + "fusion": "퓨전 모드", + "files": "파일 모드", + "workspaceModesAria": "워크스페이스 모드" + }, + "statusLabels": { + "in_progress": "진행 중", + "pending_review": "검토", + "completed": "완료", + "cancelled": "취소됨" + }, + "sidebar": { + "title": "대화", + "locateActiveConversation": "활성 대화 찾기", + "expandAllGroups": "모든 그룹 펼치기", + "collapseAllGroups": "모든 그룹 접기", + "newConversation": "새 대화", + "noConversationsFound": "대화를 찾을 수 없습니다.", + "importLocalSessions": "로컬 세션 가져오기", + "importing": "가져오는 중...", + "error": "오류: {message}", + "completeAllSessions": "모든 세션 완료 처리", + "completeAllReviewTitle": "모든 검토 세션을 완료 처리할까요?", + "completeAllReviewDescription": "검토 상태의 {count, plural, one {#개 세션} other {#개 세션}}을 모두 완료로 표시합니다.", + "completing": "완료 처리 중...", + "toasts": { + "importedSessions": "{imported, plural, one {#개 세션} other {#개 세션}}을 가져오고 {skipped}개를 건너뛰었습니다", + "noNewSessionsFound": "새 세션이 없습니다 ({skipped}개 건너뜀)", + "importFailed": "가져오기 실패: {message}", + "reviewCompleted": "{count, plural, one {#개 검토 세션} other {#개 검토 세션}}을 완료로 표시했습니다", + "completeReviewFailed": "검토 세션 완료 처리 실패: {message}" + } + }, + "conversation": { + "reloadFailed": "대화 다시 불러오기 실패: {message}", + "reloaded": "대화를 다시 불러왔습니다", + "reload": "다시 불러오기", + "newConversation": "새 대화", + "closeConversation": "대화 닫기" + }, + "conversationCard": { + "untitledConversation": "제목 없는 대화", + "newConversation": "새 대화", + "rename": "이름 변경", + "status": "상태", + "delete": "삭제", + "importLocalSessions": "로컬 세션 가져오기", + "importing": "가져오는 중...", + "renameConversation": "대화 이름 변경", + "deleteConversationTitle": "대화를 삭제할까요?", + "deleteConversationDescription": "\"{title}\"을(를) 삭제합니다. 이 작업은 되돌릴 수 없습니다.", + "cancel": "취소", + "save": "저장" + }, + "search": { + "dialogTitle": "대화 검색", + "placeholder": "대화 검색...", + "allAgents": "전체", + "searching": "검색 중...", + "typeToSearch": "입력하여 대화를 검색하세요", + "noResults": "검색 결과가 없습니다.", + "untitledConversation": "제목 없는 대화" + }, + "folderTitleBar": { + "showSidebar": "사이드바 표시", + "hideSidebar": "사이드바 숨기기", + "toggleTerminal": "터미널 전환", + "toggleAuxPanel": "보조 패널 전환", + "search": "검색", + "openSettings": "설정 열기", + "withShortcut": "{label} ({shortcut} 단축키)" + }, + "statusBar": { + "connection": { + "connected": "연결됨", + "connecting": "연결 중...", + "downloading": "다운로드 중...", + "prompting": "응답 중...", + "error": "연결 오류", + "disconnected": "연결 끊김", + "tooltip": "{agent}: {status}", + "tooltipError": "{agent}: {error}" + }, + "tasks": { + "title": "작업" + }, + "alerts": { + "title": "알림", + "empty": "알림 없음" + }, + "stats": { + "conversations": "{count}개 대화", + "summary": "{conversations}개 대화 / {messages}개 메시지" + }, + "tokens": { + "contextWindowUsageAria": "컨텍스트 윈도우 사용량", + "contextWindow": "컨텍스트 윈도우", + "usedMax": "사용 / 최대", + "tokenUsage": "토큰 사용량", + "input": "입력", + "output": "출력", + "cacheRead": "캐시 읽기", + "cacheWrite": "캐시 쓰기", + "total": "합계" + } + }, + "auxPanel": { + "tabs": { + "diff": "차이", + "files": "파일", + "changes": "변경사항", + "commits": "커밋" + } + }, + "windowControls": { + "minimizeWindow": "창 최소화", + "minimize": "최소화", + "maximizeWindow": "창 최대화", + "maximize": "최대화", + "restoreWindow": "창 복원", + "restore": "복원", + "closeWindow": "창 닫기", + "close": "닫기" + }, + "tabs": { + "closeConversationTab": "대화 탭 닫기", + "close": "닫기", + "closeOthers": "다른 항목 닫기", + "closeAll": "모두 닫기" + }, + "fileWorkspace": { + "files": "파일", + "closeFileTab": "파일 탭 닫기", + "close": "닫기", + "closeOthers": "다른 항목 닫기", + "closeAll": "모두 닫기" + }, + "terminal": { + "rename": "이름 변경", + "close": "닫기", + "closeOthers": "다른 항목 닫기", + "closeAll": "모두 닫기", + "hideTerminal": "터미널 숨기기 ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "현재 응답", + "noDiffDataAvailable": "{filePath}에 대한 diff 데이터가 없습니다", + "loading": "로딩 중...", + "noFileChangesInConversation": "이 대화에서 파일 변경을 찾을 수 없습니다", + "openConversationToSeeChanges": "대화를 열어 파일 변경을 확인하세요", + "remove": "제거", + "changeCount": "{count, plural, one {#개 변경} other {#개 변경}}", + "fileCount": "{count, plural, one {#개 파일} other {#개 파일}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "폴더", + "openFolder": "폴더 열기", + "cloneRepository": "리포지토리 클론", + "opened": "열린 항목", + "recentOpen": "최근 연 항목" + }, + "fileWorkspacePanel": { + "viewDiff": "Diff 보기", + "openFile": "파일 열기", + "fileCount": "{count, plural, one {#개 파일} other {#개 파일}}", + "openFileOrDiff": "오른쪽 패널에서 파일 또는 diff를 여세요", + "disk": "디스크", + "head": "HEAD", + "unsaved": "저장되지 않음", + "workingTree": "작업 트리", + "loading": "로딩 중...", + "compareWithBranch": "{path} · {branch}와 비교", + "hunkCount": "{count, plural, one {#개 hunk} other {#개 hunks}}", + "prev": "이전", + "next": "다음", + "jumpToLine": "{line}행으로 이동", + "noParsedDiffSections": "파싱된 diff 섹션이 없습니다", + "loadingEditor": "에디터 로딩 중..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "코드 커밋이 완료되었습니다", + "committedFiles": "{count, plural, one {#개 파일 커밋됨} other {#개 파일 커밋됨}}", + "taskCompleted": "{label} 완료", + "taskFailed": "{label} 실패", + "mergeNoNewCommits": "{branchName}에는 새 커밋이 없습니다", + "mergedCommits": "{count, plural, one {#개 커밋 병합됨} other {#개 커밋 병합됨}}", + "allFilesUpToDate": "모든 파일이 최신 상태입니다", + "updatedFiles": "{count, plural, one {#개 파일 업데이트됨} other {#개 파일 업데이트됨}}", + "openCommitWindowFailed": "커밋 창을 열지 못했습니다", + "upstreamSet": "업스트림 브랜치가 설정되었습니다", + "upstreamSetAndPushed": "업스트림 브랜치를 설정하고 {count, plural, one {#개 커밋} other {#개 커밋}}을 푸시했습니다", + "noCommitsToPush": "푸시할 커밋이 없습니다", + "pushedCommits": "{count, plural, one {#개 커밋 푸시됨} other {#개 커밋 푸시됨}}" + }, + "tasks": { + "newBranch": "브랜치 {name} 생성", + "newWorktree": "워크트리 {name} 생성", + "checkoutTo": "{branchName}(으)로 체크아웃", + "mergeBranch": "{branchName} 병합", + "rebaseTo": "{branchName}로 리베이스", + "deleteBranch": "브랜치 {branchName} 삭제", + "initGitRepo": "Git 저장소 초기화", + "pullCode": "코드 pull", + "fetchInfo": "정보 fetch", + "pushCode": "코드 push", + "stashChanges": "변경 사항 stash", + "stashPop": "stash pop" + }, + "confirm": { + "mergeTitle": "브랜치 병합", + "rebaseTitle": "브랜치 리베이스", + "deleteTitle": "브랜치 삭제", + "mergeDescription": "{branchName}을(를) 현재 브랜치 {currentBranch}에 병합할까요?", + "rebaseDescription": "현재 브랜치 {currentBranch}를 {branchName} 위로 리베이스할까요?", + "deleteDescription": "브랜치 {branchName}을(를) 삭제할까요? 이 작업은 되돌릴 수 없습니다." + }, + "current": "현재", + "switchToBranch": "이 브랜치로 전환", + "mergeBranchIntoCurrent": "{branchName}을(를) {currentBranch}에 병합", + "rebaseCurrentToBranch": "{currentBranch}를 {branchName}로 리베이스", + "deleteBranch": "브랜치 삭제", + "versionControl": "버전 관리", + "initGitRepo": "Git 저장소 초기화", + "pullCode": "코드 pull", + "fetchRemoteBranches": "원격 브랜치 가져오기", + "openCommitWindow": "코드 커밋...", + "pushCode": "푸시...", + "newBranch": "새 브랜치...", + "newWorktree": "새 워크트리...", + "stashChanges": "변경 사항 stash", + "stashPop": "stash pop...", + "localBranches": "로컬 브랜치 ({count, plural, one {#} other {#}})", + "noLocalBranches": "로컬 브랜치가 없습니다", + "remoteBranches": "원격 브랜치 ({count, plural, one {#} other {#}})", + "noRemoteBranches": "원격 브랜치가 없습니다", + "parentBranchHint": "현재 브랜치는 {parentBranch}에서 생성되었습니다. 클릭하여 {parentBranch}를 현재 브랜치에 병합하세요.", + "dialogs": { + "newBranchTitle": "새 브랜치", + "newBranchDescription": "현재 브랜치 {branch}에서 새 브랜치를 만듭니다", + "branchNamePlaceholder": "브랜치 이름", + "newWorktreeTitle": "새 워크트리", + "newWorktreeDescription": "현재 브랜치 {branch}에서 새 워크트리를 만듭니다", + "branchNameLabel": "브랜치 이름", + "worktreePathLabel": "워크트리 경로", + "worktreePathPlaceholder": "워크트리 경로" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "코드 커밋이 완료되었습니다", + "committedFiles": "{count, plural, one {#개 파일 커밋됨} other {#개 파일 커밋됨}}", + "addedToVcs": "VCS에 추가되었습니다", + "addToVcsFailed": "VCS에 추가하지 못했습니다", + "fileDeleted": "파일이 삭제되었습니다", + "deleteFailed": "삭제에 실패했습니다", + "fileRolledBack": "파일이 롤백되었습니다", + "rollbackFailed": "롤백에 실패했습니다" + }, + "confirm": { + "deleteTitle": "삭제 확인", + "deleteDescription": "파일 \"{file}\"을(를) 삭제할까요? 이 작업은 되돌릴 수 없습니다.", + "rollbackTitle": "롤백 확인", + "rollbackDescription": "파일 \"{file}\"을(를) HEAD로 롤백할까요? 저장되지 않은 변경 사항은 사라집니다." + }, + "actions": { + "select": "선택", + "unselect": "선택 해제", + "rollback": "롤백", + "addToVcs": "VCS에 추가" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "모든 파일 선택 해제", + "selectAllFiles": "모든 파일 선택", + "unselectTracked": "추적된 변경 선택 해제", + "selectTracked": "추적된 변경 선택", + "unselectUntracked": "추적되지 않은 파일 선택 해제", + "selectUntracked": "추적되지 않은 파일 선택" + }, + "loading": "로딩 중...", + "selectionCount": "{selected} / {total}개 파일", + "emptyFiles": "변경된 파일이 없습니다", + "trackedChanges": "추적된 변경 ({count})", + "untrackedFiles": "추적되지 않은 파일 ({count})", + "commitMessage": "커밋 메시지", + "commitMessagePlaceholder": "커밋 메시지 입력...", + "commitButton": "커밋 ({count})", + "head": "HEAD", + "workingTree": "작업 트리", + "clickFileToDiff": "파일 이름을 클릭해 diff를 확인하세요", + "loadingDiff": "diff 로딩 중..." + }, + "gitLogTab": { + "filesTitle": "파일", + "expandAllFiles": "모든 파일 펼치기", + "collapseAllFiles": "모든 파일 접기", + "workspace": "작업 공간", + "retry": "다시 시도", + "noCommitsFound": "커밋을 찾을 수 없습니다", + "hash": "해시", + "copyHash": "해시 복사", + "author": "작성자", + "noFileChangeDetails": "파일 변경 상세 정보가 없습니다.", + "branchesTitle": "브랜치", + "loadingBranches": "브랜치 로딩 중...", + "noContainingBranches": "포함하는 브랜치를 찾을 수 없습니다.", + "newBranch": "새 브랜치...", + "viewCommitDiffAria": "커밋 {hash}의 diff 보기", + "copyFullCommitHashAria": "전체 커밋 해시 {hash} 복사", + "pushStatus": { + "pushed": "원격에 푸시됨", + "notPushed": "원격에 푸시되지 않음", + "unknown": "푸시 상태 알 수 없음 (upstream 미설정)" + }, + "time": { + "monthsAgo": "{count, plural, one {#개월 전} other {#개월 전}}", + "daysAgo": "{count, plural, one {#일 전} other {#일 전}}", + "hoursAgo": "{count, plural, one {#시간 전} other {#시간 전}}", + "minsAgo": "{count, plural, one {#분 전} other {#분 전}}", + "justNow": "방금 전" + }, + "toasts": { + "createdAndSwitchedNewBranch": "새 브랜치를 생성하고 전환했습니다", + "newBranchFromCommit": "{name} ({shortHash}에서 생성)", + "createBranchFailed": "브랜치 생성에 실패했습니다" + }, + "branchSelector": { + "selectBranchPlaceholder": "브랜치 선택...", + "localBranches": "로컬 브랜치", + "current": "현재", + "remoteBranches": "원격 브랜치", + "refreshCommitHistory": "커밋 히스토리 새로고침" + }, + "dialogs": { + "newBranchTitle": "새 브랜치", + "newBranchDescription": "커밋 {shortHash}를 최신 커밋으로 하여 새 브랜치를 생성합니다.", + "branchNamePlaceholder": "브랜치 이름" + } + }, + "gitChangesTab": { + "workspace": "작업 공간", + "noChanges": "로컬 변경 사항이 없습니다", + "trackedChanges": "추적된 변경 ({count})", + "untrackedFiles": "추적되지 않은 파일 ({count})", + "expandTracked": "추적된 변경 펼치기", + "collapseTracked": "추적된 변경 접기", + "expandUntracked": "추적되지 않은 파일 펼치기", + "collapseUntracked": "추적되지 않은 파일 접기", + "actions": { + "commitCode": "코드 커밋", + "rollback": "롤백", + "addToVcs": "VCS에 추가" + }, + "toasts": { + "noAddableFilesInDir": "이 디렉터리에는 VCS에 추가할 수 있는 변경 파일이 없습니다", + "noRollbackFilesInDir": "이 디렉터리에는 롤백할 수 있는 변경 파일이 없습니다", + "addedToVcs": "{name}을(를) VCS에 추가했습니다", + "addToVcsFailed": "VCS에 추가하지 못했습니다", + "openCommitWindowFailed": "커밋 창을 열지 못했습니다", + "rolledBack": "{name}을(를) 롤백했습니다", + "rollbackFailed": "롤백에 실패했습니다", + "addedFilesToVcs": "{count, plural, one {#개 파일을 VCS에 추가} other {#개 파일을 VCS에 추가}}", + "rolledBackFiles": "{count, plural, one {#개 파일 롤백} other {#개 파일 롤백}}" + }, + "directoryDialog": { + "descriptionAdd": "디렉터리 {path} 아래에서 VCS에 추가할 파일을 선택하세요.", + "descriptionRollback": "디렉터리 {path} 아래에서 롤백할 파일을 선택하세요.", + "descriptionFallback": "계속 진행할 파일을 선택하세요.", + "selectionCount": "{selected} / {total} 선택됨", + "selectAll": "모두 선택", + "unselectAll": "모두 선택 해제", + "loadingCandidates": "디렉터리 변경 사항 로딩 중...", + "noOperableFiles": "작업 가능한 파일이 없습니다" + }, + "rollbackConfirm": { + "title": "롤백 확인", + "descriptionWithTarget": "{kind} \"{name}\"의 로컬 변경 사항을 롤백할까요?", + "descriptionFallback": "로컬 변경 사항을 롤백할까요?", + "kindDirectory": "디렉터리", + "kindFile": "파일" + } + }, + "tabContext": { + "loadingConversation": "로딩 중...", + "untitledConversation": "제목 없는 대화", + "newConversation": "새 대화" + }, + "fileTreeTab": { + "workspace": "작업 공간", + "retry": "다시 시도", + "git": "Git", + "openInFileManager": "파일 관리자에서 열기", + "openInFinder": "Finder에서 열기", + "openInExplorer": "Explorer에서 열기", + "attachToCurrentSession": "현재 세션에 연결", + "compareWithBranch": "브랜치와 비교...", + "reloadFromDisk": "디스크에서 다시 불러오기", + "openIn": "열기", + "openInTerminal": "터미널에서 열기", + "actions": { + "select": "선택", + "unselect": "선택 해제", + "commitCode": "코드 커밋", + "rollback": "롤백", + "addToVcs": "VCS에 추가" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "디렉터리를 열지 못했습니다", + "openBuiltinTerminalFailed": "내장 터미널을 열 수 없습니다", + "openCommitWindowFailed": "커밋 창을 열지 못했습니다", + "noAddableFilesInDir": "이 디렉터리에는 VCS에 추가할 수 있는 변경 파일이 없습니다", + "noRollbackFilesInDir": "이 디렉터리에는 롤백할 수 있는 변경 파일이 없습니다", + "addedToVcs": "{name}을(를) VCS에 추가했습니다", + "addToVcsFailed": "VCS에 추가하지 못했습니다", + "loadBranchesFailed": "브랜치를 불러오지 못했습니다", + "renameFailed": "이름 변경에 실패했습니다", + "deleteFailed": "삭제에 실패했습니다", + "rolledBack": "{name}을(를) 롤백했습니다", + "rollbackFailed": "롤백에 실패했습니다", + "addedFilesToVcs": "{count, plural, one {#개 파일을 VCS에 추가했습니다} other {#개 파일을 VCS에 추가했습니다}}", + "rolledBackFiles": "{count, plural, one {#개 파일을 롤백했습니다} other {#개 파일을 롤백했습니다}}", + "savedAsCopy": "사본으로 저장했습니다", + "saveCopyFailed": "사본으로 저장하지 못했습니다", + "watchStartFailed": "파일 감시 시작에 실패했습니다" + }, + "renameDialog": { + "renameDirectory": "디렉터리 이름 변경", + "renameFile": "파일 이름 변경", + "description": "새 이름을 입력하세요(이름만, 경로 제외).", + "placeholderDirectory": "새-폴더-이름", + "placeholderFile": "새-파일-이름.ext" + }, + "directoryDialog": { + "descriptionAdd": "디렉터리 {path} 아래에서 VCS에 추가할 파일을 선택하세요.", + "descriptionRollback": "디렉터리 {path} 아래에서 롤백할 파일을 선택하세요.", + "descriptionFallback": "계속할 파일을 선택하세요.", + "selectionCount": "{selected} / {total}개 파일 선택됨", + "selectAll": "모두 선택", + "unselectAll": "모두 선택 해제", + "loadingCandidates": "디렉터리 변경 사항을 불러오는 중...", + "noOperableFiles": "작업 가능한 파일이 없습니다" + }, + "compareDialog": { + "title": "브랜치와 비교", + "descriptionWithTarget": "브랜치를 선택하고 {kind} {path}와(과) 비교하세요", + "descriptionFallback": "비교할 브랜치를 선택하세요.", + "kindDirectory": "디렉터리", + "kindFile": "파일", + "filterPlaceholder": "브랜치 필터링 (예: main / origin/main)", + "singleClickHint": "브랜치를 클릭하면 바로 비교합니다", + "loadingBranches": "브랜치를 불러오는 중...", + "recentBranches": "최근 브랜치 ({count})", + "noCurrentBranch": "현재 브랜치 없음", + "localBranches": "로컬 브랜치 ({count})", + "remoteBranches": "원격 브랜치 ({count})", + "noMatchingBranches": "일치하는 브랜치가 없습니다" + }, + "externalConflictDialog": { + "title": "외부 파일 변경 감지됨", + "descriptionWithPath": "파일 {path} 이(가) 디스크에서 변경되었고 현재 편집 내용은 저장되지 않았습니다.", + "descriptionFallback": "현재 파일이 디스크에서 변경되었고 현재 편집 내용은 저장되지 않았습니다.", + "compare": "비교", + "savingCopy": "사본 저장 중...", + "saveAsCopy": "사본으로 저장", + "reload": "다시 불러오기" + }, + "deleteConfirm": { + "title": "삭제 확인", + "descriptionWithTarget": "{kind} \"{name}\"을(를) 삭제할까요? 이 작업은 되돌릴 수 없습니다.", + "descriptionFallback": "이 작업은 되돌릴 수 없습니다.", + "kindDirectory": "디렉터리", + "kindFile": "파일" + }, + "rollbackConfirm": { + "title": "롤백 확인", + "descriptionWithTarget": "파일 \"{name}\"의 로컬 변경 사항을 롤백할까요?", + "descriptionFallback": "이 파일의 로컬 변경 사항을 롤백할까요?" + }, + "terminalTitle": "터미널 · {name}" + }, + "commandDropdown": { + "loading": "로딩 중...", + "addCommand": "명령 추가", + "manageCommands": "명령 관리...", + "runCommandTitle": "실행: {command}", + "stopCommandTitle": "중지: {command}", + "manageDialog": { + "title": "명령 관리", + "empty": "아직 명령이 없습니다", + "namePlaceholder": "이름", + "commandPlaceholder": "명령", + "add": "추가", + "saving": "저장 중..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "저장하지 않고 \"{title}\" 탭을 닫을까요?", + "confirmCloseOtherDirtyTabs": "저장되지 않은 변경 사항이 있는 다른 탭을 닫을까요?", + "confirmCloseAllDirtyTabs": "저장되지 않은 변경 사항이 있는 모든 탭을 닫을까요?", + "unableLoadContent": "콘텐츠를 불러올 수 없습니다.\n\n{message}", + "previewRequestTimedOut": "미리보기 요청 시간이 초과되었습니다", + "diffRequestTimedOut": "Diff 요청 시간이 초과되었습니다", + "branchCompareRequestTimedOut": "브랜치 비교 요청 시간이 초과되었습니다", + "commitDiffRequestTimedOut": "커밋 Diff 요청 시간이 초과되었습니다", + "saveRequestTimedOut": "저장 요청 시간이 초과되었습니다", + "reloadRequestTimedOut": "다시 불러오기 요청 시간이 초과되었습니다", + "noChanges": "변경 사항이 없습니다.", + "noDiffOutput": "Diff 출력이 없습니다.", + "diffTitleWorkspace": "Diff · 워크스페이스", + "diffDescriptionWorkingTree": "작업 트리 (HEAD)", + "diffTitleFile": "차이 · {name}", + "compareTitleFile": "비교 · {name}", + "compareTitleBranch": "비교 · {branch}", + "compareDescriptionPath": "{path} · {branch}와 비교", + "compareDescriptionBranch": "{branch}와 비교", + "diffTitleCommitFile": "차이 · {name} @ {hash}", + "diffTitleCommit": "차이 · {hash}", + "diffDescriptionCommitPath": "{path} · 커밋 {commit}", + "diffDescriptionCommit": "커밋 {commit}", + "diffTitleConflictFile": "충돌 · {name}", + "diffDescriptionConflict": "{path} · 디스크 vs 저장되지 않음" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "에이전트 설정 열기", + "retry": "다시 시도" + }, + "agentsSetupHint": "설정 > 에이전트를 열어 설치를 관리하세요.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "현재 에이전트 구성을 읽을 수 없습니다.", + "disabled": "{agent}은(는) 에이전트 설정에서 비활성화되어 있습니다. 연결 전에 활성화하세요.", + "unavailable": "{agent}은(는) 현재 플랫폼에서 사용할 수 없습니다.", + "sdkMissing": "{agent} SDK가 설치되어 있지 않습니다" + }, + "unableReadAgentConfig": "에이전트 구성을 읽을 수 없습니다: {message}", + "autoLinkFailedTitle": "{agent} 자동 연결 실패", + "preflightCheckFailedDefault": "사전 점검에 실패했습니다. 에이전트 설정을 확인하세요.", + "preflightFailedTitle": "{agent} 사전 점검 실패", + "autoLinkPreflightFailed": "자동 연결 사전 점검 실패: {message}", + "connectFailedTitle": "{agent} 연결 실패", + "toolFallbackTitle": "도구", + "eventErrorTitle": "에이전트 오류" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "{agent}에 연결 중", + "connectingDescription": "연결을 설정하는 중", + "loadingSelectorsTitle": "{agent} 선택자 불러오는 중", + "loadingSelectorsDescription": "모드 및 세션 구성 옵션을 가져오는 중" + }, + "errors": { + "connectionFailed": "연결 실패" + } + }, + "shared": { + "attachedResources": "첨부된 리소스", + "toolCallFailed": "도구 호출 실패", + "planUpdated": "계획이 업데이트되었습니다" + }, + "messageThread": { + "emptyTitle": "아직 메시지가 없습니다", + "emptyDescription": "대화를 시작하면 여기에서 메시지를 볼 수 있습니다" + }, + "chatInput": { + "connecting": "연결 중...", + "agentResponding": "에이전트가 응답 중...", + "sendMessage": "메시지 보내기..." + }, + "messageInput": { + "askAnything": "무엇이든 물어보세요...", + "removeAttachmentAria": "{name} 제거", + "attachFiles": "파일 첨부", + "dropFilesToAttach": "파일을 놓아 첨부", + "loadingSettings": "설정 불러오는 중...", + "loadingMode": "모드 불러오는 중...", + "cancel": "취소", + "send": "보내기" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "설정 > 에이전트", + "autoConnectFallback": "{path}을(를) 열어 설치를 관리하세요.", + "autoConnectAppend": "{message}. {path}을(를) 열어 설치를 관리하세요.", + "enableAgentFirstPlaceholder": "세션을 시작하기 전에 최소 한 개의 에이전트를 활성화하세요...", + "askAnythingPlaceholder": "무엇이든 물어보세요..." + }, + "agentSelector": { + "noEnabledAgents": "활성화된 에이전트가 없습니다", + "openAgentsSettings": "에이전트 설정 열기" + }, + "liveMessageBlock": { + "assistantThinkingAria": "어시스턴트가 생각 중" + }, + "agentPlanOverlay": { + "title": "에이전트 계획", + "collapsePlanAria": "계획 접기", + "collapsedSummary": "계획 {completed}/{total}", + "status": { + "completed": "완료", + "inProgress": "진행 중", + "pending": "대기", + "unknown": "알 수 없음" + }, + "priority": { + "high": "높음", + "medium": "중간", + "low": "낮음", + "unknown": "알 수 없음" + } + }, + "permissionDialog": { + "subtitle": "에이전트가 이 턴을 계속하기 위한 권한을 요청합니다.", + "kindFallbackTool": "도구", + "command": "명령", + "cwd": "작업 디렉터리: {cwd}", + "filesSummary": "파일: {count}", + "moreFiles": "+{count}개 파일 더", + "plan": "계획", + "targetMode": "대상 모드: {mode}" + }, + "messageBranch": { + "previousBranchAria": "이전 브랜치", + "nextBranchAria": "다음 브랜치", + "pageOf": "{current} / {total}" + }, + "terminal": { + "title": "터미널", + "running": "실행 중" + }, + "reasoning": { + "thinking": "생각 중...", + "thoughtForFewSeconds": "몇 초 동안 생각했습니다", + "thoughtForSeconds": "{duration}초 동안 생각했습니다" + }, + "messageList": { + "attachedResources": "첨부된 리소스", + "loading": "불러오는 중...", + "error": "오류: {message}", + "emptyConversation": "이 대화에는 메시지가 없습니다." + }, + "liveTurnStats": { + "thinking": "생각 중...", + "streaming": "스트리밍 중", + "elapsedMinutes": "{value}분", + "elapsedSeconds": "{value}초", + "toolUseCount": "{count}개 도구 {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "매개변수", + "error": "오류", + "result": "결과", + "status": { + "approvalRequested": "승인 대기 중", + "approvalResponded": "응답됨", + "inputAvailable": "실행 중", + "inputStreaming": "대기 중", + "outputAvailable": "완료", + "outputDenied": "거부됨", + "outputError": "오류" + } + }, + "toolCallBlock": { + "tool": "도구", + "error": "오류", + "result": "결과" + }, + "contentParts": { + "showingTailOutput": "성능을 위해 스트리밍 중에는 출력의 끝부분만 표시합니다.", + "result": "결과", + "unknown": "알 수 없음", + "replaceAll": "모두 바꾸기", + "filesCount": "파일: {count}", + "update": "업데이트", + "moreFiles": "+{count}개 파일 더", + "timeoutMs": "시간 초과: {timeout}ms", + "backgroundTrue": "백그라운드: true", + "offset": "오프셋: {offset}", + "limit": "제한: {limit}", + "pages": "페이지: {pages}", + "mode": "모드: {mode}", + "cell": "셀: {cell}", + "pathLabel": "경로:", + "globLabel": "Glob 패턴:", + "typeLabel": "유형:", + "outputLabel": "출력:", + "caseInsensitive": "대소문자 구분 안 함", + "multiline": "여러 줄", + "promptLabel": "프롬프트", + "subjectLabel": "제목", + "taskLabel": "작업", + "nameLabel": "이름:", + "field": { + "file": "파일", + "notebook": "노트북", + "command": "명령", + "old": "이전", + "new": "새", + "pattern": "패턴", + "path": "경로", + "query": "쿼리", + "url": "URL:", + "description": "설명", + "content": "내용", + "source": "소스", + "prompt": "프롬프트", + "subject": "제목", + "taskId": "작업 ID", + "status": "상태", + "skill": "Skill", + "args": "인자", + "offset": "오프셋", + "limit": "제한", + "glob": "Glob 패턴", + "type": "유형", + "output": "출력", + "replaceAll": "모두 바꾸기", + "language": "언어", + "timeout": "시간 초과", + "background": "백그라운드", + "agentType": "에이전트 유형", + "library": "라이브러리", + "libraryId": "라이브러리 ID" + }, + "title": { + "edit": "편집", + "command": "명령", + "todoWrite": "TodoWrite(할 일 업데이트)", + "read": "읽기", + "write": "쓰기", + "notebookEdit": "NotebookEdit(노트북 편집)", + "editFiles": "편집 ({count}개 파일)", + "editWithTarget": "{target} 편집", + "readWithTarget": "{target} 읽기", + "writeWithTarget": "{target} 쓰기", + "notebookEditWithTarget": "NotebookEdit({target})", + "globWithPattern": "Glob 패턴 {pattern}", + "grepWithPattern": "Grep 패턴 {pattern}", + "taskCreateWithSubject": "작업 생성: {subject}", + "taskUpdateWithStatus": "작업 업데이트 #{id} -> {status}", + "taskUpdate": "작업 업데이트 #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "WebSearch ({query})", + "todosProgress": "할 일 ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "추가됨", + "deleted": "삭제됨", + "renamed": "이름 변경됨", + "modified": "수정됨" + }, + "hunkLabel": "청크 {index}", + "loadingHunk": "Hunk 로딩 중...", + "noDiffData": "Diff 데이터 없음" + } + } +} diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json new file mode 100644 index 0000000..978b065 --- /dev/null +++ b/src/i18n/messages/pt.json @@ -0,0 +1,1320 @@ +{ + "Language": { + "followSystem": "Seguir o sistema", + "english": "Inglês", + "simplifiedChinese": "Chinês simplificado", + "traditionalChinese": "Chinês tradicional", + "japanese": "Japonês", + "korean": "Coreano", + "spanish": "Espanhol", + "german": "Alemão", + "french": "Francês", + "portuguese": "Português", + "arabic": "Árabe" + }, + "WelcomePage": { + "title": "Bem-vindo ao Codeg", + "openSettings": "Abrir configurações", + "searchPlaceholder": "Pesquisar pastas...", + "loading": "Carregando...", + "emptyFolders": "Ainda não há pastas", + "removeFromHistory": "Remover do histórico", + "openFolder": "Abrir pasta", + "cloneRepository": "Clonar repositório", + "softwareVersion": "versão {version}", + "toasts": { + "loadFolderHistoryFailed": "Falha ao carregar o histórico de pastas", + "openFolderFailed": "Falha ao abrir a pasta", + "removeFromHistoryFailed": "Falha ao remover a pasta", + "openSettingsFailed": "Falha ao abrir as configurações", + "cloneFailed": "Falha ao clonar o repositório" + }, + "errors": { + "unknown": "Erro inesperado", + "invalidInput": "Entrada inválida.", + "notFound": "Recurso não encontrado.", + "alreadyExists": "O recurso já existe.", + "dependencyMissing": "Dependência obrigatória ausente.", + "databaseError": "Falha na operação de banco de dados.", + "ioError": "Falha na operação de arquivo.", + "externalCommandFailed": "Falha no comando externo.", + "windowOperationFailed": "Falha na operação da janela.", + "gitNotInstalled": "O Git não está instalado. Instale o Git primeiro.", + "targetDirectoryNotEmpty": "O diretório de destino já existe e não está vazio.", + "repositoryNotFound": "Repositório não encontrado. Verifique a URL e as permissões de acesso.", + "networkUnavailable": "A rede está indisponível. Verifique sua conexão e tente novamente.", + "authenticationFailed": "Falha na autenticação. Verifique as credenciais ou a chave SSH.", + "permissionDenied": "Permissão negada. Verifique as permissões do diretório." + }, + "cloneDialog": { + "title": "Clonar repositório", + "repositoryUrl": "URL do repositório", + "repositoryUrlPlaceholder": "https://github.com/user/repo.git", + "directory": "Diretório", + "directoryPlaceholder": "Selecione o diretório de destino...", + "browseDirectory": "Procurar diretório", + "cancel": "Cancelar", + "clone": "Clonar" + } + }, + "SettingsShell": { + "title": "Configurações", + "preferences": "Preferências", + "nav": { + "appearance": "Aparência", + "agents": "Agentes", + "mcp": "MCP", + "skills": "Skills", + "shortcuts": "Atalhos", + "system": "Sistema" + } + }, + "AppearanceSettings": { + "sectionTitle": "Aparência do tema", + "sectionDescription": "Escolha claro, escuro ou seguir o sistema. As configurações são salvas automaticamente.", + "themeMode": "Modo de tema", + "placeholder": "Selecionar modo de tema", + "system": "Seguir o sistema", + "light": "Claro", + "dark": "Escuro", + "currentTheme": "Tema efetivo atual: {theme}", + "resolvedTheme": { + "light": "Claro", + "dark": "Escuro", + "unknown": "--" + } + }, + "SystemSettings": { + "loading": "Carregando...", + "sectionTitle": "Gerenciamento do sistema", + "sectionDescription": "Gerencie proxy de rede, atualizações do app e preferências de idioma.", + "proxyTitle": "Proxy de rede", + "proxyDescription": "Quando ativado, as solicitações de rede seguintes priorizam este proxy (incluindo chat ACP, instalação de agentes e operações remotas do Git).", + "loadFailed": "Falha ao carregar: {message}", + "enableProxy": "Ativar proxy do sistema", + "proxyAddress": "Endereço do proxy", + "proxyHint": "Suporta http(s)/socks5, exemplo: {example}. Só funciona quando o proxy do sistema está ativado.", + "save": "Salvar", + "saving": "Salvando...", + "proxyRequired": "A URL do proxy é obrigatória quando o proxy está ativado", + "saveSuccess": "As configurações de proxy do sistema foram salvas", + "saveFailed": "Falha ao salvar: {message}", + "languageTitle": "Idioma", + "languageDescription": "Defina o idioma do app. Ao seguir o idioma do sistema, idiomas não suportados voltam para inglês.", + "appLanguage": "Idioma do app", + "languageSaveSuccess": "As configurações de idioma foram salvas", + "languageSaveFailed": "Falha ao salvar as configurações de idioma: {message}", + "updateTitle": "Atualização do app", + "updateDescription": "Verifique versões mais novas na fonte de releases configurada e instale diretamente quando disponíveis.", + "currentVersion": "Versão atual", + "upgradableVersion": "Versão disponível", + "none": "Nenhuma", + "lastChecked": "Última verificação: {time}", + "updateError": "Erro de atualização: {message}", + "checking": "Verificando...", + "checkUpdate": "Verificar atualizações", + "updating": "Instalando...", + "upgradeTo": "Atualizar para v{version}", + "foundUpdate": "Nova versão v{version} encontrada", + "alreadyLatest": "Você já está na versão mais recente", + "checkUpdateFailed": "Falha ao verificar atualizações: {message}", + "installSuccess": "Atualização instalada. Reiniciando o app.", + "installFailed": "Falha na atualização: {message}", + "updateErrors": { + "sourceUnavailable": "Não foi possível acessar a fonte de atualização. Verifique sua rede ou proxy e tente novamente.", + "network": "Falha na conexão de rede. Verifique sua rede ou proxy e tente novamente.", + "downloadFailed": "Falha ao baixar o pacote de atualização. Tente novamente mais tarde.", + "installFailed": "Falha ao instalar a atualização. Feche o app e tente novamente.", + "unknown": "Falha na atualização. Tente novamente mais tarde." + } + }, + "ShortcutSettings": { + "sectionTitle": "Atalhos", + "resetDefault": "Restaurar padrões", + "recordInstruction": "Clique no botão à direita e pressione uma combinação de teclas. Use Ctrl/Cmd, Alt e Shift. Pressione Esc para cancelar a gravação.", + "recording": "Pressione um atalho...", + "toasts": { + "conflict": "O atalho já está em uso por \"{title}\"", + "updated": "Atalho atualizado", + "invalid": "Atalho inválido, tente novamente", + "reset": "Atalhos padrão restaurados" + }, + "actions": { + "toggle_search": { + "title": "Abrir busca", + "description": "Mostra ou oculta o painel de busca de conversas" + }, + "toggle_sidebar": { + "title": "Alternar barra lateral esquerda", + "description": "Mostra ou oculta a barra lateral da lista de conversas" + }, + "toggle_terminal": { + "title": "Alternar terminal", + "description": "Mostra ou oculta o painel de terminal inferior" + }, + "new_terminal_tab": { + "title": "Novo terminal", + "description": "Cria uma nova aba de terminal quando o foco está no terminal" + }, + "close_current_terminal_tab": { + "title": "Fechar terminal atual", + "description": "Fecha a aba de terminal atual quando o foco está no terminal" + }, + "toggle_aux_panel": { + "title": "Alternar painel direito", + "description": "Mostra ou oculta o painel de informações auxiliares" + }, + "new_conversation": { + "title": "Nova conversa", + "description": "Cria uma nova aba de conversa na pasta atual" + }, + "open_folder": { + "title": "Abrir pasta", + "description": "Abre o seletor de pastas e abre em uma nova janela" + }, + "open_settings": { + "title": "Abrir configurações", + "description": "Abre a janela de configurações" + }, + "close_current_tab": { + "title": "Fechar aba atual", + "description": "Fecha a conversa atual ou aba de arquivo" + }, + "close_all_file_tabs": { + "title": "Fechar todas as abas de arquivo", + "description": "Fecha todas as abas de arquivo apenas no modo de arquivos" + } + } + }, + "SkillsSettings": { + "title": "Skills", + "description": "Selecione uma Skill à esquerda. À direita, a prévia em Markdown é mostrada por padrão; mude para edição para modificar e salvar.", + "loadingAgents": "Carregando agentes que suportam Skills...", + "emptyNoManageableAgents": "Não há agentes disponíveis para gerenciamento de Skills.", + "managedTarget": "Alvo gerenciado", + "selectAgentPlaceholder": "Selecione um agente", + "searchPlaceholder": "Pesquisar por nome / ID / caminho...", + "skillsList": "Lista de Skills", + "loadingSkills": "Carregando Skills...", + "agentNotSupported": "O agente atual não suporta gerenciamento de Skills.", + "emptySkills": "Ainda não há Skills. Clique em \"Nova Skill\" para criar uma.", + "newSkillTitle": "Nova Skill", + "skillInfo": "Informações da Skill", + "skillIdPlaceholder": "skill-id (letras/números/-/_/.)", + "skillsDirectoryWithPath": "Diretório de Skills: {path}", + "skillsDirectoryNeedId": "Diretório de Skills: digite o ID da Skill para gerar o caminho completo", + "markdownContent": "Conteúdo Markdown", + "editingStatus": "Editando", + "previewStatus": "Visualizando", + "contentPlaceholder": "Digite o conteúdo Markdown da Skill...", + "metadataTitle": "Metadados de Skills", + "onlyYamlMetadata": "Esta Skill contém apenas metadados YAML.", + "emptyContentHint": "Ainda não há conteúdo. Clique em \"Editar\" para começar.", + "loadingSkill": "Carregando Skill...", + "emptyNoAgents": "Nenhum agente disponível.", + "actions": { + "preview": "Prévia", + "edit": "Editar", + "openInWindow": "Abrir em nova janela", + "delete": "Excluir", + "deleting": "Excluindo...", + "refresh": "Atualizar", + "newSkill": "Nova Skill", + "reset": "Redefinir", + "save": "Salvar", + "saving": "Salvando...", + "cancel": "Cancelar" + }, + "deleteDialog": { + "title": "Excluir Skill", + "confirm": "Excluir a Skill atual? Esta ação não pode ser desfeita.", + "confirmWithNamePrefix": "Excluir Skill", + "confirmWithNameSuffix": "? Esta ação não pode ser desfeita." + }, + "toasts": { + "loadFailed": "Falha ao carregar Skill", + "openFolderFailed": "Falha ao abrir pasta", + "noSkillDirectory": "Nenhum diretório de Skills disponível para o agente atual", + "nameRequired": "O nome da Skill não pode estar vazio", + "updated": "Skill atualizada", + "created": "Skill criada", + "saveFailed": "Falha ao salvar Skill", + "deleted": "Skill excluída", + "deleteFailed": "Falha ao excluir Skill" + }, + "templates": { + "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n", + "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n", + "default": "# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n" + } + }, + "McpSettings": { + "loading": "Carregando...", + "summary": { + "missingCommand": "(comando ausente)", + "missingUrl": "(URL ausente)" + }, + "protocol": { + "stdio": "Stdio" + }, + "errors": { + "selectInstallProtocol": "Selecione um protocolo de instalação", + "fieldRequired": "{field} é obrigatório", + "fieldNeedsBoolean": "{field} deve ser true ou false", + "fieldNeedsNumber": "{field} deve ser um número", + "fieldNeedsInteger": "{field} deve ser um inteiro", + "fieldInvalidJson": "{field} tem JSON inválido: {message}", + "fieldOutOfRange": "O valor de {field} está fora do intervalo permitido", + "jsonEmpty": "{name} não pode estar vazio", + "jsonInvalid": "{name} não é um JSON válido: {message}", + "jsonMustBeObject": "{name} deve ser um objeto JSON" + }, + "jsonNames": { + "localConfig": "Configuração MCP", + "installConfig": "Configuração de instalação" + }, + "toasts": { + "uninstalled": "MCP desinstalado", + "uninstallFailed": "Falha ao desinstalar: {message}", + "selectAtLeastOneApp": "Selecione pelo menos um app de destino", + "saveSuccess": "Salvo", + "saveFailed": "Falha ao salvar: {message}", + "installed": "{name} instalado", + "installFailed": "Falha na instalação: {message}" + }, + "installDialog": { + "title": "Confirmar instalação do MCP", + "descriptionWithName": "Instalar {name} na configuração local.", + "description": "Selecione os apps de destino para instalação.", + "protocol": "Protocolo", + "selectProtocol": "Selecionar protocolo", + "parameters": "Parâmetros de configuração", + "booleanPlaceholder": "Selecione true/false", + "selectOneValue": "Selecione um valor", + "targetApps": "Apps de destino" + }, + "actions": { + "cancel": "Cancelar", + "confirmInstall": "Confirmar instalação", + "installing": "Instalando", + "uninstall": "Desinstalar", + "uninstalling": "Desinstalando", + "viewDetails": "Ver detalhes", + "save": "Salvar", + "saving": "Salvando", + "install": "Instalar" + }, + "tabs": { + "local": "MCP local", + "market": "Marketplace MCP" + }, + "local": { + "filterPlaceholder": "Filtrar MCP local...", + "loadFailed": "Falha ao carregar: {message}", + "empty": "Nenhum MCP local detectado.", + "description": "A configuração local de MCP pode ser editada e salva diretamente.", + "enabledApps": "Apps habilitados", + "configJson": "Configuração MCP (JSON)" + }, + "market": { + "selectMarketplace": "Selecionar marketplace", + "searchPlaceholder": "Pesquisar MCP...", + "searchFailed": "Falha na busca: {message}", + "loadingList": "Carregando lista de MCP...", + "empty": "Nenhum resultado de MCP.", + "loadingDetail": "Carregando detalhes do marketplace...", + "detailLoadFailed": "Falha ao carregar detalhes: {message}", + "owner": "Proprietário: {owner}", + "namespace": "Namespace: {namespace}", + "defaultInstallProtocol": "Protocolo de instalação padrão", + "currentOptionParameterCount": "Quantidade de parâmetros da opção atual: {count}", + "installConfigDescription": "Configuração de instalação (JSON, editável antes de instalar; edições substituirão o formulário de protocolo/parâmetros)", + "selectLeftToView": "Selecione um MCP do marketplace à esquerda para ver detalhes." + }, + "badges": { + "verified": "Verificado", + "remote": "Remoto", + "hasHomepage": "Tem homepage", + "uses": "{count} usos", + "deployed": "Implantado", + "notDeployed": "Não implantado" + }, + "selectLeftMcp": "Selecione um MCP à esquerda." + }, + "AcpAgentSettings": { + "title": "Gerenciamento do SDK de agentes", + "description": "Gerencie em um só lugar a conexão do SDK de agentes, estado habilitado, variáveis de ambiente, gerenciamento de configuração e informações de preflight de versão.", + "loadingAgents": "Carregando lista de agentes...", + "agentList": "Lista de agentes", + "emptyNoAgent": "Nenhum agente disponível.", + "configManagement": "Gerenciamento de configuração", + "envVars": "Variáveis de ambiente", + "nativeJsonConfig": "Configuração JSON nativa", + "modelHintDefault": "Deixe em branco para usar o modelo padrão do sistema.", + "generalConfigDescriptionClaude": "Suporta configuração rápida de API URL, API Key e modelos Claude, e sincroniza com a configuração JSON nativa.", + "generalConfigDescriptionDefault": "Suporta entrada de configuração importante (API URL, API Key, Model) e gerenciamento de configuração JSON nativa.", + "actions": { + "dragSort": "Arraste para reordenar", + "dragSortAgent": "Arraste para reordenar {name}", + "refreshCheck": "Atualizar verificação", + "refreshCheckAgent": "Atualizar verificação de {name}", + "clickEnable": "Clique para habilitar {name}", + "clickDisable": "Clique para desabilitar {name}", + "install": "Instalar", + "upgrade": "Atualizar", + "uninstall": "Desinstalar", + "uninstalling": "Desinstalando...", + "saveEnvVars": "Salvar variáveis de ambiente", + "saving": "Salvando...", + "saveCodexConfig": "Salvar configuração do Codex", + "saveGeminiConfig": "Salvar configuração do Gemini", + "saveOpenCodeConfig": "Salvar configuração do OpenCode", + "saveOpenClawConfig": "Salvar configuração do OpenClaw", + "saveConfigManagement": "Salvar gerenciamento de configuração", + "saveCurrentProvider": "Salvar provedor atual", + "showApiKey": "Mostrar API Key", + "hideApiKey": "Ocultar API Key", + "showKey": "Mostrar chave", + "hideKey": "Ocultar chave", + "showToken": "Mostrar token", + "hideToken": "Ocultar token", + "cancel": "Cancelar", + "delete": "Excluir", + "deleting": "Excluindo...", + "confirmDelete": "Confirmar exclusão", + "confirmUninstall": "Confirmar desinstalação" + }, + "status": { + "enabled": "Habilitado", + "disabled": "Desabilitado", + "unchecked": "Não verificado", + "agentEnabledAria": "{name} habilitado", + "agentEnabledSwitch": "Chave de habilitação de {name}" + }, + "preflight": { + "count": "Itens de preflight: {count}", + "notRun": "As verificações ainda não foram executadas." + }, + "codex": { + "configDescription": "Suporta configuração rápida de URL da API, API Key, nome do modelo e reasoning effort, com sincronização para `auth.json` / `config.toml`.", + "selectProvider": "Selecionar provedor", + "modelName": "Nome do modelo", + "selectReasoningEffort": "Selecionar Reasoning Effort", + "enableWebsocket": "Habilitar WebSocket", + "enableWebsocketAria": "Habilitar WebSocket para Codex Provider", + "authJsonNative": "auth.json (nativo)", + "configTomlNative": "config.toml (nativo)" + }, + "gemini": { + "authConfig": "Configuração de autenticação do Gemini", + "authConfigDescription": "Alinhada à documentação de autenticação do Gemini CLI, com suporte a endpoint personalizado, login Google, Gemini API Key e Vertex AI (ADC / conta de serviço / API Key).", + "authMode": "Modo de autenticação", + "selectAuthMode": "Selecionar modo de autenticação", + "viewAuthDoc": "Ver documentação de autenticação", + "mode": { + "custom": "Endpoint personalizado", + "loginGoogle": "Login Google (OAuth)", + "vertexServiceAccount": "Vertex AI (Conta de serviço)" + }, + "hint": { + "custom": "Preencha API URL, API Key e Modelo; mapeados para GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.", + "loginGoogle": "Execute gemini no terminal e conclua o login Google primeiro; API key não é necessária.", + "geminiApiKey": "Preencha GEMINI_API_KEY ao usar a API Gemini.", + "vertexAdc": "Use gcloud ADC; GOOGLE_CLOUD_PROJECT e GOOGLE_CLOUD_LOCATION são recomendados.", + "vertexServiceAccount": "Defina o caminho do JSON da conta de serviço em GOOGLE_APPLICATION_CREDENTIALS.", + "vertexApiKey": "Preencha GOOGLE_API_KEY ao usar API key do Vertex AI." + } + }, + "openCode": { + "configManagement": "Gerenciamento de configuração do OpenCode", + "configDescription": "Alinhado ao esquema `provider` do OpenCode, com suporte a gerenciamento multi-provedor e sincronização bidirecional com arquivos JSON nativos.", + "providerManagement": "Gerenciamento de provedores", + "providerCount": "{count} provedores", + "addProvider": "Adicionar provedor", + "emptyProvider": "Ainda não há provedor. Informe um ID e clique em \"Adicionar provedor\".", + "providerEnabledState": "Estado habilitado de {providerId}", + "selectProviderNpm": "Selecionar provider.npm", + "notSet": "Não definido", + "modelManagement": "Gerenciamento de modelos", + "modelCount": "{count} modelos", + "modelDescription": "Alinhado ao `provider.models` do OpenCode. O gerenciamento rápido atualmente suporta `name` / `id`; outros campos avançados são preservados e podem ser editados no JSON nativo abaixo.", + "addModel": "Adicionar modelo", + "emptyModel": "Ainda não há modelo. Informe model id e clique em \"Adicionar modelo\".", + "modelId": "ID do modelo", + "modelName": "Nome do modelo", + "deleteModel": "Excluir modelo {modelId}", + "nativeJsonConfig": "Configuração JSON nativa do OpenCode" + }, + "openClaw": { + "gatewayConfig": "Configuração de Gateway", + "gatewayDescription": "Configure a conexão do OpenClaw Gateway. Suporta gateway local ou remoto.", + "gatewayUrlHint": "Deixe vazio para usar gateway.remote.url da configuração local do openclaw.", + "gatewayTokenPlaceholder": "Token de autenticação do Gateway", + "gatewayTokenHint": "Use token-file em vez de token em texto puro quando possível; configure via CLI do openclaw.", + "sessionKeyHint": "Opcional. Especifique a session key do gateway; deixe vazio para atribuição automática de sessão isolada." + }, + "claude": { + "mainModel": "Modelo principal", + "reasoningModel": "Modelo de raciocínio (thinking)", + "haikuDefaultModel": "Modelo Haiku padrão", + "sonnetDefaultModel": "Modelo Sonnet padrão", + "opusDefaultModel": "Modelo Opus padrão" + }, + "dialogs": { + "confirmDeleteProvider": "Excluir o provedor {providerId}?", + "confirmDeleteProviderDescription": "A configuração do OpenCode e o auth JSON serão atualizados juntos. Esta ação não pode ser desfeita.", + "confirmUninstall": "Desinstalar {name}?", + "confirmUninstallDescription": "Isso remove a versão instalada localmente. Você pode reinstalar depois." + }, + "errors": { + "nativeJsonMustBeObject": "A configuração JSON nativa deve ser um objeto", + "nativeJsonInvalid": "Erro de formato na configuração JSON nativa: {message}", + "openCodeAuthMustBeObject": "OpenCode auth.json deve ser um objeto JSON", + "openCodeAuthInvalid": "Erro de formato no OpenCode auth.json: {message}", + "authMustBeObject": "auth.json deve ser um objeto JSON", + "authInvalid": "Erro de formato no auth.json: {message}", + "providerIdPattern": "O ID do provedor só aceita letras, números, sublinhado, ponto e hífen", + "providerExists": "O provedor '{providerId}' já existe", + "modelIdPattern": "O ID do modelo só aceita letras, números, sublinhado, ponto, dois-pontos e hífen", + "modelExists": "O modelo '{modelId}' já existe" + }, + "warnings": { + "nativeJsonRecoveredStructured": "A configuração JSON nativa é inválida; redefinida para configuração estruturada", + "nativeJsonRecoveredOpenCode": "A configuração JSON nativa é inválida; redefinida para configuração estruturada do OpenCode", + "openCodeAuthRecovered": "OpenCode auth.json é inválido; redefinido para configuração padrão", + "authRecoveredStructured": "auth.json é inválido; redefinido para configuração estruturada" + }, + "toasts": { + "agentActionCompleted": "{name} {action} concluído", + "agentActionFailed": "{name} {action} falhou", + "localVersion": "Versão local: {version}", + "installCompletedVersionLater": "Instalação concluída, a versão será atualizada na próxima verificação", + "uninstallCompleted": "Desinstalação de {name} concluída", + "uninstallFailed": "Desinstalação de {name} falhou", + "localVersionRemoved": "Versão local removida", + "saveAgentOrderFailed": "Falha ao salvar a ordem dos Agents", + "saveAgentSwitchFailed": "Falha ao salvar o switch dos Agents", + "saveEnvFailed": "Falha ao salvar variáveis de ambiente", + "codexSaved": "Configuração do Codex salva", + "saveCodexNativeFailed": "Falha ao salvar configuração nativa do Codex", + "geminiSaved": "Configuração do Gemini salva", + "saveGeminiFailed": "Falha ao salvar configuração do Gemini", + "providerDeleted": "Provedor {providerId} excluído", + "providerDeleteFailed": "Falha ao excluir o provedor {providerId}", + "providerSaved": "Provedor {providerId} salvo", + "saveProviderFailed": "Falha ao salvar o provedor {providerId}", + "openCodeConfigSynced": "A configuração do OpenCode e o auth JSON foram sincronizados.", + "openCodeSaved": "Configuração do OpenCode salva", + "saveOpenCodeFailed": "Falha ao salvar configuração do OpenCode", + "openClawSaved": "Configuração do OpenClaw salva", + "saveOpenClawFailed": "Falha ao salvar configuração do OpenClaw", + "configSaved": "Configuração salva", + "saveConfigManagementFailed": "Falha ao salvar o gerenciamento de configuração" + }, + "version": { + "statusLabel": "Status da versão", + "notInstalled": "Não instalado", + "remoteLocal": "Remoto: {remoteVersion} · Local: {localVersion}", + "platformUnsupported": "{versionText}. A plataforma atual não suporta este agente.", + "clickInstall": "{versionText}. Clique em Instalar à direita.", + "localUnrecognized": "{versionText}. A versão local não é comparável; tente atualizar para sobrescrever a instalação.", + "upgradeAvailable": "{versionText}. Atualização disponível.", + "remoteUnavailable": "{versionText}. A versão remota está indisponível no momento.", + "latest": "{versionText}. Já está na versão mais recente." + } + }, + "SettingsPages": { + "agentsLoading": "Carregando configurações de agentes..." + }, + "CommitPage": { + "title": "Confirmar", + "invalidFolderId": "ID de pasta inválido", + "loadingRepo": "Carregando repositório..." + }, + "Folder": { + "common": { + "all": "Todos", + "cancel": "Cancelar", + "close": "Fechar", + "closeOthers": "Fechar outros", + "closeAll": "Fechar tudo", + "confirm": "Confirmar", + "save": "Salvar", + "delete": "Excluir", + "rename": "Renomear", + "loading": "Carregando...", + "refresh": "Atualizar", + "refreshing": "Atualizando...", + "create": "Criar", + "createAndSwitch": "Criar e alternar", + "openFile": "Abrir arquivo", + "viewDiff": "Ver Diff" + }, + "modes": { + "conversation": "Modo conversa", + "fusion": "Modo fusão", + "files": "Modo arquivos", + "workspaceModesAria": "Modos do workspace" + }, + "statusLabels": { + "in_progress": "Em andamento", + "pending_review": "Revisão", + "completed": "Concluído", + "cancelled": "Cancelado" + }, + "sidebar": { + "title": "Conversas", + "locateActiveConversation": "Localizar conversa ativa", + "expandAllGroups": "Expandir todos os grupos", + "collapseAllGroups": "Recolher todos os grupos", + "newConversation": "Nova conversa", + "noConversationsFound": "Nenhuma conversa encontrada.", + "importLocalSessions": "Importar sessões locais", + "importing": "Importando...", + "error": "Erro: {message}", + "completeAllSessions": "Concluir todas as sessões", + "completeAllReviewTitle": "Concluir todas as sessões em revisão?", + "completeAllReviewDescription": "Isso marcará como concluídas todas as {count, plural, one {# sessão} other {# sessões}} em Revisão.", + "completing": "Concluindo...", + "toasts": { + "importedSessions": "Importadas {imported, plural, one {# sessão} other {# sessões}}, ignoradas {skipped}", + "noNewSessionsFound": "Nenhuma nova sessão encontrada (ignoradas {skipped})", + "importFailed": "Falha na importação: {message}", + "reviewCompleted": "Marcadas {count, plural, one {# sessão em revisão} other {# sessões em revisão}} como concluídas", + "completeReviewFailed": "Falha ao concluir sessões em revisão: {message}" + } + }, + "conversation": { + "reloadFailed": "Falha ao recarregar conversa: {message}", + "reloaded": "Conversa recarregada", + "reload": "Recarregar", + "newConversation": "Nova conversa", + "closeConversation": "Fechar conversa" + }, + "conversationCard": { + "untitledConversation": "Conversa sem título", + "newConversation": "Nova conversa", + "rename": "Renomear", + "status": "Status", + "delete": "Excluir", + "importLocalSessions": "Importar sessões locais", + "importing": "Importando...", + "renameConversation": "Renomear conversa", + "deleteConversationTitle": "Excluir conversa?", + "deleteConversationDescription": "Isso excluirá \"{title}\". Esta ação não pode ser desfeita.", + "cancel": "Cancelar", + "save": "Salvar" + }, + "search": { + "dialogTitle": "Buscar conversas", + "placeholder": "Buscar conversas...", + "allAgents": "Todos", + "searching": "Buscando...", + "typeToSearch": "Digite para buscar conversas", + "noResults": "Nenhum resultado encontrado.", + "untitledConversation": "Conversa sem título" + }, + "folderTitleBar": { + "showSidebar": "Mostrar barra lateral", + "hideSidebar": "Ocultar barra lateral", + "toggleTerminal": "Alternar terminal", + "toggleAuxPanel": "Alternar painel auxiliar", + "search": "Buscar", + "openSettings": "Abrir configurações", + "withShortcut": "{label} (atalho: {shortcut})" + }, + "statusBar": { + "connection": { + "connected": "Conectado", + "connecting": "Conectando...", + "downloading": "Baixando...", + "prompting": "Respondendo...", + "error": "Erro de conexão", + "disconnected": "Desconectado", + "tooltip": "{agent}: {status}", + "tooltipError": "{agent}: {error}" + }, + "tasks": { + "title": "Tarefas" + }, + "alerts": { + "title": "Alertas", + "empty": "Sem alertas" + }, + "stats": { + "conversations": "{count} conversas", + "summary": "{conversations} conversas / {messages} mensagens" + }, + "tokens": { + "contextWindowUsageAria": "Uso da janela de contexto", + "contextWindow": "Janela de contexto", + "usedMax": "Usado / Máx", + "tokenUsage": "Uso de tokens", + "input": "Entrada", + "output": "Saída", + "cacheRead": "Leitura de cache", + "cacheWrite": "Gravação de cache", + "total": "Total de tokens" + } + }, + "auxPanel": { + "tabs": { + "diff": "Diferenças", + "files": "Arquivos", + "changes": "Alterações", + "commits": "Confirmações" + } + }, + "windowControls": { + "minimizeWindow": "Minimizar janela", + "minimize": "Minimizar", + "maximizeWindow": "Maximizar janela", + "maximize": "Maximizar", + "restoreWindow": "Restaurar janela", + "restore": "Restaurar", + "closeWindow": "Fechar janela", + "close": "Fechar" + }, + "tabs": { + "closeConversationTab": "Fechar aba de conversa", + "close": "Fechar", + "closeOthers": "Fechar outros", + "closeAll": "Fechar tudo" + }, + "fileWorkspace": { + "files": "Arquivos", + "closeFileTab": "Fechar aba de arquivo", + "close": "Fechar", + "closeOthers": "Fechar outros", + "closeAll": "Fechar tudo" + }, + "terminal": { + "rename": "Renomear", + "close": "Fechar", + "closeOthers": "Fechar outros", + "closeAll": "Fechar tudo", + "hideTerminal": "Ocultar terminal ({shortcut})" + }, + "sessionFiles": { + "currentResponse": "Resposta atual", + "noDiffDataAvailable": "Nenhum dado de diff disponível para {filePath}", + "loading": "Carregando...", + "noFileChangesInConversation": "Nenhuma alteração de arquivo encontrada nesta conversa", + "openConversationToSeeChanges": "Abra uma conversa para ver suas alterações de arquivos", + "remove": "Remover", + "changeCount": "{count, plural, one {# alteração} other {# alterações}}", + "fileCount": "{count, plural, one {# arquivo} other {# arquivos}}" + }, + "folderNameDropdown": { + "fallbackFolderName": "Pasta", + "openFolder": "Abrir pasta", + "cloneRepository": "Clonar repositório", + "opened": "Aberto", + "recentOpen": "Abertos recentemente" + }, + "fileWorkspacePanel": { + "viewDiff": "Ver Diff", + "openFile": "Abrir arquivo", + "fileCount": "{count, plural, one {# arquivo} other {# arquivos}}", + "openFileOrDiff": "Abra um arquivo ou diff pelo painel direito", + "disk": "Disco", + "head": "HEAD", + "unsaved": "Não salvo", + "workingTree": "Árvore de trabalho", + "loading": "Carregando...", + "compareWithBranch": "{path} · comparar com {branch}", + "hunkCount": "{count, plural, one {# bloco} other {# blocos}}", + "prev": "Anterior", + "next": "Próximo", + "jumpToLine": "Ir para a linha {line}", + "noParsedDiffSections": "Sem seções de diff analisadas", + "loadingEditor": "Carregando editor..." + }, + "branchDropdown": { + "toasts": { + "commitCodeCompleted": "Commit de código concluído", + "committedFiles": "{count, plural, one {# arquivo commitado} other {# arquivos commitados}}", + "taskCompleted": "{label} concluído", + "taskFailed": "{label} falhou", + "mergeNoNewCommits": "{branchName} não tem novos commits", + "mergedCommits": "{count, plural, one {# commit mesclado} other {# commits mesclados}}", + "allFilesUpToDate": "Todos os arquivos estão atualizados", + "updatedFiles": "{count, plural, one {# arquivo atualizado} other {# arquivos atualizados}}", + "openCommitWindowFailed": "Falha ao abrir a janela de commit", + "upstreamSet": "A branch upstream foi definida", + "upstreamSetAndPushed": "Branch upstream definida e {count, plural, one {# commit} other {# commits}} enviado(s)", + "noCommitsToPush": "Não há commits para enviar", + "pushedCommits": "{count, plural, one {# commit enviado} other {# commits enviados}}" + }, + "tasks": { + "newBranch": "Criar branch {name}", + "newWorktree": "Criar worktree {name}", + "checkoutTo": "Fazer checkout para {branchName}", + "mergeBranch": "Mesclar {branchName}", + "rebaseTo": "Rebase para {branchName}", + "deleteBranch": "Excluir branch {branchName}", + "initGitRepo": "Inicializar repositório Git", + "pullCode": "Fazer pull do código", + "fetchInfo": "Buscar informações", + "pushCode": "Enviar código", + "stashChanges": "Fazer stash das alterações", + "stashPop": "Aplicar stash" + }, + "confirm": { + "mergeTitle": "Mesclar branch", + "rebaseTitle": "Rebase da branch", + "deleteTitle": "Excluir branch", + "mergeDescription": "Mesclar {branchName} na branch atual {currentBranch}?", + "rebaseDescription": "Fazer rebase da branch atual {currentBranch} sobre {branchName}?", + "deleteDescription": "Excluir a branch {branchName}? Esta ação não pode ser desfeita." + }, + "current": "Atual", + "switchToBranch": "Mudar para esta branch", + "mergeBranchIntoCurrent": "Mesclar {branchName} em {currentBranch}", + "rebaseCurrentToBranch": "Rebase de {currentBranch} sobre {branchName}", + "deleteBranch": "Excluir branch", + "versionControl": "Controle de versão", + "initGitRepo": "Inicializar repositório Git", + "pullCode": "Fazer pull do código", + "fetchRemoteBranches": "Buscar branches remotas", + "openCommitWindow": "Commit de código...", + "pushCode": "Enviar...", + "newBranch": "Nova branch...", + "newWorktree": "Novo worktree...", + "stashChanges": "Fazer stash das alterações", + "stashPop": "Aplicar stash...", + "localBranches": "Branches locais ({count, plural, one {#} other {#}})", + "noLocalBranches": "Sem branches locais", + "remoteBranches": "Branches remotas ({count, plural, one {#} other {#}})", + "noRemoteBranches": "Sem branches remotas", + "parentBranchHint": "A branch atual foi criada a partir de {parentBranch}. Clique para mesclar {parentBranch} na branch atual.", + "dialogs": { + "newBranchTitle": "Nova branch", + "newBranchDescription": "Criar uma nova branch a partir da branch atual {branch}", + "branchNamePlaceholder": "Nome da branch", + "newWorktreeTitle": "Novo worktree", + "newWorktreeDescription": "Criar um novo worktree a partir da branch atual {branch}", + "branchNameLabel": "Nome da branch", + "worktreePathLabel": "Caminho do worktree", + "worktreePathPlaceholder": "Caminho do worktree" + } + }, + "commitDialog": { + "toasts": { + "commitCompleted": "Commit de código concluído", + "committedFiles": "{count, plural, one {# arquivo commitado} other {# arquivos commitados}}", + "addedToVcs": "Adicionado ao VCS", + "addToVcsFailed": "Falha ao adicionar ao VCS", + "fileDeleted": "Arquivo excluído", + "deleteFailed": "Falha ao excluir", + "fileRolledBack": "Arquivo revertido", + "rollbackFailed": "Falha no rollback" + }, + "confirm": { + "deleteTitle": "Confirmar exclusão", + "deleteDescription": "Excluir o arquivo \"{file}\"? Esta ação não pode ser desfeita.", + "rollbackTitle": "Confirmar rollback", + "rollbackDescription": "Reverter o arquivo \"{file}\" para o HEAD? Alterações não salvas serão perdidas." + }, + "actions": { + "select": "Selecionar", + "unselect": "Desmarcar", + "rollback": "Reverter", + "addToVcs": "Adicionar ao VCS" + }, + "aria": { + "selectFile": "{action}: {path}", + "unselectAllFiles": "Desmarcar todos os arquivos", + "selectAllFiles": "Selecionar todos os arquivos", + "unselectTracked": "Desmarcar alterações rastreadas", + "selectTracked": "Selecionar alterações rastreadas", + "unselectUntracked": "Desmarcar arquivos não rastreados", + "selectUntracked": "Selecionar arquivos não rastreados" + }, + "loading": "Carregando...", + "selectionCount": "{selected} / {total} arquivos", + "emptyFiles": "Sem arquivos alterados", + "trackedChanges": "Alterações rastreadas ({count})", + "untrackedFiles": "Arquivos não rastreados ({count})", + "commitMessage": "Mensagem de commit", + "commitMessagePlaceholder": "Digite a mensagem de commit...", + "commitButton": "Confirmar ({count})", + "head": "HEAD", + "workingTree": "Árvore de trabalho", + "clickFileToDiff": "Clique no nome do arquivo para ver o diff", + "loadingDiff": "Carregando diff..." + }, + "gitLogTab": { + "filesTitle": "Arquivos", + "expandAllFiles": "Expandir todos os arquivos", + "collapseAllFiles": "Recolher todos os arquivos", + "workspace": "espaço de trabalho", + "retry": "Tentar novamente", + "noCommitsFound": "Nenhum commit encontrado", + "hash": "Hash do commit", + "copyHash": "Copiar hash", + "author": "Autor", + "noFileChangeDetails": "Sem detalhes de alteração de arquivos disponíveis.", + "branchesTitle": "Branches Git", + "loadingBranches": "Carregando branches...", + "noContainingBranches": "Nenhuma branch contendo este commit foi encontrada.", + "newBranch": "Nova branch...", + "viewCommitDiffAria": "Ver diff do commit {hash}", + "copyFullCommitHashAria": "Copiar hash completo do commit {hash}", + "pushStatus": { + "pushed": "Enviado para o remoto", + "notPushed": "Não enviado para o remoto", + "unknown": "Status de push desconhecido (upstream não configurado)" + }, + "time": { + "monthsAgo": "{count, plural, one {há # mês} other {há # meses}}", + "daysAgo": "{count, plural, one {há # dia} other {há # dias}}", + "hoursAgo": "{count, plural, one {há # hora} other {há # horas}}", + "minsAgo": "{count, plural, one {há # min} other {há # mins}}", + "justNow": "agora mesmo" + }, + "toasts": { + "createdAndSwitchedNewBranch": "Nova branch criada e selecionada", + "newBranchFromCommit": "{name} (de {shortHash})", + "createBranchFailed": "Falha ao criar branch" + }, + "branchSelector": { + "selectBranchPlaceholder": "Selecionar branch...", + "localBranches": "Branches locais", + "current": "Atual", + "remoteBranches": "Branches remotas", + "refreshCommitHistory": "Atualizar histórico de commits" + }, + "dialogs": { + "newBranchTitle": "Nova branch", + "newBranchDescription": "Criar uma nova branch com o commit {shortHash} como commit mais recente.", + "branchNamePlaceholder": "Nome da branch" + } + }, + "gitChangesTab": { + "workspace": "espaço de trabalho", + "noChanges": "Sem alterações locais", + "trackedChanges": "Alterações rastreadas ({count})", + "untrackedFiles": "Arquivos não rastreados ({count})", + "expandTracked": "Expandir alterações rastreadas", + "collapseTracked": "Recolher alterações rastreadas", + "expandUntracked": "Expandir arquivos não rastreados", + "collapseUntracked": "Recolher arquivos não rastreados", + "actions": { + "commitCode": "Commit do código", + "rollback": "Reverter", + "addToVcs": "Adicionar ao VCS" + }, + "toasts": { + "noAddableFilesInDir": "Nenhum arquivo alterado neste diretório pode ser adicionado ao VCS", + "noRollbackFilesInDir": "Nenhum arquivo alterado neste diretório pode ser revertido", + "addedToVcs": "{name} adicionado ao VCS", + "addToVcsFailed": "Falha ao adicionar ao VCS", + "openCommitWindowFailed": "Falha ao abrir a janela de commit", + "rolledBack": "{name} revertido", + "rollbackFailed": "Falha no rollback", + "addedFilesToVcs": "{count, plural, one {# arquivo} other {# arquivos}} adicionados ao VCS", + "rolledBackFiles": "{count, plural, one {# arquivo revertido} other {# arquivos revertidos}}" + }, + "directoryDialog": { + "descriptionAdd": "Selecione arquivos sob o diretório {path} para adicionar ao VCS.", + "descriptionRollback": "Selecione arquivos sob o diretório {path} para reverter.", + "descriptionFallback": "Selecione arquivos para prosseguir.", + "selectionCount": "Selecionados {selected} / {total} arquivos", + "selectAll": "Selecionar todos", + "unselectAll": "Desmarcar todos", + "loadingCandidates": "Carregando alterações do diretório...", + "noOperableFiles": "Nenhum arquivo operável" + }, + "rollbackConfirm": { + "title": "Confirmar rollback", + "descriptionWithTarget": "Reverter alterações locais de {kind} \"{name}\"?", + "descriptionFallback": "Reverter alterações locais?", + "kindDirectory": "diretório", + "kindFile": "arquivo" + } + }, + "tabContext": { + "loadingConversation": "Carregando...", + "untitledConversation": "Conversa sem título", + "newConversation": "Nova conversa" + }, + "fileTreeTab": { + "workspace": "Espaço de trabalho", + "retry": "Tentar novamente", + "git": "Git", + "openInFileManager": "Abrir no gerenciador de arquivos", + "openInFinder": "Abrir no Finder", + "openInExplorer": "Abrir no Explorer", + "attachToCurrentSession": "Anexar à sessão atual", + "compareWithBranch": "Comparar com branch...", + "reloadFromDisk": "Recarregar do disco", + "openIn": "Abrir em", + "openInTerminal": "Abrir no terminal", + "actions": { + "select": "Selecionar", + "unselect": "Desmarcar", + "commitCode": "Fazer commit do código", + "rollback": "Reverter", + "addToVcs": "Adicionar ao VCS" + }, + "aria": { + "selectPath": "{action}: {path}" + }, + "toasts": { + "openDirectoryFailed": "Falha ao abrir diretório", + "openBuiltinTerminalFailed": "Não foi possível abrir o terminal embutido", + "openCommitWindowFailed": "Falha ao abrir janela de commit", + "noAddableFilesInDir": "Nenhum arquivo alterado neste diretório pode ser adicionado ao VCS", + "noRollbackFilesInDir": "Nenhum arquivo alterado neste diretório pode ser revertido", + "addedToVcs": "{name} adicionado ao VCS", + "addToVcsFailed": "Falha ao adicionar ao VCS", + "loadBranchesFailed": "Falha ao carregar branches", + "renameFailed": "Falha ao renomear", + "deleteFailed": "Falha ao excluir", + "rolledBack": "{name} revertido", + "rollbackFailed": "Falha ao reverter", + "addedFilesToVcs": "{count, plural, one {# arquivo adicionado ao VCS} other {# arquivos adicionados ao VCS}}", + "rolledBackFiles": "{count, plural, one {# arquivo revertido} other {# arquivos revertidos}}", + "savedAsCopy": "Salvo como cópia", + "saveCopyFailed": "Falha ao salvar como cópia", + "watchStartFailed": "Falha ao iniciar monitoramento de arquivos" + }, + "renameDialog": { + "renameDirectory": "Renomear diretório", + "renameFile": "Renomear arquivo", + "description": "Digite um novo nome (apenas nome, sem caminho).", + "placeholderDirectory": "novo-nome-da-pasta", + "placeholderFile": "novo-nome-do-arquivo.ext" + }, + "directoryDialog": { + "descriptionAdd": "Selecione arquivos no diretório {path} para adicionar ao VCS.", + "descriptionRollback": "Selecione arquivos no diretório {path} para reverter.", + "descriptionFallback": "Selecione arquivos para continuar.", + "selectionCount": "{selected} / {total} arquivos selecionados", + "selectAll": "Selecionar tudo", + "unselectAll": "Desmarcar tudo", + "loadingCandidates": "Carregando alterações do diretório...", + "noOperableFiles": "Nenhum arquivo operável" + }, + "compareDialog": { + "title": "Comparar com branch", + "descriptionWithTarget": "Selecione uma branch e compare com {kind} {path}", + "descriptionFallback": "Selecione uma branch para comparar.", + "kindDirectory": "diretório", + "kindFile": "arquivo", + "filterPlaceholder": "Filtre branches, ex.: main / origin/main", + "singleClickHint": "Clique em uma branch para comparar diretamente", + "loadingBranches": "Carregando branches...", + "recentBranches": "Branches recentes ({count})", + "noCurrentBranch": "Sem branch atual", + "localBranches": "Branches locais ({count})", + "remoteBranches": "Branches remotas ({count})", + "noMatchingBranches": "Nenhuma branch correspondente" + }, + "externalConflictDialog": { + "title": "Alterações externas de arquivo detectadas", + "descriptionWithPath": "O arquivo {path} foi alterado no disco e as edições atuais não foram salvas.", + "descriptionFallback": "O arquivo atual foi alterado no disco e as edições atuais não foram salvas.", + "compare": "Comparar", + "savingCopy": "Salvando cópia...", + "saveAsCopy": "Salvar como cópia", + "reload": "Recarregar" + }, + "deleteConfirm": { + "title": "Confirmar exclusão", + "descriptionWithTarget": "Excluir {kind} \"{name}\"? Esta ação não pode ser desfeita.", + "descriptionFallback": "Esta ação não pode ser desfeita.", + "kindDirectory": "diretório", + "kindFile": "arquivo" + }, + "rollbackConfirm": { + "title": "Confirmar reversão", + "descriptionWithTarget": "Reverter alterações locais do arquivo \"{name}\"?", + "descriptionFallback": "Reverter alterações locais deste arquivo?" + }, + "terminalTitle": "Console · {name}" + }, + "commandDropdown": { + "loading": "Carregando...", + "addCommand": "Adicionar comando", + "manageCommands": "Gerenciar comandos...", + "runCommandTitle": "Executar: {command}", + "stopCommandTitle": "Parar: {command}", + "manageDialog": { + "title": "Gerenciar comandos", + "empty": "Ainda não há comandos", + "namePlaceholder": "Nome", + "commandPlaceholder": "Comando", + "add": "Adicionar", + "saving": "Salvando..." + } + }, + "workspaceContext": { + "confirmCloseDirtyTab": "Fechar \"{title}\" sem salvar?", + "confirmCloseOtherDirtyTabs": "Fechar outras abas com alterações não salvas?", + "confirmCloseAllDirtyTabs": "Fechar todas as abas com alterações não salvas?", + "unableLoadContent": "Não foi possível carregar o conteúdo.\n\n{message}", + "previewRequestTimedOut": "A solicitação de preview expirou", + "diffRequestTimedOut": "A solicitação de Diff expirou", + "branchCompareRequestTimedOut": "A solicitação de comparação de branch expirou", + "commitDiffRequestTimedOut": "A solicitação de Diff de commit expirou", + "saveRequestTimedOut": "A solicitação de salvamento expirou", + "reloadRequestTimedOut": "A solicitação de recarga expirou", + "noChanges": "Sem alterações.", + "noDiffOutput": "Sem saída de diff.", + "diffTitleWorkspace": "Diff · Espaço de trabalho", + "diffDescriptionWorkingTree": "Árvore de trabalho (HEAD)", + "diffTitleFile": "Diferença · {name}", + "compareTitleFile": "Comparar · {name}", + "compareTitleBranch": "Comparar · {branch}", + "compareDescriptionPath": "{path} · comparar com {branch}", + "compareDescriptionBranch": "comparar com {branch}", + "diffTitleCommitFile": "Diferença · {name} @ {hash}", + "diffTitleCommit": "Diferença · {hash}", + "diffDescriptionCommitPath": "{path} · confirmação {commit}", + "diffDescriptionCommit": "confirmação {commit}", + "diffTitleConflictFile": "Conflito · {name}", + "diffDescriptionConflict": "{path} · disco vs não salvo" + }, + "chat": { + "acpConnections": { + "actions": { + "openAgentsSettings": "Abrir configurações de agentes", + "retry": "Tentar novamente" + }, + "agentsSetupHint": "Abra Configurações > Agentes para gerenciar a instalação.", + "withSetupHint": "{message}\n{hint}", + "blocked": { + "missingConfig": "Não foi possível ler a configuração atual do agente.", + "disabled": "{agent} está desativado nas configurações de agentes. Ative-o antes de conectar.", + "unavailable": "{agent} está indisponível na plataforma atual.", + "sdkMissing": "O SDK de {agent} não está instalado" + }, + "unableReadAgentConfig": "Não foi possível ler a configuração do agente: {message}", + "autoLinkFailedTitle": "Falha no vínculo automático de {agent}", + "preflightCheckFailedDefault": "As verificações de pré-voo falharam. Verifique as configurações de agentes.", + "preflightFailedTitle": "Pré-voo de {agent} falhou", + "autoLinkPreflightFailed": "Pré-voo do vínculo automático falhou: {message}", + "connectFailedTitle": "Falha na conexão de {agent}", + "toolFallbackTitle": "Ferramenta", + "eventErrorTitle": "Erro do agente" + }, + "connectionLifecycle": { + "tasks": { + "connectingTitle": "Conectando a {agent}", + "connectingDescription": "Estabelecendo conexão", + "loadingSelectorsTitle": "Carregando seletores de {agent}", + "loadingSelectorsDescription": "Buscando opções de modo e configuração de sessão" + }, + "errors": { + "connectionFailed": "Falha na conexão" + } + }, + "shared": { + "attachedResources": "Recursos anexados", + "toolCallFailed": "Falha na chamada da ferramenta", + "planUpdated": "Plano atualizado" + }, + "messageThread": { + "emptyTitle": "Ainda não há mensagens", + "emptyDescription": "Inicie uma conversa para ver mensagens aqui" + }, + "chatInput": { + "connecting": "Conectando...", + "agentResponding": "O agente está respondendo...", + "sendMessage": "Envie uma mensagem..." + }, + "messageInput": { + "askAnything": "Pergunte qualquer coisa...", + "removeAttachmentAria": "Remover {name}", + "attachFiles": "Anexar arquivos", + "dropFilesToAttach": "Solte arquivos para anexar", + "loadingSettings": "Carregando configurações...", + "loadingMode": "Carregando modo...", + "cancel": "Cancelar", + "send": "Enviar" + }, + "welcomeInputPanel": { + "agentsSettingsPath": "Configurações > Agentes", + "autoConnectFallback": "Clique para abrir {path} e gerenciar a instalação.", + "autoConnectAppend": "{message}. Clique para abrir {path} e gerenciar a instalação.", + "enableAgentFirstPlaceholder": "Ative pelo menos um agente antes de iniciar uma sessão...", + "askAnythingPlaceholder": "Pergunte qualquer coisa..." + }, + "agentSelector": { + "noEnabledAgents": "Nenhum agente habilitado", + "openAgentsSettings": "Abrir configurações de agentes" + }, + "liveMessageBlock": { + "assistantThinkingAria": "O assistente está pensando" + }, + "agentPlanOverlay": { + "title": "Plano do agente", + "collapsePlanAria": "Recolher plano", + "collapsedSummary": "Plano {completed}/{total}", + "status": { + "completed": "Concluído", + "inProgress": "Em andamento", + "pending": "Pendente", + "unknown": "Desconhecido" + }, + "priority": { + "high": "Alta", + "medium": "Média", + "low": "Baixa", + "unknown": "Desconhecida" + } + }, + "permissionDialog": { + "subtitle": "O agente solicita permissão para continuar este turno.", + "kindFallbackTool": "ferramenta", + "command": "Comando", + "cwd": "Diretório de trabalho: {cwd}", + "filesSummary": "Arquivos: {count}", + "moreFiles": "+{count} arquivos a mais", + "plan": "Plano", + "targetMode": "Modo de destino: {mode}" + }, + "messageBranch": { + "previousBranchAria": "Branch anterior", + "nextBranchAria": "Próxima branch", + "pageOf": "{current} de {total}" + }, + "terminal": { + "title": "Console", + "running": "Em execução" + }, + "reasoning": { + "thinking": "Pensando...", + "thoughtForFewSeconds": "Pensou por alguns segundos", + "thoughtForSeconds": "Pensou por {duration} segundos" + }, + "messageList": { + "attachedResources": "Recursos anexados", + "loading": "Carregando...", + "error": "Erro: {message}", + "emptyConversation": "Nenhuma mensagem nesta conversa." + }, + "liveTurnStats": { + "thinking": "Pensando...", + "streaming": "Transmitindo", + "elapsedMinutes": "{value} min", + "elapsedSeconds": "{value} s", + "toolUseCount": "{count} ferramenta {count, plural, one {use} other {uses}}" + }, + "tool": { + "parameters": "Parâmetros", + "error": "Erro", + "result": "Resultado", + "status": { + "approvalRequested": "Aguardando aprovação", + "approvalResponded": "Respondido", + "inputAvailable": "Em execução", + "inputStreaming": "Pendente", + "outputAvailable": "Concluído", + "outputDenied": "Negado", + "outputError": "Erro" + } + }, + "toolCallBlock": { + "tool": "Ferramenta", + "error": "Erro", + "result": "Resultado" + }, + "contentParts": { + "showingTailOutput": "Mostrando a saída final durante o streaming para melhor desempenho.", + "result": "Resultado", + "unknown": "desconhecido", + "replaceAll": "SUBSTITUIR TUDO", + "filesCount": "Arquivos: {count}", + "update": "atualizar", + "moreFiles": "+{count} arquivos a mais", + "timeoutMs": "Tempo limite: {timeout}ms", + "backgroundTrue": "Segundo plano: true", + "offset": "Deslocamento: {offset}", + "limit": "Limite: {limit}", + "pages": "Páginas: {pages}", + "mode": "Modo: {mode}", + "cell": "Célula: {cell}", + "pathLabel": "Caminho:", + "globLabel": "Padrão glob:", + "typeLabel": "Tipo:", + "outputLabel": "Saída:", + "caseInsensitive": "Sem diferenciar maiúsculas/minúsculas", + "multiline": "Multilinha", + "promptLabel": "Instrução", + "subjectLabel": "Assunto", + "taskLabel": "Tarefa", + "nameLabel": "Nome:", + "field": { + "file": "Arquivo", + "notebook": "Caderno", + "command": "Comando", + "old": "Antigo", + "new": "Novo", + "pattern": "Padrão", + "path": "Caminho", + "query": "Consulta", + "url": "URL:", + "description": "Descrição", + "content": "Conteúdo", + "source": "Fonte", + "prompt": "Instrução", + "subject": "Assunto", + "taskId": "ID da tarefa", + "status": "Situação", + "skill": "Skill", + "args": "Argumentos", + "offset": "Deslocamento", + "limit": "Limite", + "glob": "Padrão glob", + "type": "Tipo", + "output": "Saída", + "replaceAll": "Substituir tudo", + "language": "Idioma", + "timeout": "Tempo limite", + "background": "Segundo plano", + "agentType": "Tipo de agente", + "library": "Biblioteca", + "libraryId": "ID da biblioteca" + }, + "title": { + "edit": "Editar", + "command": "Comando", + "todoWrite": "TodoWrite (atualização de tarefas)", + "read": "Ler", + "write": "Escrever", + "notebookEdit": "NotebookEdit (edição de caderno)", + "editFiles": "Editar ({count} arquivos)", + "editWithTarget": "Editar {target}", + "readWithTarget": "Ler {target}", + "writeWithTarget": "Escrever {target}", + "notebookEditWithTarget": "NotebookEdit ({target})", + "globWithPattern": "Padrão glob {pattern}", + "grepWithPattern": "Padrão grep {pattern}", + "taskCreateWithSubject": "Criar tarefa: {subject}", + "taskUpdateWithStatus": "Atualizar tarefa #{id} -> {status}", + "taskUpdate": "Atualizar tarefa #{id}", + "webFetchWithUrl": "WebFetch ({url})", + "webSearchWithQuery": "Pesquisa web: {query}", + "todosProgress": "Tarefas ({done}/{total})", + "skillWithName": "Skill: {name}", + "genericWithContext": "{tool} ({context})" + } + } + }, + "diffPreview": { + "mode": { + "added": "Adicionado", + "deleted": "Excluído", + "renamed": "Renomeado", + "modified": "Modificado" + }, + "hunkLabel": "Bloco {index}", + "loadingHunk": "Carregando hunk...", + "noDiffData": "Sem dados de diff" + } + } +} diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 58e1ecb..b11b5de 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -1,9 +1,16 @@ { "Language": { "followSystem": "跟随系统", - "english": "English", + "english": "英语", "simplifiedChinese": "简体中文", - "traditionalChinese": "繁體中文" + "traditionalChinese": "繁體中文", + "japanese": "日语", + "korean": "韩语", + "spanish": "西班牙语", + "german": "德语", + "french": "法语", + "portuguese": "葡萄牙语", + "arabic": "阿拉伯语" }, "WelcomePage": { "title": "欢迎使用Codeg", @@ -74,7 +81,7 @@ "resolvedTheme": { "light": "浅色", "dark": "深色", - "unknown": "--" + "unknown": "未知" } }, "SystemSettings": { @@ -193,7 +200,7 @@ "emptySkills": "暂无 Skill,可点击“新建 Skill”。", "newSkillTitle": "新建 Skill", "skillInfo": "Skill 信息", - "skillIdPlaceholder": "skill-id (letters/numbers/-/_/.)", + "skillIdPlaceholder": "Skill ID(例如:my-skill)", "skillsDirectoryWithPath": "Skills目录:{path}", "skillsDirectoryNeedId": "Skills目录:请输入 Skill ID 以生成完整路径", "markdownContent": "Markdown 内容", @@ -318,20 +325,20 @@ "empty": "暂无 MCP 结果。", "loadingDetail": "加载市场详情...", "detailLoadFailed": "加载详情失败:{message}", - "owner": "Owner: {owner}", - "namespace": "Namespace: {namespace}", + "owner": "所有者:{owner}", + "namespace": "命名空间:{namespace}", "defaultInstallProtocol": "默认安装协议", "currentOptionParameterCount": "当前选项参数数:{count}", "installConfigDescription": "安装配置(JSON,可修改后安装;修改后将覆盖协议/参数表单)", "selectLeftToView": "请选择左侧市场 MCP 查看详情。" }, "badges": { - "verified": "Verified", - "remote": "Remote", - "hasHomepage": "Has Homepage", - "uses": "{count} uses", - "deployed": "Deployed", - "notDeployed": "Not Deployed" + "verified": "已验证", + "remote": "远程", + "hasHomepage": "有主页", + "uses": "{count} 次使用", + "deployed": "已部署", + "notDeployed": "未部署" }, "selectLeftMcp": "请选择左侧 MCP。" }, @@ -625,8 +632,8 @@ "prompting": "响应中...", "error": "连接异常", "disconnected": "未连接", - "tooltip": "{agent} - {status}", - "tooltipError": "{agent} - {error}" + "tooltip": "{agent}:{status}", + "tooltipError": "{agent}:{error}" }, "tasks": { "title": "任务" @@ -653,10 +660,10 @@ }, "auxPanel": { "tabs": { - "diff": "Diff", - "files": "Files", - "changes": "Changes", - "commits": "Commits" + "diff": "差异", + "files": "文件", + "changes": "变更", + "commits": "提交" } }, "windowControls": { @@ -712,7 +719,7 @@ "fileCount": "{count} 个文件", "openFileOrDiff": "从右侧面板打开文件或差异", "disk": "磁盘", - "head": "HEAD", + "head": "HEAD(当前提交)", "unsaved": "未保存", "workingTree": "工作区", "loading": "加载中...", @@ -817,7 +824,7 @@ "addToVcs": "添加到 VCS" }, "aria": { - "selectFile": "{action} {path}", + "selectFile": "{action}:{path}", "unselectAllFiles": "取消选择全部文件", "selectAllFiles": "选择全部文件", "unselectTracked": "取消选择已跟踪改动", @@ -833,13 +840,13 @@ "commitMessage": "提交消息", "commitMessagePlaceholder": "输入提交信息...", "commitButton": "提交 ({count})", - "head": "HEAD", - "workingTree": "Working Tree", + "head": "HEAD(当前提交)", + "workingTree": "工作区", "clickFileToDiff": "点击文件名查看差异", "loadingDiff": "加载差异..." }, "gitLogTab": { - "filesTitle": "Files", + "filesTitle": "文件", "expandAllFiles": "展开全部文件", "collapseAllFiles": "折叠全部文件", "workspace": "工作区", @@ -953,7 +960,7 @@ "addToVcs": "添加到 VCS" }, "aria": { - "selectPath": "{action} {path}" + "selectPath": "{action}:{path}" }, "toasts": { "openDirectoryFailed": "打开目录失败", @@ -978,8 +985,8 @@ "renameDirectory": "重命名目录", "renameFile": "重命名文件", "description": "输入新的名称(仅名称,不含路径)。", - "placeholderDirectory": "new-folder-name", - "placeholderFile": "new-file-name.ext" + "placeholderDirectory": "新建文件夹名称", + "placeholderFile": "新建文件名称.ext" }, "directoryDialog": { "descriptionAdd": "选择目录 {path} 下要添加到 VCS 的文件。", @@ -1059,13 +1066,13 @@ "noDiffOutput": "无差异输出。", "diffTitleWorkspace": "Diff · 工作区", "diffDescriptionWorkingTree": "工作区变更(HEAD)", - "diffTitleFile": "Diff · {name}", + "diffTitleFile": "差异 · {name}", "compareTitleFile": "比较 · {name}", "compareTitleBranch": "比较 · {branch}", "compareDescriptionPath": "{path} · 与 {branch} 比较", "compareDescriptionBranch": "与 {branch} 比较", - "diffTitleCommitFile": "Diff · {name} @ {hash}", - "diffTitleCommit": "Diff · {hash}", + "diffTitleCommitFile": "差异 · {name} @ {hash}", + "diffTitleCommit": "差异 · {hash}", "diffDescriptionCommitPath": "{path} · 提交 {commit}", "diffDescriptionCommit": "提交 {commit}", "diffTitleConflictFile": "冲突 · {name}", @@ -1078,7 +1085,7 @@ "retry": "重试" }, "agentsSetupHint": "点击前往设置 > Agents 管理安装。", - "withSetupHint": "{message}\n{hint}", + "withSetupHint": "{message}\n提示:{hint}", "blocked": { "missingConfig": "无法读取当前 Agent 配置。", "disabled": "{agent} 已在 Agents 管理中禁用,请先启用后再连接。", @@ -1195,7 +1202,7 @@ "streaming": "生成中", "elapsedMinutes": "{value} 分钟", "elapsedSeconds": "{value} 秒", - "toolUseCount": "{count} 次工具调用" + "toolUseCount": "{count} 个工具 {count, plural, one {use} other {uses}}" }, "tool": { "parameters": "参数", @@ -1243,14 +1250,14 @@ "nameLabel": "名称:", "field": { "file": "文件", - "notebook": "Notebook", + "notebook": "笔记本", "command": "命令", "old": "旧内容", "new": "新内容", "pattern": "模式", "path": "路径", "query": "查询", - "url": "URL", + "url": "URL地址", "description": "描述", "content": "内容", "source": "源内容", diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index 3917f21..60a572c 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -1,9 +1,16 @@ { "Language": { "followSystem": "跟隨系統", - "english": "English", - "simplifiedChinese": "简体中文", - "traditionalChinese": "繁體中文" + "english": "英文", + "simplifiedChinese": "簡體中文", + "traditionalChinese": "繁體中文", + "japanese": "日語", + "korean": "韓語", + "spanish": "西班牙語", + "german": "德語", + "french": "法語", + "portuguese": "葡萄牙語", + "arabic": "阿拉伯語" }, "WelcomePage": { "title": "歡迎使用Codeg", @@ -74,7 +81,7 @@ "resolvedTheme": { "light": "淺色", "dark": "深色", - "unknown": "--" + "unknown": "未知" } }, "SystemSettings": { @@ -193,7 +200,7 @@ "emptySkills": "暫無 Skill,可點擊「新增 Skill」。", "newSkillTitle": "新增 Skill", "skillInfo": "Skill 資訊", - "skillIdPlaceholder": "skill-id (letters/numbers/-/_/.)", + "skillIdPlaceholder": "Skill ID(例如:my-skill)", "skillsDirectoryWithPath": "Skills目錄:{path}", "skillsDirectoryNeedId": "Skills目錄:請輸入 Skill ID 以產生完整路徑", "markdownContent": "Markdown 內容", @@ -318,20 +325,20 @@ "empty": "暫無 MCP 結果。", "loadingDetail": "載入市場詳情...", "detailLoadFailed": "載入詳情失敗:{message}", - "owner": "Owner: {owner}", - "namespace": "Namespace: {namespace}", + "owner": "擁有者:{owner}", + "namespace": "命名空間:{namespace}", "defaultInstallProtocol": "預設安裝協議", "currentOptionParameterCount": "目前選項參數數:{count}", "installConfigDescription": "安裝配置(JSON,可修改後安裝;修改後將覆蓋協議/參數表單)", "selectLeftToView": "請選擇左側市場 MCP 查看詳情。" }, "badges": { - "verified": "Verified", - "remote": "Remote", - "hasHomepage": "Has Homepage", - "uses": "{count} uses", - "deployed": "Deployed", - "notDeployed": "Not Deployed" + "verified": "已驗證", + "remote": "遠端", + "hasHomepage": "有首頁", + "uses": "{count} 次使用", + "deployed": "已部署", + "notDeployed": "未部署" }, "selectLeftMcp": "請選擇左側 MCP。" }, @@ -625,8 +632,8 @@ "prompting": "回應中...", "error": "連線異常", "disconnected": "未連線", - "tooltip": "{agent} - {status}", - "tooltipError": "{agent} - {error}" + "tooltip": "{agent}:{status}", + "tooltipError": "{agent}:{error}" }, "tasks": { "title": "任務" @@ -653,10 +660,10 @@ }, "auxPanel": { "tabs": { - "diff": "Diff", - "files": "Files", - "changes": "Changes", - "commits": "Commits" + "diff": "差異", + "files": "檔案", + "changes": "變更", + "commits": "提交" } }, "windowControls": { @@ -712,7 +719,7 @@ "fileCount": "{count} 個檔案", "openFileOrDiff": "從右側面板打開檔案或差異", "disk": "磁碟", - "head": "HEAD", + "head": "HEAD(目前提交)", "unsaved": "未儲存", "workingTree": "工作區", "loading": "載入中...", @@ -817,7 +824,7 @@ "addToVcs": "加入到 VCS" }, "aria": { - "selectFile": "{action} {path}", + "selectFile": "{action}:{path}", "unselectAllFiles": "取消選擇全部檔案", "selectAllFiles": "選擇全部檔案", "unselectTracked": "取消選擇已追蹤變更", @@ -833,13 +840,13 @@ "commitMessage": "提交訊息", "commitMessagePlaceholder": "輸入提交訊息...", "commitButton": "提交 ({count})", - "head": "HEAD", - "workingTree": "Working Tree", + "head": "HEAD(目前提交)", + "workingTree": "工作目錄", "clickFileToDiff": "點擊檔案名稱查看差異", "loadingDiff": "載入差異中..." }, "gitLogTab": { - "filesTitle": "Files", + "filesTitle": "檔案", "expandAllFiles": "展開全部檔案", "collapseAllFiles": "折疊全部檔案", "workspace": "工作區", @@ -953,7 +960,7 @@ "addToVcs": "加入到 VCS" }, "aria": { - "selectPath": "{action} {path}" + "selectPath": "{action}:{path}" }, "toasts": { "openDirectoryFailed": "開啟目錄失敗", @@ -978,8 +985,8 @@ "renameDirectory": "重新命名目錄", "renameFile": "重新命名檔案", "description": "輸入新的名稱(僅名稱,不含路徑)。", - "placeholderDirectory": "new-folder-name", - "placeholderFile": "new-file-name.ext" + "placeholderDirectory": "新資料夾名稱", + "placeholderFile": "新檔案名稱.ext" }, "directoryDialog": { "descriptionAdd": "選擇目錄 {path} 下要加入到 VCS 的檔案。", @@ -1059,13 +1066,13 @@ "noDiffOutput": "無差異輸出。", "diffTitleWorkspace": "Diff · 工作區", "diffDescriptionWorkingTree": "工作區變更(HEAD)", - "diffTitleFile": "Diff · {name}", + "diffTitleFile": "差異 · {name}", "compareTitleFile": "比較 · {name}", "compareTitleBranch": "比較 · {branch}", "compareDescriptionPath": "{path} · 與 {branch} 比較", "compareDescriptionBranch": "與 {branch} 比較", - "diffTitleCommitFile": "Diff · {name} @ {hash}", - "diffTitleCommit": "Diff · {hash}", + "diffTitleCommitFile": "差異 · {name} @ {hash}", + "diffTitleCommit": "差異 · {hash}", "diffDescriptionCommitPath": "{path} · 提交 {commit}", "diffDescriptionCommit": "提交 {commit}", "diffTitleConflictFile": "衝突 · {name}", @@ -1078,7 +1085,7 @@ "retry": "重試" }, "agentsSetupHint": "點擊前往設定 > Agents 管理安裝。", - "withSetupHint": "{message}\n{hint}", + "withSetupHint": "{message}\n提示:{hint}", "blocked": { "missingConfig": "無法讀取目前 Agent 設定。", "disabled": "{agent} 已在 Agents 管理中停用,請先啟用後再連線。", @@ -1195,7 +1202,7 @@ "streaming": "生成中", "elapsedMinutes": "{value} 分鐘", "elapsedSeconds": "{value} 秒", - "toolUseCount": "{count} 次工具呼叫" + "toolUseCount": "{count} 个工具 {count, plural, one {use} other {uses}}" }, "tool": { "parameters": "參數", @@ -1243,14 +1250,14 @@ "nameLabel": "名稱:", "field": { "file": "檔案", - "notebook": "Notebook", + "notebook": "筆記本", "command": "命令", "old": "舊內容", "new": "新內容", "pattern": "模式", "path": "路徑", "query": "查詢", - "url": "URL", + "url": "URL 位址", "description": "描述", "content": "內容", "source": "來源內容", diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 839726e..4162da6 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -1,11 +1,32 @@ import type { AppLocale, SystemLanguageSettings } from "@/lib/types" -export const APP_LOCALES: readonly AppLocale[] = ["en", "zh_cn", "zh_tw"] +export const APP_LOCALES: readonly AppLocale[] = [ + "en", + "zh_cn", + "zh_tw", + "ja", + "ko", + "es", + "de", + "fr", + "pt", + "ar", +] const FALLBACK_APP_LOCALE: AppLocale = "en" export const LANGUAGE_SETTINGS_STORAGE_KEY = "codeg.system_language_settings" export const LANGUAGE_MODE_COOKIE_KEY = "codeg.language_mode" export const LANGUAGE_COOKIE_KEY = "codeg.locale" -export type IntlLocale = "en" | "zh-CN" | "zh-TW" +export type IntlLocale = + | "en" + | "zh-CN" + | "zh-TW" + | "ja" + | "ko" + | "es" + | "de" + | "fr" + | "pt" + | "ar" export const DEFAULT_LANGUAGE_SETTINGS: SystemLanguageSettings = { mode: "system", @@ -16,12 +37,26 @@ export const APP_LOCALE_TO_INTL_LOCALE: Record = { en: "en", zh_cn: "zh-CN", zh_tw: "zh-TW", + ja: "ja", + ko: "ko", + es: "es", + de: "de", + fr: "fr", + pt: "pt", + ar: "ar", } export const INTL_LOCALE_TO_APP_LOCALE: Record = { en: "en", "zh-CN": "zh_cn", "zh-TW": "zh_tw", + ja: "ja", + ko: "ko", + es: "es", + de: "de", + fr: "fr", + pt: "pt", + ar: "ar", } export function isAppLocale(value: unknown): value is AppLocale { @@ -29,7 +64,18 @@ export function isAppLocale(value: unknown): value is AppLocale { } export function isIntlLocale(value: unknown): value is IntlLocale { - return value === "en" || value === "zh-CN" || value === "zh-TW" + return ( + value === "en" || + value === "zh-CN" || + value === "zh-TW" || + value === "ja" || + value === "ko" || + value === "es" || + value === "de" || + value === "fr" || + value === "pt" || + value === "ar" + ) } export function toIntlLocale(locale: AppLocale): IntlLocale { @@ -70,6 +116,13 @@ export function mapLocaleTagToAppLocale(localeTag: string): AppLocale | null { } if (normalized.startsWith("zh")) return "zh_cn" + if (normalized.startsWith("ja")) return "ja" + if (normalized.startsWith("ko")) return "ko" + if (normalized.startsWith("es")) return "es" + if (normalized.startsWith("de")) return "de" + if (normalized.startsWith("fr")) return "fr" + if (normalized.startsWith("pt")) return "pt" + if (normalized.startsWith("ar")) return "ar" return null } diff --git a/src/lib/types.ts b/src/lib/types.ts index c3b1f86..15e4d7e 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -554,7 +554,17 @@ export interface SystemProxySettings { proxy_url: string | null } -export type AppLocale = "en" | "zh_cn" | "zh_tw" +export type AppLocale = + | "en" + | "zh_cn" + | "zh_tw" + | "ja" + | "ko" + | "es" + | "de" + | "fr" + | "pt" + | "ar" export type LanguageMode = "system" | "manual" export interface SystemLanguageSettings {