From 8de119b367fb10f99e9be400cf161d6c118b70f9 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Nov 2026 17:55:27 +0000 Subject: [PATCH] fix: label Chinese languages by script in the language picker Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PiGRtCRWfcvERQHUorXmwm --- .../src/renderer/features/settings/SettingsPage.test.tsx | 9 ++++++++- .../app/src/renderer/features/settings/SettingsPage.tsx | 8 ++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/app/src/renderer/features/settings/SettingsPage.test.tsx b/packages/app/src/renderer/features/settings/SettingsPage.test.tsx index 93cd4d52e5..c206ddb2a7 100644 --- a/packages/app/src/renderer/features/settings/SettingsPage.test.tsx +++ b/packages/app/src/renderer/features/settings/SettingsPage.test.tsx @@ -230,7 +230,14 @@ describe('General settings', () => { fireEvent.click(screen.getByRole('button', { name: /^(?!reset).*locale\.title/ })); const names = screen.getAllByRole('option').map((option) => option.textContent); expect(names).toEqual( - expect.arrayContaining(['locale.system', 'English', 'Deutsch', '日本語']), + expect.arrayContaining([ + 'locale.system', + 'English', + 'Deutsch', + '日本語', + '简体中文', + '繁體中文', + ]), ); expect(names.some((name) => /Pseudo|XA|XB/.test(name ?? ''))).toBe(false); }); diff --git a/packages/app/src/renderer/features/settings/SettingsPage.tsx b/packages/app/src/renderer/features/settings/SettingsPage.tsx index aaba0725f7..e87f5129b7 100644 --- a/packages/app/src/renderer/features/settings/SettingsPage.tsx +++ b/packages/app/src/renderer/features/settings/SettingsPage.tsx @@ -215,11 +215,15 @@ export function SettingsPage() { ); } +/** Chinese is named by script, not region: 简体中文 and 繁體中文. */ +const DISPLAY_TAGS: Record = { 'zh-CN': 'zh-Hans', 'zh-TW': 'zh-Hant' }; + /** A language by its own name, so it can be found from any UI language. A tag that isn't well formed (a hand-edited settings.json can hold one) shows as it is. */ function languageName(code: string): string { try { - const name = new Intl.DisplayNames([code], { type: 'language' }).of(code) ?? code; - return name.charAt(0).toLocaleUpperCase(code) + name.slice(1); + const tag = DISPLAY_TAGS[code] ?? code; + const name = new Intl.DisplayNames([tag], { type: 'language' }).of(tag) ?? code; + return name.charAt(0).toLocaleUpperCase(tag) + name.slice(1); } catch { return code; }