Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions packages/app/src/context/language.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { Persist, persisted } from "@/utils/persist"
import { dict as en } from "@/i18n/en"
import { dict as zh } from "@/i18n/zh"
import { dict as zht } from "@/i18n/zht"
import { dict as ko } from "@/i18n/ko"
import { dict as de } from "@/i18n/de"
import { dict as es } from "@/i18n/es"
Expand All @@ -15,6 +16,7 @@ import { dict as pl } from "@/i18n/pl"
import { dict as ru } from "@/i18n/ru"
import { dict as uiEn } from "@opencode-ai/ui/i18n/en"
import { dict as uiZh } from "@opencode-ai/ui/i18n/zh"
import { dict as uiZht } from "@opencode-ai/ui/i18n/zht"
import { dict as uiKo } from "@opencode-ai/ui/i18n/ko"
import { dict as uiDe } from "@opencode-ai/ui/i18n/de"
import { dict as uiEs } from "@opencode-ai/ui/i18n/es"
Expand All @@ -24,20 +26,23 @@ import { dict as uiJa } from "@opencode-ai/ui/i18n/ja"
import { dict as uiPl } from "@opencode-ai/ui/i18n/pl"
import { dict as uiRu } from "@opencode-ai/ui/i18n/ru"

export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru"
export type Locale = "en" | "zh" | "zht" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru"

type RawDictionary = typeof en & typeof uiEn
type Dictionary = i18n.Flatten<RawDictionary>

const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl", "ru"]
const LOCALES: readonly Locale[] = ["en", "zh", "zht", "ko", "de", "es", "fr", "da", "ja", "pl", "ru"]

function detectLocale(): Locale {
if (typeof navigator !== "object") return "en"

const languages = navigator.languages?.length ? navigator.languages : [navigator.language]
for (const language of languages) {
if (!language) continue
if (language.toLowerCase().startsWith("zh")) return "zh"
if (language.toLowerCase().startsWith("zh")) {
if (language.toLowerCase().includes("hant")) return "zht"
return "zh"
}
if (language.toLowerCase().startsWith("ko")) return "ko"
if (language.toLowerCase().startsWith("de")) return "de"
if (language.toLowerCase().startsWith("es")) return "es"
Expand All @@ -63,6 +68,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont

const locale = createMemo<Locale>(() => {
if (store.locale === "zh") return "zh"
if (store.locale === "zht") return "zht"
if (store.locale === "ko") return "ko"
if (store.locale === "de") return "de"
if (store.locale === "es") return "es"
Expand All @@ -84,6 +90,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
const dict = createMemo<Dictionary>(() => {
if (locale() === "en") return base
if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) }
if (locale() === "zht") return { ...base, ...i18n.flatten({ ...zht, ...uiZht }) }
if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) }
if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) }
if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) }
Expand All @@ -99,6 +106,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
const labelKey: Record<Locale, keyof Dictionary> = {
en: "language.en",
zh: "language.zh",
zht: "language.zht",
ko: "language.ko",
de: "language.de",
es: "language.es",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,8 @@ export const dict = {
"context.usage.clickToView": "Klik for at se kontekst",

"language.en": "Engelsk",
"language.zh": "Kinesisk",
"language.zh": "Kinesisk (forenklet)",
"language.zht": "Kinesisk (traditionelt)",
"language.ko": "Koreansk",
"language.de": "Tysk",
"language.es": "Spansk",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,8 @@ export const dict = {
"context.usage.clickToView": "Klicken, um Kontext anzuzeigen",

"language.en": "Englisch",
"language.zh": "Chinesisch",
"language.zh": "Chinesisch (Vereinfacht)",
"language.zht": "Chinesisch (Traditionell)",
"language.ko": "Koreanisch",
"language.de": "Deutsch",
"language.es": "Spanisch",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ export const dict = {
"context.usage.clickToView": "Click to view context",

"language.en": "English",
"language.zh": "Chinese",
"language.zh": "Chinese (Simplified)",
"language.zht": "Chinese (Traditional)",
"language.ko": "Korean",
"language.de": "German",
"language.es": "Spanish",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,8 @@ export const dict = {
"context.usage.clickToView": "Haz clic para ver contexto",

"language.en": "Inglés",
"language.zh": "Chino",
"language.zh": "Chino (simplificado)",
"language.zht": "Chino (tradicional)",
"language.ko": "Coreano",
"language.de": "Alemán",
"language.es": "Español",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,8 @@ export const dict = {
"context.usage.clickToView": "Cliquez pour voir le contexte",

"language.en": "Anglais",
"language.zh": "Chinois",
"language.zh": "Chinois (simplifié)",
"language.zht": "Chinois (traditionnel)",
"language.ko": "Coréen",
"language.de": "Allemand",
"language.es": "Espagnol",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ export const dict = {
"context.usage.clickToView": "クリックしてコンテキストを表示",

"language.en": "英語",
"language.zh": "中国語",
"language.zh": "中国語(簡体字)",
"language.zht": "中国語(繁体字)",
"language.ko": "韓国語",
"language.de": "ドイツ語",
"language.es": "スペイン語",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,8 @@ export const dict = {
"context.usage.clickToView": "컨텍스트를 보려면 클릭",

"language.en": "영어",
"language.zh": "중국어",
"language.zh": "중국어 (간체)",
"language.zht": "중국어 (번체)",
"language.ko": "한국어",
"language.de": "독일어",
"language.es": "스페인어",
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ export const dict = {
"context.usage.clickToView": "点击查看上下文",

"language.en": "英语",
"language.zh": "中文",
"language.zh": "简体中文",
"language.zht": "繁体中文",
"language.ko": "韩语",
"language.de": "德语",
"language.es": "西班牙语",
Expand Down
Loading