Documentation
¶
Overview ¶
Package i18n holds the CLI's translatable strings and a small detection helper.
Architecture: a single Messages struct of exported string fields (plain text or fmt format strings, suffix *Fmt flags the latter). Each language declares one Messages value in its own file. Call sites read i18n.M.SomeField; for parameterised messages they pass it to fmt.Sprintf.
Adding a field requires updating every messages_*.go file — drift is caught at test time by TestCatalogsComplete via reflection, so a missing translation fails CI instead of surfacing as a blank line at runtime.
Scope (v1): CLI surface only — welcome, init wizard, chat REPL banner, usage, user-facing CLI errors. System prompts, internal error wrappers, and agent runtime telemetry stay English so model behavior and developer logs are language-stable.
Language resolution uses a chain-of-responsibility:
- Precompiled resolver — compiled-in Messages catalogs (30+ languages)
- Live resolver — runtime LLM translation for all other languages
- English fallback — always works
New languages register via registerLanguage() in their init().
Package i18n provides runtime on-demand translation via the configured LLM provider. This is the second link in the translation chain — it catches any language that doesn't have a compiled catalog.
Package i18n provides translation resolution with a chain-of-responsibility pattern: compiled catalogs first, then runtime LLM translation, falling back to English. This lets OK reach every user in their own language.
Index ¶
- Variables
- func CompiledTags() []string
- func DetectLanguage(override string) string
- func EnglishField(key string) string
- func KeyExists(key string) bool
- func NeedsTranslation(catalog *Messages, key string) bool
- func SetResolverChain(chain TranslationResolver)
- func T(key string, args ...any) string
- func TFunc(key string) func(...any) string
- func TranslationProgress(catalog *Messages) float64
- type LiveProvider
- type LiveResolver
- type Messages
- type PrecompiledResolver
- type ResolverChain
- type TranslationResolver
Constants ¶
This section is empty.
Variables ¶
var Arabic = Messages{
WelcomeTitleFmt: "مرحبًا بك في %s",
NoConfigYet: "لم يتم العثور على تكوين بعد — دعنا نضبطه.",
StartingChatFmt: "جارٍ بدء %s…",
SetKeyHint: "اضبط مفتاح API الخاص بك، ثم قم بتشغيل `ok chat`.",
ConfigLabel: "التكوين",
ModelsLabel: "النماذج",
ConfigNotFound: "غير موجود — استخدام الإعدادات الافتراضية المضمنة",
ConfigErrorFmt: "%s — خطأ: %v",
NoKey: "لا يوجد مفتاح",
Ready: "جاهز",
GetStarted: "ابدأ",
StepScaffold: "هيكل ok.toml",
StepSetKey: "تعيين مفتاح API",
InitHint: "ذاكرة المشروع (AGENTS.md) تُنشأ داخل الجلسة: قم بتشغيل `ok chat`، ثم `/init` — يقوم النموذج بتحليل قاعدة البيانات وكتابتها. للتكوين، استخدم `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… أو أضف إلى .env",
StepChatDesc: "جلسة تفاعلية",
StepRunDesc: "مهمة لمرة واحدة",
HelpFooter: "ok help · جميع الأوامر",
ChatTip: "يتم الاحتفاظ بالسياق عبر الجولات. اكتب 'exit' أو Ctrl-D للخروج.",
TurnCancelled: "تم الإلغاء — العودة إلى المطالبة",
NoSessionToResume: "لا توجد جلسة محفوظة لاستئنافها — ابدأ جلسة جديدة باستخدام `ok chat`",
ResumeRequiresTTY: "--resume يحتاج إلى طرفية تفاعلية؛ استخدم --continue لأحدث جلسة",
PickSessionLabel: "استئناف أي جلسة؟",
ChatStatusThinkingFmt: "%s يفكر… (%ds · Esc للإلغاء)",
ChatStatusIdle: "Tab يبدّل الخطة · Enter للإرسال · Ctrl+F للبحث في السجل · PgUp/PgDn للتمرير · Ctrl-D للخروج",
ChatStatusPlanApproval: "Enter/y للموافقة والتنفيذ · n/Esc لمواصلة التخطيط · PgUp/PgDn للتمرير",
PlanApprovalPrompt: "الخطة جاهزة أعلاه — Enter/y للموافقة والتنفيذ، n/Esc لمواصلة التخطيط",
ChatStatusToolApproval: "y للموافقة مرة واحدة · a للسماح لهذه الجلسة · n للرفض · Ctrl-C لإلغاء الدور",
AskTypeSomething: "اكتب شيئًا آخر",
AskTypingHint: "اكتب أدناه، Enter للتأكيد",
AskChatInstead: "لا شيء — فقط دردشة",
ChatStatusQuestion: "↑/↓ للتحريك · رقم للاختيار · مسافة للاختيار المتعدد · Enter للتأكيد · ←/→ للتبديل · Esc للإلغاء",
ToolApprovalPromptFmt: "السماح بـ %s%s؟ — [y] مرة واحدة · [a] هذه الجلسة · [n] لا",
SlashCompactDone: "تم ضغط الجلسة — استُبدل الجزء الأوسط القديم بملخص، مع الاحتفاظ بالدورات الأخيرة",
SlashCompactFailed: "فشل ضغط الجلسة",
SlashNewDone: "بدأت جلسة جديدة — حُفظ النص السابق",
SlashNewFailed: "تعذر بدء جلسة جديدة",
SlashUnavailable: "الأمر غير متاح في هذا الإصدار",
SlashUnknown: "أمر غير معروف",
SlashTodoCleared: "تم إلغاء قائمة المهام",
SlashHelp: "الأوامر: /audit · /search · /compact · /new · /todo · /model (تبديل النموذج) · /mcp · /skill · /hooks · /memory · /help · بالإضافة إلى المهارات (/init، /explore، …)",
SlashPromptEmpty: "لم يُرجع موجه MCP أي محتوى للإرسال",
SlashMCPNone: "لا توجد خوادم MCP مكوّنة — أضف مدخلاً [[plugins]] في ok.toml",
CompHintSlash: "↑/↓ تحريك · Tab/Enter اختيار · Esc إغلاق",
CompHintFile: "↑/↓ تحريك · Tab/Enter فتح مجلد أو اختيار ملف · Esc إغلاق",
CmdNew: "إنشاء جلسة جديدة",
CmdCompact: "ضغط السياق",
CmdModel: "تبديل النموذج",
CmdMemory: "عرض ملفات الذاكرة",
CmdMcp: "خوادم MCP",
CmdHooks: "إدارة الخطافات",
CmdSkill: "إدارة المهارات",
CmdAudit: "التحقق من سجل التدقيق",
CmdSearch: "البحث في السجل",
CmdHelp: "سرد الأوامر",
CmdTodo: "إغلاق قائمة المهام",
ArgSkillShow: "عرض محتوى مهارة",
ArgSkillNew: "إنشاء مهارة جديدة",
ArgSkillPaths: "عرض مسارات الاكتشاف",
ArgMcpAdd: "توصيل خادم",
ArgMcpRemove: "فصل الخادم",
ArgMcpConnected: "متصل",
ArgHooksTrust: "وثق في خطافات هذا المشروع",
ArgModelCurrent: "الحالي",
ListModelsHeaderFmt: "النماذج (النشط: %s)",
ListModelsHint: "بدّل باستخدام مبدّل النماذج، أو اكتب /model <provider/model>",
ListMemoryHeader: "ملفات الذاكرة",
ListMemoryNone: "الذاكرة: لا شيء — أضف باستخدام \\\"#<note>\\\" أو شغّل /init لإنشاء AGENTS.md",
ListSkillsHeaderFmt: "المهارات (%d)",
ListSkillsNone: "المهارات: لا شيء محدد — استخدم أمرًا مدمجًا مثل /init، أو أنشئ واحدًا باستخدام install_skill",
ListHooksHeaderFmt: "الخطافات (%d نشط)",
ListHooksNone: "الخطافات: لا شيء نشط — قم بالتكوين في .ok/settings.json (المشروع، بعد الثقة) أو ~/.ok/settings.json (عام)",
ListMcpHeader: "خوادم MCP",
ListMcpNone: "MCP: لا توجد خوادم متصلة — أضف واحدًا في ok.toml ([[plugins]]) أو في ملف .mcp.json للمشروع",
SelectProvidersLabel: "اختر المزوّدين لتفعيلهم",
EnterAPIKeysHeader: "أدخل مفاتيح API (اضغط Enter للتخطي والتعيين لاحقًا في .env):",
MissingKeyIntro: "ok.toml جاهز — فقط مفتاح API واحد يفصلك.",
WroteFileFmt: "تم كتابة %s",
SetupComplete: "اكتمل الإعداد.",
SetupCancelled: "تم إلغاء الإعداد.",
TryHintFmt: "حاول: %s",
NextHint: "التالي: قم بتعيين مفتاح API الخاص بك (export DEEPSEEK_API_KEY=... أو أضفه إلى .env)، ثم قم بتشغيل `ok run \\\"مهمتك\\\"`.",
ConfirmReconfigureFmt: "%s موجود بالفعل. هل تريد إعادة التهيئة والكتابة فوقه؟",
KeepingExisting: "جارٍ الاحتفاظ بالتكوين الحالي.",
NotOverwritingFmt: "%s موجود بالفعل؛ لم يتم الكتابة فوقه",
UnknownCommandFmt: "أمر غير معروف %q",
UsageRunHint: "الاستخدام: ok run [--model NAME] <task>",
ErrorPrefix: "خطأ:",
WriteConfigErr: "كتابة التكوين:",
WriteEnvErr: "كتابة .env:",
SelectOneHint: "(↑/↓ · Enter · q للإلغاء)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Arabic is the العربية catalog (auto-translated).
var Bengali = Messages{
WelcomeTitleFmt: "%s-এ স্বাগতম",
NoConfigYet: "এখনো কোনো কনফিগারেশন পাওয়া যায়নি — চলুন সেটআপ করি।",
StartingChatFmt: "%s শুরু হচ্ছে…",
SetKeyHint: "আপনার API কী সেট করুন, তারপর `ok chat` চালান।",
ConfigLabel: "কনফিগ",
ModelsLabel: "মডেল",
ConfigNotFound: "পাওয়া যায়নি — বিল্ট-ইন ডিফল্ট ব্যবহার করা হচ্ছে",
ConfigErrorFmt: "%s — ত্রুটি: %v",
NoKey: "কী নেই",
Ready: "প্রস্তুত",
GetStarted: "শুরু করুন",
StepScaffold: "ok.toml স্ক্যাফোল্ড",
StepSetKey: "API কী সেট করুন",
InitHint: "প্রকল্প মেমরি (AGENTS.md) সেশনের মধ্যে তৈরি হয়: `ok chat` চালান, তারপর `/init` — মডেল কোডবেস বিশ্লেষণ করে এটি লিখে। কনফিগারেশনের জন্য `ok setup` ব্যবহার করুন।",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… অথবা .env-এ যোগ করুন",
StepChatDesc: "ইন্টারেক্টিভ সেশন",
StepRunDesc: "এক-শট কাজ",
HelpFooter: "ok সাহায্য · সব কমান্ড",
ChatTip: "প্রসঙ্গ টার্ন জুড়ে রাখা হয়। প্রস্থান করতে 'exit' বা Ctrl-D টাইপ করুন।",
TurnCancelled: "বাতিল — প্রম্পটে ফিরে যান",
NoSessionToResume: "পুনরায় শুরু করার জন্য কোনো সংরক্ষিত সেশন নেই — `ok chat` দিয়ে একটি নতুন শুরু করুন",
ResumeRequiresTTY: "--resume-এর জন্য একটি ইন্টারেক্টিভ টার্মিনাল প্রয়োজন; সবচেয়ে সাম্প্রতিক সেশনের জন্য --continue ব্যবহার করুন",
PickSessionLabel: "কোন সেশন পুনরায় শুরু করবেন?",
ChatStatusThinkingFmt: "%s চিন্তা করছে… (%ds · Esc বাতিল করে)",
ChatStatusIdle: "Tab পরিকল্পনা টগল করে · Enter পাঠায় · Ctrl+F ইতিহাস অনুসন্ধান · PgUp/PgDn স্ক্রোল · Ctrl-D প্রস্থান",
ChatStatusPlanApproval: "Enter/y অনুমোদন ও সম্পাদন করে · n/Esc পরিকল্পনা চালিয়ে যায় · PgUp/PgDn স্ক্রোল",
PlanApprovalPrompt: "পরিকল্পনা উপরে প্রস্তুত — Enter/y অনুমোদন ও সম্পাদন করতে, n/Esc পরিকল্পনা চালিয়ে যেতে",
ChatStatusToolApproval: "y একবার অনুমোদন · a এই সেশন অনুমোদন · n অস্বীকার · Ctrl-C পালা বাতিল",
AskTypeSomething: "অন্য কিছু টাইপ করুন",
AskTypingHint: "নিচে টাইপ করুন, Enter নিশ্চিত করতে",
AskChatInstead: "কিছুই না — শুধু চ্যাট করুন",
ChatStatusQuestion: "↑/↓ সরান · সংখ্যা নির্বাচন · space একাধিক · Enter নিশ্চিত · ←/→ পরিবর্তন · Esc বাতিল",
ToolApprovalPromptFmt: "%s%s অনুমোদন করবেন? — [y] একবার · [a] এই সেশন · [n] না",
SlashCompactDone: "সেশন সংক্ষিপ্ত করা হয়েছে — পুরনো মাঝখানের অংশ সারাংশ দ্বারা প্রতিস্থাপিত, সাম্প্রতিক পালা রাখা হয়েছে",
SlashCompactFailed: "সংক্ষিপ্তকরণ ব্যর্থ হয়েছে",
SlashNewDone: "নতুন সেশন শুরু হয়েছে — পূর্ববর্তী ট্রান্সক্রিপ্ট সংরক্ষিত",
SlashNewFailed: "নতুন সেশন শুরু করা যায়নি",
SlashUnavailable: "এই বিল্ডে কমান্ড উপলব্ধ নয়",
SlashUnknown: "অজানা কমান্ড",
SlashTodoCleared: "কাজের তালিকা বাতিল করা হয়েছে",
SlashHelp: "কমান্ড: /audit · /search · /compact · /new · /todo · /model (মডেল পরিবর্তন) · /mcp · /skill · /hooks · /memory · /help · প্লাস দক্ষতা (/init, /explore, …)",
SlashPromptEmpty: "MCP প্রম্পট পাঠানোর জন্য কোনো বিষয়বস্তু ফেরত দেয়নি",
SlashMCPNone: "কোনো MCP সার্ভার কনফিগার করা নেই — ok.toml-এ একটি [[plugins]] এন্ট্রি যোগ করুন",
CompHintSlash: "↑/↓ সরান · Tab/Enter নির্বাচন · Esc বন্ধ করুন",
CompHintFile: "↑/↓ সরান · Tab/Enter ফোল্ডার খুলুন বা ফাইল নির্বাচন করুন · Esc বন্ধ করুন",
CmdNew: "একটি নতুন সেশন শুরু করুন",
CmdCompact: "কনটেক্সট কমপ্যাক্ট করুন",
CmdModel: "মডেল পরিবর্তন করুন",
CmdMemory: "মেমোরি ফাইল দেখান",
CmdMcp: "MCP সার্ভার",
CmdHooks: "হুক পরিচালনা করুন",
CmdSkill: "দক্ষতা পরিচালনা করুন",
CmdAudit: "অডিট ট্রেইল যাচাই করুন",
CmdSearch: "ইতিহাস অনুসন্ধান করুন",
CmdHelp: "কমান্ড তালিকা",
CmdTodo: "টাস্ক তালিকা বাতিল করুন",
ArgSkillShow: "একটি দক্ষতার বডি দেখান",
ArgSkillNew: "একটি নতুন দক্ষতা তৈরি করুন",
ArgSkillPaths: "আবিষ্কার পথ দেখান",
ArgMcpAdd: "একটি সার্ভার সংযোগ করুন",
ArgMcpRemove: "একটি সার্ভার সংযোগ বিচ্ছিন্ন করুন",
ArgMcpConnected: "সংযুক্ত",
ArgHooksTrust: "এই প্রকল্পের হুক বিশ্বাস করুন",
ArgModelCurrent: "বর্তমান",
ListModelsHeaderFmt: "মডেল (সক্রিয়: %s)",
ListModelsHint: "মডেল সুইচার দিয়ে পরিবর্তন করুন, অথবা /model <প্রদানকারী/মডেল> টাইপ করুন",
ListMemoryHeader: "মেমরি ফাইল",
ListMemoryNone: "মেমরি: কিছুই নেই — \\\"#<নোট>\\\" দিয়ে যোগ করুন অথবা AGENTS.md তৈরি করতে /init চালান",
ListSkillsHeaderFmt: "দক্ষতা (%d)",
ListSkillsNone: "দক্ষতা: কিছুই সংজ্ঞায়িত নয় — /init এর মতো বিল্ট-ইন ব্যবহার করুন, অথবা install_skill দিয়ে একটি তৈরি করুন",
ListHooksHeaderFmt: "হুক (%d সক্রিয়)",
ListHooksNone: "হুক: কিছুই সক্রিয় নয় — .ok/settings.json (প্রকল্প, বিশ্বাসের পরে) অথবা ~/.ok/settings.json (গ্লোবাল) এ কনফিগার করুন",
ListMcpHeader: "এমসিপি সার্ভার",
ListMcpNone: "এমসিপি: কোনো সার্ভার সংযুক্ত নয় — ok.toml ([[plugins]]) অথবা একটি প্রকল্পের .mcp.json এ একটি যোগ করুন",
SelectProvidersLabel: "সক্রিয় করার জন্য প্রদানকারী নির্বাচন করুন",
EnterAPIKeysHeader: "এপিআই কী লিখুন (এন্টার চাপলে বাদ দিন এবং পরে .env এ সেট করুন):",
MissingKeyIntro: "ok.toml প্রস্তুত — শুধু একটি এপিআই কী প্রয়োজন।",
WroteFileFmt: "%s লেখা হয়েছে",
SetupComplete: "সেটআপ সম্পূর্ণ।",
SetupCancelled: "সেটআপ বাতিল করা হয়েছে।",
TryHintFmt: "চেষ্টা করুন: %s",
NextHint: "পরবর্তী: আপনার API কী সেট করুন (export DEEPSEEK_API_KEY=... অথবা .env-তে যোগ করুন), তারপর `ok run \\\"your task\\\"` চালান।",
ConfirmReconfigureFmt: "%s ইতিমধ্যে বিদ্যমান। পুনরায় কনফিগার করে ওভাররাইট করবেন?",
KeepingExisting: "বিদ্যমান কনফিগারেশন রাখা হচ্ছে।",
NotOverwritingFmt: "%s ইতিমধ্যে বিদ্যমান; ওভাররাইট করা হচ্ছে না",
UnknownCommandFmt: "অজানা কমান্ড %q",
UsageRunHint: "ব্যবহার: ok run [--model NAME] <task>",
ErrorPrefix: "ত্রুটি:",
WriteConfigErr: "কনফিগার লেখা:",
WriteEnvErr: ".env লেখা:",
SelectOneHint: "(↑/↓ · Enter · বাতিল করতে q)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Bengali is the বাংলা catalog (auto-translated).
var Chinese = Messages{
Subtitle: "配置 + 插件驱动的编码代理",
WelcomeTitleFmt: "欢迎使用 %s",
NoConfigYet: "尚未找到配置 — 让我们来设置它。",
StartingChatFmt: "正在启动 %s…",
SetKeyHint: "设置您的 API 密钥,然后运行 `ok chat`。",
ConfigLabel: "配置",
ModelsLabel: "模型",
ConfigNotFound: "未找到 — 使用内置默认值",
ConfigErrorFmt: "%s — 错误:%v",
NoKey: "无密钥",
Ready: "就绪",
GetStarted: "开始使用",
StepScaffold: "搭建 ok.toml",
StepSetKey: "设置 API 密钥",
InitHint: "项目记忆(AGENTS.md)在会话中生成:运行 `ok chat`,然后 `/init` — 模型分析代码库并写入。配置请使用 `ok setup`。",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… 或添加到 .env",
StepChatDesc: "交互式会话",
StepRunDesc: "一次性任务",
HelpFooter: "ok help · 所有命令",
ChatTip: "上下文在轮次之间保持。输入 'exit' 或 Ctrl-D 退出。",
TurnCancelled: "已取消 — 返回提示",
NoSessionToResume: "没有可恢复的会话 — 使用 `ok chat` 开始一个新会话",
ResumeRequiresTTY: "--resume 需要交互式终端;传递 --continue 以恢复最近的会话",
PickSessionLabel: "恢复哪个会话?",
ChatStatusThinkingFmt: "%s 思考中… (%ds · Esc 取消)",
ChatStatusIdle: "Tab 切换计划 · Enter 发送 · Ctrl+F 搜索历史 · PgUp/PgDn 滚动 · Ctrl-D 退出",
ChatStatusPlanApproval: "Enter/y 批准并执行 · n/Esc 继续规划 · PgUp/PgDn 滚动",
PlanApprovalPrompt: "上方计划已就绪 — Enter/y 批准并执行,n/Esc 继续规划",
ChatStatusToolApproval: "y 批准一次 · a 允许本次会话 · n 拒绝 · Ctrl-C 取消本轮",
AskTypeSomething: "输入其他内容",
AskTypingHint: "在下方输入,Enter 确认",
AskChatInstead: "无 — 仅聊天",
ChatStatusQuestion: "↑/↓ 移动 · 数字选择 · 空格多选 · Enter 确认 · ←/→ 切换 · Esc 取消",
ToolApprovalPromptFmt: "允许 %s%s? — [y] 一次 · [a] 本次会话 · [n] 否",
SlashCompactDone: "会话已压缩 — 较早的中间部分被摘要替换,最近的轮次保留",
SlashCompactFailed: "压缩失败",
SlashNewDone: "新会话已开始 — 之前的对话记录已保存",
SlashNewFailed: "无法开始新会话",
SlashUnavailable: "此版本中命令不可用",
SlashUnknown: "未知命令",
SlashTodoCleared: "任务列表已清除",
SlashHelp: "命令:/audit · /search · /compact · /new · /todo · /model(切换模型)· /mcp · /skill · /hooks · /memory · /help · 以及技能(/init, /explore, …)",
SlashPromptEmpty: "MCP 提示未返回任何可发送的内容",
SlashMCPNone: "未配置 MCP 服务器 — 在 ok.toml 中添加 [[plugins]] 条目",
CompHintSlash: "↑/↓ 移动 · Tab/Enter 选择 · Esc 关闭",
CompHintFile: "↑/↓ 移动 · Tab/Enter 打开文件夹或选择文件 · Esc 关闭",
CmdNew: "创建新会话",
CmdCompact: "压缩上下文",
CmdModel: "切换模型",
CmdMemory: "显示记忆文件",
CmdMcp: "MCP 服务器",
CmdHooks: "管理钩子",
CmdSkill: "管理技能",
CmdAudit: "验证审计追踪",
CmdSearch: "搜索历史",
CmdHelp: "列出命令",
CmdTodo: "关闭任务列表",
ArgSkillList: "列出技能",
ArgSkillShow: "显示技能内容",
ArgSkillNew: "创建新技能",
ArgSkillPaths: "显示发现路径",
ArgMcpAdd: "连接服务器",
ArgMcpRemove: "断开服务器连接",
ArgMcpList: "显示已配置的服务器",
ArgMcpConnected: "已连接",
ArgHooksTrust: "信任此项目的钩子",
ArgHooksList: "列出活跃钩子",
ArgModelCurrent: "当前",
ListModelsHeaderFmt: "模型(活跃:%s)",
ListModelsHint: "使用模型切换器切换,或输入 /model <provider/model>",
ListMemoryHeader: "记忆文件",
ListMemoryNone: "记忆:无 — 使用“#<笔记>”添加,或运行 /init 生成 AGENTS.md",
ListSkillsHeaderFmt: "技能(%d)",
ListSkillsNone: "技能:未定义 — 调用内置命令如 /init,或使用 install_skill 创建",
ListHooksHeaderFmt: "钩子(%d 活跃)",
ListHooksNone: "钩子:无活跃 — 在 .ok/settings.json(项目,信任后)或 ~/.ok/settings.json(全局)中配置",
ListMcpHeader: "MCP 服务器",
ListMcpNone: "MCP:未连接服务器 — 在 ok.toml([[plugins]])或项目的 .mcp.json 中添加一个",
SelectProvidersLabel: "选择要启用的提供商",
EnterAPIKeysHeader: "输入 API 密钥(按 Enter 跳过,稍后在 .env 中设置):",
MissingKeyIntro: "ok.toml 已就绪 — 只需一个 API 密钥。",
WroteFileFmt: "已写入 %s",
SetupComplete: "设置完成。",
SetupCancelled: "设置已取消。",
TryHintFmt: "试试:%s",
NextHint: "下一步:设置你的 API 密钥(export DEEPSEEK_API_KEY=... 或添加到 .env),然后运行 `ok run \\\"你的任务\\\"`。",
ConfirmReconfigureFmt: "%s 已存在。重新配置并覆盖?",
KeepingExisting: "保留现有配置。",
NotOverwritingFmt: "%s 已存在,不覆盖",
UnknownCommandFmt: "未知命令 %q",
UsageRunHint: "用法:ok run [--model 名称] <任务>",
ErrorPrefix: "错误:",
WriteConfigErr: "写入配置:",
WriteEnvErr: "写入 .env:",
SelectOneHint: "(↑/↓ · 回车 · q 取消)",
SelectManyHint: "(↑/↓ · 空格 · 回车 · q)",
UsageBody: `ok — 配置和插件驱动的编码代理(多模型)
用法:
ok chat [--model 名称] 交互式会话(多轮)
ok run [--model 名称] [--max-steps N] <任务> 执行一次任务并退出
ok serve [--model 名称] [--addr 主机:端口] 通过 HTTP+SSE 提供会话服务(浏览器客户端在 /)
ok setup [路径] 交互式配置向导;写入 ok.toml(+ .env)
ok mcp <add|remove|list> 管理 ok.toml 中的 MCP 服务器
ok update [--check] 检查和应用更新
ok session <export|import|list> 导出/导入/列出会话
ok doctor 完整环境诊断
ok audit 查看执行审计追踪
ok version 显示版本
ok help 显示此帮助
示例:
ok chat
ok run "实现 main.go 中的 TODO"
ok run --model mimo-pro "为此函数添加单元测试"
echo "解释这段代码" | ok run
配置:
解析顺序:标志 > ./ok.toml > ~/.config/ok/config.toml > 内置默认值
密钥来自环境变量 api_key_env(例如 DEEPSEEK_API_KEY)。
运行 'ok setup' 生成配置;查看 docs/SPEC.md。
`,
}
Chinese is the 中文 catalog (auto-translated).
var Dutch = Messages{
WelcomeTitleFmt: "Welkom bij %s",
NoConfigYet: "Nog geen configuratie gevonden — laten we het instellen.",
StartingChatFmt: "%s starten…",
SetKeyHint: "Stel je API-sleutel in en voer vervolgens `ok chat` uit.",
ConfigLabel: "config",
ModelsLabel: "modellen",
ConfigNotFound: "niet gevonden — gebruik ingebouwde standaardwaarden",
ConfigErrorFmt: "%s — fout: %v",
NoKey: "geen sleutel",
Ready: "gereed",
GetStarted: "Aan de slag",
StepScaffold: "scaffold ok.toml",
StepSetKey: "API-sleutel instellen",
InitHint: "Projectgeheugen (AGENTS.md) wordt gegenereerd tijdens de sessie: voer `ok chat` uit, daarna `/init` — het model analyseert de codebase en schrijft het. Gebruik `ok setup` voor configuratie.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… of voeg toe aan .env",
StepChatDesc: "interactieve sessie",
StepRunDesc: "eenmalige taak",
HelpFooter: "ok help · alle commando's",
ChatTip: "Context blijft behouden tussen beurten. Typ 'exit' of Ctrl-D om af te sluiten.",
TurnCancelled: "geannuleerd — terug naar prompt",
NoSessionToResume: "geen opgeslagen sessie om te hervatten — start een nieuwe met `ok chat`",
ResumeRequiresTTY: "--resume heeft een interactieve terminal nodig; geef --continue door voor de meest recente sessie",
PickSessionLabel: "Welke sessie hervatten?",
ChatStatusThinkingFmt: "%s denkt… (%ds · Esc annuleert)",
ChatStatusIdle: "Tab schakelt plan · Enter verzendt · Ctrl+F zoekt geschiedenis · PgUp/PgDn scrollt · Ctrl-D stopt",
ChatStatusPlanApproval: "Enter/y keurt goed & voert uit · n/Esc blijft plannen · PgUp/PgDn scrollt",
PlanApprovalPrompt: "Plan hierboven gereed — Enter/y om goed te keuren & uit te voeren, n/Esc om te blijven plannen",
ChatStatusToolApproval: "y eenmalig goedkeuren · a deze sessie toestaan · n weigeren · Ctrl-C annuleert beurt",
AskTypeSomething: "Typ iets anders",
AskTypingHint: "typ hieronder, Enter om te bevestigen",
AskChatInstead: "Geen — gewoon chatten",
ChatStatusQuestion: "↑/↓ bewegen · nummer om te kiezen · spatie meerdere · Enter bevestigen · ←/→ schakelen · Esc annuleren",
ToolApprovalPromptFmt: "%s%s toestaan? — [y] eenmalig · [a] deze sessie · [n] nee",
SlashCompactDone: "sessie gecomprimeerd — oudere midden vervangen door een samenvatting, recente beurten behouden",
SlashCompactFailed: "comprimeren mislukt",
SlashNewDone: "nieuwe sessie gestart — vorig transcript opgeslagen",
SlashNewFailed: "kon geen nieuwe sessie starten",
SlashUnavailable: "commando niet beschikbaar in deze build",
SlashUnknown: "onbekend commando",
SlashTodoCleared: "taaklijst verwijderd",
SlashHelp: "commando's: /audit · /search · /compact · /new · /todo · /model (model wisselen) · /mcp · /skill · /hooks · /memory · /help · plus vaardigheden (/init, /explore, …)",
SlashPromptEmpty: "de MCP-prompt retourneerde geen inhoud om te verzenden",
SlashMCPNone: "geen MCP-servers geconfigureerd — voeg een [[plugins]]-item toe in ok.toml",
CompHintSlash: "↑/↓ bewegen · Tab/Enter selecteren · Esc sluiten",
CompHintFile: "↑/↓ bewegen · Tab/Enter map openen of bestand kiezen · Esc sluiten",
CmdNew: "start een nieuwe sessie",
CmdCompact: "context comprimeren",
CmdModel: "model wisselen",
CmdMemory: "geheugenbestanden tonen",
CmdMcp: "MCP-servers",
CmdHooks: "hooks beheren",
CmdSkill: "vaardigheden beheren",
CmdAudit: "audittrail verifiëren",
CmdSearch: "geschiedenis doorzoeken",
CmdHelp: "commando's weergeven",
CmdTodo: "taaklijst sluiten",
ArgSkillShow: "inhoud van een vaardigheid tonen",
ArgSkillNew: "nieuwe vaardigheid aanmaken",
ArgSkillPaths: "ontdekkingspaden tonen",
ArgMcpAdd: "server verbinden",
ArgMcpRemove: "server loskoppelen",
ArgMcpConnected: "verbonden",
ArgHooksTrust: "vertrouw de hooks van dit project",
ArgModelCurrent: "huidig",
ListModelsHeaderFmt: "modellen (actief: %s)",
ListModelsHint: "wissel met de modelwisselaar, of typ /model <provider/model>",
ListMemoryHeader: "geheugenbestanden",
ListMemoryNone: "geheugen: geen — voeg toe met “#<notitie>” of voer /init uit om AGENTS.md te genereren",
ListSkillsHeaderFmt: "vaardigheden (%d)",
ListSkillsNone: "vaardigheden: geen gedefinieerd — roep een ingebouwde aan zoals /init, of maak er een met install_skill",
ListHooksHeaderFmt: "hooks (%d actief)",
ListHooksNone: "hooks: geen actief — configureer in .ok/settings.json (project, na vertrouwen) of ~/.ok/settings.json (globaal)",
ListMcpHeader: "mcp-servers",
ListMcpNone: "mcp: geen servers verbonden — voeg er een toe in ok.toml ([[plugins]]) of een project .mcp.json",
SelectProvidersLabel: "Selecteer providers om in te schakelen",
EnterAPIKeysHeader: "Voer API-sleutels in (Enter om over te slaan en later in te stellen in .env):",
MissingKeyIntro: "ok.toml is klaar — slechts een API-sleutel verwijderd.",
WroteFileFmt: "%s geschreven",
SetupComplete: "Installatie voltooid.",
SetupCancelled: "installatie geannuleerd.",
TryHintFmt: "Probeer: %s",
NextHint: "Volgende: stel je API-sleutel in (export DEEPSEEK_API_KEY=... of voeg toe aan .env), voer dan `ok run \\\"je taak\\\"` uit.",
ConfirmReconfigureFmt: "%s bestaat al. Opnieuw configureren en overschrijven?",
KeepingExisting: "Bestaande configuratie behouden.",
NotOverwritingFmt: "%s bestaat al; niet overschrijven",
UnknownCommandFmt: "onbekend commando %q",
UsageRunHint: "gebruik: ok run [--model NAAM] <taak>",
ErrorPrefix: "fout:",
WriteConfigErr: "configuratie schrijven:",
WriteEnvErr: ".env schrijven:",
SelectOneHint: "(↑/↓ · Enter · q om te annuleren)",
SelectManyHint: "(↑/↓ · Spatie · Enter · q)",
}
Dutch is the Nederlands catalog (auto-translated).
var English = Messages{
Subtitle: "config + plugin driven coding agent",
WelcomeTitleFmt: "Welcome to %s",
NoConfigYet: "No configuration found yet — let's set it up.",
StartingChatFmt: "Starting %s…",
SetKeyHint: "Set your API key, then run `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "models",
ConfigNotFound: "not found — using built-in defaults",
ConfigErrorFmt: "%s — error: %v",
NoKey: "no key",
Ready: "ready",
GetStarted: "Get started",
StepScaffold: "scaffold ok.toml",
StepSetKey: "set API key",
InitHint: "Project memory (AGENTS.md) is generated in-session: run `ok chat`, then `/init` — the model analyzes the codebase and writes it. For configuration, use `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… or add to .env",
StepChatDesc: "interactive session",
StepRunDesc: "one-shot task",
HelpFooter: "ok help · all commands",
ChatTip: "Context is kept across turns. Type 'exit' or Ctrl-D to quit.",
TurnCancelled: "cancelled — back to prompt",
NoSessionToResume: "no saved session to resume — start a new one with `ok chat`",
ResumeRequiresTTY: "--resume needs an interactive terminal; pass --continue for the most recent session",
PickSessionLabel: "Resume which session?",
ChatStatusThinkingFmt: "%s thinking… (%ds · Esc cancels)",
ChatStatusIdle: "Tab toggles plan · Enter sends · Ctrl+F search history · PgUp/PgDn scrolls · Ctrl-D quits",
ChatStatusPlanApproval: "Enter/y approves & executes · n/Esc keeps planning · PgUp/PgDn scrolls",
PlanApprovalPrompt: "Plan ready above — Enter/y to approve & execute, n/Esc to keep planning",
ChatStatusToolApproval: "y approve once · a allow this session · n deny · Ctrl-C cancels turn",
AskTypeSomething: "Type something else",
AskTypingHint: "type below, Enter to confirm",
AskChatInstead: "None — just chat",
ChatStatusQuestion: "↑/↓ move · number to pick · space multi · Enter confirm · ←/→ switch · Esc cancel",
ToolApprovalPromptFmt: "Allow %s%s? — [y] once · [a] this session · [n] no",
SlashCompactDone: "session compacted — older middle replaced by a summary, recent turns kept",
SlashCompactFailed: "compaction failed",
SlashNewDone: "fresh session started — previous transcript saved",
SlashNewFailed: "could not start a new session",
SlashUnavailable: "command unavailable in this build",
SlashUnknown: "unknown command",
SlashTodoCleared: "task list dismissed",
SlashHelp: "commands: /audit · /search · /compact · /new · /todo · /model (switch model) · /mcp · /skill · /hooks · /memory · /help · plus skills (/init, /explore, …)",
SlashPromptEmpty: "the MCP prompt returned no content to send",
SlashMCPNone: "no MCP servers configured — add a [[plugins]] entry in ok.toml",
CompHintSlash: "↑/↓ move · Tab/Enter select · Esc close",
CompHintFile: "↑/↓ move · Tab/Enter open folder or pick file · Esc close",
CmdNew: "fork a fresh session",
CmdCompact: "compact context",
CmdModel: "switch model",
CmdMemory: "show memory files",
CmdMcp: "MCP servers",
CmdHooks: "manage hooks",
CmdSkill: "manage skills",
CmdAudit: "verify audit trail",
CmdSearch: "search history",
CmdHelp: "list commands",
CmdTodo: "dismiss the task list",
ArgSkillList: "list skills",
ArgSkillShow: "show a skill's body",
ArgSkillNew: "scaffold a new skill",
ArgSkillPaths: "show discovery paths",
ArgMcpAdd: "connect a server",
ArgMcpRemove: "disconnect a server",
ArgMcpList: "show configured servers",
ArgMcpConnected: "connected",
ArgHooksList: "list active hooks",
ArgHooksTrust: "trust this project's hooks",
ArgModelCurrent: "current",
ListModelsHeaderFmt: "models (active: %s)",
ListModelsHint: "switch with the model switcher, or type /model <provider/model>",
ListMemoryHeader: "memory files",
ListMemoryNone: "memory: none — add with “#<note>” or run /init to generate AGENTS.md",
ListSkillsHeaderFmt: "skills (%d)",
ListSkillsNone: "skills: none defined — invoke a built-in like /init, or author one with install_skill",
ListHooksHeaderFmt: "hooks (%d active)",
ListHooksNone: "hooks: none active — configure in .ok/settings.json (project, after trust) or ~/.ok/settings.json (global)",
ListMcpHeader: "mcp servers",
ListMcpNone: "mcp: no servers connected — add one in ok.toml ([[plugins]]) or a project .mcp.json",
SelectProvidersLabel: "Select providers to enable",
EnterAPIKeysHeader: "Enter API keys (Enter to skip and set later in .env):",
MissingKeyIntro: "ok.toml is ready — just an API key away.",
WroteFileFmt: "Wrote %s",
SetupComplete: "Setup complete.",
SetupCancelled: "setup cancelled.",
TryHintFmt: "Try: %s",
NextHint: "Next: set your API key (export DEEPSEEK_API_KEY=... or add to .env), then run `ok run \"your task\"`.",
ConfirmReconfigureFmt: "%s already exists. Reconfigure and overwrite?",
KeepingExisting: "Keeping existing config.",
NotOverwritingFmt: "%s already exists; not overwriting",
UnknownCommandFmt: "unknown command %q",
UsageRunHint: "usage: ok run [--model NAME] <task>",
ErrorPrefix: "error:",
WriteConfigErr: "write config:",
WriteEnvErr: "write .env:",
SelectOneHint: "(↑/↓ · Enter · q to cancel)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
UsageBody: `ok — a config- and plugin-driven coding agent (multi-model)
Usage:
ok chat [--model NAME] interactive session (multi-turn)
ok run [--model NAME] [--max-steps N] <task> run one task and exit
ok serve [--model NAME] [--addr HOST:PORT] serve the session over HTTP+SSE (browser client at /)
ok setup [path] interactive config wizard; writes ok.toml (+ .env)
ok mcp <add|remove|list> manage MCP servers in ok.toml
ok update [--check] check for and apply updates
ok session <export|import|list> export/import/list sessions
ok doctor full environment diagnostics
ok audit view execution audit trail
ok version show version
ok help show this help
Examples:
ok chat
ok run "implement the TODOs in main.go"
ok run --model mimo-pro "add unit tests for this function"
echo "explain this code" | ok run
Configuration:
Resolution: flag > ./ok.toml > ~/.config/ok/config.toml > built-in defaults
Secrets come from the environment via api_key_env (e.g. DEEPSEEK_API_KEY).
Run 'ok setup' to scaffold a config; see docs/SPEC.md.
`,
}
English is the baseline catalog. The drift-guard test reflects over its fields, so every other catalog must populate the same set.
var Filipino = Messages{
WelcomeTitleFmt: "Maligayang pagdating sa %s",
NoConfigYet: "Wala pang nakitang configuration — i-set up natin ito.",
StartingChatFmt: "Sinisimulan ang %s…",
SetKeyHint: "Itakda ang iyong API key, pagkatapos ay patakbuhin ang `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "models",
ConfigNotFound: "hindi nahanap — ginagamit ang built-in defaults",
ConfigErrorFmt: "%s — error: %v",
NoKey: "walang key",
Ready: "handa na",
GetStarted: "Magsimula",
StepScaffold: "scaffold ok.toml",
StepSetKey: "itakda ang API key",
InitHint: "Ang project memory (AGENTS.md) ay nabubuo sa loob ng session: patakbuhin ang `ok chat`, pagkatapos ay `/init` — sinusuri ng modelo ang codebase at isinusulat ito. Para sa configuration, gamitin ang `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… o idagdag sa .env",
StepChatDesc: "interactive session",
StepRunDesc: "one-shot task",
HelpFooter: "ok help · lahat ng command",
ChatTip: "Ang konteksto ay pinapanatili sa bawat turn. I-type ang 'exit' o Ctrl-D para lumabas.",
TurnCancelled: "kinansela — bumalik sa prompt",
NoSessionToResume: "walang naka-save na session upang ipagpatuloy — magsimula ng bago gamit ang `ok chat`",
ResumeRequiresTTY: "ang --resume ay nangangailangan ng interactive terminal; gamitin ang --continue para sa pinakabagong session",
PickSessionLabel: "Aling session ang ipagpapatuloy?",
ChatStatusThinkingFmt: "%s nag-iisip… (%ds · Esc para kanselahin)",
ChatStatusIdle: "Tab para i-toggle ang plano · Enter para magpadala · Ctrl+F para maghanap sa kasaysayan · PgUp/PgDn para mag-scroll · Ctrl-D para lumabas",
ChatStatusPlanApproval: "Enter/y para aprubahan at isagawa · n/Esc para magpatuloy sa pagpaplano · PgUp/PgDn para mag-scroll",
PlanApprovalPrompt: "Nasa itaas ang plano — Enter/y para aprubahan at isagawa, n/Esc para magpatuloy sa pagpaplano",
ChatStatusToolApproval: "y para aprubahan nang isang beses · a para payagan ang session na ito · n para tanggihan · Ctrl-C para kanselahin ang turno",
AskTypeSomething: "Mag-type ng iba pa",
AskTypingHint: "mag-type sa ibaba, Enter para kumpirmahin",
AskChatInstead: "Wala — makipag-chat lang",
ChatStatusQuestion: "↑/↓ para gumalaw · numero para pumili · space para maramihan · Enter para kumpirmahin · ←/→ para lumipat · Esc para kanselahin",
ToolApprovalPromptFmt: "Payagan ang %s%s? — [y] isang beses · [a] session na ito · [n] hindi",
SlashCompactDone: "na-compact ang session — pinalitan ng buod ang mas lumang gitna, napanatili ang mga kamakailang turno",
SlashCompactFailed: "nabigo ang pag-compact",
SlashNewDone: "nagsimula ang bagong session — nai-save ang nakaraang transcript",
SlashNewFailed: "hindi makapagsimula ng bagong session",
SlashUnavailable: "hindi available ang command sa build na ito",
SlashUnknown: "hindi kilalang command",
SlashTodoCleared: "naalis ang listahan ng gawain",
SlashHelp: "mga utos: /audit · /search · /compact · /new · /todo · /model (lumipat ng modelo) · /mcp · /skill · /hooks · /memory · /help · at mga kasanayan (/init, /explore, …)",
SlashPromptEmpty: "walang nilalaman na ibinalik ang MCP prompt para ipadala",
SlashMCPNone: "walang naka-configure na MCP server — magdagdag ng [[plugins]] entry sa ok.toml",
CompHintSlash: "↑/↓ galaw · Tab/Enter pumili · Esc isara",
CompHintFile: "↑/↓ galaw · Tab/Enter buksan ang folder o pumili ng file · Esc isara",
CmdNew: "gumawa ng bagong session",
CmdCompact: "i-compact ang konteksto",
CmdModel: "lumipat ng modelo",
CmdMemory: "ipakita ang mga memory file",
CmdMcp: "mga MCP server",
CmdHooks: "pamahalaan ang mga hooks",
CmdSkill: "pamahalaan ang mga kasanayan",
CmdAudit: "i-verify ang audit trail",
CmdSearch: "maghanap sa kasaysayan",
CmdHelp: "ilista ang mga utos",
CmdTodo: "i-dismiss ang listahan ng gawain",
ArgSkillShow: "ipakita ang katawan ng isang kasanayan",
ArgSkillNew: "gumawa ng bagong kasanayan",
ArgSkillPaths: "ipakita ang mga path ng pagtuklas",
ArgMcpAdd: "kumonekta sa isang server",
ArgMcpRemove: "idiskonekta ang server",
ArgMcpConnected: "nakakonekta",
ArgHooksTrust: "pagkatiwalaan ang mga hook ng proyektong ito",
ArgModelCurrent: "kasalukuyan",
ListModelsHeaderFmt: "mga modelo (aktibo: %s)",
ListModelsHint: "lumipat gamit ang model switcher, o i-type ang /model <provider/model>",
ListMemoryHeader: "mga file ng memorya",
ListMemoryNone: "memorya: wala — magdagdag gamit ang “#<note>” o patakbuhin ang /init para makabuo ng AGENTS.md",
ListSkillsHeaderFmt: "mga kasanayan (%d)",
ListSkillsNone: "mga kasanayan: walang tinukoy — gamitin ang built-in tulad ng /init, o gumawa gamit ang install_skill",
ListHooksHeaderFmt: "mga hook (%d aktibo)",
ListHooksNone: "mga hook: walang aktibo — i-configure sa .ok/settings.json (proyekto, pagkatapos ng tiwala) o ~/.ok/settings.json (global)",
ListMcpHeader: "mga mcp server",
ListMcpNone: "mcp: walang konektadong server — magdagdag sa ok.toml ([[plugins]]) o sa .mcp.json ng proyekto",
SelectProvidersLabel: "Piliin ang mga provider na paganahin",
EnterAPIKeysHeader: "Ilagay ang mga API key (Enter para laktawan at itakda mamaya sa .env):",
MissingKeyIntro: "handa na ang ok.toml — isang API key na lang ang kulang.",
WroteFileFmt: "Isinulat ang %s",
SetupComplete: "Kumpleto na ang setup.",
SetupCancelled: "nakansela ang setup.",
TryHintFmt: "Subukan: %s",
NextHint: "Susunod: itakda ang iyong API key (export DEEPSEEK_API_KEY=... o idagdag sa .env), pagkatapos ay patakbuhin ang `ok run \\\"iyong gawain\\\"`.",
ConfirmReconfigureFmt: "Umiiral na ang %s. I-reconfigure at i-overwrite?",
KeepingExisting: "Pinapanatili ang kasalukuyang config.",
NotOverwritingFmt: "Umiiral na ang %s; hindi ini-overwrite",
UnknownCommandFmt: "hindi kilalang command %q",
UsageRunHint: "paggamit: ok run [--model NAME] <gawain>",
ErrorPrefix: "error:",
WriteConfigErr: "sumulat ng config:",
WriteEnvErr: "sumulat ng .env:",
SelectOneHint: "(↑/↓ · Enter · q para kanselahin)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Filipino is the Filipino catalog (auto-translated).
var French = Messages{
WelcomeTitleFmt: "Bienvenue sur %s",
NoConfigYet: "Aucune configuration trouvée — configurons-la.",
StartingChatFmt: "Démarrage de %s…",
SetKeyHint: "Définissez votre clé API, puis exécutez `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "modèles",
ConfigNotFound: "non trouvé — utilisation des valeurs par défaut intégrées",
ConfigErrorFmt: "%s — erreur : %v",
NoKey: "pas de clé",
Ready: "prêt",
GetStarted: "Commencer",
StepScaffold: "générer ok.toml",
StepSetKey: "définir la clé API",
InitHint: "La mémoire du projet (AGENTS.md) est générée en session : exécutez `ok chat`, puis `/init` — le modèle analyse la base de code et l'écrit. Pour la configuration, utilisez `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… ou ajoutez à .env",
StepChatDesc: "session interactive",
StepRunDesc: "tâche unique",
HelpFooter: "ok help · toutes les commandes",
ChatTip: "Le contexte est conservé entre les tours. Tapez 'exit' ou Ctrl-D pour quitter.",
TurnCancelled: "annulé — retour à l'invite",
NoSessionToResume: "aucune session sauvegardée à reprendre — commencez-en une nouvelle avec `ok chat`",
ResumeRequiresTTY: "--resume nécessite un terminal interactif ; passez --continue pour la session la plus récente",
PickSessionLabel: "Reprendre quelle session ?",
ChatStatusThinkingFmt: "%s réfléchit… (%ds · Esc annule)",
ChatStatusIdle: "Tab bascule le plan · Entrée envoie · Ctrl+F recherche historique · PgUp/PgDn défile · Ctrl-D quitte",
ChatStatusPlanApproval: "Entrée/y approuve et exécute · n/Esc continue la planification · PgUp/PgDn défile",
PlanApprovalPrompt: "Plan prêt ci-dessus — Entrée/y pour approuver et exécuter, n/Esc pour continuer la planification",
ChatStatusToolApproval: "y approuve une fois · a autorise cette session · n refuse · Ctrl-C annule le tour",
AskTypeSomething: "Tapez autre chose",
AskTypingHint: "tapez ci-dessous, Entrée pour confirmer",
AskChatInstead: "Aucun — discuter simplement",
ChatStatusQuestion: "↑/↓ déplace · nombre pour choisir · espace multiple · Entrée confirme · ←/→ change · Esc annule",
ToolApprovalPromptFmt: "Autoriser %s%s ? — [y] une fois · [a] cette session · [n] non",
SlashCompactDone: "session compactée — ancien milieu remplacé par un résumé, tours récents conservés",
SlashCompactFailed: "échec de la compaction",
SlashNewDone: "nouvelle session démarrée — précédent transcript sauvegardé",
SlashNewFailed: "impossible de démarrer une nouvelle session",
SlashUnavailable: "commande indisponible dans cette version",
SlashUnknown: "commande inconnue",
SlashTodoCleared: "liste de tâches effacée",
SlashHelp: "commandes : /audit · /search · /compact · /new · /todo · /model (changer de modèle) · /mcp · /skill · /hooks · /memory · /help · plus compétences (/init, /explore, …)",
SlashPromptEmpty: "l'invite MCP n'a renvoyé aucun contenu à envoyer",
SlashMCPNone: "aucun serveur MCP configuré — ajoutez une entrée [[plugins]] dans ok.toml",
CompHintSlash: "↑/↓ déplacer · Tab/Entrée sélectionner · Esc fermer",
CompHintFile: "↑/↓ déplacer · Tab/Entrée ouvrir dossier ou choisir fichier · Esc fermer",
CmdNew: "forker une nouvelle session",
CmdCompact: "compacter le contexte",
CmdModel: "changer de modèle",
CmdMemory: "afficher les fichiers mémoire",
CmdMcp: "serveurs MCP",
CmdHooks: "gérer les hooks",
CmdSkill: "gérer les compétences",
CmdAudit: "vérifier la piste d'audit",
CmdSearch: "rechercher dans l'historique",
CmdHelp: "lister les commandes",
CmdTodo: "ignorer la liste de tâches",
ArgSkillShow: "afficher le corps d'une compétence",
ArgSkillNew: "générer une nouvelle compétence",
ArgSkillPaths: "afficher les chemins de découverte",
ArgMcpAdd: "connecter un serveur",
ArgMcpRemove: "déconnecter un serveur",
ArgMcpConnected: "connecté",
ArgHooksTrust: "faire confiance aux hooks de ce projet",
ArgModelCurrent: "actuel",
ListModelsHeaderFmt: "modèles (actif : %s)",
ListModelsHint: "changez avec le sélecteur de modèle, ou tapez /model <fournisseur/modèle>",
ListMemoryHeader: "fichiers mémoire",
ListMemoryNone: "mémoire : aucune — ajoutez avec « #<note> » ou exécutez /init pour générer AGENTS.md",
ListSkillsHeaderFmt: "compétences (%d)",
ListSkillsNone: "compétences : aucune définie — invoquez une compétence intégrée comme /init, ou créez-en une avec install_skill",
ListHooksHeaderFmt: "hooks (%d actifs)",
ListHooksNone: "hooks : aucun actif — configurez dans .ok/settings.json (projet, après confiance) ou ~/.ok/settings.json (global)",
ListMcpHeader: "serveurs mcp",
ListMcpNone: "mcp : aucun serveur connecté — ajoutez-en un dans ok.toml ([[plugins]]) ou un fichier .mcp.json du projet",
SelectProvidersLabel: "Sélectionnez les fournisseurs à activer",
EnterAPIKeysHeader: "Saisissez les clés API (Entrée pour ignorer et définir plus tard dans .env) :",
MissingKeyIntro: "ok.toml est prêt — il ne manque qu'une clé API.",
WroteFileFmt: "%s écrit",
SetupComplete: "Configuration terminée.",
SetupCancelled: "configuration annulée.",
TryHintFmt: "Essayez : %s",
NextHint: "Ensuite : définissez votre clé API (export DEEPSEEK_API_KEY=... ou ajoutez-la à .env), puis exécutez `ok run \\\"votre tâche\\\"`.",
ConfirmReconfigureFmt: "%s existe déjà. Reconfigurer et écraser ?",
KeepingExisting: "Conservation de la configuration existante.",
NotOverwritingFmt: "%s existe déjà ; pas d'écrasement",
UnknownCommandFmt: "commande inconnue %q",
UsageRunHint: "utilisation : ok run [--model NOM] <tâche>",
ErrorPrefix: "erreur :",
WriteConfigErr: "écriture de la configuration :",
WriteEnvErr: "écriture de .env :",
SelectOneHint: "(↑/↓ · Entrée · q pour annuler)",
SelectManyHint: "(↑/↓ · Espace · Entrée · q)",
}
French is the Français catalog (auto-translated).
var German = Messages{
WelcomeTitleFmt: "Willkommen bei %s",
NoConfigYet: "Noch keine Konfiguration gefunden — richten wir sie ein.",
StartingChatFmt: "Starte %s…",
SetKeyHint: "Setzen Sie Ihren API-Schlüssel, dann führen Sie `ok chat` aus.",
ConfigLabel: "config",
ModelsLabel: "models",
ConfigNotFound: "nicht gefunden — verwende integrierte Standardeinstellungen",
ConfigErrorFmt: "%s — Fehler: %v",
NoKey: "kein Schlüssel",
Ready: "bereit",
GetStarted: "Loslegen",
StepScaffold: "ok.toml vorbereiten",
StepSetKey: "API-Schlüssel setzen",
InitHint: "Projektspeicher (AGENTS.md) wird während der Sitzung generiert: führen Sie `ok chat` aus, dann `/init` — das Modell analysiert die Codebasis und schreibt sie. Für die Konfiguration verwenden Sie `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… oder zu .env hinzufügen",
StepChatDesc: "interaktive Sitzung",
StepRunDesc: "einmalige Aufgabe",
HelpFooter: "ok help · alle Befehle",
ChatTip: "Der Kontext bleibt über mehrere Durchgänge erhalten. Geben Sie 'exit' oder Ctrl-D ein, um zu beenden.",
TurnCancelled: "abgebrochen — zurück zur Eingabeaufforderung",
NoSessionToResume: "Keine gespeicherte Sitzung zum Fortsetzen – starten Sie eine neue mit `ok chat`",
ResumeRequiresTTY: "--resume benötigt ein interaktives Terminal; übergeben Sie --continue für die letzte Sitzung",
PickSessionLabel: "Welche Sitzung fortsetzen?",
ChatStatusThinkingFmt: "%s denkt… (%ds · Esc bricht ab)",
ChatStatusIdle: "Tab schaltet Plan um · Enter sendet · Strg+F durchsucht Verlauf · Bild↑/Bild↓ scrollt · Strg-D beendet",
ChatStatusPlanApproval: "Enter/y genehmigt & führt aus · n/Esc plant weiter · Bild↑/Bild↓ scrollt",
PlanApprovalPrompt: "Plan oben bereit – Enter/y zum Genehmigen & Ausführen, n/Esc zum Weiterplanen",
ChatStatusToolApproval: "y einmal genehmigen · a für diese Sitzung zulassen · n ablehnen · Strg-C bricht Zug ab",
AskTypeSomething: "Geben Sie etwas anderes ein",
AskTypingHint: "unten eingeben, Enter zum Bestätigen",
AskChatInstead: "Keine – einfach chatten",
ChatStatusQuestion: "↑/↓ bewegen · Zahl zum Auswählen · Leertaste mehrfach · Enter bestätigen · ←/→ wechseln · Esc abbrechen",
ToolApprovalPromptFmt: "%s%s zulassen? — [y] einmal · [a] diese Sitzung · [n] nein",
SlashCompactDone: "Sitzung komprimiert – älterer Mittelteil durch Zusammenfassung ersetzt, letzte Runden erhalten",
SlashCompactFailed: "Komprimierung fehlgeschlagen",
SlashNewDone: "Neue Sitzung gestartet – vorheriges Transkript gespeichert",
SlashNewFailed: "Neue Sitzung konnte nicht gestartet werden",
SlashUnavailable: "Befehl in dieser Version nicht verfügbar",
SlashUnknown: "Unbekannter Befehl",
SlashTodoCleared: "Aufgabenliste gelöscht",
SlashHelp: "Befehle: /audit · /search · /compact · /new · /todo · /model (Modell wechseln) · /mcp · /skill · /hooks · /memory · /help · plus Fähigkeiten (/init, /explore, …)",
SlashPromptEmpty: "Der MCP-Prompt hat keinen zu sendenden Inhalt zurückgegeben",
SlashMCPNone: "Keine MCP-Server konfiguriert — fügen Sie einen [[plugins]]-Eintrag in ok.toml hinzu",
CompHintSlash: "↑/↓ bewegen · Tab/Enter auswählen · Esc schließen",
CompHintFile: "↑/↓ bewegen · Tab/Enter Ordner öffnen oder Datei auswählen · Esc schließen",
CmdNew: "Eine neue Sitzung starten",
CmdCompact: "Kontext komprimieren",
CmdModel: "Modell wechseln",
CmdMemory: "Speicherdateien anzeigen",
CmdMcp: "MCP-Server",
CmdHooks: "Hooks verwalten",
CmdSkill: "Fähigkeiten verwalten",
CmdAudit: "Prüfpfad überprüfen",
CmdSearch: "Verlauf durchsuchen",
CmdHelp: "Befehle auflisten",
CmdTodo: "Aufgabenliste schließen",
ArgSkillShow: "Den Inhalt einer Fähigkeit anzeigen",
ArgSkillNew: "Eine neue Fähigkeit erstellen",
ArgSkillPaths: "Erkennungspfade anzeigen",
ArgMcpAdd: "Einen Server verbinden",
ArgMcpRemove: "Server trennen",
ArgMcpConnected: "verbunden",
ArgHooksTrust: "Hooks dieses Projekts vertrauen",
ArgModelCurrent: "aktuell",
ListModelsHeaderFmt: "Modelle (aktiv: %s)",
ListModelsHint: "Wechseln mit dem Modellauswähler oder /model <Anbieter/Modell> eingeben",
ListMemoryHeader: "Speicherdateien",
ListMemoryNone: "Speicher: keiner — mit „#<Notiz>“ hinzufügen oder /init ausführen, um AGENTS.md zu generieren",
ListSkillsHeaderFmt: "Fähigkeiten (%d)",
ListSkillsNone: "Fähigkeiten: keine definiert — integrierte wie /init aufrufen oder eine mit install_skill erstellen",
ListHooksHeaderFmt: "Hooks (%d aktiv)",
ListHooksNone: "Hooks: keine aktiv — in .ok/settings.json (Projekt, nach Vertrauen) oder ~/.ok/settings.json (global) konfigurieren",
ListMcpHeader: "MCP-Server",
ListMcpNone: "MCP: keine Server verbunden — einen in ok.toml ([[plugins]]) oder einer Projekt-.mcp.json hinzufügen",
SelectProvidersLabel: "Anbieter zum Aktivieren auswählen",
EnterAPIKeysHeader: "API-Schlüssel eingeben (Eingabe zum Überspringen und später in .env setzen):",
MissingKeyIntro: "ok.toml ist bereit — nur noch ein API-Schlüssel fehlt.",
WroteFileFmt: "%s geschrieben",
SetupComplete: "Einrichtung abgeschlossen.",
SetupCancelled: "Einrichtung abgebrochen.",
TryHintFmt: "Versuchen Sie: %s",
NextHint: "Als Nächstes: Legen Sie Ihren API-Schlüssel fest (export DEEPSEEK_API_KEY=... oder zu .env hinzufügen), führen Sie dann `ok run \\\"Ihre Aufgabe\\\"` aus.",
ConfirmReconfigureFmt: "%s existiert bereits. Neu konfigurieren und überschreiben?",
KeepingExisting: "Vorhandene Konfiguration wird beibehalten.",
NotOverwritingFmt: "%s existiert bereits; wird nicht überschrieben",
UnknownCommandFmt: "Unbekannter Befehl %q",
UsageRunHint: "Verwendung: ok run [--model NAME] <Aufgabe>",
ErrorPrefix: "Fehler:",
WriteConfigErr: "Konfiguration schreiben:",
WriteEnvErr: ".env schreiben:",
SelectOneHint: "(↑/↓ · Eingabe · q zum Abbrechen)",
SelectManyHint: "(↑/↓ · Leertaste · Eingabe · q)",
}
German is the Deutsch catalog (auto-translated).
var Greek = Messages{
WelcomeTitleFmt: "Καλώς ήρθατε στο %s",
NoConfigYet: "Δεν βρέθηκε ακόμα διαμόρφωση — ας τη ρυθμίσουμε.",
StartingChatFmt: "Έναρξη %s…",
SetKeyHint: "Ορίστε το κλειδί API σας και μετά εκτελέστε `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "models",
ConfigNotFound: "δεν βρέθηκε — χρήση προεπιλεγμένων ενσωματωμένων",
ConfigErrorFmt: "%s — σφάλμα: %v",
NoKey: "χωρίς κλειδί",
Ready: "έτοιμο",
GetStarted: "Ξεκινήστε",
StepScaffold: "δημιουργήστε το ok.toml",
StepSetKey: "ορίστε κλειδί API",
InitHint: "Η μνήμη έργου (AGENTS.md) δημιουργείται κατά τη συνεδρία: εκτελέστε `ok chat`, μετά `/init` — το μοντέλο αναλύει τον κώδικα και το γράφει. Για διαμόρφωση, χρησιμοποιήστε `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… ή προσθέστε στο .env",
StepChatDesc: "διαδραστική συνεδρία",
StepRunDesc: "εργασία μίας χρήσης",
HelpFooter: "ok help · όλες οι εντολές",
ChatTip: "Το περιεχόμενο διατηρείται μεταξύ των γύρων. Πληκτρολογήστε 'exit' ή Ctrl-D για έξοδο.",
TurnCancelled: "ακυρώθηκε — επιστροφή στην προτροπή",
NoSessionToResume: "δεν υπάρχει αποθηκευμένη συνεδρία για συνέχιση — ξεκινήστε μια νέα με `ok chat`",
ResumeRequiresTTY: "το --resume απαιτεί διαδραστικό τερματικό· χρησιμοποιήστε --continue για την πιο πρόσφατη συνεδρία",
PickSessionLabel: "Συνέχιση ποιας συνεδρίας;",
ChatStatusThinkingFmt: "%s σκέφτεται… (%d δευτ. · Esc ακυρώνει)",
ChatStatusIdle: "Tab εναλλαγή σχεδίου · Enter αποστολή · Ctrl+F αναζήτηση ιστορικού · PgUp/PgDn κύλιση · Ctrl-D έξοδος",
ChatStatusPlanApproval: "Enter/y έγκριση & εκτέλεση · n/Esc συνέχιση σχεδιασμού · PgUp/PgDn κύλιση",
PlanApprovalPrompt: "Το σχέδιο είναι έτοιμο παραπάνω — Enter/y για έγκριση & εκτέλεση, n/Esc για συνέχιση σχεδιασμού",
ChatStatusToolApproval: "y έγκριση μία φορά · a επιτρέπεται αυτή η συνεδρία · n άρνηση · Ctrl-C ακύρωση γύρου",
AskTypeSomething: "Πληκτρολογήστε κάτι άλλο",
AskTypingHint: "πληκτρολογήστε παρακάτω, Enter για επιβεβαίωση",
AskChatInstead: "Κανένα — απλά συνομιλία",
ChatStatusQuestion: "↑/↓ μετακίνηση · αριθμός για επιλογή · space πολλαπλή · Enter επιβεβαίωση · ←/→ εναλλαγή · Esc ακύρωση",
ToolApprovalPromptFmt: "Να επιτραπεί %s%s; — [y] μία φορά · [a] αυτή η συνεδρία · [n] όχι",
SlashCompactDone: "συνεδρία συμπιέστηκε — παλαιότερο μεσαίο τμήμα αντικαταστάθηκε από περίληψη, πρόσφατοι γύροι διατηρήθηκαν",
SlashCompactFailed: "αποτυχία συμπίεσης",
SlashNewDone: "νέα συνεδρία ξεκίνησε — προηγούμενη μεταγραφή αποθηκεύτηκε",
SlashNewFailed: "δεν ήταν δυνατή η έναρξη νέας συνεδρίας",
SlashUnavailable: "η εντολή δεν είναι διαθέσιμη σε αυτήν την έκδοση",
SlashUnknown: "άγνωστη εντολή",
SlashTodoCleared: "λίστα εργασιών απορρίφθηκε",
SlashHelp: "Εντολές: /audit · /search · /compact · /new · /todo · /model (αλλαγή μοντέλου) · /mcp · /skill · /hooks · /memory · /help · συν δεξιότητες (/init, /explore, …)",
SlashPromptEmpty: "το prompt MCP δεν επέστρεψε περιεχόμενο για αποστολή",
SlashMCPNone: "δεν έχουν ρυθμιστεί διακομιστές MCP — προσθέστε μια καταχώρηση [[plugins]] στο ok.toml",
CompHintSlash: "↑/↓ μετακίνηση · Tab/Enter επιλογή · Esc κλείσιμο",
CompHintFile: "↑/↓ μετακίνηση · Tab/Enter άνοιγμα φακέλου ή επιλογή αρχείου · Esc κλείσιμο",
CmdNew: "δημιουργήστε μια νέα συνεδρία",
CmdCompact: "συμπίεση περιβάλλοντος",
CmdModel: "αλλαγή μοντέλου",
CmdMemory: "εμφάνιση αρχείων μνήμης",
CmdMcp: "διακομιστές MCP",
CmdHooks: "διαχείριση hooks",
CmdSkill: "διαχείριση δεξιοτήτων",
CmdAudit: "επαλήθευση αρχείου ελέγχου",
CmdSearch: "αναζήτηση ιστορικού",
CmdHelp: "λίστα εντολών",
CmdTodo: "απόρριψη λίστας εργασιών",
ArgSkillShow: "εμφάνιση του σώματος μιας δεξιότητας",
ArgSkillNew: "δημιουργία νέας δεξιότητας",
ArgSkillPaths: "εμφάνιση διαδρομών ανακάλυψης",
ArgMcpAdd: "σύνδεση διακομιστή",
ArgMcpRemove: "αποσύνδεση διακομιστή",
ArgMcpConnected: "συνδεδεμένο",
ArgHooksTrust: "εμπιστευτείτε τα hooks αυτού του έργου",
ArgModelCurrent: "τρέχον",
ListModelsHeaderFmt: "μοντέλα (ενεργά: %s)",
ListModelsHint: "εναλλαγή με τον επιλογέα μοντέλων, ή πληκτρολογήστε /model <provider/model>",
ListMemoryHeader: "αρχεία μνήμης",
ListMemoryNone: "μνήμη: καμία — προσθέστε με “#<note>” ή εκτελέστε /init για δημιουργία AGENTS.md",
ListSkillsHeaderFmt: "δεξιότητες (%d)",
ListSkillsNone: "δεξιότητες: καμία ορισμένη — καλέστε μια ενσωματωμένη όπως /init, ή δημιουργήστε μία με install_skill",
ListHooksHeaderFmt: "hooks (%d ενεργά)",
ListHooksNone: "hooks: κανένα ενεργό — ρυθμίστε στο .ok/settings.json (έργο, μετά την εμπιστοσύνη) ή ~/.ok/settings.json (καθολικό)",
ListMcpHeader: "διακομιστές mcp",
ListMcpNone: "mcp: κανένας διακομιστής συνδεδεμένος — προσθέστε έναν στο ok.toml ([[plugins]]) ή σε ένα .mcp.json του έργου",
SelectProvidersLabel: "Επιλέξτε παρόχους για ενεργοποίηση",
EnterAPIKeysHeader: "Εισαγάγετε κλειδιά API (Enter για παράλειψη και ρύθμιση αργότερα στο .env):",
MissingKeyIntro: "το ok.toml είναι έτοιμο — απέχει μόνο ένα κλειδί API.",
WroteFileFmt: "Εγγράφηκε %s",
SetupComplete: "Η ρύθμιση ολοκληρώθηκε.",
SetupCancelled: "η ρύθμιση ακυρώθηκε.",
TryHintFmt: "Δοκιμή: %s",
NextHint: "Επόμενο: ορίστε το κλειδί API σας (export DEEPSEEK_API_KEY=... ή προσθέστε στο .env), στη συνέχεια εκτελέστε `ok run \\\"η εργασία σας\\\"`.",
ConfirmReconfigureFmt: "Το %s υπάρχει ήδη. Επαναδιαμόρφωση και αντικατάσταση;",
KeepingExisting: "Διατήρηση υπάρχουσας διαμόρφωσης.",
NotOverwritingFmt: "Το %s υπάρχει ήδη· δεν γίνεται αντικατάσταση",
UnknownCommandFmt: "άγνωστη εντολή %q",
UsageRunHint: "χρήση: ok run [--model ΟΝΟΜΑ] <εργασία>",
ErrorPrefix: "σφάλμα:",
WriteConfigErr: "εγγραφή config:",
WriteEnvErr: "εγγραφή .env:",
SelectOneHint: "(↑/↓ · Enter · q για ακύρωση)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Greek is the Ελληνικά catalog (auto-translated).
var Hausa = Messages{
WelcomeTitleFmt: "Barka da zuwa %s",
NoConfigYet: "Babu wani tsari da aka samu ba tukuna — bari mu saita shi.",
StartingChatFmt: "Ana fara %s…",
SetKeyHint: "Saita maɓallin API ɗinka, sannan ka gudanar da `ok chat`.",
ConfigLabel: "tsari",
ModelsLabel: "samfura",
ConfigNotFound: "ba a samu ba — ana amfani da tsoffin abubuwan da aka gina",
ConfigErrorFmt: "%s — kuskure: %v",
NoKey: "babu maɓalli",
Ready: "a shirye",
GetStarted: "Fara aiki",
StepScaffold: "ƙirƙiri ok.toml",
StepSetKey: "saita maɓallin API",
InitHint: "Ƙwaƙwalwar aikin (AGENTS.md) ana samar da ita a cikin zaman: gudanar da `ok chat`, sannan `/init` — samfurin yana nazarin lambar kuma ya rubuta ta. Don tsari, yi amfani da `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… ko ƙara zuwa .env",
StepChatDesc: "zaman mu'amala",
StepRunDesc: "aiki guda ɗaya",
HelpFooter: "ok taimako · duk umarni",
ChatTip: "Ana kiyaye mahallin a cikin juyawa. Buga 'exit' ko Ctrl-D don fita.",
TurnCancelled: "an soke — komawa ga faɗakarwa",
NoSessionToResume: "babu ajiyar zaman da za a ci gaba — fara sabo da `ok chat`",
ResumeRequiresTTY: "--resume yana buƙatar tashar mu'amala; wuce --continue don zaman na baya-bayan nan",
PickSessionLabel: "Ci gaba da wane zama?",
ChatStatusThinkingFmt: "%s yana tunani… (%ds · Esc yana soke)",
ChatStatusIdle: "Tab yana sauya tsari · Enter yana aika · Ctrl+F bincika tarihi · PgUp/PgDn gungurawa · Ctrl-D fita",
ChatStatusPlanApproval: "Enter/y ya amince & aiwatar · n/Esc ya ci gaba da tsarawa · PgUp/PgDn gungurawa",
PlanApprovalPrompt: "Tsari a shirye a sama — Enter/y don amincewa & aiwatarwa, n/Esc don ci gaba da tsarawa",
ChatStatusToolApproval: "y amince sau ɗaya · a ba da izinin wannan zama · n ƙi · Ctrl-C soke juyi",
AskTypeSomething: "Rubuta wani abu dabam",
AskTypingHint: "rubuta a ƙasa, Enter don tabbatarwa",
AskChatInstead: "Babu — kawai hira",
ChatStatusQuestion: "↑/↓ motsi · lamba don zaɓar · sarari da yawa · Enter tabbatarwa · ←/→ sauya · Esc soke",
ToolApprovalPromptFmt: "Ba da izinin %s%s? — [y] sau ɗaya · [a] wannan zama · [n] a'a",
SlashCompactDone: "an tattara zaman — tsohon tsakiya an maye gurbinsa da taƙaitaccen bayani, an ajiye juyi na baya-bayan nan",
SlashCompactFailed: "tattarawa ta gaza",
SlashNewDone: "an fara sabon zama — an ajiye rubutun da ya gabata",
SlashNewFailed: "ba a iya fara sabon zama ba",
SlashUnavailable: "umarni baya samuwa a wannan ginawa",
SlashUnknown: "umarnin da ba a sani ba",
SlashTodoCleared: "an kawar da jerin ayyuka",
SlashHelp: "umarni: /audit · /search · /compact · /new · /todo · /model (canja model) · /mcp · /skill · /hooks · /memory · /help · da kuma skills (/init, /explore, …)",
SlashPromptEmpty: "MCP prompt bai dawo da wani abu da za a aika ba",
SlashMCPNone: "babu sabobin MCP da aka saita — ƙara shigar [[plugins]] a cikin ok.toml",
CompHintSlash: "↑/↓ motsi · Tab/Enter zaɓi · Esc rufe",
CompHintFile: "↑/↓ motsi · Tab/Enter buɗe babban fayil ko zaɓi fayil · Esc rufe",
CmdNew: "ƙirƙiri sabon zama",
CmdCompact: "taƙaita mahallin",
CmdModel: "canja model",
CmdMemory: "nuna fayilolin ƙwaƙwalwa",
CmdMcp: "sabobin MCP",
CmdHooks: "sarrafa hooks",
CmdSkill: "sarrafa skills",
CmdAudit: "tabbatar da hanyar duba",
CmdSearch: "bincika tarihi",
CmdHelp: "lissafa umarni",
CmdTodo: "kawar da jerin ayyuka",
ArgSkillShow: "nuna jikin skill",
ArgSkillNew: "ƙirƙiri sabon skill",
ArgSkillPaths: "nuna hanyoyin ganowa",
ArgMcpAdd: "haɗa sabar",
ArgMcpRemove: "cire uwar garken",
ArgMcpConnected: "an haɗa",
ArgHooksTrust: "amince da ƙugiyoyin wannan aikin",
ArgModelCurrent: "na yanzu",
ListModelsHeaderFmt: "samfura (mai aiki: %s)",
ListModelsHint: "canza tare da mai sauya samfur, ko rubuta /model <mai bayarwa/samfur>",
ListMemoryHeader: "fayilolin ƙwaƙwalwa",
ListMemoryNone: "ƙwaƙwalwa: babu — ƙara da “#<bayanin kula>” ko gudanar /init don samar da AGENTS.md",
ListSkillsHeaderFmt: "ƙwarewa (%d)",
ListSkillsNone: "ƙwarewa: babu wanda aka ayyana — kira wani ginannen kamar /init, ko rubuta ɗaya tare da install_skill",
ListHooksHeaderFmt: "ƙugiyoyi (%d masu aiki)",
ListHooksNone: "ƙugiyoyi: babu mai aiki — saita a .ok/settings.json (aikin, bayan amincewa) ko ~/.ok/settings.json (duniya)",
ListMcpHeader: "uwar garken mcp",
ListMcpNone: "mcp: babu uwar garken da aka haɗa — ƙara ɗaya a ok.toml ([[plugins]]) ko .mcp.json na aikin",
SelectProvidersLabel: "Zaɓi masu bayarwa don kunna",
EnterAPIKeysHeader: "Shigar da maɓallan API (Enter don tsallakewa kuma saita daga baya a .env):",
MissingKeyIntro: "ok.toml yana shirye — kawai maɓallin API ya rage.",
WroteFileFmt: "An rubuta %s",
SetupComplete: "Saiti ya kammala.",
SetupCancelled: "an soke saitin.",
TryHintFmt: "Gwada: %s",
NextHint: "Na gaba: saita maɓallin API ɗinka (export DEEPSEEK_API_KEY=... ko ƙara zuwa .env), sannan ka gudanar da `ok run \\\"your task\\\"`.",
ConfirmReconfigureFmt: "%s ya riga ya wanzu. Sake daidaitawa kuma a sake rubutawa?",
KeepingExisting: "Ana ajiye tsarin da ke akwai.",
NotOverwritingFmt: "%s ya riga ya wanzu; ba a sake rubutawa ba",
UnknownCommandFmt: "umarnin da ba a sani ba %q",
UsageRunHint: "amfani: ok run [--model NAME] <task>",
ErrorPrefix: "kuskure:",
WriteConfigErr: "rubuta config:",
WriteEnvErr: "rubuta .env:",
SelectOneHint: "(↑/↓ · Enter · q don soke)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Hausa is the Hausa catalog (auto-translated).
var Hindi = Messages{
WelcomeTitleFmt: "%s में आपका स्वागत है",
NoConfigYet: "अभी तक कोई कॉन्फ़िगरेशन नहीं मिला — आइए इसे सेट करें।",
StartingChatFmt: "%s शुरू हो रहा है…",
SetKeyHint: "अपनी API कुंजी सेट करें, फिर `ok chat` चलाएँ।",
ConfigLabel: "कॉन्फ़िग",
ModelsLabel: "मॉडल",
ConfigNotFound: "नहीं मिला — बिल्ट-इन डिफ़ॉल्ट का उपयोग कर रहा है",
ConfigErrorFmt: "%s — त्रुटि: %v",
NoKey: "कोई कुंजी नहीं",
Ready: "तैयार",
GetStarted: "शुरू करें",
StepScaffold: "ok.toml स्कैफ़ोल्ड करें",
StepSetKey: "API कुंजी सेट करें",
InitHint: "प्रोजेक्ट मेमोरी (AGENTS.md) सत्र में उत्पन्न होती है: `ok chat` चलाएँ, फिर `/init` — मॉडल कोडबेस का विश्लेषण करता है और इसे लिखता है। कॉन्फ़िगरेशन के लिए, `ok setup` का उपयोग करें।",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… या .env में जोड़ें",
StepChatDesc: "इंटरैक्टिव सत्र",
StepRunDesc: "एक-शॉट कार्य",
HelpFooter: "ok help · सभी कमांड",
ChatTip: "संदर्भ कई बार में रखा जाता है। बाहर निकलने के लिए 'exit' या Ctrl-D टाइप करें।",
TurnCancelled: "रद्द — प्रॉम्प्ट पर वापस",
NoSessionToResume: "पुनः आरंभ करने के लिए कोई सहेजा गया सत्र नहीं — `ok chat` से नया सत्र शुरू करें",
ResumeRequiresTTY: "--resume के लिए एक इंटरैक्टिव टर्मिनल आवश्यक है; सबसे हाल के सत्र के लिए --continue का उपयोग करें",
PickSessionLabel: "कौन सा सत्र पुनः आरंभ करें?",
ChatStatusThinkingFmt: "%s सोच रहा है… (%ds · Esc रद्द करता है)",
ChatStatusIdle: "Tab योजना टॉगल करता है · Enter भेजता है · Ctrl+F खोज इतिहास · PgUp/PgDn स्क्रॉल · Ctrl-D बाहर निकलता है",
ChatStatusPlanApproval: "Enter/y स्वीकृत और निष्पादित करता है · n/Esc योजना जारी रखता है · PgUp/PgDn स्क्रॉल",
PlanApprovalPrompt: "योजना ऊपर तैयार है — Enter/y स्वीकृत और निष्पादित करें, n/Esc योजना जारी रखें",
ChatStatusToolApproval: "y एक बार स्वीकृत · a इस सत्र की अनुमति · n अस्वीकार · Ctrl-C बारी रद्द करता है",
AskTypeSomething: "कुछ और टाइप करें",
AskTypingHint: "नीचे टाइप करें, Enter पुष्टि करता है",
AskChatInstead: "कोई नहीं — बस चैट करें",
ChatStatusQuestion: "↑/↓ घुमाएँ · संख्या चुनें · space बहुविकल्प · Enter पुष्टि · ←/→ स्विच · Esc रद्द",
ToolApprovalPromptFmt: "%s%s की अनुमति दें? — [y] एक बार · [a] इस सत्र · [n] नहीं",
SlashCompactDone: "सत्र संकुचित — पुराने मध्य भाग को सारांश से बदल दिया गया, हाल के मोड़ रखे गए",
SlashCompactFailed: "संकुचन विफल",
SlashNewDone: "नया सत्र शुरू — पिछला ट्रांसक्रिप्ट सहेजा गया",
SlashNewFailed: "नया सत्र शुरू नहीं किया जा सका",
SlashUnavailable: "इस बिल्ड में कमांड उपलब्ध नहीं है",
SlashUnknown: "अज्ञात कमांड",
SlashTodoCleared: "कार्य सूची हटा दी गई",
SlashHelp: "कमांड: /audit · /search · /compact · /new · /todo · /model (मॉडल बदलें) · /mcp · /skill · /hooks · /memory · /help · साथ ही स्किल्स (/init, /explore, …)",
SlashPromptEmpty: "MCP प्रॉम्प्ट ने भेजने के लिए कोई सामग्री नहीं लौटाई",
SlashMCPNone: "कोई MCP सर्वर कॉन्फ़िगर नहीं — ok.toml में [[plugins]] एंट्री जोड़ें",
CompHintSlash: "↑/↓ घुमाएँ · Tab/Enter चुनें · Esc बंद करें",
CompHintFile: "↑/↓ घुमाएँ · Tab/Enter फ़ोल्डर खोलें या फ़ाइल चुनें · Esc बंद करें",
CmdNew: "नया सत्र शुरू करें",
CmdCompact: "संदर्भ संक्षिप्त करें",
CmdModel: "मॉडल बदलें",
CmdMemory: "मेमोरी फ़ाइलें दिखाएँ",
CmdMcp: "MCP सर्वर",
CmdHooks: "हुक प्रबंधित करें",
CmdSkill: "स्किल प्रबंधित करें",
CmdAudit: "ऑडिट ट्रेल सत्यापित करें",
CmdSearch: "इतिहास खोजें",
CmdHelp: "कमांड सूचीबद्ध करें",
CmdTodo: "कार्य सूची हटाएँ",
ArgSkillShow: "स्किल का बॉडी दिखाएँ",
ArgSkillNew: "नई स्किल तैयार करें",
ArgSkillPaths: "डिस्कवरी पथ दिखाएँ",
ArgMcpAdd: "सर्वर कनेक्ट करें",
ArgMcpRemove: "सर्वर को डिस्कनेक्ट करें",
ArgMcpConnected: "कनेक्टेड",
ArgHooksTrust: "इस प्रोजेक्ट के हुक्स पर भरोसा करें",
ArgModelCurrent: "वर्तमान",
ListModelsHeaderFmt: "मॉडल (सक्रिय: %s)",
ListModelsHint: "मॉडल स्विचर से स्विच करें, या /model <provider/model> टाइप करें",
ListMemoryHeader: "मेमोरी फ़ाइलें",
ListMemoryNone: "मेमोरी: कोई नहीं — \\\"#<नोट>\\\" जोड़ें या AGENTS.md जनरेट करने के लिए /init चलाएँ",
ListSkillsHeaderFmt: "कौशल (%d)",
ListSkillsNone: "कौशल: कोई परिभाषित नहीं — /init जैसा बिल्ट-इन कॉल करें, या install_skill से एक बनाएँ",
ListHooksHeaderFmt: "हुक्स (%d सक्रिय)",
ListHooksNone: "हुक्स: कोई सक्रिय नहीं — .ok/settings.json (प्रोजेक्ट, भरोसे के बाद) या ~/.ok/settings.json (ग्लोबल) में कॉन्फ़िगर करें",
ListMcpHeader: "एमसीपी सर्वर",
ListMcpNone: "एमसीपी: कोई सर्वर कनेक्टेड नहीं — ok.toml ([[plugins]]) या प्रोजेक्ट .mcp.json में एक जोड़ें",
SelectProvidersLabel: "सक्षम करने के लिए प्रदाता चुनें",
EnterAPIKeysHeader: "API कुंजियाँ दर्ज करें (छोड़ने के लिए Enter दबाएँ और बाद में .env में सेट करें):",
MissingKeyIntro: "ok.toml तैयार है — बस एक API कुंजी दूर है।",
WroteFileFmt: "%s लिखा गया",
SetupComplete: "सेटअप पूर्ण।",
SetupCancelled: "सेटअप रद्द किया गया।",
TryHintFmt: "प्रयास करें: %s",
NextHint: "अगला: अपनी API कुंजी सेट करें (export DEEPSEEK_API_KEY=... या .env में जोड़ें), फिर `ok run \\\"अपना कार्य\\\"` चलाएँ।",
ConfirmReconfigureFmt: "%s पहले से मौजूद है। पुनः कॉन्फ़िगर करें और ओवरराइट करें?",
KeepingExisting: "मौजूदा कॉन्फ़िगरेशन रखा जा रहा है।",
NotOverwritingFmt: "%s पहले से मौजूद है; ओवरराइट नहीं किया जा रहा",
UnknownCommandFmt: "अज्ञात कमांड %q",
UsageRunHint: "उपयोग: ok run [--model NAME] <कार्य>",
ErrorPrefix: "त्रुटि:",
WriteConfigErr: "कॉन्फ़िगरेशन लिखें:",
WriteEnvErr: ".env लिखें:",
SelectOneHint: "(↑/↓ · Enter · रद्द करने के लिए q)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Hindi is the हिन्दी catalog (auto-translated).
var Indonesian = Messages{
WelcomeTitleFmt: "Selamat datang di %s",
NoConfigYet: "Belum ada konfigurasi — mari kita atur.",
StartingChatFmt: "Memulai %s…",
SetKeyHint: "Atur kunci API Anda, lalu jalankan `ok chat`.",
ConfigLabel: "konfigurasi",
ModelsLabel: "model",
ConfigNotFound: "tidak ditemukan — menggunakan bawaan",
ConfigErrorFmt: "%s — kesalahan: %v",
NoKey: "tidak ada kunci",
Ready: "siap",
GetStarted: "Mulai",
StepScaffold: "scaffold ok.toml",
StepSetKey: "atur kunci API",
InitHint: "Memori proyek (AGENTS.md) dibuat dalam sesi: jalankan `ok chat`, lalu `/init` — model menganalisis basis kode dan menulisnya. Untuk konfigurasi, gunakan `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… atau tambahkan ke .env",
StepChatDesc: "sesi interaktif",
StepRunDesc: "tugas satu kali",
HelpFooter: "ok help · semua perintah",
ChatTip: "Konteks dipertahankan antar giliran. Ketik 'exit' atau Ctrl-D untuk keluar.",
TurnCancelled: "dibatalkan — kembali ke prompt",
NoSessionToResume: "tidak ada sesi tersimpan untuk dilanjutkan — mulai yang baru dengan `ok chat`",
ResumeRequiresTTY: "--resume membutuhkan terminal interaktif; gunakan --continue untuk sesi terbaru",
PickSessionLabel: "Lanjutkan sesi yang mana?",
ChatStatusThinkingFmt: "%s berpikir… (%ds · Esc membatalkan)",
ChatStatusIdle: "Tab beralih rencana · Enter kirim · Ctrl+F cari riwayat · PgUp/PgDn gulir · Ctrl-D keluar",
ChatStatusPlanApproval: "Enter/y setujui & jalankan · n/Esc tetap rencanakan · PgUp/PgDn gulir",
PlanApprovalPrompt: "Rencana siap di atas — Enter/y untuk setujui & jalankan, n/Esc untuk tetap rencanakan",
ChatStatusToolApproval: "y setujui sekali · a izinkan sesi ini · n tolak · Ctrl-C batalkan giliran",
AskTypeSomething: "Ketik sesuatu yang lain",
AskTypingHint: "ketik di bawah, Enter untuk konfirmasi",
AskChatInstead: "Tidak ada — hanya ngobrol",
ChatStatusQuestion: "↑/↓ gerak · nomor untuk pilih · spasi multi · Enter konfirmasi · ←/→ ganti · Esc batal",
ToolApprovalPromptFmt: "Izinkan %s%s? — [y] sekali · [a] sesi ini · [n] tidak",
SlashCompactDone: "sesi dipadatkan — bagian tengah lama diganti ringkasan, putaran terakhir dipertahankan",
SlashCompactFailed: "pemadatan gagal",
SlashNewDone: "sesi baru dimulai — transkrip sebelumnya disimpan",
SlashNewFailed: "tidak dapat memulai sesi baru",
SlashUnavailable: "perintah tidak tersedia di versi ini",
SlashUnknown: "perintah tidak dikenal",
SlashTodoCleared: "daftar tugas dihapus",
SlashHelp: "Perintah: /audit · /search · /compact · /new · /todo · /model (ganti model) · /mcp · /skill · /hooks · /memory · /help · plus skill (/init, /explore, …)",
SlashPromptEmpty: "prompt MCP tidak mengembalikan konten untuk dikirim",
SlashMCPNone: "tidak ada server MCP yang dikonfigurasi — tambahkan entri [[plugins]] di ok.toml",
CompHintSlash: "↑/↓ gerak · Tab/Enter pilih · Esc tutup",
CompHintFile: "↑/↓ gerak · Tab/Enter buka folder atau pilih file · Esc tutup",
CmdNew: "fork sesi baru",
CmdCompact: "kompak konteks",
CmdModel: "ganti model",
CmdMemory: "tampilkan file memori",
CmdMcp: "server MCP",
CmdHooks: "kelola hooks",
CmdSkill: "kelola skill",
CmdAudit: "verifikasi jejak audit",
CmdSearch: "cari riwayat",
CmdHelp: "daftar perintah",
CmdTodo: "tutup daftar tugas",
ArgSkillShow: "tampilkan isi skill",
ArgSkillNew: "buat skill baru",
ArgSkillPaths: "tampilkan jalur penemuan",
ArgMcpAdd: "hubungkan server",
ArgMcpRemove: "putuskan sambungan server",
ArgMcpConnected: "terhubung",
ArgHooksTrust: "percayai proyek ini untuk hooks",
ArgModelCurrent: "saat ini",
ListModelsHeaderFmt: "model (aktif: %s)",
ListModelsHint: "ganti dengan pemilih model, atau ketik /model <penyedia/model>",
ListMemoryHeader: "file memori",
ListMemoryNone: "memori: tidak ada — tambahkan dengan “#<catatan>” atau jalankan /init untuk menghasilkan AGENTS.md",
ListSkillsHeaderFmt: "keterampilan (%d)",
ListSkillsNone: "keterampilan: tidak ada yang ditentukan — panggil bawaan seperti /init, atau buat sendiri dengan install_skill",
ListHooksHeaderFmt: "hooks (%d aktif)",
ListHooksNone: "hooks: tidak ada yang aktif — konfigurasikan di .ok/settings.json (proyek, setelah percaya) atau ~/.ok/settings.json (global)",
ListMcpHeader: "server mcp",
ListMcpNone: "mcp: tidak ada server yang terhubung — tambahkan satu di ok.toml ([[plugins]]) atau .mcp.json proyek",
SelectProvidersLabel: "Pilih penyedia untuk diaktifkan",
EnterAPIKeysHeader: "Masukkan kunci API (Enter untuk melewati dan mengatur nanti di .env):",
MissingKeyIntro: "ok.toml sudah siap — hanya selangkah lagi dari kunci API.",
WroteFileFmt: "Menulis %s",
SetupComplete: "Pengaturan selesai.",
SetupCancelled: "pengaturan dibatalkan.",
TryHintFmt: "Coba: %s",
NextHint: "Lanjut: atur kunci API Anda (export DEEPSEEK_API_KEY=... atau tambahkan ke .env), lalu jalankan `ok run \\\"tugas Anda\\\"`.",
ConfirmReconfigureFmt: "%s sudah ada. Konfigurasi ulang dan timpa?",
KeepingExisting: "Mempertahankan konfigurasi yang ada.",
NotOverwritingFmt: "%s sudah ada; tidak menimpa",
UnknownCommandFmt: "perintah tidak dikenal %q",
UsageRunHint: "penggunaan: ok run [--model NAMA] <tugas>",
ErrorPrefix: "kesalahan:",
WriteConfigErr: "tulis konfigurasi:",
WriteEnvErr: "tulis .env:",
SelectOneHint: "(↑/↓ · Enter · q untuk batal)",
SelectManyHint: "(↑/↓ · Spasi · Enter · q)",
}
Indonesian is the Bahasa Indonesia catalog (auto-translated).
var Italian = Messages{
WelcomeTitleFmt: "Benvenuto su %s",
NoConfigYet: "Nessuna configurazione trovata — impostiamola.",
StartingChatFmt: "Avvio di %s…",
SetKeyHint: "Imposta la tua chiave API, poi esegui `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "modelli",
ConfigNotFound: "non trovato — utilizzo impostazioni predefinite",
ConfigErrorFmt: "%s — errore: %v",
NoKey: "nessuna chiave",
Ready: "pronto",
GetStarted: "Inizia",
StepScaffold: "scaffold ok.toml",
StepSetKey: "imposta chiave API",
InitHint: "La memoria del progetto (AGENTS.md) viene generata in sessione: esegui `ok chat`, poi `/init` — il modello analizza il codice e lo scrive. Per la configurazione, usa `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… o aggiungi a .env",
StepChatDesc: "sessione interattiva",
StepRunDesc: "attività singola",
HelpFooter: "ok help · tutti i comandi",
ChatTip: "Il contesto viene mantenuto tra le interazioni. Digita 'exit' o Ctrl-D per uscire.",
TurnCancelled: "annullato — torna al prompt",
NoSessionToResume: "nessuna sessione salvata da riprendere — avviane una nuova con `ok chat`",
ResumeRequiresTTY: "--resume necessita di un terminale interattivo; usa --continue per la sessione più recente",
PickSessionLabel: "Riprendere quale sessione?",
ChatStatusThinkingFmt: "%s sta pensando… (%ds · Esc annulla)",
ChatStatusIdle: "Tab attiva/disattiva piano · Invio invia · Ctrl+F cerca cronologia · PgUp/PgDn scorre · Ctrl-D esce",
ChatStatusPlanApproval: "Invio/y approva ed esegue · n/Esc continua a pianificare · PgUp/PgDn scorre",
PlanApprovalPrompt: "Piano pronto sopra — Invio/y per approvare ed eseguire, n/Esc per continuare a pianificare",
ChatStatusToolApproval: "y approva una volta · a consenti questa sessione · n nega · Ctrl-C annulla il turno",
AskTypeSomething: "Digita qualcos'altro",
AskTypingHint: "digita sotto, Invio per confermare",
AskChatInstead: "Nessuno — solo chat",
ChatStatusQuestion: "↑/↓ muovi · numero per selezionare · spazio multipli · Invio conferma · ←/→ cambia · Esc annulla",
ToolApprovalPromptFmt: "Consentire %s%s? — [y] una volta · [a] questa sessione · [n] no",
SlashCompactDone: "sessione compattata — parte centrale più vecchia sostituita da un riepilogo, turni recenti mantenuti",
SlashCompactFailed: "compattazione fallita",
SlashNewDone: "nuova sessione avviata — trascrizione precedente salvata",
SlashNewFailed: "impossibile avviare una nuova sessione",
SlashUnavailable: "comando non disponibile in questa build",
SlashUnknown: "comando sconosciuto",
SlashTodoCleared: "lista attività eliminata",
SlashHelp: "Comandi: /audit · /search · /compact · /new · /todo · /model (cambia modello) · /mcp · /skill · /hooks · /memory · /help · più abilità (/init, /explore, …)",
SlashPromptEmpty: "il prompt MCP non ha restituito contenuti da inviare",
SlashMCPNone: "nessun server MCP configurato — aggiungi una voce [[plugins]] in ok.toml",
CompHintSlash: "↑/↓ sposta · Tab/Invio seleziona · Esc chiude",
CompHintFile: "↑/↓ sposta · Tab/Invio apre cartella o seleziona file · Esc chiude",
CmdNew: "avvia una nuova sessione",
CmdCompact: "compattezza contesto",
CmdModel: "cambia modello",
CmdMemory: "mostra file di memoria",
CmdMcp: "server MCP",
CmdHooks: "gestisci hook",
CmdSkill: "gestisci abilità",
CmdAudit: "verifica traccia di audit",
CmdSearch: "cerca nella cronologia",
CmdHelp: "elenco comandi",
CmdTodo: "chiudi l'elenco delle attività",
ArgSkillShow: "mostra il corpo di un'abilità",
ArgSkillNew: "crea una nuova abilità",
ArgSkillPaths: "mostra i percorsi di scoperta",
ArgMcpAdd: "connetti un server",
ArgMcpRemove: "disconnetti un server",
ArgMcpConnected: "connesso",
ArgHooksTrust: "fidati degli hook di questo progetto",
ArgModelCurrent: "corrente",
ListModelsHeaderFmt: "modelli (attivi: %s)",
ListModelsHint: "cambia con il selettore di modelli, o digita /model <provider/modello>",
ListMemoryHeader: "file di memoria",
ListMemoryNone: "memoria: nessuna — aggiungi con “#<nota>” o esegui /init per generare AGENTS.md",
ListSkillsHeaderFmt: "competenze (%d)",
ListSkillsNone: "competenze: nessuna definita — invoca un comando integrato come /init, o creane una con install_skill",
ListHooksHeaderFmt: "hook (%d attivi)",
ListHooksNone: "hook: nessuno attivo — configura in .ok/settings.json (progetto, dopo la fiducia) o ~/.ok/settings.json (globale)",
ListMcpHeader: "server mcp",
ListMcpNone: "mcp: nessun server connesso — aggiungine uno in ok.toml ([[plugins]]) o in un file .mcp.json del progetto",
SelectProvidersLabel: "Seleziona i provider da abilitare",
EnterAPIKeysHeader: "Inserisci le chiavi API (Invio per saltare e impostare dopo in .env):",
MissingKeyIntro: "ok.toml è pronto — manca solo una chiave API.",
WroteFileFmt: "Scritto %s",
SetupComplete: "Configurazione completata.",
SetupCancelled: "configurazione annullata.",
TryHintFmt: "Prova: %s",
NextHint: "Prossimo: imposta la tua chiave API (export DEEPSEEK_API_KEY=... o aggiungi a .env), poi esegui `ok run \\\"la tua attività\\\"`.",
ConfirmReconfigureFmt: "%s esiste già. Riconfigurare e sovrascrivere?",
KeepingExisting: "Mantenimento della configurazione esistente.",
NotOverwritingFmt: "%s esiste già; non sovrascrivere",
UnknownCommandFmt: "comando sconosciuto %q",
UsageRunHint: "uso: ok run [--model NOME] <attività>",
ErrorPrefix: "errore:",
WriteConfigErr: "scrittura configurazione:",
WriteEnvErr: "scrittura .env:",
SelectOneHint: "(↑/↓ · Invio · q per annullare)",
SelectManyHint: "(↑/↓ · Spazio · Invio · q)",
}
Italian is the Italiano catalog (auto-translated).
var Japanese = Messages{
Subtitle: "設定とプラグイン駆動のコーディングエージェント",
WelcomeTitleFmt: "%sへようこそ",
NoConfigYet: "設定が見つかりません — セットアップしましょう。",
StartingChatFmt: "%sを開始中…",
SetKeyHint: "APIキーを設定してから `ok chat` を実行してください。",
ConfigLabel: "設定",
ModelsLabel: "モデル",
ConfigNotFound: "見つかりません — デフォルトを使用します",
ConfigErrorFmt: "%s — エラー: %v",
NoKey: "キーがありません",
Ready: "準備完了",
GetStarted: "はじめに",
StepScaffold: "ok.tomlをスキャフォールド",
StepSetKey: "APIキーを設定",
InitHint: "プロジェクトメモリ(AGENTS.md)はセッション内で生成されます: `ok chat` を実行し、`/init` を実行すると、モデルがコードベースを分析して書き込みます。設定には `ok setup` を使用してください。",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… または .env に追加",
StepChatDesc: "インタラクティブセッション",
StepRunDesc: "ワンショットタスク",
HelpFooter: "ok help · すべてのコマンド",
ChatTip: "コンテキストはターン間で保持されます。'exit' または Ctrl-D で終了します。",
TurnCancelled: "キャンセルされました — プロンプトに戻ります",
NoSessionToResume: "復元する保存済みセッションがありません — `ok chat` で新しいセッションを開始してください",
ResumeRequiresTTY: "--resume はインタラクティブターミナルが必要です; 最新のセッションを続けるには --continue を指定してください",
PickSessionLabel: "どのセッションを復元しますか?",
ChatStatusThinkingFmt: "%s 考え中… (%ds · Esc でキャンセル)",
ChatStatusIdle: "Tab で計画切替 · Enter で送信 · Ctrl+F で履歴検索 · PgUp/PgDn でスクロール · Ctrl-D で終了",
ChatStatusPlanApproval: "Enter/y で承認・実行 · n/Esc で計画継続 · PgUp/PgDn でスクロール",
PlanApprovalPrompt: "上記の計画準備完了 — Enter/y で承認・実行、n/Esc で計画継続",
ChatStatusToolApproval: "y で1回承認 · a でこのセッション許可 · n で拒否 · Ctrl-C でターンキャンセル",
AskTypeSomething: "他の内容を入力",
AskTypingHint: "下に入力、Enter で確定",
AskChatInstead: "なし — チャットのみ",
ChatStatusQuestion: "↑/↓ で移動 · 数字で選択 · スペースで複数選択 · Enter で確定 · ←/→ で切替 · Esc でキャンセル",
ToolApprovalPromptFmt: "%s%s を許可しますか? — [y] 1回のみ · [a] このセッション · [n] いいえ",
SlashCompactDone: "セッションを圧縮しました — 古い中間部分は要約に置き換え、最近のターンは保持",
SlashCompactFailed: "圧縮に失敗しました",
SlashNewDone: "新しいセッションを開始しました — 前のトランスクリプトは保存済み",
SlashNewFailed: "新しいセッションを開始できませんでした",
SlashUnavailable: "このビルドではコマンドは利用できません",
SlashUnknown: "不明なコマンド",
SlashTodoCleared: "タスクリストを消去しました",
SlashHelp: "コマンド: /audit · /search · /compact · /new · /todo · /model (モデル切替) · /mcp · /skill · /hooks · /memory · /help · スキル (/init, /explore, …)",
SlashPromptEmpty: "MCPプロンプトは送信するコンテンツを返しませんでした",
SlashMCPNone: "MCPサーバーが設定されていません — ok.tomlに[[plugins]]エントリを追加してください",
CompHintSlash: "↑/↓ 移動 · Tab/Enter 選択 · Esc 閉じる",
CompHintFile: "↑/↓ 移動 · Tab/Enter フォルダを開くかファイルを選択 · Esc 閉じる",
CmdNew: "新しいセッションをフォーク",
CmdCompact: "コンテキストを圧縮",
CmdModel: "モデル切替",
CmdMemory: "メモリファイルを表示",
CmdMcp: "MCPサーバー",
CmdHooks: "フック管理",
CmdSkill: "スキル管理",
CmdAudit: "監査証跡を確認",
CmdSearch: "履歴を検索",
CmdHelp: "コマンド一覧",
CmdTodo: "タスクリストを閉じる",
ArgSkillList: "スキルを一覧表示",
ArgSkillShow: "スキルの内容を表示",
ArgSkillNew: "新しいスキルをスキャフォールド",
ArgSkillPaths: "探索パスを表示",
ArgMcpAdd: "サーバーに接続",
ArgMcpRemove: "サーバーを切断する",
ArgMcpList: "設定済みサーバーを表示",
ArgMcpConnected: "接続済み",
ArgHooksTrust: "このプロジェクトのフックを信頼する",
ArgHooksList: "アクティブなフックを一覧表示",
ArgModelCurrent: "現在",
ListModelsHeaderFmt: "モデル (アクティブ: %s)",
ListModelsHint: "モデルスイッチャーで切り替えるか、/model <プロバイダー/モデル> と入力してください",
ListMemoryHeader: "メモリファイル",
ListMemoryNone: "メモリ: なし — 「#<メモ>」で追加するか、/init を実行して AGENTS.md を生成してください",
ListSkillsHeaderFmt: "スキル (%d)",
ListSkillsNone: "スキル: 定義なし — /init のような組み込みスキルを呼び出すか、install_skill で作成してください",
ListHooksHeaderFmt: "フック (%d アクティブ)",
ListHooksNone: "フック: アクティブなし — .ok/settings.json (プロジェクト、信頼後) または ~/.ok/settings.json (グローバル) で設定してください",
ListMcpHeader: "MCP サーバー",
ListMcpNone: "MCP: 接続されたサーバーはありません — ok.toml ([[plugins]]) またはプロジェクトの .mcp.json に追加してください",
SelectProvidersLabel: "有効にするプロバイダーを選択",
EnterAPIKeysHeader: "API キーを入力 (Enter でスキップし、後で .env に設定):",
MissingKeyIntro: "ok.toml の準備ができました — API キーを設定するだけです。",
WroteFileFmt: "%s を書き込みました",
SetupComplete: "セットアップが完了しました。",
SetupCancelled: "セットアップがキャンセルされました。",
TryHintFmt: "試す: %s",
NextHint: "次: APIキーを設定してください(export DEEPSEEK_API_KEY=... または .envに追加)、その後 `ok run \\\"あなたのタスク\\\"` を実行してください。",
ConfirmReconfigureFmt: "%s は既に存在します。再設定して上書きしますか?",
KeepingExisting: "既存の設定を保持します。",
NotOverwritingFmt: "%s は既に存在します。上書きしません。",
UnknownCommandFmt: "不明なコマンド %q",
UsageRunHint: "使用方法: ok run [--model NAME] <タスク>",
ErrorPrefix: "エラー:",
WriteConfigErr: "設定の書き込み:",
WriteEnvErr: ".envの書き込み:",
SelectOneHint: "(↑/↓ · Enter · q でキャンセル)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
UsageBody: `ok — 設定とプラグイン駆動のコーディングエージェント(マルチモデル)
使い方:
ok chat [--model 名前] インタラクティブセッション(マルチターン)
ok run [--model 名前] [--max-steps N] <タスク> タスクを実行して終了
ok serve [--model 名前] [--addr ホスト:ポート] セッションをHTTP+SSEで提供(ブラウザクライアントは /)
ok setup [パス] 対話型設定ウィザード
ok mcp <add|remove|list> MCPサーバー管理
ok update [--check] アップデートの確認と適用
ok session <export|import|list> セッションのエクスポート/インポート/一覧
ok doctor 環境診断
ok audit 実行監査証跡の表示
ok version バージョン表示
ok help ヘルプ表示
`,
}
Japanese is the 日本語 catalog (auto-translated).
var Korean = Messages{
Subtitle: "설정 및 플러그인 기반 코딩 에이전트",
WelcomeTitleFmt: "%s에 오신 것을 환영합니다",
NoConfigYet: "아직 구성이 없습니다 — 설정해 봅시다.",
StartingChatFmt: "%s 시작 중…",
SetKeyHint: "API 키를 설정한 다음 `ok chat`을 실행하세요.",
ConfigLabel: "구성",
ModelsLabel: "모델",
ConfigNotFound: "찾을 수 없음 — 기본값 사용",
ConfigErrorFmt: "%s — 오류: %v",
NoKey: "키 없음",
Ready: "준비",
GetStarted: "시작하기",
StepScaffold: "ok.toml 스캐폴드",
StepSetKey: "API 키 설정",
InitHint: "프로젝트 메모리(AGENTS.md)는 세션 내에서 생성됩니다: `ok chat`을 실행한 다음 `/init`을 실행하세요 — 모델이 코드베이스를 분석하고 작성합니다. 구성은 `ok setup`을 사용하세요.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… 또는 .env에 추가",
StepChatDesc: "대화형 세션",
StepRunDesc: "일회성 작업",
HelpFooter: "ok 도움말 · 모든 명령",
ChatTip: "컨텍스트는 턴 간에 유지됩니다. 종료하려면 'exit' 또는 Ctrl-D를 입력하세요.",
TurnCancelled: "취소됨 — 프롬프트로 돌아가기",
NoSessionToResume: "저장된 세션이 없어 재개할 수 없습니다 — `ok chat`으로 새 세션을 시작하세요",
ResumeRequiresTTY: "--resume은 대화형 터미널이 필요합니다; 가장 최근 세션을 계속하려면 --continue를 사용하세요",
PickSessionLabel: "어떤 세션을 재개할까요?",
ChatStatusThinkingFmt: "%s 생각 중… (%ds · Esc 취소)",
ChatStatusIdle: "Tab 계획 전환 · Enter 전송 · Ctrl+F 검색 기록 · PgUp/PgDn 스크롤 · Ctrl-D 종료",
ChatStatusPlanApproval: "Enter/y 승인 및 실행 · n/Esc 계획 유지 · PgUp/PgDn 스크롤",
PlanApprovalPrompt: "위에 계획 준비됨 — Enter/y로 승인 및 실행, n/Esc로 계속 계획",
ChatStatusToolApproval: "y 한 번 승인 · a 이 세션 허용 · n 거부 · Ctrl-C 턴 취소",
AskTypeSomething: "다른 내용 입력",
AskTypingHint: "아래에 입력, Enter로 확인",
AskChatInstead: "없음 — 그냥 채팅",
ChatStatusQuestion: "↑/↓ 이동 · 번호 선택 · space 다중 선택 · Enter 확인 · ←/→ 전환 · Esc 취소",
ToolApprovalPromptFmt: "%s%s 허용? — [y] 한 번 · [a] 이 세션 · [n] 아니요",
SlashCompactDone: "세션 압축 완료 — 오래된 중간 부분이 요약으로 대체되었고, 최근 턴은 유지됨",
SlashCompactFailed: "압축 실패",
SlashNewDone: "새 세션 시작됨 — 이전 대화 내용 저장됨",
SlashNewFailed: "새 세션을 시작할 수 없습니다",
SlashUnavailable: "이 빌드에서는 명령을 사용할 수 없습니다",
SlashUnknown: "알 수 없는 명령",
SlashTodoCleared: "작업 목록 해제됨",
SlashHelp: "명령어: /audit · /search · /compact · /new · /todo · /model (모델 전환) · /mcp · /skill · /hooks · /memory · /help · 추가 스킬 (/init, /explore, …)",
SlashPromptEmpty: "MCP 프롬프트가 보낼 내용을 반환하지 않았습니다.",
SlashMCPNone: "MCP 서버가 구성되지 않았습니다. — ok.toml에 [[plugins]] 항목을 추가하세요.",
CompHintSlash: "↑/↓ 이동 · Tab/Enter 선택 · Esc 닫기",
CompHintFile: "↑/↓ 이동 · Tab/Enter 폴더 열기 또는 파일 선택 · Esc 닫기",
CmdNew: "새 세션 포크",
CmdCompact: "컨텍스트 압축",
CmdModel: "모델 전환",
CmdMemory: "메모리 파일 보기",
CmdMcp: "MCP 서버",
CmdHooks: "훅 관리",
CmdSkill: "스킬 관리",
CmdAudit: "감사 추적 확인",
CmdSearch: "기록 검색",
CmdHelp: "명령어 목록",
CmdTodo: "작업 목록 닫기",
ArgSkillList: "스킬 목록",
ArgSkillShow: "스킬 본문 보기",
ArgSkillNew: "새 스킬 스캐폴드",
ArgSkillPaths: "검색 경로 보기",
ArgMcpAdd: "서버 연결",
ArgMcpRemove: "서버 연결 해제",
ArgMcpList: "구성된 서버 표시",
ArgMcpConnected: "연결됨",
ArgHooksTrust: "이 프로젝트의 훅 신뢰",
ArgHooksList: "활성 훅 목록",
ArgModelCurrent: "현재",
ListModelsHeaderFmt: "모델 (활성: %s)",
ListModelsHint: "모델 전환기로 전환하거나 /model <provider/model> 입력",
ListMemoryHeader: "메모리 파일",
ListMemoryNone: "메모리: 없음 — \\\"#<노트>\\\"로 추가하거나 /init 실행하여 AGENTS.md 생성",
ListSkillsHeaderFmt: "스킬 (%d)",
ListSkillsNone: "스킬: 정의되지 않음 — /init 같은 내장 명령어 호출 또는 install_skill로 작성",
ListHooksHeaderFmt: "훅 (%d 활성)",
ListHooksNone: "훅: 활성화된 훅 없음 — .ok/settings.json (프로젝트, 신뢰 후) 또는 ~/.ok/settings.json (전역)에서 설정",
ListMcpHeader: "MCP 서버",
ListMcpNone: "MCP: 연결된 서버 없음 — ok.toml ([[plugins]]) 또는 프로젝트 .mcp.json에 추가",
SelectProvidersLabel: "활성화할 제공자 선택",
EnterAPIKeysHeader: "API 키 입력 (Enter 건너뛰기: 나중에 .env에서 설정):",
MissingKeyIntro: "ok.toml 준비 완료 — API 키만 있으면 됩니다.",
WroteFileFmt: "%s 작성됨",
SetupComplete: "설정 완료.",
SetupCancelled: "설정 취소됨.",
TryHintFmt: "시도: %s",
NextHint: "다음: API 키를 설정하세요 (export DEEPSEEK_API_KEY=... 또는 .env에 추가), 그런 다음 `ok run \\\"your task\\\"`를 실행하세요.",
ConfirmReconfigureFmt: "%s이(가) 이미 존재합니다. 재구성하고 덮어쓰시겠습니까?",
KeepingExisting: "기존 구성을 유지합니다.",
NotOverwritingFmt: "%s이(가) 이미 존재하므로 덮어쓰지 않습니다.",
UnknownCommandFmt: "알 수 없는 명령 %q",
UsageRunHint: "사용법: ok run [--model NAME] <task>",
ErrorPrefix: "오류:",
WriteConfigErr: "구성 쓰기 오류:",
WriteEnvErr: ".env 쓰기 오류:",
SelectOneHint: "(↑/↓ · Enter · q로 취소)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
UsageBody: `ok — 설정 및 플러그인 기반 코딩 에이전트(다중 모델)
사용법:
ok chat [--model 이름] 대화형 세션(다중 턴)
ok run [--model 이름] [--max-steps N] <작업> 작업 실행 후 종료
ok serve [--model 이름] [--addr 호스트:포트] 세션을 HTTP+SSE로 제공
ok setup [경로] 대화형 설정 마법사
ok mcp <add|remove|list> MCP 서버 관리
ok update [--check] 업데이트 확인 및 적용
ok session <export|import|list> 세션 내보내기/가져오기/목록
ok doctor 환경 진단
ok audit 실행 감사 추적 보기
ok version 버전 표시
ok help 도움말 표시
`,
}
Korean is the 한국어 catalog (auto-translated).
var M = English
M is the active catalog. DetectLanguage replaces it; English is the default so any code path that runs before detection still has text.
var Malay = Messages{
WelcomeTitleFmt: "Selamat datang ke %s",
NoConfigYet: "Tiada konfigurasi ditemui lagi — mari sediakannya.",
StartingChatFmt: "Memulakan %s…",
SetKeyHint: "Tetapkan kunci API anda, kemudian jalankan `ok chat`.",
ConfigLabel: "konfig",
ModelsLabel: "model",
ConfigNotFound: "tidak ditemui — menggunakan lalai terbina dalam",
ConfigErrorFmt: "%s — ralat: %v",
NoKey: "tiada kunci",
Ready: "sedia",
GetStarted: "Mulakan",
StepScaffold: "perancah ok.toml",
StepSetKey: "tetapkan kunci API",
InitHint: "Ingatan projek (AGENTS.md) dijana dalam sesi: jalankan `ok chat`, kemudian `/init` — model menganalisis pangkalan kod dan menulisnya. Untuk konfigurasi, gunakan `ok setup`.",
StepSetKeyHint: "eksport DEEPSEEK_API_KEY=… atau tambah ke .env",
StepChatDesc: "sesi interaktif",
StepRunDesc: "tugas satu-satu",
HelpFooter: "ok bantuan · semua arahan",
ChatTip: "Konteks dikekalkan merentas giliran. Taip 'exit' atau Ctrl-D untuk keluar.",
TurnCancelled: "dibatalkan — kembali ke gesaan",
NoSessionToResume: "tiada sesi disimpan untuk disambung — mulakan yang baharu dengan `ok chat`",
ResumeRequiresTTY: "--resume memerlukan terminal interaktif; guna --continue untuk sesi terbaru",
PickSessionLabel: "Sambung sesi yang mana?",
ChatStatusThinkingFmt: "%s berfikir… (%ds · Esc batal)",
ChatStatusIdle: "Tab togol pelan · Enter hantar · Ctrl+F cari sejarah · PgUp/PgDn skrol · Ctrl-D keluar",
ChatStatusPlanApproval: "Enter/y lulus & laksana · n/Esc terus merancang · PgUp/PgDn skrol",
PlanApprovalPrompt: "Pelan sedia di atas — Enter/y untuk lulus & laksana, n/Esc untuk terus merancang",
ChatStatusToolApproval: "y lulus sekali · a benarkan sesi ini · n tolak · Ctrl-C batal giliran",
AskTypeSomething: "Taip sesuatu yang lain",
AskTypingHint: "taip di bawah, Enter untuk sahkan",
AskChatInstead: "Tiada — cuma sembang",
ChatStatusQuestion: "↑/↓ gerak · nombor untuk pilih · ruang pelbagai · Enter sahkan · ←/→ tukar · Esc batal",
ToolApprovalPromptFmt: "Benarkan %s%s? — [y] sekali · [a] sesi ini · [n] tidak",
SlashCompactDone: "sesi dipadatkan — bahagian tengah lama diganti ringkasan, giliran terkini dikekalkan",
SlashCompactFailed: "pemadatan gagal",
SlashNewDone: "sesi baharu dimulakan — transkrip sebelumnya disimpan",
SlashNewFailed: "tidak dapat memulakan sesi baharu",
SlashUnavailable: "arahan tidak tersedia dalam binaan ini",
SlashUnknown: "arahan tidak dikenali",
SlashTodoCleared: "senarai tugas dilupuskan",
SlashHelp: "arahan: /audit · /cari · /padat · /baru · /todo · /model (tukar model) · /mcp · /skill · /hooks · /ingatan · /bantuan · plus kemahiran (/init, /explore, …)",
SlashPromptEmpty: "prompt MCP tidak mengembalikan sebarang kandungan untuk dihantar",
SlashMCPNone: "tiada pelayan MCP dikonfigurasi — tambah entri [[plugins]] dalam ok.toml",
CompHintSlash: "↑/↓ gerak · Tab/Enter pilih · Esc tutup",
CompHintFile: "↑/↓ gerak · Tab/Enter buka folder atau pilih fail · Esc tutup",
CmdNew: "fork sesi baharu",
CmdCompact: "padatkan konteks",
CmdModel: "tukar model",
CmdMemory: "tunjuk fail ingatan",
CmdMcp: "pelayan MCP",
CmdHooks: "urus hooks",
CmdSkill: "urus kemahiran",
CmdAudit: "sahkan jejak audit",
CmdSearch: "cari sejarah",
CmdHelp: "senarai arahan",
CmdTodo: "tutup senarai tugas",
ArgSkillShow: "tunjuk isi kemahiran",
ArgSkillNew: "bina kemahiran baharu",
ArgSkillPaths: "tunjuk laluan penemuan",
ArgMcpAdd: "sambung pelayan",
ArgMcpRemove: "putuskan sambungan pelayan",
ArgMcpConnected: "bersambung",
ArgHooksTrust: "percayai cangkuk projek ini",
ArgModelCurrent: "semasa",
ListModelsHeaderFmt: "model (aktif: %s)",
ListModelsHint: "tukar dengan penukar model, atau taip /model <pembekal/model>",
ListMemoryHeader: "fail memori",
ListMemoryNone: "memori: tiada — tambah dengan “#<nota>” atau jalankan /init untuk menjana AGENTS.md",
ListSkillsHeaderFmt: "kemahiran (%d)",
ListSkillsNone: "kemahiran: tiada ditakrif — panggil terbina dalam seperti /init, atau tulis satu dengan install_skill",
ListHooksHeaderFmt: "cangkuk (%d aktif)",
ListHooksNone: "cangkuk: tiada aktif — konfigurasi dalam .ok/settings.json (projek, selepas percaya) atau ~/.ok/settings.json (global)",
ListMcpHeader: "pelayan mcp",
ListMcpNone: "mcp: tiada pelayan bersambung — tambah satu dalam ok.toml ([[plugins]]) atau projek .mcp.json",
SelectProvidersLabel: "Pilih pembekal untuk diaktifkan",
EnterAPIKeysHeader: "Masukkan kunci API (Enter untuk langkau dan tetapkan kemudian dalam .env):",
MissingKeyIntro: "ok.toml sudah sedia — hanya kunci API sahaja.",
WroteFileFmt: "Menulis %s",
SetupComplete: "Persediaan selesai.",
SetupCancelled: "persediaan dibatalkan.",
TryHintFmt: "Cuba: %s",
NextHint: "Seterusnya: tetapkan kunci API anda (export DEEPSEEK_API_KEY=... atau tambah ke .env), kemudian jalankan `ok run \\\"tugas anda\\\"`.",
ConfirmReconfigureFmt: "%s sudah wujud. Konfigurasi semula dan tulis ganti?",
KeepingExisting: "Menyimpan konfigurasi sedia ada.",
NotOverwritingFmt: "%s sudah wujud; tidak menulis ganti",
UnknownCommandFmt: "perintah tidak diketahui %q",
UsageRunHint: "penggunaan: ok run [--model NAMA] <tugas>",
ErrorPrefix: "ralat:",
WriteConfigErr: "tulis konfigurasi:",
WriteEnvErr: "tulis .env:",
SelectOneHint: "(↑/↓ · Enter · q untuk batal)",
SelectManyHint: "(↑/↓ · Ruang · Enter · q)",
}
Malay is the Bahasa Melayu catalog (auto-translated).
var Persian = Messages{
WelcomeTitleFmt: "به %s خوش آمدید",
NoConfigYet: "هنوز پیکربندی پیدا نشده است — بیایید آن را تنظیم کنیم.",
StartingChatFmt: "در حال شروع %s…",
SetKeyHint: "کلید API خود را تنظیم کنید، سپس `ok chat` را اجرا کنید.",
ConfigLabel: "پیکربندی",
ModelsLabel: "مدل\u200cها",
ConfigNotFound: "پیدا نشد — استفاده از پیش\u200cفرض\u200cهای داخلی",
ConfigErrorFmt: "%s — خطا: %v",
NoKey: "بدون کلید",
Ready: "آماده",
GetStarted: "شروع کنید",
StepScaffold: "داربست ok.toml",
StepSetKey: "تنظیم کلید API",
InitHint: "حافظه پروژه (AGENTS.md) در جلسه تولید می\u200cشود: `ok chat` را اجرا کنید، سپس `/init` — مدل کدبیس را تحلیل کرده و آن را می\u200cنویسد. برای پیکربندی، از `ok setup` استفاده کنید.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… یا به .env اضافه کنید",
StepChatDesc: "جلسه تعاملی",
StepRunDesc: "وظیفه یک\u200cباره",
HelpFooter: "راهنمای ok · همه دستورات",
ChatTip: "زمینه در طول نوبت\u200cها حفظ می\u200cشود. برای خروج 'exit' یا Ctrl-D را تایپ کنید.",
TurnCancelled: "لغو شد — بازگشت به اعلان",
NoSessionToResume: "جلسه ذخیره\u200cشده\u200cای برای ادامه وجود ندارد — با `ok chat` یک جلسه جدید شروع کنید",
ResumeRequiresTTY: "--resume به ترمینال تعاملی نیاز دارد؛ برای آخرین جلسه از --continue استفاده کنید",
PickSessionLabel: "کدام جلسه ادامه یابد؟",
ChatStatusThinkingFmt: "%s در حال تفکر… (%ds · Esc لغو)",
ChatStatusIdle: "Tab تغییر وضعیت طرح · Enter ارسال · Ctrl+F جستجوی تاریخچه · PgUp/PgDn پیمایش · Ctrl-D خروج",
ChatStatusPlanApproval: "Enter/y تأیید و اجرا · n/Esc ادامه برنامه\u200cریزی · PgUp/PgDn پیمایش",
PlanApprovalPrompt: "طرح در بالا آماده است — Enter/y برای تأیید و اجرا، n/Esc برای ادامه برنامه\u200cریزی",
ChatStatusToolApproval: "y تأیید یک\u200cبار · a مجوز این جلسه · n رد · Ctrl-C لغو نوبت",
AskTypeSomething: "چیز دیگری تایپ کنید",
AskTypingHint: "در زیر تایپ کنید، Enter برای تأیید",
AskChatInstead: "هیچ\u200cکدام — فقط گفتگو",
ChatStatusQuestion: "↑/↓ حرکت · شماره برای انتخاب · فاصله چندتایی · Enter تأیید · ←/→ تغییر · Esc لغو",
ToolApprovalPromptFmt: "اجازه %s%s؟ — [y] یک\u200cبار · [a] این جلسه · [n] خیر",
SlashCompactDone: "جلسه فشرده شد — بخش میانی قدیمی با خلاصه جایگزین، نوبت\u200cهای اخیر حفظ شد",
SlashCompactFailed: "فشرده\u200cسازی ناموفق بود",
SlashNewDone: "جلسه جدید شروع شد — متن قبلی ذخیره شد",
SlashNewFailed: "شروع جلسه جدید ممکن نیست",
SlashUnavailable: "دستور در این نسخه در دسترس نیست",
SlashUnknown: "دستور ناشناخته",
SlashTodoCleared: "لیست وظایف حذف شد",
SlashHelp: "دستورات: /audit · /search · /compact · /new · /todo · /model (تغییر مدل) · /mcp · /skill · /hooks · /memory · /help · به\u200cعلاوه مهارت\u200cها (/init, /explore, …)",
SlashPromptEmpty: "درخواست MCP محتوایی برای ارسال بازنگرداند",
SlashMCPNone: "هیچ سرور MCP پیکربندی نشده است — یک ورودی [[plugins]] در ok.toml اضافه کنید",
CompHintSlash: "↑/↓ حرکت · Tab/Enter انتخاب · Esc بستن",
CompHintFile: "↑/↓ حرکت · Tab/Enter باز کردن پوشه یا انتخاب فایل · Esc بستن",
CmdNew: "ایجاد یک نشست جدید",
CmdCompact: "فشرده\u200cسازی متن",
CmdModel: "تغییر مدل",
CmdMemory: "نمایش فایل\u200cهای حافظه",
CmdMcp: "سرورهای MCP",
CmdHooks: "مدیریت هوک\u200cها",
CmdSkill: "مدیریت مهارت\u200cها",
CmdAudit: "بررسی مسیر حسابرسی",
CmdSearch: "جستجوی تاریخچه",
CmdHelp: "فهرست دستورات",
CmdTodo: "رد کردن لیست وظایف",
ArgSkillShow: "نمایش بدنه یک مهارت",
ArgSkillNew: "ایجاد یک مهارت جدید",
ArgSkillPaths: "نمایش مسیرهای کشف",
ArgMcpAdd: "اتصال یک سرور",
ArgMcpRemove: "قطع اتصال سرور",
ArgMcpConnected: "متصل",
ArgHooksTrust: "اعتماد به هوک\u200cهای این پروژه",
ArgModelCurrent: "فعلی",
ListModelsHeaderFmt: "مدل\u200cها (فعال: %s)",
ListModelsHint: "با تغییردهنده مدل جابه\u200cجا شوید، یا /model <provider/model> را تایپ کنید",
ListMemoryHeader: "فایل\u200cهای حافظه",
ListMemoryNone: "حافظه: هیچ — با «#<note>» اضافه کنید یا /init را اجرا کنید تا AGENTS.md تولید شود",
ListSkillsHeaderFmt: "مهارت\u200cها (%d)",
ListSkillsNone: "مهارت\u200cها: هیچ\u200cکدام تعریف نشده — یک مهارت داخلی مانند /init را فراخوانی کنید، یا یکی را با install_skill ایجاد کنید",
ListHooksHeaderFmt: "هوک\u200cها (%d فعال)",
ListHooksNone: "هوک\u200cها: هیچ\u200cکدام فعال نیست — در .ok/settings.json (پروژه، پس از اعتماد) یا ~/.ok/settings.json (سراسری) پیکربندی کنید",
ListMcpHeader: "سرورهای MCP",
ListMcpNone: "MCP: هیچ سروری متصل نیست — یکی را در ok.toml ([[plugins]]) یا .mcp.json پروژه اضافه کنید",
SelectProvidersLabel: "ارائه\u200cدهندگان را برای فعال\u200cسازی انتخاب کنید",
EnterAPIKeysHeader: "کلیدهای API را وارد کنید (Enter برای رد کردن و تنظیم بعدی در .env):",
MissingKeyIntro: "ok.toml آماده است — فقط یک کلید API فاصله دارد.",
WroteFileFmt: "%s نوشته شد",
SetupComplete: "راه\u200cاندازی کامل شد.",
SetupCancelled: "راه\u200cاندازی لغو شد.",
TryHintFmt: "تلاش کنید: %s",
NextHint: "بعدی: کلید API خود را تنظیم کنید (export DEEPSEEK_API_KEY=... یا به .env اضافه کنید)، سپس `ok run \\\"your task\\\"` را اجرا کنید.",
ConfirmReconfigureFmt: "%s از قبل وجود دارد. دوباره پیکربندی و بازنویسی شود؟",
KeepingExisting: "نگه داشتن پیکربندی موجود.",
NotOverwritingFmt: "%s از قبل وجود دارد؛ بازنویسی نمی\u200cشود",
UnknownCommandFmt: "دستور ناشناخته %q",
UsageRunHint: "روش استفاده: ok run [--model NAME] <task>",
ErrorPrefix: "خطا:",
WriteConfigErr: "نوشتن پیکربندی:",
WriteEnvErr: "نوشتن .env:",
SelectOneHint: "(↑/↓ · Enter · q برای لغو)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Persian is the فارسی catalog (auto-translated).
var Polish = Messages{
WelcomeTitleFmt: "Witamy w %s",
NoConfigYet: "Nie znaleziono jeszcze konfiguracji — skonfigurujmy ją.",
StartingChatFmt: "Uruchamianie %s…",
SetKeyHint: "Ustaw swój klucz API, a następnie uruchom `ok chat`.",
ConfigLabel: "konfiguracja",
ModelsLabel: "modele",
ConfigNotFound: "nie znaleziono — używane domyślne ustawienia wbudowane",
ConfigErrorFmt: "%s — błąd: %v",
NoKey: "brak klucza",
Ready: "gotowe",
GetStarted: "Rozpocznij",
StepScaffold: "szkielet ok.toml",
StepSetKey: "ustaw klucz API",
InitHint: "Pamięć projektu (AGENTS.md) jest generowana w sesji: uruchom `ok chat`, a następnie `/init` — model analizuje bazę kodu i zapisuje ją. Aby skonfigurować, użyj `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… lub dodaj do .env",
StepChatDesc: "sesja interaktywna",
StepRunDesc: "zadanie jednorazowe",
HelpFooter: "ok help · wszystkie polecenia",
ChatTip: "Kontekst jest zachowywany między odpowiedziami. Wpisz 'exit' lub Ctrl-D, aby zakończyć.",
TurnCancelled: "anulowano — powrót do wiersza poleceń",
NoSessionToResume: "brak zapisanej sesji do wznowienia — rozpocznij nową za pomocą `ok chat`",
ResumeRequiresTTY: "--resume wymaga terminala interaktywnego; użyj --continue dla ostatniej sesji",
PickSessionLabel: "Którą sesję wznowić?",
ChatStatusThinkingFmt: "%s myśli… (%ds · Esc anuluje)",
ChatStatusIdle: "Tab przełącza plan · Enter wysyła · Ctrl+F szuka w historii · PgUp/PgDn przewija · Ctrl-D kończy",
ChatStatusPlanApproval: "Enter/y zatwierdza i wykonuje · n/Esc kontynuuje planowanie · PgUp/PgDn przewija",
PlanApprovalPrompt: "Plan gotowy powyżej — Enter/y aby zatwierdzić i wykonać, n/Esc aby kontynuować planowanie",
ChatStatusToolApproval: "y zatwierdź raz · a zezwól na tę sesję · n odrzuć · Ctrl-C anuluje turę",
AskTypeSomething: "Wpisz coś innego",
AskTypingHint: "wpisz poniżej, Enter aby potwierdzić",
AskChatInstead: "Brak — po prostu rozmawiaj",
ChatStatusQuestion: "↑/↓ przesuń · numer aby wybrać · spacja wiele · Enter potwierdź · ←/→ przełącz · Esc anuluj",
ToolApprovalPromptFmt: "Zezwolić na %s%s? — [y] raz · [a] ta sesja · [n] nie",
SlashCompactDone: "sesja skompresowana — starsza środkowa część zastąpiona podsumowaniem, ostatnie tury zachowane",
SlashCompactFailed: "kompresja nie powiodła się",
SlashNewDone: "rozpoczęto nową sesję — poprzedni zapis zachowany",
SlashNewFailed: "nie można rozpocząć nowej sesji",
SlashUnavailable: "polecenie niedostępne w tej wersji",
SlashUnknown: "nieznane polecenie",
SlashTodoCleared: "lista zadań usunięta",
SlashHelp: "Polecenia: /audit · /search · /compact · /new · /todo · /model (zmień model) · /mcp · /skill · /hooks · /memory · /help · oraz umiejętności (/init, /explore, …)",
SlashPromptEmpty: "monit MCP nie zwrócił treści do wysłania",
SlashMCPNone: "brak skonfigurowanych serwerów MCP — dodaj wpis [[plugins]] w ok.toml",
CompHintSlash: "↑/↓ przesuwaj · Tab/Enter wybierz · Esc zamknij",
CompHintFile: "↑/↓ przesuwaj · Tab/Enter otwórz folder lub wybierz plik · Esc zamknij",
CmdNew: "utwórz nową sesję",
CmdCompact: "kompaktuj kontekst",
CmdModel: "zmień model",
CmdMemory: "pokaż pliki pamięci",
CmdMcp: "serwery MCP",
CmdHooks: "zarządzaj hookami",
CmdSkill: "zarządzaj umiejętnościami",
CmdAudit: "zweryfikuj dziennik audytu",
CmdSearch: "przeszukaj historię",
CmdHelp: "lista poleceń",
CmdTodo: "odrzuć listę zadań",
ArgSkillShow: "pokaż treść umiejętności",
ArgSkillNew: "utwórz szkielet nowej umiejętności",
ArgSkillPaths: "pokaż ścieżki wykrywania",
ArgMcpAdd: "podłącz serwer",
ArgMcpRemove: "odłącz serwer",
ArgMcpConnected: "połączono",
ArgHooksTrust: "zaufaj hakom tego projektu",
ArgModelCurrent: "bieżący",
ListModelsHeaderFmt: "modele (aktywne: %s)",
ListModelsHint: "przełącz za pomocą przełącznika modeli lub wpisz /model <dostawca/model>",
ListMemoryHeader: "pliki pamięci",
ListMemoryNone: "pamięć: brak — dodaj za pomocą „#<notatka>” lub uruchom /init, aby wygenerować AGENTS.md",
ListSkillsHeaderFmt: "umiejętności (%d)",
ListSkillsNone: "umiejętności: brak zdefiniowanych — wywołaj wbudowane, np. /init, lub utwórz własne za pomocą install_skill",
ListHooksHeaderFmt: "haki (%d aktywnych)",
ListHooksNone: "haki: brak aktywnych — skonfiguruj w .ok/settings.json (projekt, po zaufaniu) lub ~/.ok/settings.json (globalnie)",
ListMcpHeader: "serwery mcp",
ListMcpNone: "mcp: brak połączonych serwerów — dodaj jeden w ok.toml ([[plugins]]) lub w pliku .mcp.json projektu",
SelectProvidersLabel: "Wybierz dostawców do włączenia",
EnterAPIKeysHeader: "Wprowadź klucze API (Enter, aby pominąć i ustawić później w .env):",
MissingKeyIntro: "ok.toml jest gotowy — brakuje tylko klucza API.",
WroteFileFmt: "Zapisano %s",
SetupComplete: "Konfiguracja zakończona.",
SetupCancelled: "konfiguracja anulowana.",
TryHintFmt: "Spróbuj: %s",
NextHint: "Następnie: ustaw klucz API (export DEEPSEEK_API_KEY=... lub dodaj do .env), a następnie uruchom `ok run \\\"twoje zadanie\\\"`.",
ConfirmReconfigureFmt: "%s już istnieje. Skonfigurować ponownie i nadpisać?",
KeepingExisting: "Zachowuję istniejącą konfigurację.",
NotOverwritingFmt: "%s już istnieje; nie nadpisuję",
UnknownCommandFmt: "nieznane polecenie %q",
UsageRunHint: "użycie: ok run [--model NAZWA] <zadanie>",
ErrorPrefix: "błąd:",
WriteConfigErr: "zapisz konfigurację:",
WriteEnvErr: "zapisz .env:",
SelectOneHint: "(↑/↓ · Enter · q aby anulować)",
SelectManyHint: "(↑/↓ · Spacja · Enter · q)",
}
Polish is the Polski catalog (auto-translated).
var Portuguese = Messages{
WelcomeTitleFmt: "Bem-vindo ao %s",
NoConfigYet: "Nenhuma configuração encontrada ainda — vamos configurá-la.",
StartingChatFmt: "Iniciando %s…",
SetKeyHint: "Defina sua chave de API e execute `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "modelos",
ConfigNotFound: "não encontrado — usando padrões internos",
ConfigErrorFmt: "%s — erro: %v",
NoKey: "sem chave",
Ready: "pronto",
GetStarted: "Comece agora",
StepScaffold: "criar esqueleto ok.toml",
StepSetKey: "definir chave de API",
InitHint: "A memória do projeto (AGENTS.md) é gerada na sessão: execute `ok chat`, depois `/init` — o modelo analisa o código e escreve. Para configuração, use `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… ou adicione ao .env",
StepChatDesc: "sessão interativa",
StepRunDesc: "tarefa única",
HelpFooter: "ok help · todos os comandos",
ChatTip: "O contexto é mantido entre as interações. Digite 'exit' ou Ctrl-D para sair.",
TurnCancelled: "cancelado — de volta ao prompt",
NoSessionToResume: "nenhuma sessão salva para retomar — inicie uma nova com `ok chat`",
ResumeRequiresTTY: "--resume precisa de um terminal interativo; use --continue para a sessão mais recente",
PickSessionLabel: "Retomar qual sessão?",
ChatStatusThinkingFmt: "%s pensando… (%ds · Esc cancela)",
ChatStatusIdle: "Tab alterna plano · Enter envia · Ctrl+F pesquisa histórico · PgUp/PgDn rola · Ctrl-D sai",
ChatStatusPlanApproval: "Enter/y aprova e executa · n/Esc continua planejando · PgUp/PgDn rola",
PlanApprovalPrompt: "Plano pronto acima — Enter/y para aprovar e executar, n/Esc para continuar planejando",
ChatStatusToolApproval: "y aprova uma vez · a permite nesta sessão · n nega · Ctrl-C cancela a vez",
AskTypeSomething: "Digite outra coisa",
AskTypingHint: "digite abaixo, Enter para confirmar",
AskChatInstead: "Nenhum — apenas converse",
ChatStatusQuestion: "↑/↓ move · número para escolher · espaço multi · Enter confirma · ←/→ alterna · Esc cancela",
ToolApprovalPromptFmt: "Permitir %s%s? — [y] uma vez · [a] nesta sessão · [n] não",
SlashCompactDone: "sessão compactada — parte do meio antigo substituída por um resumo, turnos recentes mantidos",
SlashCompactFailed: "falha na compactação",
SlashNewDone: "nova sessão iniciada — transcrição anterior salva",
SlashNewFailed: "não foi possível iniciar uma nova sessão",
SlashUnavailable: "comando indisponível nesta versão",
SlashUnknown: "comando desconhecido",
SlashTodoCleared: "lista de tarefas descartada",
SlashHelp: "comandos: /audit · /search · /compact · /new · /todo · /model (trocar modelo) · /mcp · /skill · /hooks · /memory · /help · plus skills (/init, /explore, …)",
SlashPromptEmpty: "o prompt MCP não retornou conteúdo para enviar",
SlashMCPNone: "nenhum servidor MCP configurado — adicione uma entrada [[plugins]] no ok.toml",
CompHintSlash: "↑/↓ mover · Tab/Enter selecionar · Esc fechar",
CompHintFile: "↑/↓ mover · Tab/Enter abrir pasta ou selecionar arquivo · Esc fechar",
CmdNew: "criar uma nova sessão",
CmdCompact: "compactar contexto",
CmdModel: "trocar modelo",
CmdMemory: "mostrar arquivos de memória",
CmdMcp: "servidores MCP",
CmdHooks: "gerenciar hooks",
CmdSkill: "gerenciar skills",
CmdAudit: "verificar trilha de auditoria",
CmdSearch: "pesquisar histórico",
CmdHelp: "listar comandos",
CmdTodo: "dispensar a lista de tarefas",
ArgSkillShow: "mostrar o corpo de uma skill",
ArgSkillNew: "criar uma nova skill",
ArgSkillPaths: "mostrar caminhos de descoberta",
ArgMcpAdd: "conectar um servidor",
ArgMcpRemove: "desconectar um servidor",
ArgMcpConnected: "conectado",
ArgHooksTrust: "confiar nos hooks deste projeto",
ArgModelCurrent: "atual",
ListModelsHeaderFmt: "modelos (ativo: %s)",
ListModelsHint: "alterne com o seletor de modelos, ou digite /model <provedor/modelo>",
ListMemoryHeader: "arquivos de memória",
ListMemoryNone: "memória: nenhuma — adicione com “#<nota>” ou execute /init para gerar AGENTS.md",
ListSkillsHeaderFmt: "habilidades (%d)",
ListSkillsNone: "habilidades: nenhuma definida — invoque uma embutida como /init, ou crie uma com install_skill",
ListHooksHeaderFmt: "hooks (%d ativos)",
ListHooksNone: "hooks: nenhum ativo — configure em .ok/settings.json (projeto, após confiança) ou ~/.ok/settings.json (global)",
ListMcpHeader: "servidores mcp",
ListMcpNone: "mcp: nenhum servidor conectado — adicione um em ok.toml ([[plugins]]) ou em um arquivo .mcp.json do projeto",
SelectProvidersLabel: "Selecione provedores para ativar",
EnterAPIKeysHeader: "Insira as chaves de API (Enter para pular e definir depois em .env):",
MissingKeyIntro: "ok.toml está pronto — falta apenas uma chave de API.",
WroteFileFmt: "Arquivo %s escrito",
SetupComplete: "Configuração concluída.",
SetupCancelled: "configuração cancelada.",
TryHintFmt: "Tente: %s",
NextHint: "Próximo: defina sua chave de API (export DEEPSEEK_API_KEY=... ou adicione ao .env), depois execute `ok run \\\"sua tarefa\\\"`.",
ConfirmReconfigureFmt: "%s já existe. Reconfigurar e sobrescrever?",
KeepingExisting: "Mantendo configuração existente.",
NotOverwritingFmt: "%s já existe; não sobrescrevendo",
UnknownCommandFmt: "comando desconhecido %q",
UsageRunHint: "uso: ok run [--model NOME] <tarefa>",
ErrorPrefix: "erro:",
WriteConfigErr: "escrever config:",
WriteEnvErr: "escrever .env:",
SelectOneHint: "(↑/↓ · Enter · q para cancelar)",
SelectManyHint: "(↑/↓ · Espaço · Enter · q)",
}
Portuguese is the Português catalog (auto-translated).
var Romanian = Messages{
WelcomeTitleFmt: "Bun venit la %s",
NoConfigYet: "Nu s-a găsit nicio configurație — hai să o setăm.",
StartingChatFmt: "Se pornește %s…",
SetKeyHint: "Setați cheia API, apoi rulați `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "modele",
ConfigNotFound: "nu s-a găsit — se folosesc valorile implicite",
ConfigErrorFmt: "%s — eroare: %v",
NoKey: "fără cheie",
Ready: "gata",
GetStarted: "Începeți",
StepScaffold: "schelet ok.toml",
StepSetKey: "setați cheia API",
InitHint: "Memoria proiectului (AGENTS.md) este generată în sesiune: rulați `ok chat`, apoi `/init` — modelul analizează codul și îl scrie. Pentru configurare, folosiți `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… sau adăugați în .env",
StepChatDesc: "sesiune interactivă",
StepRunDesc: "sarcină unică",
HelpFooter: "ok help · toate comenzile",
ChatTip: "Contextul se păstrează pe parcursul schimburilor. Tastați 'exit' sau Ctrl-D pentru a ieși.",
TurnCancelled: "anulat — înapoi la prompt",
NoSessionToResume: "nu există sesiune salvată de reluat — începe una nouă cu `ok chat`",
ResumeRequiresTTY: "--resume necesită un terminal interactiv; folosește --continue pentru cea mai recentă sesiune",
PickSessionLabel: "Reluăm care sesiune?",
ChatStatusThinkingFmt: "%s gândește… (%ds · Esc anulează)",
ChatStatusIdle: "Tab comută planul · Enter trimite · Ctrl+F caută istoric · PgUp/PgIn derulează · Ctrl-D iese",
ChatStatusPlanApproval: "Enter/y aprobă și execută · n/Esc continuă planificarea · PgUp/PgIn derulează",
PlanApprovalPrompt: "Planul gata mai sus — Enter/y pentru a aproba și executa, n/Esc pentru a continua planificarea",
ChatStatusToolApproval: "y aprobă o dată · a permite această sesiune · n respinge · Ctrl-C anulează rândul",
AskTypeSomething: "Scrie altceva",
AskTypingHint: "scrie mai jos, Enter pentru confirmare",
AskChatInstead: "Nimic — doar chat",
ChatStatusQuestion: "↑/↓ mută · număr pentru a alege · spațiu multiplu · Enter confirmă · ←/→ comută · Esc anulează",
ToolApprovalPromptFmt: "Permiteți %s%s? — [y] o dată · [a] această sesiune · [n] nu",
SlashCompactDone: "sesiune compactată — mijlocul mai vechi înlocuit cu un rezumat, rândurile recente păstrate",
SlashCompactFailed: "compactarea a eșuat",
SlashNewDone: "sesiune nouă începută — transcrierea anterioară salvată",
SlashNewFailed: "nu s-a putut începe o sesiune nouă",
SlashUnavailable: "comandă indisponibilă în această versiune",
SlashUnknown: "comandă necunoscută",
SlashTodoCleared: "lista de sarcini eliminată",
SlashHelp: "comenzi: /audit · /search · /compact · /new · /todo · /model (schimbă modelul) · /mcp · /skill · /hooks · /memory · /help · plus skills (/init, /explore, …)",
SlashPromptEmpty: "promptul MCP nu a returnat niciun conținut de trimis",
SlashMCPNone: "niciun server MCP configurat — adaugă o intrare [[plugins]] în ok.toml",
CompHintSlash: "↑/↓ mută · Tab/Enter selectează · Esc închide",
CompHintFile: "↑/↓ mută · Tab/Enter deschide dosar sau alege fișier · Esc închide",
CmdNew: "deschide o sesiune nouă",
CmdCompact: "compactează contextul",
CmdModel: "schimbă modelul",
CmdMemory: "afișează fișierele de memorie",
CmdMcp: "servere MCP",
CmdHooks: "gestionează hook-urile",
CmdSkill: "gestionează skill-urile",
CmdAudit: "verifică jurnalul de audit",
CmdSearch: "caută în istoric",
CmdHelp: "listează comenzile",
CmdTodo: "închide lista de sarcini",
ArgSkillShow: "afișează corpul unui skill",
ArgSkillNew: "creează un skill nou",
ArgSkillPaths: "afișează căile de descoperire",
ArgMcpAdd: "conectează un server",
ArgMcpRemove: "deconectează un server",
ArgMcpConnected: "conectat",
ArgHooksTrust: "încrede-te în hook-urile acestui proiect",
ArgModelCurrent: "curent",
ListModelsHeaderFmt: "modele (activ: %s)",
ListModelsHint: "comută cu selectorul de modele sau tastează /model <furnizor/model>",
ListMemoryHeader: "fișiere de memorie",
ListMemoryNone: "memorie: niciuna — adaugă cu „#<notă>” sau rulează /init pentru a genera AGENTS.md",
ListSkillsHeaderFmt: "competențe (%d)",
ListSkillsNone: "competențe: niciuna definită — invocă una încorporată precum /init sau creează una cu install_skill",
ListHooksHeaderFmt: "hook-uri (%d active)",
ListHooksNone: "hook-uri: niciunul activ — configurează în .ok/settings.json (proiect, după încredere) sau ~/.ok/settings.json (global)",
ListMcpHeader: "servere mcp",
ListMcpNone: "mcp: niciun server conectat — adaugă unul în ok.toml ([[plugins]]) sau într-un fișier .mcp.json al proiectului",
SelectProvidersLabel: "Selectează furnizorii de activat",
EnterAPIKeysHeader: "Introdu cheile API (Enter pentru a sări și a le seta mai târziu în .env):",
MissingKeyIntro: "ok.toml este gata — doar o cheie API te desparte.",
WroteFileFmt: "Am scris %s",
SetupComplete: "Configurare completă.",
SetupCancelled: "configurare anulată.",
TryHintFmt: "Încearcă: %s",
NextHint: "Următorul: setează cheia API (export DEEPSEEK_API_KEY=... sau adaugă în .env), apoi rulează `ok run \\\"sarcina ta\\\"`.",
ConfirmReconfigureFmt: "%s există deja. Reconfigurezi și suprascrii?",
KeepingExisting: "Se păstrează configurația existentă.",
NotOverwritingFmt: "%s există deja; nu se suprascrie",
UnknownCommandFmt: "comandă necunoscută %q",
UsageRunHint: "utilizare: ok run [--model NUME] <sarcină>",
ErrorPrefix: "eroare:",
WriteConfigErr: "scrie configurația:",
WriteEnvErr: "scrie .env:",
SelectOneHint: "(↑/↓ · Enter · q pentru anulare)",
SelectManyHint: "(↑/↓ · Spațiu · Enter · q)",
}
Romanian is the Română catalog (auto-translated).
var Russian = Messages{
WelcomeTitleFmt: "Добро пожаловать в %s",
NoConfigYet: "Конфигурация ещё не найдена — давайте её настроим.",
StartingChatFmt: "Запуск %s…",
SetKeyHint: "Установите ваш API-ключ, затем выполните `ok chat`.",
ConfigLabel: "конфиг",
ModelsLabel: "модели",
ConfigNotFound: "не найдено — используются встроенные значения по умолчанию",
ConfigErrorFmt: "%s — ошибка: %v",
NoKey: "нет ключа",
Ready: "готово",
GetStarted: "Начать",
StepScaffold: "создать ok.toml",
StepSetKey: "установить API-ключ",
InitHint: "Память проекта (AGENTS.md) создаётся в сессии: выполните `ok chat`, затем `/init` — модель анализирует код и записывает его. Для конфигурации используйте `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… или добавьте в .env",
StepChatDesc: "интерактивная сессия",
StepRunDesc: "однократная задача",
HelpFooter: "ok help · все команды",
ChatTip: "Контекст сохраняется между сообщениями. Введите 'exit' или Ctrl-D для выхода.",
TurnCancelled: "отменено — возврат к приглашению",
NoSessionToResume: "нет сохранённой сессии для возобновления — начните новую с помощью `ok chat`",
ResumeRequiresTTY: "--resume требует интерактивного терминала; используйте --continue для последней сессии",
PickSessionLabel: "Какую сессию возобновить?",
ChatStatusThinkingFmt: "%s размышляет… (%ds · Esc отменяет)",
ChatStatusIdle: "Tab переключает план · Enter отправляет · Ctrl+F поиск по истории · PgUp/PgDn прокрутка · Ctrl-D выход",
ChatStatusPlanApproval: "Enter/y одобряет и выполняет · n/Esc продолжает планирование · PgUp/PgDn прокрутка",
PlanApprovalPrompt: "План готов выше — Enter/y для одобрения и выполнения, n/Esc для продолжения планирования",
ChatStatusToolApproval: "y одобрить один раз · a разрешить эту сессию · n отклонить · Ctrl-C отменить ход",
AskTypeSomething: "Введите что-нибудь ещё",
AskTypingHint: "введите ниже, Enter для подтверждения",
AskChatInstead: "Нет — просто чат",
ChatStatusQuestion: "↑/↓ перемещение · номер для выбора · пробел множественный выбор · Enter подтверждение · ←/→ переключение · Esc отмена",
ToolApprovalPromptFmt: "Разрешить %s%s? — [y] один раз · [a] эту сессию · [n] нет",
SlashCompactDone: "сессия сжата — старая середина заменена сводкой, последние ходы сохранены",
SlashCompactFailed: "сжатие не удалось",
SlashNewDone: "начата новая сессия — предыдущая стенограмма сохранена",
SlashNewFailed: "не удалось начать новую сессию",
SlashUnavailable: "команда недоступна в этой сборке",
SlashUnknown: "неизвестная команда",
SlashTodoCleared: "список задач удалён",
SlashHelp: "Команды: /audit · /search · /compact · /new · /todo · /model (сменить модель) · /mcp · /skill · /hooks · /memory · /help · плюс навыки (/init, /explore, …)",
SlashPromptEmpty: "MCP-промпт не вернул содержимого для отправки",
SlashMCPNone: "не настроено ни одного MCP-сервера — добавьте запись [[plugins]] в ok.toml",
CompHintSlash: "↑/↓ перемещение · Tab/Enter выбор · Esc закрыть",
CompHintFile: "↑/↓ перемещение · Tab/Enter открыть папку или выбрать файл · Esc закрыть",
CmdNew: "создать новый сеанс",
CmdCompact: "сжать контекст",
CmdModel: "сменить модель",
CmdMemory: "показать файлы памяти",
CmdMcp: "MCP-серверы",
CmdHooks: "управление хуками",
CmdSkill: "управление навыками",
CmdAudit: "проверить журнал аудита",
CmdSearch: "поиск в истории",
CmdHelp: "список команд",
CmdTodo: "закрыть список задач",
ArgSkillShow: "показать тело навыка",
ArgSkillNew: "создать новый навык",
ArgSkillPaths: "показать пути поиска",
ArgMcpAdd: "подключить сервер",
ArgMcpRemove: "отключить сервер",
ArgMcpConnected: "подключено",
ArgHooksTrust: "доверять хукам этого проекта",
ArgModelCurrent: "текущий",
ListModelsHeaderFmt: "модели (активна: %s)",
ListModelsHint: "переключайте с помощью переключателя моделей или введите /model <провайдер/модель>",
ListMemoryHeader: "файлы памяти",
ListMemoryNone: "память: нет — добавьте с помощью \\\"#<заметка>\\\" или выполните /init для создания AGENTS.md",
ListSkillsHeaderFmt: "навыки (%d)",
ListSkillsNone: "навыки: не определены — вызовите встроенную команду, например /init, или создайте свою с помощью install_skill",
ListHooksHeaderFmt: "хуки (%d активных)",
ListHooksNone: "хуки: нет активных — настройте в .ok/settings.json (проект, после доверия) или ~/.ok/settings.json (глобально)",
ListMcpHeader: "серверы mcp",
ListMcpNone: "mcp: нет подключенных серверов — добавьте один в ok.toml ([[plugins]]) или в .mcp.json проекта",
SelectProvidersLabel: "Выберите провайдеров для включения",
EnterAPIKeysHeader: "Введите ключи API (Enter, чтобы пропустить и задать позже в .env):",
MissingKeyIntro: "ok.toml готов — осталось только добавить ключ API.",
WroteFileFmt: "Записан %s",
SetupComplete: "Настройка завершена.",
SetupCancelled: "настройка отменена.",
TryHintFmt: "Попробуйте: %s",
NextHint: "Далее: установите ваш API-ключ (export DEEPSEEK_API_KEY=... или добавьте в .env), затем выполните `ok run \\\"ваша задача\\\"`.",
ConfirmReconfigureFmt: "%s уже существует. Перенастроить и перезаписать?",
KeepingExisting: "Сохраняем существующую конфигурацию.",
NotOverwritingFmt: "%s уже существует; не перезаписываем",
UnknownCommandFmt: "неизвестная команда %q",
UsageRunHint: "использование: ok run [--model NAME] <задача>",
ErrorPrefix: "ошибка:",
WriteConfigErr: "ошибка записи конфигурации:",
WriteEnvErr: "ошибка записи .env:",
SelectOneHint: "(↑/↓ · Enter · q для отмены)",
SelectManyHint: "(↑/↓ · Пробел · Enter · q)",
}
Russian is the Русский catalog (auto-translated).
var Spanish = Messages{
WelcomeTitleFmt: "Bienvenido a %s",
NoConfigYet: "Aún no se encontró configuración — vamos a configurarla.",
StartingChatFmt: "Iniciando %s…",
SetKeyHint: "Establece tu clave API, luego ejecuta `ok chat`.",
ConfigLabel: "config",
ModelsLabel: "modelos",
ConfigNotFound: "no encontrado — usando valores predeterminados",
ConfigErrorFmt: "%s — error: %v",
NoKey: "sin clave",
Ready: "listo",
GetStarted: "Comenzar",
StepScaffold: "andamio ok.toml",
StepSetKey: "establecer clave API",
InitHint: "La memoria del proyecto (AGENTS.md) se genera en sesión: ejecuta `ok chat`, luego `/init` — el modelo analiza el código base y lo escribe. Para la configuración, usa `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… o agrega a .env",
StepChatDesc: "sesión interactiva",
StepRunDesc: "tarea única",
HelpFooter: "ok help · todos los comandos",
ChatTip: "El contexto se mantiene entre turnos. Escribe 'exit' o Ctrl-D para salir.",
TurnCancelled: "cancelado — de vuelta al prompt",
NoSessionToResume: "no hay sesión guardada para reanudar — inicia una nueva con `ok chat`",
ResumeRequiresTTY: "--resume necesita una terminal interactiva; pasa --continue para la sesión más reciente",
PickSessionLabel: "¿Reanudar qué sesión?",
ChatStatusThinkingFmt: "%s pensando… (%ds · Esc cancela)",
ChatStatusIdle: "Tab alterna plan · Enter envía · Ctrl+F busca historial · PgUp/PgDn desplaza · Ctrl-D sale",
ChatStatusPlanApproval: "Enter/y aprueba y ejecuta · n/Esc sigue planeando · PgUp/PgDn desplaza",
PlanApprovalPrompt: "Plan listo arriba — Enter/y para aprobar y ejecutar, n/Esc para seguir planeando",
ChatStatusToolApproval: "y aprueba una vez · a permite esta sesión · n deniega · Ctrl-C cancela turno",
AskTypeSomething: "Escribe algo más",
AskTypingHint: "escribe abajo, Enter para confirmar",
AskChatInstead: "Ninguno — solo chatear",
ChatStatusQuestion: "↑/↓ mueve · número para elegir · espacio múltiple · Enter confirma · ←/→ cambia · Esc cancela",
ToolApprovalPromptFmt: "¿Permitir %s%s? — [y] una vez · [a] esta sesión · [n] no",
SlashCompactDone: "sesión compactada — parte media antigua reemplazada por un resumen, turnos recientes conservados",
SlashCompactFailed: "compactación fallida",
SlashNewDone: "sesión nueva iniciada — transcripción anterior guardada",
SlashNewFailed: "no se pudo iniciar una nueva sesión",
SlashUnavailable: "comando no disponible en esta compilación",
SlashUnknown: "comando desconocido",
SlashTodoCleared: "lista de tareas descartada",
SlashHelp: "comandos: /audit · /search · /compact · /new · /todo · /model (cambiar modelo) · /mcp · /skill · /hooks · /memory · /help · además habilidades (/init, /explore, …)",
SlashPromptEmpty: "el prompt MCP no devolvió contenido para enviar",
SlashMCPNone: "no hay servidores MCP configurados — añade una entrada [[plugins]] en ok.toml",
CompHintSlash: "↑/↓ mover · Tab/Enter seleccionar · Esc cerrar",
CompHintFile: "↑/↓ mover · Tab/Enter abrir carpeta o elegir archivo · Esc cerrar",
CmdNew: "iniciar una nueva sesión",
CmdCompact: "compactar contexto",
CmdModel: "cambiar modelo",
CmdMemory: "mostrar archivos de memoria",
CmdMcp: "servidores MCP",
CmdHooks: "gestionar hooks",
CmdSkill: "gestionar habilidades",
CmdAudit: "verificar registro de auditoría",
CmdSearch: "buscar historial",
CmdHelp: "listar comandos",
CmdTodo: "descartar la lista de tareas",
ArgSkillShow: "mostrar el cuerpo de una habilidad",
ArgSkillNew: "crear una nueva habilidad",
ArgSkillPaths: "mostrar rutas de descubrimiento",
ArgMcpAdd: "conectar un servidor",
ArgMcpRemove: "desconectar un servidor",
ArgMcpConnected: "conectado",
ArgHooksTrust: "confiar en los hooks de este proyecto",
ArgModelCurrent: "actual",
ListModelsHeaderFmt: "modelos (activo: %s)",
ListModelsHint: "cambia con el selector de modelos, o escribe /model <proveedor/modelo>",
ListMemoryHeader: "archivos de memoria",
ListMemoryNone: "memoria: ninguna — añade con “#<nota>” o ejecuta /init para generar AGENTS.md",
ListSkillsHeaderFmt: "habilidades (%d)",
ListSkillsNone: "habilidades: ninguna definida — invoca una incorporada como /init, o crea una con install_skill",
ListHooksHeaderFmt: "hooks (%d activos)",
ListHooksNone: "hooks: ninguno activo — configura en .ok/settings.json (proyecto, después de confiar) o ~/.ok/settings.json (global)",
ListMcpHeader: "servidores mcp",
ListMcpNone: "mcp: ningún servidor conectado — añade uno en ok.toml ([[plugins]]) o en un .mcp.json del proyecto",
SelectProvidersLabel: "Selecciona proveedores a habilitar",
EnterAPIKeysHeader: "Ingresa las claves API (Enter para omitir y configurar después en .env):",
MissingKeyIntro: "ok.toml está listo — solo falta una clave API.",
WroteFileFmt: "Se escribió %s",
SetupComplete: "Configuración completa.",
SetupCancelled: "configuración cancelada.",
TryHintFmt: "Intenta: %s",
NextHint: "Siguiente: configura tu clave API (export DEEPSEEK_API_KEY=... o añádela a .env), luego ejecuta `ok run \\\"tu tarea\\\"`.",
ConfirmReconfigureFmt: "%s ya existe. ¿Reconfigurar y sobrescribir?",
KeepingExisting: "Manteniendo configuración existente.",
NotOverwritingFmt: "%s ya existe; no se sobrescribe",
UnknownCommandFmt: "comando desconocido %q",
UsageRunHint: "uso: ok run [--model NOMBRE] <tarea>",
ErrorPrefix: "error:",
WriteConfigErr: "escribir configuración:",
WriteEnvErr: "escribir .env:",
SelectOneHint: "(↑/↓ · Enter · q para cancelar)",
SelectManyHint: "(↑/↓ · Espacio · Enter · q)",
}
Spanish is the Español catalog (auto-translated).
var Swahili = Messages{
WelcomeTitleFmt: "Karibu kwa %s",
NoConfigYet: "Hakuna usanidi uliopatikana bado — wacha tuuweke.",
StartingChatFmt: "Inaanza %s…",
SetKeyHint: "Weka ufunguo wako wa API, kisha endesha `ok chat`.",
ConfigLabel: "usanidi",
ModelsLabel: "miundo",
ConfigNotFound: "haipatikani — inatumia chaguo-msingi zilizojengwa ndani",
ConfigErrorFmt: "%s — kosa: %v",
NoKey: "hakuna ufunguo",
Ready: "tayari",
GetStarted: "Anza",
StepScaffold: "sanidi ok.toml",
StepSetKey: "weka ufunguo wa API",
InitHint: "Kumbukumbu ya mradi (AGENTS.md) inazalishwa katika kikao: endesha `ok chat`, kisha `/init` — mfano huchambua msimbo na kuiandika. Kwa usanidi, tumia `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… au ongeza kwenye .env",
StepChatDesc: "kikao cha mwingiliano",
StepRunDesc: "kazi ya mara moja",
HelpFooter: "ok help · amri zote",
ChatTip: "Muktadha huhifadhiwa katika zamu. Andika 'exit' au Ctrl-D kuondoka.",
TurnCancelled: "imeghairiwa — rudi kwenye kidokezo",
NoSessionToResume: "hakuna kipindi cha kuendeleza — anza kipindi kipya kwa `ok chat`",
ResumeRequiresTTY: "--resume inahitaji terminal shirikishi; tumia --continue kwa kipindi cha hivi karibuni",
PickSessionLabel: "Endelea na kipindi kipi?",
ChatStatusThinkingFmt: "%s anafikiri… (%ds · Esc ghairi)",
ChatStatusIdle: "Tab hubadilisha mpango · Enter hutuma · Ctrl+F tafuta historia · PgUp/PgDn tembeza · Ctrl-D toka",
ChatStatusPlanApproval: "Enter/y inakubali & inatekeleza · n/Esc inaendelea kupanga · PgUp/PgDn tembeza",
PlanApprovalPrompt: "Mpango uko tayari hapo juu — Enter/y kukubali & kutekeleza, n/Esc kuendelea kupanga",
ChatStatusToolApproval: "y kubali mara moja · a ruhusu kipindi hiki · n kataa · Ctrl-C ghairi zamu",
AskTypeSomething: "Andika kitu kingine",
AskTypingHint: "andika hapa chini, Enter kuthibitisha",
AskChatInstead: "Hakuna — zungumza tu",
ChatStatusQuestion: "↑/↓ tembeza · namba kuchagua · nafasi kuchagua nyingi · Enter thibitisha · ←/↑ badilisha · Esc ghairi",
ToolApprovalPromptFmt: "Ruhusu %s%s? — [y] mara moja · [a] kipindi hiki · [n] hapana",
SlashCompactDone: "kipindi kimefupishwa — sehemu za zamani zimebadilishwa na muhtasari, zamu za hivi karibuni zimehifadhiwa",
SlashCompactFailed: "kufupisha kumeshindwa",
SlashNewDone: "kipindi kipya kimeanza — nakala ya awali imehifadhiwa",
SlashNewFailed: "haikuweza kuanza kipindi kipya",
SlashUnavailable: "amri haipatikani katika toleo hili",
SlashUnknown: "amri isiyojulikana",
SlashTodoCleared: "orodha ya kazi imefutwa",
SlashHelp: "amri: /audit · /search · /compact · /new · /todo · /model (badilisha model) · /mcp · /skill · /hooks · /memory · /help · pamoja na ujuzi (/init, /explore, …)",
SlashPromptEmpty: "kidokezo cha MCP hakikurudisha maudhui yoyote ya kutuma",
SlashMCPNone: "hakuna seva za MCP zilizosanidiwa — ongeza ingizo la [[plugins]] kwenye ok.toml",
CompHintSlash: "↑/↓ songa · Tab/Enter chagua · Esc funga",
CompHintFile: "↑/↓ songa · Tab/Enter fungua folda au chagua faili · Esc funga",
CmdNew: "anzisha kikao kipya",
CmdCompact: "fupisha muktadha",
CmdModel: "badilisha model",
CmdMemory: "onyesha faili za kumbukumbu",
CmdMcp: "seva za MCP",
CmdHooks: "simamia ndoana",
CmdSkill: "simamia ujuzi",
CmdAudit: "hakiki njia ya ukaguzi",
CmdSearch: "tafuta historia",
CmdHelp: "orodhesha amri",
CmdTodo: "ondoa orodha ya kazi",
ArgSkillShow: "onyesha mwili wa ujuzi",
ArgSkillNew: "unda ujuzi mpya",
ArgSkillPaths: "onyesha njia za ugunduzi",
ArgMcpAdd: "unganisha seva",
ArgMcpRemove: "kata mfumo wa mawasiliano",
ArgMcpConnected: "imeunganishwa",
ArgHooksTrust: "amini miundo ya mradi huu",
ArgModelCurrent: "sasa",
ListModelsHeaderFmt: "miundo (inayotumika: %s)",
ListModelsHint: "badilisha kwa kutumia kichagua miundo, au andika /model <mtoa/mfumo>",
ListMemoryHeader: "faili za kumbukumbu",
ListMemoryNone: "kumbukumbu: hakuna — ongeza kwa \\\"#<maelezo>\\\" au endesha /init ili kuzalisha AGENTS.md",
ListSkillsHeaderFmt: "ustadi (%d)",
ListSkillsNone: "ustadi: hakuna uliofafanuliwa — tumia amri ya ndani kama /init, au andika moja kwa install_skill",
ListHooksHeaderFmt: "miundo (%d inayotumika)",
ListHooksNone: "miundo: hakuna inayotumika — sanidi katika .ok/settings.json (mradi, baada ya kuaminiwa) au ~/.ok/settings.json (jumla)",
ListMcpHeader: "seva za mawasiliano",
ListMcpNone: "mawasiliano: hakuna seva zilizounganishwa — ongeza moja katika ok.toml ([[plugins]]) au mradi .mcp.json",
SelectProvidersLabel: "Chagua watoa huduma wa kuwezesha",
EnterAPIKeysHeader: "Ingiza funguo za API (Ingiza ili kuruka na kuweka baadaye katika .env):",
MissingKeyIntro: "ok.toml iko tayari — hatua moja tu ya ufunguo wa API.",
WroteFileFmt: "Imeandika %s",
SetupComplete: "Usanidi umekamilika.",
SetupCancelled: "usanidi umefutwa.",
TryHintFmt: "Jaribu: %s",
NextHint: "Ifuatayo: weka ufunguo wako wa API (export DEEPSEEK_API_KEY=... au ongeza kwenye .env), kisha endesha `ok run \\\"kazi yako\\\"`.",
ConfirmReconfigureFmt: "%s tayari ipo. Rekebisha na uandike upya?",
KeepingExisting: "Kuhifadhi usanidi uliopo.",
NotOverwritingFmt: "%s tayari ipo; haitaandikwa upya",
UnknownCommandFmt: "amri isiyojulikana %q",
UsageRunHint: "matumizi: ok run [--model JINA] <kazi>",
ErrorPrefix: "kosa:",
WriteConfigErr: "andika usanidi:",
WriteEnvErr: "andika .env:",
SelectOneHint: "(↑/↓ · Ingiza · q kughairi)",
SelectManyHint: "(↑/↓ · Nafasi · Ingiza · q)",
}
Swahili is the Kiswahili catalog (auto-translated).
var Tamil = Messages{
WelcomeTitleFmt: "வரவேற்கிறோம் %s",
NoConfigYet: "இதுவரை உள்ளமைவு எதுவும் கிடைக்கவில்லை — அதை அமைப்போம்.",
StartingChatFmt: "%s தொடங்குகிறது…",
SetKeyHint: "உங்கள் API விசையை அமைக்கவும், பின்னர் `ok chat` ஐ இயக்கவும்.",
ConfigLabel: "உள்ளமைவு",
ModelsLabel: "மாதிரிகள்",
ConfigNotFound: "கிடைக்கவில்லை — உள்ளமைக்கப்பட்ட இயல்புநிலைகளைப் பயன்படுத்துகிறது",
ConfigErrorFmt: "%s — பிழை: %v",
NoKey: "விசை இல்லை",
Ready: "தயார்",
GetStarted: "தொடங்குங்கள்",
StepScaffold: "ok.toml ஐ உருவாக்கவும்",
StepSetKey: "API விசையை அமைக்கவும்",
InitHint: "திட்ட நினைவகம் (AGENTS.md) அமர்வில் உருவாக்கப்படுகிறது: `ok chat` ஐ இயக்கவும், பின்னர் `/init` — மாதிரி குறியீட்டுத் தளத்தை பகுப்பாய்வு செய்து எழுதுகிறது. உள்ளமைவுக்கு, `ok setup` ஐப் பயன்படுத்தவும்.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… அல்லது .env இல் சேர்க்கவும்",
StepChatDesc: "ஊடாடும் அமர்வு",
StepRunDesc: "ஒற்றைப் பணி",
HelpFooter: "ok உதவி · அனைத்து கட்டளைகள்",
ChatTip: "சூழல் முழுவதும் பராமரிக்கப்படுகிறது. வெளியேற 'exit' அல்லது Ctrl-D என தட்டச்சு செய்யவும்.",
TurnCancelled: "ரத்து செய்யப்பட்டது — மீண்டும் கட்டளை வரிக்கு",
NoSessionToResume: "மீட்டெடுக்க சேமித்த அமர்வு இல்லை — `ok chat` மூலம் புதியதைத் தொடங்கவும்",
ResumeRequiresTTY: "--resume ஒரு ஊடாடும் முனையம் தேவை; சமீபத்திய அமர்வுக்கு --continue ஐப் பயன்படுத்தவும்",
PickSessionLabel: "எந்த அமர்வை மீட்டெடுக்க வேண்டும்?",
ChatStatusThinkingFmt: "%s சிந்திக்கிறது… (%ds · Esc ரத்துசெய்கிறது)",
ChatStatusIdle: "Tab திட்டத்தை மாற்றுகிறது · Enter அனுப்புகிறது · Ctrl+F தேடல் வரலாறு · PgUp/PgDn உருட்டுகிறது · Ctrl-D வெளியேறுகிறது",
ChatStatusPlanApproval: "Enter/y ஒப்புதல் & செயல்படுத்துகிறது · n/Esc திட்டமிடலைத் தொடர்கிறது · PgUp/PgDn உருட்டுகிறது",
PlanApprovalPrompt: "திட்டம் மேலே தயார் — Enter/y ஒப்புதல் & செயல்படுத்த, n/Esc திட்டமிடலைத் தொடர",
ChatStatusToolApproval: "y ஒருமுறை ஒப்புதல் · a இந்த அமர்வுக்கு அனுமதி · n மறுப்பு · Ctrl-C முறை ரத்துசெய்கிறது",
AskTypeSomething: "வேறு ஏதாவது தட்டச்சு செய்க",
AskTypingHint: "கீழே தட்டச்சு செய்க, Enter உறுதிப்படுத்துகிறது",
AskChatInstead: "எதுவுமில்லை — வெறும் அரட்டை",
ChatStatusQuestion: "↑/↓ நகர்த்து · எண் தேர்வு · space பல · Enter உறுதிப்படுத்து · ←/→ மாற்று · Esc ரத்துசெய்",
ToolApprovalPromptFmt: "%s%s ஐ அனுமதிக்கவா? — [y] ஒருமுறை · [a] இந்த அமர்வு · [n] இல்லை",
SlashCompactDone: "அமர்வு சுருக்கப்பட்டது — பழைய நடுப்பகுதி சுருக்கத்தால் மாற்றப்பட்டது, சமீபத்திய திருப்பங்கள் வைக்கப்பட்டன",
SlashCompactFailed: "சுருக்கம் தோல்வியடைந்தது",
SlashNewDone: "புதிய அமர்வு தொடங்கப்பட்டது — முந்தைய உரையாடல் சேமிக்கப்பட்டது",
SlashNewFailed: "புதிய அமர்வைத் தொடங்க முடியவில்லை",
SlashUnavailable: "இந்த உருவாக்கத்தில் கட்டளை கிடைக்கவில்லை",
SlashUnknown: "அறியப்படாத கட்டளை",
SlashTodoCleared: "பணி பட்டியல் நீக்கப்பட்டது",
SlashHelp: "SlashHelp: கட்டளைகள்: /audit · /search · /compact · /new · /todo · /model (மாதிரியை மாற்று) · /mcp · /skill · /hooks · /memory · /help · மேலும் திறன்கள் (/init, /explore, …)",
SlashPromptEmpty: "MCP அறிவுறுத்தல் அனுப்ப உள்ளடக்கம் எதையும் வழங்கவில்லை",
SlashMCPNone: "MCP சேவையகங்கள் எதுவும் கட்டமைக்கப்படவில்லை — ok.toml இல் [[plugins]] உள்ளீட்டைச் சேர்க்கவும்",
CompHintSlash: "↑/↓ நகர்த்து · Tab/Enter தேர்ந்தெடு · Esc மூடு",
CompHintFile: "↑/↓ நகர்த்து · Tab/Enter கோப்புறையைத் திற அல்லது கோப்பைத் தேர்ந்தெடு · Esc மூடு",
CmdNew: "புதிய அமர்வைப் பிரிக்கவும்",
CmdCompact: "சூழலைச் சுருக்கவும்",
CmdModel: "மாதிரியை மாற்றவும்",
CmdMemory: "நினைவக கோப்புகளைக் காட்டு",
CmdMcp: "MCP சேவையகங்கள்",
CmdHooks: "ஹூக்குகளை நிர்வகி",
CmdSkill: "திறன்களை நிர்வகி",
CmdAudit: "தணிக்கை பாதையைச் சரிபார்",
CmdSearch: "வரலாற்றைத் தேடு",
CmdHelp: "கட்டளைகளைப் பட்டியலிடு",
CmdTodo: "பணி பட்டியலை நீக்கு",
ArgSkillShow: "ஒரு திறனின் உடலைக் காட்டு",
ArgSkillNew: "புதிய திறனை உருவாக்கு",
ArgSkillPaths: "கண்டுபிடிப்பு பாதைகளைக் காட்டு",
ArgMcpAdd: "சேவையகத்தை இணைக்கவும்",
ArgMcpRemove: "சேவையகத்தைத் துண்டிக்கவும்",
ArgMcpConnected: "இணைக்கப்பட்டது",
ArgHooksTrust: "இந்த திட்டத்தின் ஹூக்குகளை நம்பவும்",
ArgModelCurrent: "தற்போதைய",
ListModelsHeaderFmt: "மாதிரிகள் (செயலில்: %s)",
ListModelsHint: "மாதிரி மாற்றி மூலம் மாறவும், அல்லது /model <வழங்குநர்/மாதிரி> என தட்டச்சு செய்யவும்",
ListMemoryHeader: "நினைவக கோப்புகள்",
ListMemoryNone: "நினைவகம்: எதுவுமில்லை — “#<குறிப்பு>” உடன் சேர்க்கவும் அல்லது AGENTS.md உருவாக்க /init இயக்கவும்",
ListSkillsHeaderFmt: "திறன்கள் (%d)",
ListSkillsNone: "திறன்கள்: எதுவும் வரையறுக்கப்படவில்லை — /init போன்ற உள்ளமைக்கப்பட்டதை அழைக்கவும், அல்லது install_skill மூலம் ஒன்றை உருவாக்கவும்",
ListHooksHeaderFmt: "ஹூக்குகள் (%d செயலில்)",
ListHooksNone: "ஹூக்குகள்: எதுவும் செயலில் இல்லை — .ok/settings.json (திட்டம், நம்பிக்கைக்குப் பிறகு) அல்லது ~/.ok/settings.json (உலகளாவிய) இல் கட்டமைக்கவும்",
ListMcpHeader: "mcp சேவையகங்கள்",
ListMcpNone: "mcp: எந்த சேவையகமும் இணைக்கப்படவில்லை — ok.toml ([[plugins]]) அல்லது திட்ட .mcp.json இல் ஒன்றைச் சேர்க்கவும்",
SelectProvidersLabel: "இயக்க வழங்குநர்களைத் தேர்ந்தெடுக்கவும்",
EnterAPIKeysHeader: "API விசைகளை உள்ளிடவும் (தவிர்க்க Enter ஐ அழுத்தவும், பின்னர் .env இல் அமைக்கவும்):",
MissingKeyIntro: "ok.toml தயாராக உள்ளது — API விசை மட்டுமே தேவை.",
WroteFileFmt: "%s எழுதப்பட்டது",
SetupComplete: "அமைப்பு முடிந்தது.",
SetupCancelled: "அமைப்பு ரத்து செய்யப்பட்டது.",
TryHintFmt: "முயற்சி: %s",
NextHint: "அடுத்து: உங்கள் API விசையை அமைக்கவும் (export DEEPSEEK_API_KEY=... அல்லது .env இல் சேர்க்கவும்), பின்னர் `ok run \\\"your task\\\"` ஐ இயக்கவும்.",
ConfirmReconfigureFmt: "%s ஏற்கனவே உள்ளது. மீண்டும் கட்டமைத்து மேலெழுதவா?",
KeepingExisting: "தற்போதைய கட்டமைப்பை வைத்திருக்கிறது.",
NotOverwritingFmt: "%s ஏற்கனவே உள்ளது; மேலெழுதவில்லை",
UnknownCommandFmt: "தெரியாத கட்டளை %q",
UsageRunHint: "பயன்பாடு: ok run [--model NAME] <task>",
ErrorPrefix: "பிழை:",
WriteConfigErr: "கட்டமைப்பை எழுது:",
WriteEnvErr: ".env எழுது:",
SelectOneHint: "(↑/↓ · Enter · q ரத்து செய்ய)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Tamil is the தமிழ் catalog (auto-translated).
var Thai = Messages{
WelcomeTitleFmt: "ยินดีต้อนรับสู่ %s",
NoConfigYet: "ยังไม่พบการกำหนดค่า — มาตั้งค่ากันเถอะ",
StartingChatFmt: "กำลังเริ่ม %s…",
SetKeyHint: "ตั้งค่า API key ของคุณ จากนั้นรัน `ok chat`",
ConfigLabel: "config",
ModelsLabel: "models",
ConfigNotFound: "ไม่พบ — ใช้ค่าเริ่มต้นในตัว",
ConfigErrorFmt: "%s — ข้อผิดพลาด: %v",
NoKey: "ไม่มี key",
Ready: "พร้อม",
GetStarted: "เริ่มต้นใช้งาน",
StepScaffold: "สร้าง ok.toml",
StepSetKey: "ตั้งค่า API key",
InitHint: "Project memory (AGENTS.md) จะถูกสร้างขึ้นในเซสชัน: รัน `ok chat` จากนั้น `/init` — โมเดลจะวิเคราะห์โค้ดเบสและเขียนไฟล์ สำหรับการกำหนดค่า ให้ใช้ `ok setup`",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… หรือเพิ่มใน .env",
StepChatDesc: "เซสชันแบบโต้ตอบ",
StepRunDesc: "งานครั้งเดียว",
HelpFooter: "ok help · คำสั่งทั้งหมด",
ChatTip: "บริบทจะถูกเก็บไว้ข้ามรอบ พิมพ์ 'exit' หรือ Ctrl-D เพื่อออก",
TurnCancelled: "ยกเลิก — กลับไปที่พร้อมท์",
NoSessionToResume: "ไม่มีเซสชันที่บันทึกไว้ให้ดำเนินการต่อ — เริ่มเซสชันใหม่ด้วย `ok chat`",
ResumeRequiresTTY: "--resume ต้องการเทอร์มินัลแบบโต้ตอบ; ใช้ --continue สำหรับเซสชันล่าสุด",
PickSessionLabel: "จะดำเนินการต่อเซสชันใด?",
ChatStatusThinkingFmt: "%s กำลังคิด… (%ds · Esc ยกเลิก)",
ChatStatusIdle: "Tab สลับแผน · Enter ส่ง · Ctrl+F ค้นหาประวัติ · PgUp/PgDn เลื่อน · Ctrl-D ออก",
ChatStatusPlanApproval: "Enter/y อนุมัติและดำเนินการ · n/Esc วางแผนต่อ · PgUp/PgDn เลื่อน",
PlanApprovalPrompt: "แผนพร้อมแล้วด้านบน — Enter/y เพื่ออนุมัติและดำเนินการ, n/Esc เพื่อวางแผนต่อ",
ChatStatusToolApproval: "y อนุมัติครั้งเดียว · a อนุญาตเซสชันนี้ · n ปฏิเสธ · Ctrl-C ยกเลิกเทิร์น",
AskTypeSomething: "พิมพ์อย่างอื่น",
AskTypingHint: "พิมพ์ด้านล่าง, Enter เพื่อยืนยัน",
AskChatInstead: "ไม่มี — แค่แชท",
ChatStatusQuestion: "↑/↓ เลื่อน · หมายเลขเพื่อเลือก · space เลือกหลาย · Enter ยืนยัน · ←/→ สลับ · Esc ยกเลิก",
ToolApprovalPromptFmt: "อนุญาต %s%s? — [y] ครั้งเดียว · [a] เซสชันนี้ · [n] ไม่",
SlashCompactDone: "เซสชันถูกบีบอัด — ส่วนกลางเก่าถูกแทนที่ด้วยสรุป, เทิร์นล่าสุดถูกเก็บไว้",
SlashCompactFailed: "การบีบอัดล้มเหลว",
SlashNewDone: "เริ่มเซสชันใหม่ — บันทึกก่อนหน้าถูกบันทึก",
SlashNewFailed: "ไม่สามารถเริ่มเซสชันใหม่",
SlashUnavailable: "คำสั่งไม่พร้อมใช้งานในบิลด์นี้",
SlashUnknown: "คำสั่งไม่รู้จัก",
SlashTodoCleared: "รายการงานถูกยกเลิก",
SlashHelp: "คำสั่ง: /audit · /search · /compact · /new · /todo · /model (เปลี่ยนโมเดล) · /mcp · /skill · /hooks · /memory · /help · และทักษะ (/init, /explore, …)",
SlashPromptEmpty: "MCP prompt ไม่มีเนื้อหาที่จะส่ง",
SlashMCPNone: "ไม่ได้กำหนดค่าเซิร์ฟเวอร์ MCP — เพิ่มรายการ [[plugins]] ใน ok.toml",
CompHintSlash: "↑/↓ เลื่อน · Tab/Enter เลือก · Esc ปิด",
CompHintFile: "↑/↓ เลื่อน · Tab/Enter เปิดโฟลเดอร์หรือเลือกไฟล์ · Esc ปิด",
CmdNew: "เริ่มเซสชันใหม่",
CmdCompact: "ย่อบริบท",
CmdModel: "เปลี่ยนโมเดล",
CmdMemory: "แสดงไฟล์หน่วยความจำ",
CmdMcp: "เซิร์ฟเวอร์ MCP",
CmdHooks: "จัดการ hooks",
CmdSkill: "จัดการทักษะ",
CmdAudit: "ตรวจสอบเส้นทางการตรวจสอบ",
CmdSearch: "ค้นหาประวัติ",
CmdHelp: "แสดงรายการคำสั่ง",
CmdTodo: "ปิดรายการงาน",
ArgSkillShow: "แสดงเนื้อหาของทักษะ",
ArgSkillNew: "สร้างทักษะใหม่",
ArgSkillPaths: "แสดงเส้นทางการค้นหา",
ArgMcpAdd: "เชื่อมต่อเซิร์ฟเวอร์",
ArgMcpRemove: "ยกเลิกการเชื่อมต่อเซิร์ฟเวอร์",
ArgMcpConnected: "เชื่อมต่อแล้ว",
ArgHooksTrust: "เชื่อถือ hooks ของโปรเจกต์นี้",
ArgModelCurrent: "ปัจจุบัน",
ListModelsHeaderFmt: "โมเดล (ใช้งาน: %s)",
ListModelsHint: "สลับด้วยตัวสลับโมเดล หรือพิมพ์ /model <provider/model>",
ListMemoryHeader: "ไฟล์หน่วยความจำ",
ListMemoryNone: "หน่วยความจำ: ไม่มี — เพิ่มด้วย “#<note>” หรือรัน /init เพื่อสร้าง AGENTS.md",
ListSkillsHeaderFmt: "สกิล (%d)",
ListSkillsNone: "สกิล: ไม่มีที่กำหนด — เรียกใช้ built-in เช่น /init หรือเขียนเองด้วย install_skill",
ListHooksHeaderFmt: "hooks (%d ใช้งาน)",
ListHooksNone: "hooks: ไม่มีที่ใช้งาน — กำหนดค่าใน .ok/settings.json (โปรเจกต์, หลังจาก trust) หรือ ~/.ok/settings.json (ทั่วโลก)",
ListMcpHeader: "เซิร์ฟเวอร์ MCP",
ListMcpNone: "mcp: ไม่มีเซิร์ฟเวอร์ที่เชื่อมต่อ — เพิ่มใน ok.toml ([[plugins]]) หรือ .mcp.json ของโปรเจกต์",
SelectProvidersLabel: "เลือกผู้ให้บริการเพื่อเปิดใช้งาน",
EnterAPIKeysHeader: "ป้อนคีย์ API (กด Enter เพื่อข้ามและตั้งค่าทีหลังใน .env):",
MissingKeyIntro: "ok.toml พร้อมแล้ว — แค่คีย์ API เท่านั้น",
WroteFileFmt: "เขียน %s แล้ว",
SetupComplete: "การตั้งค่าเสร็จสมบูรณ์",
SetupCancelled: "ยกเลิกการตั้งค่าแล้ว",
TryHintFmt: "ลอง: %s",
NextHint: "ถัดไป: ตั้งค่า API key ของคุณ (export DEEPSEEK_API_KEY=... หรือเพิ่มใน .env) จากนั้นรัน `ok run \\\"your task\\\"`",
ConfirmReconfigureFmt: "%s มีอยู่แล้ว ต้องการกำหนดค่าใหม่และเขียนทับหรือไม่?",
KeepingExisting: "คงการกำหนดค่าที่มีอยู่",
NotOverwritingFmt: "%s มีอยู่แล้ว ไม่เขียนทับ",
UnknownCommandFmt: "คำสั่งไม่รู้จัก %q",
UsageRunHint: "วิธีใช้: ok run [--model NAME] <task>",
ErrorPrefix: "ข้อผิดพลาด:",
WriteConfigErr: "เขียนการกำหนดค่า:",
WriteEnvErr: "เขียน .env:",
SelectOneHint: "(↑/↓ · Enter · q เพื่อยกเลิก)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Thai is the ไทย catalog (auto-translated).
var Turkish = Messages{
WelcomeTitleFmt: "%s'e Hoş Geldiniz",
NoConfigYet: "Henüz yapılandırma bulunamadı — hadi ayarlayalım.",
StartingChatFmt: "%s başlatılıyor…",
SetKeyHint: "API anahtarınızı ayarlayın, ardından `ok chat` çalıştırın.",
ConfigLabel: "yapılandırma",
ModelsLabel: "modeller",
ConfigNotFound: "bulunamadı — yerleşik varsayılanlar kullanılıyor",
ConfigErrorFmt: "%s — hata: %v",
NoKey: "anahtar yok",
Ready: "hazır",
GetStarted: "Başlayın",
StepScaffold: "ok.toml'u oluştur",
StepSetKey: "API anahtarını ayarla",
InitHint: "Proje belleği (AGENTS.md) oturum içinde oluşturulur: `ok chat` çalıştırın, ardından `/init` — model kod tabanını analiz eder ve yazar. Yapılandırma için `ok setup` kullanın.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… veya .env dosyasına ekleyin",
StepChatDesc: "etkileşimli oturum",
StepRunDesc: "tek seferlik görev",
HelpFooter: "ok help · tüm komutlar",
ChatTip: "Bağlam turlar arasında korunur. Çıkmak için 'exit' veya Ctrl-D yazın.",
TurnCancelled: "iptal edildi — isteme geri dön",
NoSessionToResume: "devam edilecek kayıtlı oturum yok — `ok chat` ile yeni bir tane başlatın",
ResumeRequiresTTY: "--resume etkileşimli bir terminal gerektirir; en son oturum için --continue kullanın",
PickSessionLabel: "Hangi oturuma devam edilsin?",
ChatStatusThinkingFmt: "%s düşünüyor… (%ds · Esc iptal eder)",
ChatStatusIdle: "Sekme planı açar · Enter gönderir · Ctrl+F geçmişi arar · PgUp/PgDn kaydırır · Ctrl-D çıkar",
ChatStatusPlanApproval: "Enter/y onaylar ve yürütür · n/Esc planlamaya devam eder · PgUp/PgDn kaydırır",
PlanApprovalPrompt: "Plan yukarıda hazır — Enter/y onaylar ve yürütür, n/Esc planlamaya devam eder",
ChatStatusToolApproval: "y bir kez onaylar · a bu oturuma izin verir · n reddeder · Ctrl-C sırayı iptal eder",
AskTypeSomething: "Başka bir şey yazın",
AskTypingHint: "aşağıya yazın, Enter onaylar",
AskChatInstead: "Hiçbiri — sadece sohbet",
ChatStatusQuestion: "↑/↓ hareket · sayı seçer · boşluk çoklu · Enter onaylar · ←/→ geçiş · Esc iptal eder",
ToolApprovalPromptFmt: "%s%s izin verilsin mi? — [y] bir kez · [a] bu oturum · [n] hayır",
SlashCompactDone: "oturum sıkıştırıldı — eski orta kısım bir özetle değiştirildi, son turlar korundu",
SlashCompactFailed: "sıkıştırma başarısız oldu",
SlashNewDone: "yeni oturum başlatıldı — önceki transkript kaydedildi",
SlashNewFailed: "yeni oturum başlatılamadı",
SlashUnavailable: "bu yapıda komut kullanılamıyor",
SlashUnknown: "bilinmeyen komut",
SlashTodoCleared: "görev listesi kaldırıldı",
SlashHelp: "komutlar: /audit · /search · /compact · /new · /todo · /model (model değiştir) · /mcp · /skill · /hooks · /memory · /help · artı beceriler (/init, /explore, …)",
SlashPromptEmpty: "MCP istemi gönderilecek içerik döndürmedi",
SlashMCPNone: "hiçbir MCP sunucusu yapılandırılmamış — ok.toml dosyasına bir [[plugins]] girişi ekleyin",
CompHintSlash: "↑/↓ hareket · Tab/Enter seç · Esc kapat",
CompHintFile: "↑/↓ hareket · Tab/Enter klasör aç veya dosya seç · Esc kapat",
CmdNew: "yeni bir oturum başlat",
CmdCompact: "bağlamı sıkıştır",
CmdModel: "model değiştir",
CmdMemory: "bellek dosyalarını göster",
CmdMcp: "MCP sunucuları",
CmdHooks: "hook'ları yönet",
CmdSkill: "becerileri yönet",
CmdAudit: "denetim izini doğrula",
CmdSearch: "geçmişi ara",
CmdHelp: "komutları listele",
CmdTodo: "görev listesini kapat",
ArgSkillShow: "bir becerinin içeriğini göster",
ArgSkillNew: "yeni bir beceri oluştur",
ArgSkillPaths: "keşif yollarını göster",
ArgMcpAdd: "bir sunucuya bağlan",
ArgMcpRemove: "bir sunucunun bağlantısını kes",
ArgMcpConnected: "bağlı",
ArgHooksTrust: "bu projenin kancalarına güven",
ArgModelCurrent: "mevcut",
ListModelsHeaderFmt: "modeller (etkin: %s)",
ListModelsHint: "model değiştirici ile geçiş yapın veya /model <sağlayıcı/model> yazın",
ListMemoryHeader: "bellek dosyaları",
ListMemoryNone: "bellek: yok — “#<not>” ile ekleyin veya AGENTS.md oluşturmak için /init çalıştırın",
ListSkillsHeaderFmt: "beceriler (%d)",
ListSkillsNone: "beceriler: tanımlanmamış — /init gibi bir yerleşik çağırın veya install_skill ile bir tane yazın",
ListHooksHeaderFmt: "kancalar (%d etkin)",
ListHooksNone: "kancalar: etkin yok — .ok/settings.json (proje, güvenden sonra) veya ~/.ok/settings.json (genel) içinde yapılandırın",
ListMcpHeader: "mcp sunucuları",
ListMcpNone: "mcp: bağlı sunucu yok — ok.toml ([[plugins]]) veya bir proje .mcp.json dosyasına bir tane ekleyin",
SelectProvidersLabel: "Etkinleştirilecek sağlayıcıları seçin",
EnterAPIKeysHeader: "API anahtarlarını girin (atlamak için Enter'a basın ve daha sonra .env'de ayarlayın):",
MissingKeyIntro: "ok.toml hazır — sadece bir API anahtarı uzakta.",
WroteFileFmt: "%s yazıldı",
SetupComplete: "Kurulum tamamlandı.",
SetupCancelled: "kurulum iptal edildi.",
TryHintFmt: "Dene: %s",
NextHint: "Sonraki: API anahtarınızı ayarlayın (export DEEPSEEK_API_KEY=... veya .env dosyasına ekleyin), ardından `ok run \\\"göreviniz\\\"` komutunu çalıştırın.",
ConfirmReconfigureFmt: "%s zaten mevcut. Yeniden yapılandırıp üzerine yazılsın mı?",
KeepingExisting: "Mevcut yapılandırma korunuyor.",
NotOverwritingFmt: "%s zaten mevcut; üzerine yazılmıyor",
UnknownCommandFmt: "bilinmeyen komut %q",
UsageRunHint: "kullanım: ok run [--model AD] <görev>",
ErrorPrefix: "hata:",
WriteConfigErr: "yapılandırma yazma:",
WriteEnvErr: ".env yazma:",
SelectOneHint: "(↑/↓ · Enter · q iptal)",
SelectManyHint: "(↑/↓ · Boşluk · Enter · q)",
}
Turkish is the Türkçe catalog (auto-translated).
var Ukrainian = Messages{
WelcomeTitleFmt: "Ласкаво просимо до %s",
NoConfigYet: "Конфігурацію ще не знайдено — давайте налаштуємо.",
StartingChatFmt: "Запуск %s…",
SetKeyHint: "Встановіть ваш API-ключ, потім виконайте `ok chat`.",
ConfigLabel: "конфіг",
ModelsLabel: "моделі",
ConfigNotFound: "не знайдено — використовуються вбудовані значення за замовчуванням",
ConfigErrorFmt: "%s — помилка: %v",
NoKey: "немає ключа",
Ready: "готово",
GetStarted: "Почати",
StepScaffold: "створити ok.toml",
StepSetKey: "встановити API-ключ",
InitHint: "Пам'ять проєкту (AGENTS.md) генерується в сесії: виконайте `ok chat`, потім `/init` — модель аналізує код і записує його. Для конфігурації використовуйте `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… або додайте до .env",
StepChatDesc: "інтерактивна сесія",
StepRunDesc: "одноразове завдання",
HelpFooter: "ok help · усі команди",
ChatTip: "Контекст зберігається між повідомленнями. Введіть 'exit' або Ctrl-D, щоб вийти.",
TurnCancelled: "скасовано — повернення до запиту",
NoSessionToResume: "немає збереженої сесії для відновлення — почніть нову за допомогою `ok chat`",
ResumeRequiresTTY: "--resume потребує інтерактивного терміналу; передайте --continue для останньої сесії",
PickSessionLabel: "Відновити яку сесію?",
ChatStatusThinkingFmt: "%s думає… (%ds · Esc скасовує)",
ChatStatusIdle: "Tab перемикає план · Enter надсилає · Ctrl+F історія пошуку · PgUp/PgDn прокрутка · Ctrl-D вихід",
ChatStatusPlanApproval: "Enter/y схвалює та виконує · n/Esc продовжує планування · PgUp/PgDn прокрутка",
PlanApprovalPrompt: "План готовий вище — Enter/y для схвалення та виконання, n/Esc для продовження планування",
ChatStatusToolApproval: "y схвалити один раз · a дозволити цю сесію · n відхилити · Ctrl-C скасувати хід",
AskTypeSomething: "Введіть щось інше",
AskTypingHint: "введіть нижче, Enter для підтвердження",
AskChatInstead: "Ні — просто чат",
ChatStatusQuestion: "↑/↓ рух · номер для вибору · пробіл множинний · Enter підтвердити · ←/→ перемикання · Esc скасувати",
ToolApprovalPromptFmt: "Дозволити %s%s? — [y] один раз · [a] цю сесію · [n] ні",
SlashCompactDone: "сесію стиснуто — старішу середину замінено підсумком, останні оберти збережено",
SlashCompactFailed: "стиснення не вдалося",
SlashNewDone: "розпочато нову сесію — попередній транскрипт збережено",
SlashNewFailed: "не вдалося розпочати нову сесію",
SlashUnavailable: "команда недоступна в цій збірці",
SlashUnknown: "невідома команда",
SlashTodoCleared: "список завдань видалено",
SlashHelp: "команди: /audit · /search · /compact · /new · /todo · /model (змінити модель) · /mcp · /skill · /hooks · /memory · /help · плюс навички (/init, /explore, …)",
SlashPromptEmpty: "підказка MCP не повернула вмісту для надсилання",
SlashMCPNone: "не налаштовано жодного сервера MCP — додайте запис [[plugins]] у ok.toml",
CompHintSlash: "↑/↓ рух · Tab/Enter вибір · Esc закрити",
CompHintFile: "↑/↓ рух · Tab/Enter відкрити папку або вибрати файл · Esc закрити",
CmdNew: "створити новий сеанс",
CmdCompact: "стиснути контекст",
CmdModel: "змінити модель",
CmdMemory: "показати файли пам'яті",
CmdMcp: "сервери MCP",
CmdHooks: "керувати хуками",
CmdSkill: "керувати навичками",
CmdAudit: "перевірити журнал аудиту",
CmdSearch: "пошук в історії",
CmdHelp: "список команд",
CmdTodo: "закрити список завдань",
ArgSkillShow: "показати тіло навички",
ArgSkillNew: "створити нову навичку",
ArgSkillPaths: "показати шляхи виявлення",
ArgMcpAdd: "підключити сервер",
ArgMcpRemove: "відключити сервер",
ArgMcpConnected: "підключено",
ArgHooksTrust: "довіряти хукам цього проєкту",
ArgModelCurrent: "поточний",
ListModelsHeaderFmt: "моделі (активні: %s)",
ListModelsHint: "перемикайте за допомогою перемикача моделей або введіть /model <провайдер/модель>",
ListMemoryHeader: "файли пам'яті",
ListMemoryNone: "пам'ять: відсутня — додайте за допомогою \\\"#<нотатка>\\\" або виконайте /init для створення AGENTS.md",
ListSkillsHeaderFmt: "навички (%d)",
ListSkillsNone: "навички: не визначені — викличте вбудовану команду, як-от /init, або створіть власну за допомогою install_skill",
ListHooksHeaderFmt: "хуки (%d активних)",
ListHooksNone: "хуки: жодного активного — налаштуйте в .ok/settings.json (проєкт, після довіри) або ~/.ok/settings.json (глобально)",
ListMcpHeader: "сервери mcp",
ListMcpNone: "mcp: жодного підключеного сервера — додайте в ok.toml ([[plugins]]) або в .mcp.json проєкту",
SelectProvidersLabel: "Виберіть провайдерів для увімкнення",
EnterAPIKeysHeader: "Введіть ключі API (Enter, щоб пропустити та налаштувати пізніше в .env):",
MissingKeyIntro: "ok.toml готовий — лише один крок до ключа API.",
WroteFileFmt: "Записано %s",
SetupComplete: "Налаштування завершено.",
SetupCancelled: "налаштування скасовано.",
TryHintFmt: "Спробуйте: %s",
NextHint: "Далі: встановіть ваш API-ключ (export DEEPSEEK_API_KEY=... або додайте до .env), потім виконайте `ok run \\\"ваше завдання\\\"`.",
ConfirmReconfigureFmt: "%s вже існує. Переналаштувати та перезаписати?",
KeepingExisting: "Залишаємо існуючу конфігурацію.",
NotOverwritingFmt: "%s вже існує; не перезаписуємо",
UnknownCommandFmt: "невідома команда %q",
UsageRunHint: "використання: ok run [--model NAME] <завдання>",
ErrorPrefix: "помилка:",
WriteConfigErr: "запис конфігурації:",
WriteEnvErr: "запис .env:",
SelectOneHint: "(↑/↓ · Enter · q для скасування)",
SelectManyHint: "(↑/↓ · Пробіл · Enter · q)",
}
Ukrainian is the Українська catalog (auto-translated).
var Urdu = Messages{
WelcomeTitleFmt: "%s میں خوش آمدید",
NoConfigYet: "ابھی تک کوئی ترتیب نہیں ملی — آئیے اسے ترتیب دیتے ہیں۔",
StartingChatFmt: "%s شروع ہو رہا ہے…",
SetKeyHint: "اپنی API کلید سیٹ کریں، پھر `ok chat` چلائیں۔",
ConfigLabel: "ترتیب",
ModelsLabel: "ماڈلز",
ConfigNotFound: "نہیں ملا — بلٹ ان ڈیفالٹ استعمال کر رہے ہیں",
ConfigErrorFmt: "%s — خرابی: %v",
NoKey: "کوئی کلید نہیں",
Ready: "تیار",
GetStarted: "شروع کریں",
StepScaffold: "ok.toml کا ڈھانچہ بنائیں",
StepSetKey: "API کلید سیٹ کریں",
InitHint: "پروجیکٹ میموری (AGENTS.md) سیشن میں تیار ہوتی ہے: `ok chat` چلائیں، پھر `/init` — ماڈل کوڈبیس کا تجزیہ کرتا ہے اور اسے لکھتا ہے۔ ترتیب کے لیے `ok setup` استعمال کریں۔",
StepSetKeyHint: "DEEPSEEK_API_KEY=… ایکسپورٹ کریں یا .env میں شامل کریں",
StepChatDesc: "انٹرایکٹو سیشن",
StepRunDesc: "ایک بار کا کام",
HelpFooter: "ok مدد · تمام کمانڈز",
ChatTip: "سیاق و سباق متعدد بار برقرار رہتا ہے۔ 'exit' یا Ctrl-D ٹائپ کریں۔",
TurnCancelled: "منسوخ — پرامپٹ پر واپس",
NoSessionToResume: "کوئی محفوظ شدہ سیشن دوبارہ شروع کرنے کے لیے نہیں ہے — `ok chat` کے ساتھ ایک نیا شروع کریں",
ResumeRequiresTTY: "--resume کو ایک انٹرایکٹو ٹرمینل کی ضرورت ہے؛ تازہ ترین سیشن کے لیے --continue استعمال کریں",
PickSessionLabel: "کون سا سیشن دوبارہ شروع کریں؟",
ChatStatusThinkingFmt: "%s سوچ رہا ہے… (%ds · Esc منسوخ کرتا ہے)",
ChatStatusIdle: "Tab منصوبہ تبدیل کرتا ہے · Enter بھیجتا ہے · Ctrl+F تاریخ تلاش کرتا ہے · PgUp/PgDn اسکرول کرتا ہے · Ctrl-D چھوڑ دیتا ہے",
ChatStatusPlanApproval: "Enter/y منظور کرتا ہے اور عمل کرتا ہے · n/Esc منصوبہ بندی جاری رکھتا ہے · PgUp/PgDn اسکرول کرتا ہے",
PlanApprovalPrompt: "اوپر منصوبہ تیار ہے — Enter/y منظور کرنے اور عمل کرنے کے لیے، n/Esc منصوبہ بندی جاری رکھنے کے لیے",
ChatStatusToolApproval: "y ایک بار منظور کرتا ہے · a اس سیشن کی اجازت دیتا ہے · n انکار کرتا ہے · Ctrl-C موڑ منسوخ کرتا ہے",
AskTypeSomething: "کچھ اور ٹائپ کریں",
AskTypingHint: "نیچے ٹائپ کریں، Enter تصدیق کرتا ہے",
AskChatInstead: "کوئی نہیں — صرف چیٹ کریں",
ChatStatusQuestion: "↑/↓ منتقل کریں · نمبر منتخب کریں · space کثیر انتخاب · Enter تصدیق · ←/→ سوئچ کریں · Esc منسوخ",
ToolApprovalPromptFmt: "%s%s کی اجازت دیں؟ — [y] ایک بار · [a] اس سیشن · [n] نہیں",
SlashCompactDone: "سیشن کمپیکٹ ہو گیا — پرانے درمیانی حصے کو خلاصے سے بدل دیا گیا، حالیہ موڑ رکھے گئے",
SlashCompactFailed: "کمپیکشن ناکام ہو گیا",
SlashNewDone: "تازہ سیشن شروع ہو گیا — پچھلا ٹرانسکرپٹ محفوظ کر لیا گیا",
SlashNewFailed: "نیا سیشن شروع نہیں کیا جا سکا",
SlashUnavailable: "اس بلڈ میں کمانڈ دستیاب نہیں ہے",
SlashUnknown: "نامعلوم کمانڈ",
SlashTodoCleared: "ٹاسک لسٹ ختم کر دی گئی",
SlashHelp: "کمانڈز: /audit · /search · /compact · /new · /todo · /model (ماڈل تبدیل کریں) · /mcp · /skill · /hooks · /memory · /help · علاوہ ازیں اسکلز (/init, /explore, …)",
SlashPromptEmpty: "MCP پرامپٹ نے بھیجنے کے لیے کوئی مواد واپس نہیں کیا",
SlashMCPNone: "کوئی MCP سرور کنفیگر نہیں — ok.toml میں [[plugins]] اندراج شامل کریں",
CompHintSlash: "↑/↓ منتقل کریں · Tab/Enter منتخب کریں · Esc بند کریں",
CompHintFile: "↑/↓ منتقل کریں · Tab/Enter فولڈر کھولیں یا فائل چنیں · Esc بند کریں",
CmdNew: "ایک نئی نشست شروع کریں",
CmdCompact: "سیاق و سباق کو کمپیکٹ کریں",
CmdModel: "ماڈل تبدیل کریں",
CmdMemory: "میموری فائلیں دکھائیں",
CmdMcp: "MCP سرورز",
CmdHooks: "ہکس کا نظم کریں",
CmdSkill: "اسکلز کا نظم کریں",
CmdAudit: "آڈٹ ٹریل کی تصدیق کریں",
CmdSearch: "تاریخچہ تلاش کریں",
CmdHelp: "کمانڈز کی فہرست",
CmdTodo: "ٹاسک لسٹ کو ختم کریں",
ArgSkillShow: "اسکل کا مواد دکھائیں",
ArgSkillNew: "ایک نئی اسکل تیار کریں",
ArgSkillPaths: "دریافت کے راستے دکھائیں",
ArgMcpAdd: "ایک سرور سے جڑیں",
ArgMcpRemove: "سرور کو منقطع کریں",
ArgMcpConnected: "منسلک",
ArgHooksTrust: "اس پروجیکٹ کے ہکس پر بھروسہ کریں",
ArgModelCurrent: "موجودہ",
ListModelsHeaderFmt: "ماڈلز (فعال: %s)",
ListModelsHint: "ماڈل سوئچر کے ساتھ سوئچ کریں، یا /model <provider/model> ٹائپ کریں",
ListMemoryHeader: "میموری فائلیں",
ListMemoryNone: "میموری: کوئی نہیں — \\\"#<note>\\\" کے ساتھ شامل کریں یا AGENTS.md بنانے کے لیے /init چلائیں",
ListSkillsHeaderFmt: "مہارتیں (%d)",
ListSkillsNone: "مہارتیں: کوئی متعین نہیں — /init جیسا بلٹ ان استعمال کریں، یا install_skill کے ساتھ ایک تصنیف کریں",
ListHooksHeaderFmt: "ہکس (%d فعال)",
ListHooksNone: "ہکس: کوئی فعال نہیں — .ok/settings.json (پروجیکٹ، بھروسے کے بعد) یا ~/.ok/settings.json (عالمی) میں ترتیب دیں",
ListMcpHeader: "ایم سی پی سرورز",
ListMcpNone: "ایم سی پی: کوئی سرور منسلک نہیں — ok.toml ([[plugins]]) یا پروجیکٹ .mcp.json میں ایک شامل کریں",
SelectProvidersLabel: "فعال کرنے کے لیے فراہم کنندگان منتخب کریں",
EnterAPIKeysHeader: "API چابیاں درج کریں (چھوڑنے کے لیے Enter دبائیں اور بعد میں .env میں سیٹ کریں):",
MissingKeyIntro: "ok.toml تیار ہے — صرف ایک API کلید دور ہے۔",
WroteFileFmt: "%s لکھا گیا",
SetupComplete: "سیٹ اپ مکمل۔",
SetupCancelled: "سیٹ اپ منسوخ کر دیا گیا۔",
TryHintFmt: "کوشش کریں: %s",
NextHint: "اگلا: اپنی API کلید سیٹ کریں (export DEEPSEEK_API_KEY=... یا .env میں شامل کریں)، پھر چلائیں `ok run \\\"your task\\\"`۔",
ConfirmReconfigureFmt: "%s پہلے سے موجود ہے۔ دوبارہ ترتیب دیں اور اوور رائٹ کریں؟",
KeepingExisting: "موجودہ کنفیگریشن رکھی جا رہی ہے۔",
NotOverwritingFmt: "%s پہلے سے موجود ہے؛ اوور رائٹ نہیں کیا جا رہا",
UnknownCommandFmt: "نامعلوم کمانڈ %q",
UsageRunHint: "استعمال: ok run [--model NAME] <task>",
ErrorPrefix: "غلطی:",
WriteConfigErr: "کنفیگ لکھیں:",
WriteEnvErr: ".env لکھیں:",
SelectOneHint: "(↑/↓ · Enter · q منسوخ کریں)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Urdu is the اردو catalog (auto-translated).
var Vietnamese = Messages{
WelcomeTitleFmt: "Chào mừng đến với %s",
NoConfigYet: "Chưa tìm thấy cấu hình — hãy thiết lập ngay.",
StartingChatFmt: "Đang khởi động %s…",
SetKeyHint: "Đặt khóa API của bạn, sau đó chạy `ok chat`.",
ConfigLabel: "cấu hình",
ModelsLabel: "mô hình",
ConfigNotFound: "không tìm thấy — đang dùng mặc định tích hợp sẵn",
ConfigErrorFmt: "%s — lỗi: %v",
NoKey: "không có khóa",
Ready: "sẵn sàng",
GetStarted: "Bắt đầu",
StepScaffold: "tạo khung ok.toml",
StepSetKey: "đặt khóa API",
InitHint: "Bộ nhớ dự án (AGENTS.md) được tạo trong phiên: chạy `ok chat`, sau đó `/init` — mô hình phân tích mã nguồn và ghi nó. Để cấu hình, dùng `ok setup`.",
StepSetKeyHint: "export DEEPSEEK_API_KEY=… hoặc thêm vào .env",
StepChatDesc: "phiên tương tác",
StepRunDesc: "tác vụ một lần",
HelpFooter: "ok help · tất cả lệnh",
ChatTip: "Ngữ cảnh được giữ qua các lượt. Gõ 'exit' hoặc Ctrl-D để thoát.",
TurnCancelled: "đã hủy — quay lại dấu nhắc",
NoSessionToResume: "không có phiên đã lưu để tiếp tục — hãy bắt đầu phiên mới với `ok chat`",
ResumeRequiresTTY: "--resume cần terminal tương tác; hãy dùng --continue cho phiên gần nhất",
PickSessionLabel: "Tiếp tục phiên nào?",
ChatStatusThinkingFmt: "%s đang suy nghĩ… (%ds · Esc hủy)",
ChatStatusIdle: "Tab chuyển kế hoạch · Enter gửi · Ctrl+F tìm lịch sử · PgUp/PgDn cuộn · Ctrl-D thoát",
ChatStatusPlanApproval: "Enter/y phê duyệt & thực thi · n/Esc tiếp tục lập kế hoạch · PgUp/PgDn cuộn",
PlanApprovalPrompt: "Kế hoạch đã sẵn sàng ở trên — Enter/y để phê duyệt & thực thi, n/Esc để tiếp tục lập kế hoạch",
ChatStatusToolApproval: "y phê duyệt một lần · a cho phép phiên này · n từ chối · Ctrl-C hủy lượt",
AskTypeSomething: "Nhập nội dung khác",
AskTypingHint: "nhập bên dưới, Enter để xác nhận",
AskChatInstead: "Không — chỉ trò chuyện",
ChatStatusQuestion: "↑/↓ di chuyển · số để chọn · cách chọn nhiều · Enter xác nhận · ←/→ chuyển · Esc hủy",
ToolApprovalPromptFmt: "Cho phép %s%s? — [y] một lần · [a] phiên này · [n] không",
SlashCompactDone: "phiên đã được nén — phần giữa cũ được thay bằng tóm tắt, các lượt gần được giữ lại",
SlashCompactFailed: "nén thất bại",
SlashNewDone: "phiên mới đã bắt đầu — bản ghi trước đó đã được lưu",
SlashNewFailed: "không thể bắt đầu phiên mới",
SlashUnavailable: "lệnh không khả dụng trong bản dựng này",
SlashUnknown: "lệnh không xác định",
SlashTodoCleared: "danh sách tác vụ đã bị xóa",
SlashHelp: "lệnh: /audit · /search · /compact · /new · /todo · /model (chuyển mô hình) · /mcp · /skill · /hooks · /memory · /help · cộng với kỹ năng (/init, /explore, …)",
SlashPromptEmpty: "MCP prompt không trả về nội dung để gửi",
SlashMCPNone: "không có máy chủ MCP nào được cấu hình — thêm mục [[plugins]] trong ok.toml",
CompHintSlash: "↑/↓ di chuyển · Tab/Enter chọn · Esc đóng",
CompHintFile: "↑/↓ di chuyển · Tab/Enter mở thư mục hoặc chọn tệp · Esc đóng",
CmdNew: "fork một phiên mới",
CmdCompact: "nén ngữ cảnh",
CmdModel: "chuyển mô hình",
CmdMemory: "hiển thị tệp bộ nhớ",
CmdMcp: "máy chủ MCP",
CmdHooks: "quản lý hooks",
CmdSkill: "quản lý kỹ năng",
CmdAudit: "xác minh nhật ký kiểm toán",
CmdSearch: "tìm kiếm lịch sử",
CmdHelp: "liệt kê lệnh",
CmdTodo: "bỏ qua danh sách tác vụ",
ArgSkillShow: "hiển thị nội dung kỹ năng",
ArgSkillNew: "tạo khuôn mẫu kỹ năng mới",
ArgSkillPaths: "hiển thị đường dẫn khám phá",
ArgMcpAdd: "kết nối máy chủ",
ArgMcpRemove: "ngắt kết nối máy chủ",
ArgMcpConnected: "đã kết nối",
ArgHooksTrust: "tin tưởng hook của dự án này",
ArgModelCurrent: "hiện tại",
ListModelsHeaderFmt: "mô hình (đang hoạt động: %s)",
ListModelsHint: "chuyển đổi bằng trình chuyển mô hình, hoặc gõ /model <nhà cung cấp/mô hình>",
ListMemoryHeader: "tệp bộ nhớ",
ListMemoryNone: "bộ nhớ: không có — thêm bằng “#<ghi chú>” hoặc chạy /init để tạo AGENTS.md",
ListSkillsHeaderFmt: "kỹ năng (%d)",
ListSkillsNone: "kỹ năng: chưa xác định — gọi lệnh tích hợp như /init, hoặc tự tạo bằng install_skill",
ListHooksHeaderFmt: "hook (%d đang hoạt động)",
ListHooksNone: "hook: không có hook nào đang hoạt động — cấu hình trong .ok/settings.json (dự án, sau khi tin tưởng) hoặc ~/.ok/settings.json (toàn cục)",
ListMcpHeader: "máy chủ mcp",
ListMcpNone: "mcp: không có máy chủ nào được kết nối — thêm một máy chủ trong ok.toml ([[plugins]]) hoặc tệp .mcp.json của dự án",
SelectProvidersLabel: "Chọn nhà cung cấp để kích hoạt",
EnterAPIKeysHeader: "Nhập khóa API (Enter để bỏ qua và đặt sau trong .env):",
MissingKeyIntro: "ok.toml đã sẵn sàng — chỉ còn thiếu khóa API.",
WroteFileFmt: "Đã ghi %s",
SetupComplete: "Thiết lập hoàn tất.",
SetupCancelled: "đã hủy thiết lập.",
TryHintFmt: "Thử: %s",
NextHint: "Tiếp theo: đặt khóa API của bạn (export DEEPSEEK_API_KEY=... hoặc thêm vào .env), sau đó chạy `ok run \\\"tác vụ của bạn\\\"`.",
ConfirmReconfigureFmt: "%s đã tồn tại. Cấu hình lại và ghi đè?",
KeepingExisting: "Giữ cấu hình hiện tại.",
NotOverwritingFmt: "%s đã tồn tại; không ghi đè",
UnknownCommandFmt: "lệnh không xác định %q",
UsageRunHint: "cách dùng: ok run [--model TÊN] <tác vụ>",
ErrorPrefix: "lỗi:",
WriteConfigErr: "ghi cấu hình:",
WriteEnvErr: "ghi .env:",
SelectOneHint: "(↑/↓ · Enter · q để hủy)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Vietnamese is the Tiếng Việt catalog (auto-translated).
var Zulu = Messages{
WelcomeTitleFmt: "Siyakwamukela ku %s",
NoConfigYet: "Akukho ukuhleleka okutholakele okwamanje — ake sikuhlele.",
StartingChatFmt: "Iqala %s…",
SetKeyHint: "Setha ukhiye wakho we-API, bese usebenzisa `ok chat`.",
ConfigLabel: "ukuhleleka",
ModelsLabel: "amafomethi",
ConfigNotFound: "akutholakali — kusetshenziswa okungokwemvelo okwakhelwe ngaphakathi",
ConfigErrorFmt: "%s — iphutha: %v",
NoKey: "akukho khiye",
Ready: "kulungele",
GetStarted: "Qala",
StepScaffold: "skafolda ok.toml",
StepSetKey: "setha ukhiye we-API",
InitHint: "Inkumbulo yephrojekthi (AGENTS.md) ikhiqizwa ngesikhathi seseshini: sebenzisa `ok chat`, bese `/init` — imodeli ihlaziya ikhodi futhi iyibhale. Ukuze uhlele, sebenzisa `ok setup`.",
StepSetKeyHint: "khipha DEEPSEEK_API_KEY=… noma engeza ku .env",
StepChatDesc: "iseshini yokusebenzisana",
StepRunDesc: "umsebenzi owodwa",
HelpFooter: "ok usizo · yonke imiyalo",
ChatTip: "Umongo ugcinwa kuzo zonke izingxoxo. Thayipha 'exit' noma Ctrl-D ukuze uyeke.",
TurnCancelled: "ikhanseliwe — buyela emuva kumthetho",
NoSessionToResume: "ayikho iseshini egciniwe ukuze uqhubeke — qala entsha nge `ok chat`",
ResumeRequiresTTY: "--resume idinga itheminali enokusebenzisana; dlulisa --continue ukuze uthole iseshini yakamuva",
PickSessionLabel: "Qhubeka ngayiphi iseshini?",
ChatStatusThinkingFmt: "%s iyacabanga… (%ds · Esc kuyamisa)",
ChatStatusIdle: "Tab kushintsha phakathi kohlelo · Enter kuthumela · Ctrl+F usesha umlando · PgUp/PgDn kuskrola · Ctrl-D kuyaphuma",
ChatStatusPlanApproval: "Enter/y kuvuma futhi kusebenze · n/Esc kuqhubeka nokuhlela · PgUp/PgDn kuskrola",
PlanApprovalPrompt: "Uhlelo selulungile ngenhla — Enter/y ukuvuma nokusebenzisa, n/Esc ukuqhubeka nokuhlela",
ChatStatusToolApproval: "y vuma kanye · a vumela le seshini · n enqaba · Ctrl-C kumisa ithuba",
AskTypeSomething: "Thayipha okunye",
AskTypingHint: "thayipha ngezansi, Enter ukuqinisekisa",
AskChatInstead: "Akukho — xoxa nje",
ChatStatusQuestion: "↑/↓ hamba · inombolo ukukhetha · isikhala ukukhetha okuningi · Enter ukuqinisekisa · ←/→ shintsha · Esc khansela",
ToolApprovalPromptFmt: "Vumela %s%s? — [y] kanye · [a] le seshini · [n] cha",
SlashCompactDone: "iseshini ihlanganisiwe — okudala okuphakathi kuthathwe isifinyezo, amathuba amuva agcinwa",
SlashCompactFailed: "ukuhlanganisa kwehlulekile",
SlashNewDone: "iseshini entsha iqaliwe — umbhalo wangaphambilini ugciniwe",
SlashNewFailed: "ayikwazanga ukuqala iseshini entsha",
SlashUnavailable: "umyalo awutholakali kule ngqungqulu",
SlashUnknown: "umyalo ongaziwa",
SlashTodoCleared: "uhlu lwemisebenzi lususiwe",
SlashHelp: "imiyalo: /audit · /search · /compact · /new · /todo · /model (shintsha imodeli) · /mcp · /skill · /hooks · /memory · /help · kanye namakhono (/init, /explore, …)",
SlashPromptEmpty: "isicelo se-MCP asibuyisanga okuqukethwe okuthunyelwayo",
SlashMCPNone: "azikho izisekeli ze-MCP ezilungisiwe — engeza okufakiwe [[plugins]] ku-ok.toml",
CompHintSlash: "↑/↓ hamba · Tab/Enter khetha · Esc vala",
CompHintFile: "↑/↓ hamba · Tab/Enter vula ifolda noma khetha ifayela · Esc vala",
CmdNew: "qala iseshini entsha",
CmdCompact: "hlanganisa umongo",
CmdModel: "shintsha imodeli",
CmdMemory: "khombisa amafayela ememori",
CmdMcp: "izisekeli ze-MCP",
CmdHooks: "phatha amahuku",
CmdSkill: "phatha amakhono",
CmdAudit: "qinisekisa umkhondo wokuhlola",
CmdSearch: "sesha umlando",
CmdHelp: "bhala uhlu lwemiyalo",
CmdTodo: "chitha uhlu lwemisebenzi",
ArgSkillShow: "khombisa umzimba wekhono",
ArgSkillNew: "akha ikhono elisha",
ArgSkillPaths: "khombisa izindlela zokuthola",
ArgMcpAdd: "xhuma isekeli",
ArgMcpRemove: "nqamula iseva",
ArgMcpConnected: "ixhunyiwe",
ArgHooksTrust: "thembela amahhuku ale phrojekthi",
ArgModelCurrent: "okwamanje",
ListModelsHeaderFmt: "amamodeli (asebenzayo: %s)",
ListModelsHint: "shintsha ngomshintshi wemodeli, noma thayipha /model <umhlinzeki/imodeli>",
ListMemoryHeader: "amafayela ememori",
ListMemoryNone: "imemori: ayikho — engeza nge “#<note>” noma gijimisa /init ukukhiqiza AGENTS.md",
ListSkillsHeaderFmt: "amakhono (%d)",
ListSkillsNone: "amakhono: awachazwanga — biza okwakhelwe-ngaphakathi njenge /init, noma bhala owakho nge install_skill",
ListHooksHeaderFmt: "amahhuku (%d asebenzayo)",
ListHooksNone: "amahhuku: awekho asebenzayo — lungiselela ku .ok/settings.json (phrojekthi, ngemva kokuthembela) noma ~/.ok/settings.json (jikelele)",
ListMcpHeader: "amaseva e-mcp",
ListMcpNone: "mcp: awekho amaseva axhunyiwe — engeza owodwa ku ok.toml ([[plugins]]) noma ku .mcp.json yephrojekthi",
SelectProvidersLabel: "Khetha abahlinzeki ukuze banikwe amandla",
EnterAPIKeysHeader: "Faka okhiye be-API (cindezela u-Enter ukuze weqe futhi ubeke kamuva ku .env):",
MissingKeyIntro: "ok.toml isilungile — ukhiye we-API uwodwa osukelekile.",
WroteFileFmt: "Kubhalwe %s",
SetupComplete: "Ukulungiselela kuqediwe.",
SetupCancelled: "ukulungiselela kukhanseliwe.",
TryHintFmt: "Zama: %s",
NextHint: "Okulandelayo: setha ukhiye wakho we-API (export DEEPSEEK_API_KEY=... noma engeza ku-.env), bese uqalisa `ok run \\\"umsebenzi wakho\\\"`.",
ConfirmReconfigureFmt: "%s isivele ikhona. Ukuhlela kabusha nokubhala ngaphezulu?",
KeepingExisting: "Kugcinwa ukuhlela okukhona.",
NotOverwritingFmt: "%s isivele ikhona; akubhalwa ngaphezulu",
UnknownCommandFmt: "umyalo ongaziwa %q",
UsageRunHint: "ukusetshenziswa: ok run [--model IGAMA] <umsebenzi>",
ErrorPrefix: "iphutha:",
WriteConfigErr: "bhala ukuhlela:",
WriteEnvErr: "bhala .env:",
SelectOneHint: "(↑/↓ · Enter · q ukuze ukhansele)",
SelectManyHint: "(↑/↓ · Space · Enter · q)",
}
Zulu is the isiZulu catalog (auto-translated).
Functions ¶
func CompiledTags ¶
func CompiledTags() []string
CompiledTags returns all language tags with compiled catalogs.
func DetectLanguage ¶
DetectLanguage selects a catalog from override (e.g. cfg.Language) or the environment and installs it as M. Returns the resolved tag ("en", "zh") so callers can log or expose it.
Priority: override > OK_LANG > LC_ALL > LC_MESSAGES > LANG > "en".
func EnglishField ¶
EnglishField returns the English value for a field key. Used by gen.go and LiveResolver as source text for translation.
func NeedsTranslation ¶
NeedsTranslation returns true when a field value still contains its English source text — used to detect fields that haven't been translated yet.
func SetResolverChain ¶
func SetResolverChain(chain TranslationResolver)
SetResolverChain installs a resolver chain for future T() calls. When nil, T() falls back to old-style M.* field access via reflection.
func T ¶
T is the top-level translation function. It resolves key through the active resolver chain, which defaults to a compiled English catalog.
func TranslationProgress ¶
TranslationProgress returns the fraction (0.0–1.0) of completed translations.
Types ¶
type LiveProvider ¶
type LiveProvider interface {
// Translate asks the LLM to translate the given English text to lang.
// Returns the translated text.
Translate(text, lang string) (string, error)
}
LiveProvider is the interface LiveResolver uses to translate text. The agent's LLM provider satisfies this interface.
type LiveResolver ¶
type LiveResolver struct {
// contains filtered or unexported fields
}
LiveResolver translates UI strings at runtime using the configured LLM provider. It is the fallback for languages without a compiled catalog. Translations are cached so each unique (lang, key) pair is translated once.
func NewLiveResolver ¶
func NewLiveResolver(provider LiveProvider, lang string) *LiveResolver
NewLiveResolver creates a resolver that translates into the given language using the provided LLM backend.
func (*LiveResolver) CacheSize ¶
func (l *LiveResolver) CacheSize() int
CacheSize returns the number of cached translations.
func (*LiveResolver) ResetCache ¶
func (l *LiveResolver) ResetCache()
ResetCache clears all cached translations (e.g. after language switch).
func (*LiveResolver) Stats ¶
func (l *LiveResolver) Stats() (hit, miss uint64)
Stats returns cache hit/miss counts for monitoring.
type Messages ¶
type Messages struct {
// welcome / status screen
Subtitle string // tagline under the product name in the welcome box
WelcomeTitleFmt string // first-run box title — %s = product name (styled)
NoConfigYet string // first-run cue under the welcome box
StartingChatFmt string // "Starting %s…" before dropping into chat
SetKeyHint string // shown when key is missing after init
ConfigLabel string // "config" status row label
ModelsLabel string // "models" status row label
ConfigNotFound string // shown when no config file exists
ConfigErrorFmt string // "%s — error: %v" — config path + parse error
NoKey string // status dot — no API key set
Ready string // status dot — provider ready
GetStarted string // section title above numbered steps
StepScaffold string // step 1 desc — ok setup
StepSetKey string // step 2 command label
// `ok init` — points to the in-session /init skill + setup
InitHint string
StepSetKeyHint string // step 2 desc — env var hint
StepChatDesc string // ok chat step desc
StepRunDesc string // ok run step desc
// chat REPL
ChatTip string // tip line under the chat banner
TurnCancelled string // shown when Ctrl-C aborts the in-flight turn but the chat keeps running
NoSessionToResume string // shown when --continue / --resume finds nothing
ResumeRequiresTTY string // shown when --resume runs piped instead of on a terminal
PickSessionLabel string // header on the --resume picker
// chat TUI status line / approval banner.
ChatStatusThinkingFmt string // "%s thinking… (%ds · <cancel hint>)" — %s = spinner, %d = elapsed s
ChatStatusIdle string // shortcuts hint when idle
ChatStatusPlanApproval string // shortcuts hint while a plan is pending
PlanApprovalPrompt string // one-line "plan above is ready" banner shown above the input
ChatStatusToolApproval string // shortcuts hint while a tool call awaits approval
ToolApprovalPromptFmt string // "Allow %s%s?" banner — %s = tool name, %s = subject (leading space, or empty)
// `ask` tool question card.
AskTypeSomething string // the "type your own answer" option label
AskTypingHint string // shown on that row while entering free text
AskChatInstead string // the "don't pick, just chat" option label
ChatStatusQuestion string // shortcuts hint while a question card is open
// chat TUI slash commands.
SlashCompactDone string // "/compact" succeeded
SlashCompactFailed string // "/compact" errored, prefixed before the underlying error
SlashNewDone string // "/new" succeeded
SlashNewFailed string // "/new" errored
SlashTodoCleared string // "/todo" dismissed the pinned task list
SlashUnknown string // shown when the user types an unrecognized "/cmd"
SlashHelp string // listed commands
SlashPromptEmpty string // an MCP prompt returned no text to send
SlashMCPNone string // /mcp when no MCP servers are connected
CompHintSlash string // key hint footer under the slash-command menu
CompHintFile string // key hint footer under the @ file/resource menu
// slash command + sub-command descriptions shown in the menu (CLI and desktop
// share these via i18n.M, so both frontends localize identically).
CmdNew string // /new
CmdCompact string // /compact
CmdModel string // /model
CmdMemory string // /memory
CmdMcp string // /mcp
CmdHooks string // /hooks
CmdSkill string // /skill
CmdAudit string // /audit
CmdSearch string // /search
CmdHelp string // /help
CmdTodo string // /todo
ArgSkillList string // /skill list
ArgSkillShow string // /skill show
ArgSkillNew string // /skill new
ArgSkillPaths string // /skill paths
ArgMcpAdd string // /mcp add
ArgMcpRemove string // /mcp remove
ArgMcpList string // /mcp list
ArgMcpConnected string // /mcp remove <server> tag
ArgHooksList string // /hooks list
ArgHooksTrust string // /hooks trust
ArgModelCurrent string // /model <ref> active tag
// management listing notices (the Submit path: desktop / HTTP frontends)
ListModelsHeaderFmt string // "models (active: %s)"
ListModelsHint string // how to switch
ListMemoryHeader string // "memory files"
ListMemoryNone string // no memory docs
ListSkillsHeaderFmt string // "skills (%d)"
ListSkillsNone string // no skills
ListHooksHeaderFmt string // "hooks (%d active)"
ListHooksNone string // no hooks
ListMcpHeader string // "mcp servers"
ListMcpNone string // no mcp servers
// init wizard
SelectProvidersLabel string // multi-select label
EnterAPIKeysHeader string // header before the per-env-var prompts
MissingKeyIntro string // shown when re-running the key step on a configured setup
WroteFileFmt string // "Wrote %s" — used for ok.toml and .env both
SetupComplete string // success line at end of init
SetupCancelled string // shown when the user aborts the wizard
TryHintFmt string // "Try: %s" — %s = command to try (styled)
NextHint string // non-interactive post-write hint
ConfirmReconfigureFmt string // "%s already exists. Reconfigure and overwrite?"
KeepingExisting string // when the user declines to overwrite
NotOverwritingFmt string // non-interactive overwrite refusal
// top-level / runAgent
UnknownCommandFmt string // "unknown command %q"
UsageRunHint string // "usage: ok run [--model NAME] <task>"
ErrorPrefix string // "error:" — prefix for fatal-error output
WriteConfigErr string // "write config:" — prefix for write failure
WriteEnvErr string // "write .env:" — prefix for env-write failure
// selection menus
SelectOneHint string // "(↑/↓ · Enter · q to cancel)"
SelectManyHint string // "(↑/↓ · Space · Enter · q)"
// usage / help
UsageBody string // full multi-line help text
}
Messages is the catalog of translatable CLI strings. Plain fields are printed verbatim; *Fmt fields are fmt format strings the caller passes to fmt.Sprintf. Catalog values do not include trailing newlines — call sites add framing whitespace, so the same field works wherever it appears.
type PrecompiledResolver ¶
type PrecompiledResolver struct {
// contains filtered or unexported fields
}
PrecompiledResolver serves strings from a compiled-in Messages catalog. It is the first link in the chain — zero latency, always available.
func EnglishResolver ¶
func EnglishResolver() *PrecompiledResolver
EnglishResolver returns a PrecompiledResolver for the English catalog.
func NewPrecompiledResolver ¶
func NewPrecompiledResolver(catalog *Messages) *PrecompiledResolver
NewPrecompiledResolver wraps a compiled Messages catalog as a resolver.
func ResolveTag ¶
func ResolveTag(tag string) *PrecompiledResolver
ResolveTag returns the compiled resolver for a language tag.
type ResolverChain ¶
type ResolverChain struct {
// contains filtered or unexported fields
}
ResolverChain combines multiple resolvers in order. The first resolver that returns a non-empty string wins. If all resolvers return "", the chain returns "" (the caller should fall back to English).
func NewResolverChain ¶
func NewResolverChain(resolvers ...TranslationResolver) *ResolverChain
NewResolverChain builds a chain from the given resolvers.
type TranslationResolver ¶
type TranslationResolver interface {
// T returns the translated string for the given Messages field key,
// formatted with optional args. Returns "" when the key is unknown.
T(key string, args ...any) string
}
TranslationResolver resolves a translated UI string by field key. Each implementation returns "" to signal "not found, try the next resolver".
Source Files
¶
- i18n.go
- live.go
- messages_ar.go
- messages_bn.go
- messages_de.go
- messages_el.go
- messages_en.go
- messages_es.go
- messages_fa.go
- messages_fr.go
- messages_ha.go
- messages_hi.go
- messages_id.go
- messages_it.go
- messages_ja.go
- messages_ko.go
- messages_ms.go
- messages_nl.go
- messages_pl.go
- messages_pt.go
- messages_ro.go
- messages_ru.go
- messages_sw.go
- messages_ta.go
- messages_th.go
- messages_tl.go
- messages_tr.go
- messages_uk.go
- messages_ur.go
- messages_vi.go
- messages_zh.go
- messages_zu.go
- resolver.go