i18n

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

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:

  1. Precompiled resolver — compiled-in Messages catalogs (30+ languages)
  2. Live resolver — runtime LLM translation for all other languages
  3. 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

Constants

This section is empty.

Variables

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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.

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

M is the active catalog. DetectLanguage replaces it; English is the default so any code path that runs before detection still has text.

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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).

View Source
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

func DetectLanguage(override string) string

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

func EnglishField(key string) string

EnglishField returns the English value for a field key. Used by gen.go and LiveResolver as source text for translation.

func KeyExists

func KeyExists(key string) bool

KeyExists checks if a key exists in the English catalog.

func NeedsTranslation

func NeedsTranslation(catalog *Messages, key string) bool

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

func T(key string, args ...any) string

T is the top-level translation function. It resolves key through the active resolver chain, which defaults to a compiled English catalog.

func TFunc

func TFunc(key string) func(...any) string

TFunc returns a function that calls T with the given key.

func TranslationProgress

func TranslationProgress(catalog *Messages) float64

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.

func (*LiveResolver) T

func (l *LiveResolver) T(key string, args ...any) string

T resolves a key by translating the English value at runtime. Results are cached so repeated lookups are zero-latency.

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
	HelpFooter     string // dim footer linking to ok help

	// 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
	SlashUnavailable   string // the command is configured off (no callback wired)
	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.

func (*PrecompiledResolver) T

func (p *PrecompiledResolver) T(key string, args ...any) string

T looks up a string by field key. Returns "" if not found.

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.

func (*ResolverChain) T

func (c *ResolverChain) T(key string, args ...any) string

T walks the resolver chain and returns the first non-empty result.

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL