Add Korean UI localization (#2895)

* Add Korean UI localization

Refreshes the Korean translation from #1544 against the current client locale surface and adds cross-platform locale detection coverage.\n\nCo-authored-by: JinHyeok Jeong <150323322+Kesta-bos@users.noreply.github.com>

* fix(i18n): preserve reviewed Korean status labels

Restore the wording corrections contributed in the original Korean localization work and lock them with exact-copy assertions.

Co-authored-by: JinHyeok Jeong <150323322+Kesta-bos@users.noreply.github.com>

---------

Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
Co-authored-by: JinHyeok Jeong <150323322+Kesta-bos@users.noreply.github.com>
This commit is contained in:
Appcaster
2026-08-05 22:47:33 +02:00
committed by GitHub
co-authored by Mohamed Boudra JinHyeok Jeong
parent 94b57f34ad
commit 0728148657
15 changed files with 2424 additions and 22 deletions
+10
View File
@@ -6,6 +6,7 @@ import { en } from "./resources/en";
import { es } from "./resources/es";
import { fr } from "./resources/fr";
import { ja } from "./resources/ja";
import { ko } from "./resources/ko";
import { ptBR } from "./resources/pt-BR";
import { ru } from "./resources/ru";
import { zhCN } from "./resources/zh-CN";
@@ -109,6 +110,7 @@ describe("translation resources", () => {
expect(flattenKeys(es).sort()).toEqual(englishKeys);
expect(flattenKeys(fr).sort()).toEqual(englishKeys);
expect(flattenKeys(ja).sort()).toEqual(englishKeys);
expect(flattenKeys(ko).sort()).toEqual(englishKeys);
expect(flattenKeys(ptBR).sort()).toEqual(englishKeys);
expect(flattenKeys(ru).sort()).toEqual(englishKeys);
expect(flattenKeys(zhCN).sort()).toEqual(englishKeys);
@@ -121,6 +123,7 @@ describe("translation resources", () => {
expect(countMatchingEnglishStrings(es)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(fr)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(ja)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(ko)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(ptBR)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(ru)).toBeLessThan(maxFallbackStrings);
expect(countMatchingEnglishStrings(zhCN)).toBeLessThan(maxFallbackStrings);
@@ -131,6 +134,7 @@ describe("translation resources", () => {
expect(findInterpolationMismatches(es)).toEqual([]);
expect(findInterpolationMismatches(fr)).toEqual([]);
expect(findInterpolationMismatches(ja)).toEqual([]);
expect(findInterpolationMismatches(ko)).toEqual([]);
expect(findInterpolationMismatches(ptBR)).toEqual([]);
expect(findInterpolationMismatches(ru)).toEqual([]);
expect(findInterpolationMismatches(zhCN)).toEqual([]);
@@ -147,6 +151,7 @@ describe("translation resources", () => {
expect(es.modelSelector.modelCountPlural).toBe("{{count}} modelos");
expect(fr.modelSelector.modelCountPlural).toBe("{{count}} modèles");
expect(ja.modelSelector.modelCountPlural).toBe("{{count}}つのモデル");
expect(ko.modelSelector.modelCountPlural).toBe("모델 {{count}}개");
expect(ptBR.modelSelector.modelCountPlural).toBe("{{count}} modelos");
expect(ru.modelSelector.modelCountPlural).toBe("{{count}} моделей");
expect(zhCN.modelSelector.modelCountPlural).toBe("{{count}} 个模型");
@@ -159,6 +164,11 @@ describe("translation resources", () => {
expect(zhCN.settings.providers.models.many).toBe("{{count}} 个 Model");
});
it("preserves reviewed Korean status labels", () => {
expect(ko.common.states.starting).toBe("시작 중...");
expect(ko.desktop.daemon.status.notRunning).toBe("실행 중이 아님");
});
it("labels the immediate add-to-chat action without an ellipsis", () => {
expect(en.workspace.fileActions.addToChat).toBe("Add to chat");
});