feat(i18n): add fr, de, it, pt, id, ms, vi, zh-TW desktop locales (#10072)
Co-authored-by: Yixuan Zhong <Yixuan.Zhong@aecom.com>
This commit is contained in:
@@ -83,6 +83,17 @@ const i18n = defineMessages({
|
||||
languageJapanese: { id: 'settings.language.japanese', defaultMessage: 'Japanese' },
|
||||
languageSpanish: { id: 'settings.language.spanish', defaultMessage: 'Spanish' },
|
||||
languageKorean: { id: 'settings.language.korean', defaultMessage: 'Korean' },
|
||||
languageFrench: { id: 'settings.language.french', defaultMessage: 'French' },
|
||||
languageGerman: { id: 'settings.language.german', defaultMessage: 'German' },
|
||||
languageItalian: { id: 'settings.language.italian', defaultMessage: 'Italian' },
|
||||
languagePortuguese: { id: 'settings.language.portuguese', defaultMessage: 'Portuguese' },
|
||||
languageIndonesian: { id: 'settings.language.indonesian', defaultMessage: 'Indonesian' },
|
||||
languageMalay: { id: 'settings.language.malay', defaultMessage: 'Malay' },
|
||||
languageVietnamese: { id: 'settings.language.vietnamese', defaultMessage: 'Vietnamese' },
|
||||
languageChineseTraditional: {
|
||||
id: 'settings.language.zhTW',
|
||||
defaultMessage: 'Chinese (Traditional)',
|
||||
},
|
||||
helpTitle: { id: 'settings.help.title', defaultMessage: 'Help & feedback' },
|
||||
helpDesc: {
|
||||
id: 'settings.help.description',
|
||||
@@ -147,12 +158,20 @@ const LANGUAGE_OPTIONS: Array<{ value: LanguageSetting; message: keyof typeof i1
|
||||
{ value: 'system', message: 'languageSystem' },
|
||||
{ value: 'en', message: 'languageEnglish' },
|
||||
{ value: 'es', message: 'languageSpanish' },
|
||||
{ value: 'fr', message: 'languageFrench' },
|
||||
{ value: 'de', message: 'languageGerman' },
|
||||
{ value: 'it', message: 'languageItalian' },
|
||||
{ value: 'pt', message: 'languagePortuguese' },
|
||||
{ value: 'id', message: 'languageIndonesian' },
|
||||
{ value: 'ms', message: 'languageMalay' },
|
||||
{ value: 'vi', message: 'languageVietnamese' },
|
||||
{ value: 'hi', message: 'languageHindi' },
|
||||
{ value: 'ja', message: 'languageJapanese' },
|
||||
{ value: 'ko', message: 'languageKorean' },
|
||||
{ value: 'ru', message: 'languageRussian' },
|
||||
{ value: 'tr', message: 'languageTurkish' },
|
||||
{ value: 'zh-CN', message: 'languageChineseSimplified' },
|
||||
{ value: 'zh-TW', message: 'languageChineseTraditional' },
|
||||
];
|
||||
|
||||
interface AppSettingsSectionProps {
|
||||
|
||||
@@ -7,25 +7,30 @@
|
||||
* 3. "en" (fallback)
|
||||
*
|
||||
* For Chinese: any Simplified Chinese tag (zh, zh-CN, zh-Hans, zh-Hans-CN, zh-SG, zh-MY)
|
||||
* maps to the "zh-CN" catalog. Traditional variants (zh-TW, zh-HK, zh-Hant) are not yet
|
||||
* translated and fall through to English.
|
||||
* maps to the "zh-CN" catalog; Traditional variants (zh-TW, zh-HK, zh-MO, zh-Hant) map to
|
||||
* the "zh-TW" catalog.
|
||||
*/
|
||||
|
||||
// Re-export react-intl utilities that components use directly
|
||||
export { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
/** The set of locales that have translation catalogs. */
|
||||
export const SUPPORTED_LOCALES = ['en', 'es', 'hi', 'ja', 'ko', 'ru', 'tr', 'zh-CN'] as const;
|
||||
// prettier-ignore
|
||||
export const SUPPORTED_LOCALES = [
|
||||
'en', 'es', 'fr', 'de', 'it', 'pt', 'id', 'ms', 'vi', 'hi', 'ja', 'ko', 'ru', 'tr', 'zh-CN', 'zh-TW',
|
||||
] as const;
|
||||
export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];
|
||||
const SUPPORTED_LOCALE_SET = new Set<string>(SUPPORTED_LOCALES);
|
||||
|
||||
/**
|
||||
* Map Simplified Chinese aliases (zh, zh-Hans*, zh-SG, zh-MY) to "zh-CN".
|
||||
* Traditional variants (zh-Hant*, zh-TW, zh-HK, zh-MO) and non-Chinese tags pass through unchanged.
|
||||
* Map Simplified Chinese aliases (zh, zh-Hans*, zh-SG, zh-MY) to "zh-CN" and Traditional
|
||||
* variants (zh-Hant*, zh-TW, zh-HK, zh-MO) to "zh-TW". Non-Chinese tags pass through unchanged.
|
||||
*/
|
||||
function resolveChineseAlias(tag: string): string {
|
||||
const lower = tag.toLowerCase();
|
||||
if (/^zh-(hant|tw|hk|mo)(-|$)/.test(lower)) return tag;
|
||||
// Traditional Chinese variants (zh-Hant*, zh-TW, zh-HK, zh-MO) → "zh-TW".
|
||||
if (/^zh-(hant|tw|hk|mo)(-|$)/.test(lower)) return 'zh-TW';
|
||||
// Remaining Chinese tags (zh, zh-CN, zh-Hans*, zh-SG, zh-MY) → "zh-CN".
|
||||
if (lower === 'zh' || lower.startsWith('zh-')) return 'zh-CN';
|
||||
return tag;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "English"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "French"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "German"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "Hindi"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "Indonesian"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "Italian"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "Japanese"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "Korean"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "Malay"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "Portuguese"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "Russian"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "Turkish"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "Vietnamese"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "Chinese (Simplified)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "Chinese (Traditional)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "Show goose in the menu bar"
|
||||
},
|
||||
|
||||
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "Inglés"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "Francés"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "Alemán"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "Hindi"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "Indonesio"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "Italiano"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "Japonés"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "Coreano"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "Malayo"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "Portugués"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "Ruso"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "Turco"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "Vietnamita"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "Chino (simplificado)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "Chino (tradicional)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "Muestra goose en la barra de menús"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "अंग्रेज़ी"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "फ़्रेंच"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "जर्मन"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "हिन्दी"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "इंडोनेशियाई"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "इतालवी"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "जापानी"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "कोरियाई"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "मलय"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "पुर्तगाली"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "रूसी"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "तुर्की"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "वियतनामी"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "चीनी (सरलीकृत)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "चीनी (पारंपरिक)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "मेनू बार में goose दिखाएँ"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "英語"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "フランス語"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "ドイツ語"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "ヒンディー語"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "インドネシア語"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "イタリア語"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "日本語"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "韓国語"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "マレー語"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "ポルトガル語"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "ロシア語"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "トルコ語"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "ベトナム語"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "中国語(簡体字)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "中国語(繁体字)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "メニューバーにgooseを表示します"
|
||||
},
|
||||
|
||||
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "영어"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "프랑스어"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "독일어"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "힌디어"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "인도네시아어"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "이탈리아어"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "일본어"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "한국어"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "말레이어"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "포르투갈어"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "러시아어"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "터키어"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "베트남어"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "중국어(간체)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "중국어(번체)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "메뉴 막대에 goose를 표시합니다."
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "Английский"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "Французский"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "Немецкий"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "Хинди"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "Индонезийский"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "Итальянский"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "Японский"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "Корейский"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "Малайский"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "Португальский"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "Русский"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "Турецкий"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "Вьетнамский"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "Китайский (упрощенный)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "Китайский (традиционный)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "Показывать goose в строке меню"
|
||||
},
|
||||
|
||||
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "İngilizce"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "Fransızca"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "Almanca"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "Hintçe"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "Endonezce"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "İtalyanca"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "Japonca"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "Korece"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "Malayca"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "Portekizce"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "Rusça"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "Türkçe"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "Vietnamca"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "Çince (Basitleştirilmiş)"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "Çince (Geleneksel)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "Menü çubuğunda goose'yi göster"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3887,15 +3887,33 @@
|
||||
"settings.language.english": {
|
||||
"defaultMessage": "英语"
|
||||
},
|
||||
"settings.language.french": {
|
||||
"defaultMessage": "法语"
|
||||
},
|
||||
"settings.language.german": {
|
||||
"defaultMessage": "德语"
|
||||
},
|
||||
"settings.language.hindi": {
|
||||
"defaultMessage": "印地语"
|
||||
},
|
||||
"settings.language.indonesian": {
|
||||
"defaultMessage": "印度尼西亚语"
|
||||
},
|
||||
"settings.language.italian": {
|
||||
"defaultMessage": "意大利语"
|
||||
},
|
||||
"settings.language.japanese": {
|
||||
"defaultMessage": "日语"
|
||||
},
|
||||
"settings.language.korean": {
|
||||
"defaultMessage": "韩语"
|
||||
},
|
||||
"settings.language.malay": {
|
||||
"defaultMessage": "马来语"
|
||||
},
|
||||
"settings.language.portuguese": {
|
||||
"defaultMessage": "葡萄牙语"
|
||||
},
|
||||
"settings.language.russian": {
|
||||
"defaultMessage": "俄语"
|
||||
},
|
||||
@@ -3911,9 +3929,15 @@
|
||||
"settings.language.turkish": {
|
||||
"defaultMessage": "土耳其语"
|
||||
},
|
||||
"settings.language.vietnamese": {
|
||||
"defaultMessage": "越南语"
|
||||
},
|
||||
"settings.language.zhCN": {
|
||||
"defaultMessage": "简体中文"
|
||||
},
|
||||
"settings.language.zhTW": {
|
||||
"defaultMessage": "中文(繁体)"
|
||||
},
|
||||
"settings.menuBarIcon.description": {
|
||||
"defaultMessage": "在菜单栏显示 goose"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -172,12 +172,20 @@ const validLanguageSettings = new Set<Settings['language']>([
|
||||
'system',
|
||||
'en',
|
||||
'es',
|
||||
'fr',
|
||||
'de',
|
||||
'it',
|
||||
'pt',
|
||||
'id',
|
||||
'ms',
|
||||
'vi',
|
||||
'hi',
|
||||
'ja',
|
||||
'ko',
|
||||
'ru',
|
||||
'tr',
|
||||
'zh-CN',
|
||||
'zh-TW',
|
||||
]);
|
||||
|
||||
function isValidLanguageSetting(value: unknown): value is Settings['language'] {
|
||||
|
||||
@@ -23,7 +23,10 @@ export type DefaultKeyboardShortcuts = {
|
||||
[K in keyof KeyboardShortcuts]: string;
|
||||
};
|
||||
|
||||
export type LanguageSetting = 'system' | 'en' | 'es' | 'hi' | 'ja' | 'ko' | 'ru' | 'tr' | 'zh-CN';
|
||||
// prettier-ignore
|
||||
export type LanguageSetting =
|
||||
| 'system' | 'en' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'id' | 'ms' | 'vi'
|
||||
| 'hi' | 'ja' | 'ko' | 'ru' | 'tr' | 'zh-CN' | 'zh-TW';
|
||||
|
||||
export interface Settings {
|
||||
// Desktop app settings
|
||||
|
||||
Reference in New Issue
Block a user