refactor: move kilo i18n to a exclusive pkg

This commit is contained in:
Catriel Müller
2026-02-03 19:48:26 -03:00
parent 88f06392d5
commit 2d1bcac1a9
20 changed files with 342 additions and 19 deletions
+21 -3
View File
@@ -26,6 +26,7 @@
"name": "@opencode-ai/app", "name": "@opencode-ai/app",
"version": "1.0.13", "version": "1.0.13",
"dependencies": { "dependencies": {
"@kilocode/kilo-i18n": "workspace:*",
"@kilocode/sdk": "workspace:*", "@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:", "@kobalte/core": "catalog:",
"@opencode-ai/ui": "workspace:*", "@opencode-ai/ui": "workspace:*",
@@ -171,6 +172,7 @@
}, },
"packages/console/resource": { "packages/console/resource": {
"name": "@opencode-ai/console-resource", "name": "@opencode-ai/console-resource",
"version": "1.0.13",
"dependencies": { "dependencies": {
"@cloudflare/workers-types": "catalog:", "@cloudflare/workers-types": "catalog:",
}, },
@@ -190,6 +192,7 @@
"@solid-primitives/i18n": "2.2.1", "@solid-primitives/i18n": "2.2.1",
"@solid-primitives/storage": "catalog:", "@solid-primitives/storage": "catalog:",
"@tauri-apps/api": "^2", "@tauri-apps/api": "^2",
"@tauri-apps/plugin-deep-link": "~2",
"@tauri-apps/plugin-dialog": "~2", "@tauri-apps/plugin-dialog": "~2",
"@tauri-apps/plugin-http": "~2", "@tauri-apps/plugin-http": "~2",
"@tauri-apps/plugin-notification": "~2", "@tauri-apps/plugin-notification": "~2",
@@ -288,6 +291,16 @@
"solid-js", "solid-js",
], ],
}, },
"packages/kilo-i18n": {
"name": "@kilocode/kilo-i18n",
"version": "1.0.13",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
"@typescript/native-preview": "catalog:",
"typescript": "catalog:",
},
},
"packages/kilo-telemetry": { "packages/kilo-telemetry": {
"name": "@kilocode/kilo-telemetry", "name": "@kilocode/kilo-telemetry",
"version": "1.0.13", "version": "1.0.13",
@@ -312,12 +325,12 @@
"name": "@kilocode/cli", "name": "@kilocode/cli",
"version": "1.0.13", "version": "1.0.13",
"bin": { "bin": {
"kilo": "./bin/kilo", "opencode": "./bin/opencode",
}, },
"dependencies": { "dependencies": {
"@actions/core": "1.11.1", "@actions/core": "1.11.1",
"@actions/github": "6.0.1", "@actions/github": "6.0.1",
"@agentclientprotocol/sdk": "0.12.0", "@agentclientprotocol/sdk": "0.13.0",
"@ai-sdk/amazon-bedrock": "3.0.73", "@ai-sdk/amazon-bedrock": "3.0.73",
"@ai-sdk/anthropic": "2.0.57", "@ai-sdk/anthropic": "2.0.57",
"@ai-sdk/azure": "2.0.91", "@ai-sdk/azure": "2.0.91",
@@ -430,6 +443,7 @@
}, },
"packages/script": { "packages/script": {
"name": "@opencode-ai/script", "name": "@opencode-ai/script",
"version": "1.0.13",
"devDependencies": { "devDependencies": {
"@types/bun": "catalog:", "@types/bun": "catalog:",
}, },
@@ -611,7 +625,7 @@
"@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="],
"@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.12.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-V8uH/KK1t7utqyJmTA7y7DzKu6+jKFIXM+ZVouz8E55j8Ej2RV42rEvPKn3/PpBJlliI5crcGk1qQhZ7VwaepA=="], "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.13.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Z6/Fp4cXLbYdMXr5AK752JM5qG2VKb6ShM0Ql6FimBSckMmLyK54OA20UhPYoH4C37FSFwUTARuwQOwQUToYrw=="],
"@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.73", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-EAAGJ/dfbAZaqIhK3w52hq6cftSLZwXdC6uHKh8Cls1T0N4MxS6ykDf54UyFO3bZWkQxR+Mdw1B3qireGOxtJQ=="], "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.73", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-EAAGJ/dfbAZaqIhK3w52hq6cftSLZwXdC6uHKh8Cls1T0N4MxS6ykDf54UyFO3bZWkQxR+Mdw1B3qireGOxtJQ=="],
@@ -1169,6 +1183,8 @@
"@kilocode/kilo-gateway": ["@kilocode/kilo-gateway@workspace:packages/kilo-gateway"], "@kilocode/kilo-gateway": ["@kilocode/kilo-gateway@workspace:packages/kilo-gateway"],
"@kilocode/kilo-i18n": ["@kilocode/kilo-i18n@workspace:packages/kilo-i18n"],
"@kilocode/kilo-telemetry": ["@kilocode/kilo-telemetry@workspace:packages/kilo-telemetry"], "@kilocode/kilo-telemetry": ["@kilocode/kilo-telemetry@workspace:packages/kilo-telemetry"],
"@kilocode/plugin": ["@kilocode/plugin@workspace:packages/plugin"], "@kilocode/plugin": ["@kilocode/plugin@workspace:packages/plugin"],
@@ -1829,6 +1845,8 @@
"@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.9.6", "", { "os": "win32", "cpu": "x64" }, "sha512-ldWuWSSkWbKOPjQMJoYVj9wLHcOniv7diyI5UAJ4XsBdtaFB0pKHQsqw/ItUma0VXGC7vB4E9fZjivmxur60aw=="], "@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.9.6", "", { "os": "win32", "cpu": "x64" }, "sha512-ldWuWSSkWbKOPjQMJoYVj9wLHcOniv7diyI5UAJ4XsBdtaFB0pKHQsqw/ItUma0VXGC7vB4E9fZjivmxur60aw=="],
"@tauri-apps/plugin-deep-link": ["@tauri-apps/plugin-deep-link@2.4.6", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-UUOSt0U5juK20uhO2MoHZX/IPblkrhUh+VPtIeu3RwtzI0R9Em3Auzfg/PwcZ9Pv8mLne3cQ4p9CFXD6WxqCZA=="],
"@tauri-apps/plugin-dialog": ["@tauri-apps/plugin-dialog@2.6.0", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg=="], "@tauri-apps/plugin-dialog": ["@tauri-apps/plugin-dialog@2.6.0", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg=="],
"@tauri-apps/plugin-http": ["@tauri-apps/plugin-http@2.5.6", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-KhCK3TDNDF4vdz75/j+KNQipYKf+295Visa8r32QcXScg0+D3JwShcCM6D+FN8WuDF24X3KSiAB8QtRxW6jKRA=="], "@tauri-apps/plugin-http": ["@tauri-apps/plugin-http@2.5.6", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-KhCK3TDNDF4vdz75/j+KNQipYKf+295Visa8r32QcXScg0+D3JwShcCM6D+FN8WuDF24X3KSiAB8QtRxW6jKRA=="],
+1
View File
@@ -36,6 +36,7 @@
}, },
"dependencies": { "dependencies": {
"@kobalte/core": "catalog:", "@kobalte/core": "catalog:",
"@kilocode/kilo-i18n": "workspace:*",
"@kilocode/sdk": "workspace:*", "@kilocode/sdk": "workspace:*",
"@opencode-ai/ui": "workspace:*", "@opencode-ai/ui": "workspace:*",
"@opencode-ai/util": "workspace:*", "@opencode-ai/util": "workspace:*",
+35 -16
View File
@@ -33,6 +33,23 @@ import { dict as uiAr } from "@opencode-ai/ui/i18n/ar"
import { dict as uiNo } from "@opencode-ai/ui/i18n/no" import { dict as uiNo } from "@opencode-ai/ui/i18n/no"
import { dict as uiBr } from "@opencode-ai/ui/i18n/br" import { dict as uiBr } from "@opencode-ai/ui/i18n/br"
import { dict as uiTh } from "@opencode-ai/ui/i18n/th" import { dict as uiTh } from "@opencode-ai/ui/i18n/th"
// kilocode_change start
import { dict as kiloEn } from "@kilocode/kilo-i18n/en"
import { dict as kiloZh } from "@kilocode/kilo-i18n/zh"
import { dict as kiloZht } from "@kilocode/kilo-i18n/zht"
import { dict as kiloKo } from "@kilocode/kilo-i18n/ko"
import { dict as kiloDe } from "@kilocode/kilo-i18n/de"
import { dict as kiloEs } from "@kilocode/kilo-i18n/es"
import { dict as kiloFr } from "@kilocode/kilo-i18n/fr"
import { dict as kiloDa } from "@kilocode/kilo-i18n/da"
import { dict as kiloJa } from "@kilocode/kilo-i18n/ja"
import { dict as kiloPl } from "@kilocode/kilo-i18n/pl"
import { dict as kiloRu } from "@kilocode/kilo-i18n/ru"
import { dict as kiloAr } from "@kilocode/kilo-i18n/ar"
import { dict as kiloNo } from "@kilocode/kilo-i18n/no"
import { dict as kiloBr } from "@kilocode/kilo-i18n/br"
import { dict as kiloTh } from "@kilocode/kilo-i18n/th"
// kilocode_change end
export type Locale = export type Locale =
| "en" | "en"
@@ -51,7 +68,7 @@ export type Locale =
| "br" | "br"
| "th" | "th"
type RawDictionary = typeof en & typeof uiEn type RawDictionary = typeof en & typeof uiEn & typeof kiloEn // kilocode_change
type Dictionary = i18n.Flatten<RawDictionary> type Dictionary = i18n.Flatten<RawDictionary>
const LOCALES: readonly Locale[] = [ const LOCALES: readonly Locale[] = [
@@ -138,24 +155,26 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
setStore("locale", current) setStore("locale", current)
}) })
const base = i18n.flatten({ ...en, ...uiEn }) // kilocode_change start - kilo translations merged last for override capability
const base = i18n.flatten({ ...en, ...uiEn, ...kiloEn })
const dict = createMemo<Dictionary>(() => { const dict = createMemo<Dictionary>(() => {
if (locale() === "en") return base if (locale() === "en") return base
if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh, ...kiloZh }) }
if (locale() === "zht") return { ...base, ...i18n.flatten({ ...zht, ...uiZht }) } if (locale() === "zht") return { ...base, ...i18n.flatten({ ...zht, ...uiZht, ...kiloZht }) }
if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe, ...kiloDe }) }
if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs, ...kiloEs }) }
if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr, ...kiloFr }) }
if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa, ...kiloDa }) }
if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa }) } if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa, ...kiloJa }) }
if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl }) } if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl, ...kiloPl }) }
if (locale() === "ru") return { ...base, ...i18n.flatten({ ...ru, ...uiRu }) } if (locale() === "ru") return { ...base, ...i18n.flatten({ ...ru, ...uiRu, ...kiloRu }) }
if (locale() === "ar") return { ...base, ...i18n.flatten({ ...ar, ...uiAr }) } if (locale() === "ar") return { ...base, ...i18n.flatten({ ...ar, ...uiAr, ...kiloAr }) }
if (locale() === "no") return { ...base, ...i18n.flatten({ ...no, ...uiNo }) } if (locale() === "no") return { ...base, ...i18n.flatten({ ...no, ...uiNo, ...kiloNo }) }
if (locale() === "br") return { ...base, ...i18n.flatten({ ...br, ...uiBr }) } if (locale() === "br") return { ...base, ...i18n.flatten({ ...br, ...uiBr, ...kiloBr }) }
if (locale() === "th") return { ...base, ...i18n.flatten({ ...th, ...uiTh }) } if (locale() === "th") return { ...base, ...i18n.flatten({ ...th, ...uiTh, ...kiloTh }) }
return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo, ...kiloKo }) }
}) })
// kilocode_change end
const t = i18n.translator(dict, i18n.resolveTemplate) const t = i18n.translator(dict, i18n.resolveTemplate)
+20
View File
@@ -0,0 +1,20 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-i18n",
"version": "1.0.13",
"type": "module",
"license": "MIT",
"description": "Kilo-specific i18n translations and overrides",
"exports": {
"./*": "./src/*.ts"
},
"scripts": {
"typecheck": "tsgo --noEmit"
},
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
"typescript": "catalog:",
"@typescript/native-preview": "catalog:"
}
}
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"يمنحك Kilo Gateway الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسّنة لوكلاء البرمجة.",
"provider.connect.kiloGateway.line2":
"بمفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude وGPT وGemini وGLM والمزيد.",
"provider.connect.kiloGateway.visit.prefix": "قم بزيارة ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " للحصول على مفتاح API الخاص بك.",
// Provider dialog translations
"dialog.provider.group.recommended": "موصى به",
"dialog.provider.kilo.note": "الوصول إلى أكثر من 500 نموذج ذكاء اصطناعي",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"O Kilo Gateway oferece acesso a um conjunto selecionado de modelos confiáveis e otimizados para agentes de codificação.",
"provider.connect.kiloGateway.line2":
"Com uma única chave de API, você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.",
"provider.connect.kiloGateway.visit.prefix": "Visite ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " para obter sua chave de API.",
// Provider dialog translations
"dialog.provider.group.recommended": "Recomendados",
"dialog.provider.kilo.note": "Acesso a mais de 500 modelos de IA",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway giver dig adgang til et udvalgt sæt pålidelige, optimerede modeller til kodningsagenter.",
"provider.connect.kiloGateway.line2":
"Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.",
"provider.connect.kiloGateway.visit.prefix": "Besøg ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " for at hente din API-nøgle.",
// Provider dialog translations
"dialog.provider.group.recommended": "Anbefalede",
"dialog.provider.kilo.note": "Adgang til 500+ AI-modeller",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway bietet Ihnen Zugang zu einer kuratierten Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.",
"provider.connect.kiloGateway.line2":
"Mit einem einzigen API-Schlüssel erhalten Sie Zugang zu Modellen wie Claude, GPT, Gemini, GLM und mehr.",
"provider.connect.kiloGateway.visit.prefix": "Besuchen Sie ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.",
// Provider dialog translations
"dialog.provider.group.recommended": "Empfohlen",
"dialog.provider.kilo.note": "Zugriff auf 500+ KI-Modelle",
} satisfies Partial<Record<Keys, string>>
+20
View File
@@ -0,0 +1,20 @@
// kilocode_change - new file
// Kilo-specific translations and overrides
// Keys here will override any matching keys from upstream translations
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway gives you access to a curated set of reliable optimized models for coding agents.",
"provider.connect.kiloGateway.line2":
"With a single API key you'll get access to models such as Claude, GPT, Gemini, GLM and more.",
"provider.connect.kiloGateway.visit.prefix": "Visit ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " to collect your API key.",
// Provider dialog translations
"dialog.provider.group.recommended": "Recommended",
"dialog.provider.kilo.note": "Access 500+ AI models",
// Add any upstream overrides below this line
// Example: "some.upstream.key": "Kilo-specific override value",
}
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway te da acceso a un conjunto seleccionado de modelos optimizados y confiables para agentes de codificación.",
"provider.connect.kiloGateway.line2":
"Con una sola clave API tendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.",
"provider.connect.kiloGateway.visit.prefix": "Visita ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " para obtener tu clave API.",
// Provider dialog translations
"dialog.provider.group.recommended": "Recomendados",
"dialog.provider.kilo.note": "Acceso a más de 500 modelos de IA",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway vous donne accès à une sélection de modèles fiables et optimisés pour les agents de codage.",
"provider.connect.kiloGateway.line2":
"Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.",
"provider.connect.kiloGateway.visit.prefix": "Visitez ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " pour obtenir votre clé API.",
// Provider dialog translations
"dialog.provider.group.recommended": "Recommandés",
"dialog.provider.kilo.note": "Accès à plus de 500 modèles d'IA",
} satisfies Partial<Record<Keys, string>>
+16
View File
@@ -0,0 +1,16 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gatewayは、コーディングエージェント向けに厳選された信頼性の高い最適化モデルへのアクセスを提供します。",
"provider.connect.kiloGateway.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。",
"provider.connect.kiloGateway.visit.prefix": "",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " にアクセスしてAPIキーを取得してください。",
// Provider dialog translations
"dialog.provider.group.recommended": "おすすめ",
"dialog.provider.kilo.note": "500以上のAIモデルにアクセス",
} satisfies Partial<Record<Keys, string>>
+16
View File
@@ -0,0 +1,16 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway는 코딩 에이전트를 위한 신뢰할 수 있는 최적화된 모델 세트를 제공합니다.",
"provider.connect.kiloGateway.line2": "하나의 API 키로 Claude, GPT, Gemini, GLM 등의 모델을 사용할 수 있습니다.",
"provider.connect.kiloGateway.visit.prefix": "",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": "를 방문하여 API 키를 받으세요.",
// Provider dialog translations
"dialog.provider.group.recommended": "추천",
"dialog.provider.kilo.note": "500개 이상의 AI 모델 이용 가능",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway gir deg tilgang til et utvalgt sett med pålitelige, optimaliserte modeller for kodingsagenter.",
"provider.connect.kiloGateway.line2":
"Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.",
"provider.connect.kiloGateway.visit.prefix": "Besøk ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " for å hente API-nøkkelen din.",
// Provider dialog translations
"dialog.provider.group.recommended": "Anbefalt",
"dialog.provider.kilo.note": "Tilgang til 500+ AI-modeller",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway zapewnia dostęp do wyselekcjonowanego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodowania.",
"provider.connect.kiloGateway.line2":
"Za pomocą jednego klucza API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i innych.",
"provider.connect.kiloGateway.visit.prefix": "Odwiedź ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": ", aby otrzymać swój klucz API.",
// Provider dialog translations
"dialog.provider.group.recommended": "Polecane",
"dialog.provider.kilo.note": "Dostęp do ponad 500 modeli AI",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway предоставляет доступ к подборке надёжных оптимизированных моделей для агентов кодирования.",
"provider.connect.kiloGateway.line2":
"С одним API-ключом вы получите доступ к моделям Claude, GPT, Gemini, GLM и другим.",
"provider.connect.kiloGateway.visit.prefix": "Посетите ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": ", чтобы получить ваш API-ключ.",
// Provider dialog translations
"dialog.provider.group.recommended": "Рекомендуемые",
"dialog.provider.kilo.note": "Доступ к 500+ моделям ИИ",
} satisfies Partial<Record<Keys, string>>
+17
View File
@@ -0,0 +1,17 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1":
"Kilo Gateway ให้คุณเข้าถึงชุดโมเดลที่คัดสรรมาอย่างดีและเชื่อถือได้สำหรับตัวแทนเขียนโค้ด",
"provider.connect.kiloGateway.line2":
"ด้วย API key เดียว คุณจะสามารถเข้าถึงโมเดลต่างๆ เช่น Claude, GPT, Gemini, GLM และอื่นๆ",
"provider.connect.kiloGateway.visit.prefix": "เยี่ยมชม ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " เพื่อรับ API key ของคุณ",
// Provider dialog translations
"dialog.provider.group.recommended": "แนะนำ",
"dialog.provider.kilo.note": "เข้าถึงโมเดล AI มากกว่า 500 รายการ",
} satisfies Partial<Record<Keys, string>>
+15
View File
@@ -0,0 +1,15 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1": "Kilo Gateway 为您提供一组精选的可靠优化模型,专为编码代理设计。",
"provider.connect.kiloGateway.line2": "只需一个 API 密钥,您就可以使用 Claude、GPT、Gemini、GLM 等模型。",
"provider.connect.kiloGateway.visit.prefix": "访问 ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " 获取您的 API 密钥。",
// Provider dialog translations
"dialog.provider.group.recommended": "推荐",
"dialog.provider.kilo.note": "访问 500+ AI 模型",
} satisfies Partial<Record<Keys, string>>
+15
View File
@@ -0,0 +1,15 @@
// kilocode_change - new file
import { dict as en } from "./en"
type Keys = keyof typeof en
export const dict = {
// Kilo Gateway provider translations
"provider.connect.kiloGateway.line1": "Kilo Gateway 為您提供一組精選的可靠優化模型,專為編碼代理設計。",
"provider.connect.kiloGateway.line2": "只需一個 API 金鑰,您就可以使用 Claude、GPT、Gemini、GLM 等模型。",
"provider.connect.kiloGateway.visit.prefix": "訪問 ",
"provider.connect.kiloGateway.visit.link": "kilo.ai",
"provider.connect.kiloGateway.visit.suffix": " 獲取您的 API 金鑰。",
// Provider dialog translations
"dialog.provider.group.recommended": "推薦",
"dialog.provider.kilo.note": "存取 500+ AI 模型",
} satisfies Partial<Record<Keys, string>>
+13
View File
@@ -0,0 +1,13 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@tsconfig/node22/tsconfig.json",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src",
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"noEmit": true
},
"include": ["src/**/*"]
}