From 10df5d6f23f4c07f4b7a3687183f63b93349681a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Fern=C3=A1ndez?= Date: Thu, 24 Apr 2025 11:08:57 +0200 Subject: [PATCH] i18n: unify locale codes to match language structure (#104415) --- .../app/core/internationalization/locales.ts | 375 ++++++++++++------ 1 file changed, 256 insertions(+), 119 deletions(-) diff --git a/public/app/core/internationalization/locales.ts b/public/app/core/internationalization/locales.ts index 4e7ce32ed8a..9b811d39ba6 100644 --- a/public/app/core/internationalization/locales.ts +++ b/public/app/core/internationalization/locales.ts @@ -1,5 +1,4 @@ -// List hard-coded locales from https://github.com/moment/moment/tree/develop/locale - +// Info: https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry interface Locale { name: string; code: string; @@ -7,140 +6,278 @@ interface Locale { // TODO re-check translations export const LOCALES: Locale[] = [ + // Afrikaans - Standard { name: 'Afrikaans', code: 'af' }, + // Arabic - Standard { name: 'العربية', code: 'ar' }, - { name: 'العربية (الجزائر)', code: 'ar-dz' }, - { name: 'العربية (الكويت)', code: 'ar-kw' }, - { name: 'العربية (ليبيا)', code: 'ar-ly' }, - { name: 'العربية (المغرب)', code: 'ar-ma' }, - { name: 'العربية (فلسطين)', code: 'ar-ps' }, - { name: 'العربية (السعودية)', code: 'ar-sa' }, - { name: 'العربية (تونس)', code: 'ar-tn' }, - { name: 'Azərbaycanca', code: 'az' }, - { name: 'Беларуская', code: 'be' }, - { name: 'български език', code: 'bg' }, + // Arabic - Algeria + { name: 'العربية (الجزائر)', code: 'ar-DZ' }, + // Arabic - Kuwait + { name: 'العربية (الكويت)', code: 'ar-KW' }, + // Arabic - Libya + { name: 'العربية (ليبيا)', code: 'ar-LY' }, + // Arabic - Morocco + { name: 'العربية (المغرب)', code: 'ar-MA' }, + // Arabic - Palestine + { name: 'العربية (فلسطين)', code: 'ar-PS' }, + // Arabic - Saudi Arabia + { name: 'العربية (السعودية)', code: 'ar-SA' }, + // Arabic - Tunisia + { name: 'العربية (تونس)', code: 'ar-TN' }, + // Azerbaijani - Azerbaijan + { name: 'Azərbaycan dili', code: 'az' }, + // Belarusian - Belarus + { name: 'Беларуская мова', code: 'be-BY' }, + // Bulgarian - Bulgaria + { name: 'Български език', code: 'bg-BG' }, + // Bambara - Mali { name: 'Bamanankan', code: 'bm' }, - { name: 'Bengali', code: 'bn' }, // TODO translate : বাংলা ??? - { name: 'Bengali (Bangladesh)', code: 'bn-bd' }, // TODO translate - { name: 'Tibetan', code: 'bo' }, // TODO translate + // Bengali - Standard + { name: 'বাংলা', code: 'bn' }, + // Bengali - Bangladesh + { name: 'বাংলা', code: 'bn-BD' }, + // Tibetan - Tibet (China) and Bhutan + { name: 'བོད་ཡིག', code: 'bo' }, + // Breton - Brittany (France) { name: 'Brezhoneg', code: 'br' }, - { name: 'Босански', code: 'bs' }, - { name: 'Catalán', code: 'ca' }, - { name: 'Čeština', code: 'cs' }, - { name: 'Cymraeg', code: 'cy' }, - { name: 'Чӑвашла', code: 'cv' }, - { name: 'Dansk', code: 'da' }, - { name: 'Deutsch', code: 'de' }, - { name: 'Deutsch (Österreich)', code: 'de-at' }, - { name: 'Deutsch (Schweiz)', code: 'de-ch' }, - { name: 'ދިވެހި', code: 'dv' }, - { name: 'Ελληνικά', code: 'el' }, - { name: 'English (Australia)', code: 'en-au' }, - { name: 'English (Canada)', code: 'en-ca' }, - { name: 'English (United Kingdom)', code: 'en-gb' }, - { name: 'English (Ireland)', code: 'en-ie' }, - { name: 'English (Israel)', code: 'en-il' }, - { name: 'English (India)', code: 'en-in' }, - { name: 'English (New Zealand)', code: 'en-nz' }, - { name: 'English (Singapore)', code: 'en-sg' }, - { name: 'English (United States)', code: 'en' }, + // Bosnian - Bosnia and Herzegovina + { name: 'Bosanski jezik', code: 'bs' }, + // Catalan - Catalonia (Spain) + { name: 'Català', code: 'ca-ES' }, + // Czech - Czech Republic + { name: 'Čeština', code: 'cs-CZ' }, + // Welsh - Wales (United Kingdom) + { name: 'Cymraeg', code: 'cy-GB' }, + // Chuvash - Chuvashia (Russia) + { name: 'Чӑвашла', code: 'cv-RU' }, + // Danish - Denmark + { name: 'Dansk', code: 'da-DK' }, + // German - Germany + { name: 'Deutsch', code: 'de-DE' }, + // German - Austria + { name: 'Deutsch (Österreich)', code: 'de-AT' }, + // German - Switzerland + { name: 'Deutsch (Schweiz)', code: 'de-CH' }, + // Divehi/Maldivian - Maldives + { name: 'ދިވެހި', code: 'dv-MV' }, + // Greek - Greece + { name: 'Ελληνικά', code: 'el-GR' }, + // English - Australia + { name: 'English (Australia)', code: 'en-AU' }, + // English - Canada + { name: 'English (Canada)', code: 'en-CA' }, + // English - United Kingdom + { name: 'English (United Kingdom)', code: 'en-GB' }, + // English - Ireland + { name: 'English (Ireland)', code: 'en-IE' }, + // English - Israel + { name: 'English (Israel)', code: 'en-IL' }, + // English - India + { name: 'English (India)', code: 'en-IN' }, + // English - New Zealand + { name: 'English (New Zealand)', code: 'en-NZ' }, + // English - Singapore + { name: 'English (Singapore)', code: 'en-SG' }, + // English - United States + { name: 'English (United States)', code: 'en-US' }, + // Esperanto - International Auxiliary Language { name: 'Esperanto', code: 'eo' }, - { name: 'Español', code: 'es' }, - { name: 'Español (República Dominicana)', code: 'es-do' }, - { name: 'Español (México)', code: 'es-mx' }, - { name: 'Español (Estados Unidos)', code: 'es-us' }, - { name: 'Eesti keel', code: 'et' }, - { name: 'Euskara', code: 'eu' }, - { name: 'فارسی', code: 'fa' }, - { name: 'Filipino', code: 'fil' }, - { name: 'Suomi', code: 'fi' }, - { name: 'Føroyskt', code: 'fo' }, - { name: 'Français', code: 'fr' }, - { name: 'Français (Canada)', code: 'fr-ca' }, - { name: 'Français (Suisse)', code: 'fr-ch' }, - { name: 'Frisian', code: 'fy' }, // TODO translate - { name: 'Gaeilge', code: 'ga' }, - { name: 'Gàidhlig', code: 'gd' }, - { name: 'Galego', code: 'gl' }, - { name: 'Konkani Devanagari', code: 'gom-deva' }, // TODO translate - { name: 'Konkani Latin', code: 'gom-latn' }, // TODO translate - { name: 'ગુજરાતી', code: 'gu' }, - { name: 'עברית', code: 'he' }, + // Spanish - Spain + { name: 'Español', code: 'es-ES' }, + // Spanish - Dominican Republic + { name: 'Español (República Dominicana)', code: 'es-DO' }, + // Spanish - Mexico + { name: 'Español (México)', code: 'es-MX' }, + // Spanish - United States + { name: 'Español (Estados Unidos)', code: 'es-US' }, + // Estonian - Estonia + { name: 'Eesti keel', code: 'et-EE' }, + // Basque - Basque Country + { name: 'Euskara', code: 'eu-ES' }, + // Persian - Iran + { name: 'فارسی', code: 'fa-IR' }, + // Filipino - Philippines + { name: 'Wikang Filipino', code: 'fil-PH' }, + // Finnish - Finland + { name: 'Suomi', code: 'fi-FI' }, + // Faroese - Faroe Islands + { name: 'Føroyskt', code: 'fo-FO' }, + // French - France + { name: 'Français', code: 'fr-FR' }, + // French - Canada + { name: 'Français (Canada)', code: 'fr-CA' }, + // French - Switzerland + { name: 'Français (Suisse)', code: 'fr-CH' }, + // West Frisian - Netherlands + { name: 'Frysk', code: 'fy' }, + // Irish - Ireland + { name: 'Gaeilge', code: 'ga-IE' }, + // Scottish Gaelic - Scotland (UK) + { name: 'Gàidhlig', code: 'gd-GB' }, + // Galician - Galicia (Spain) + { name: 'Galego', code: 'gl-ES' }, + // Konkani (Devanagari script) - India + { name: 'कोंकणी', code: 'gom-Deva' }, + // Konkani (Latin script) - India + { name: 'Konkani', code: 'gom-Latn' }, + // Gujarati - India + { name: 'ગુજરાતી', code: 'gu-IN' }, + // Hebrew - Israel + { name: 'עברית', code: 'he-IL' }, + // Hindi - India { name: 'हिन्दी', code: 'hi' }, - { name: 'Hrvatski', code: 'hr' }, - { name: 'Magyar', code: 'hu' }, - { name: 'Հայերեն', code: 'hy-am' }, - { name: 'Bahasa Indonesia', code: 'id' }, - { name: 'Íslenska', code: 'is' }, - { name: 'Italiano', code: 'it' }, - { name: 'Italiano (Switzerland)', code: 'it-ch' }, - { name: '日本語', code: 'ja' }, + // Croatian - Croatia + { name: 'Hrvatski jezik', code: 'hr' }, + // Hungarian - Hungary + { name: 'Magyar nyelv', code: 'hu-HU' }, + // Armenian - Armenia + { name: 'Հայերեն', code: 'hy-AM' }, + // Indonesian - Indonesia + { name: 'Bahasa Indonesia', code: 'id-ID' }, + // Icelandic - Iceland + { name: 'Íslenska', code: 'is-IS' }, + // Italian - Italy + { name: 'Italiano', code: 'it-IT' }, + // Italian - Switzerland + { name: 'Italiano (Svizzera)', code: 'it-CH' }, + // Japanese - Japan + { name: '日本語', code: 'ja-JP' }, + // Javanese - Indonesia { name: 'ꦧꦱꦗꦮ', code: 'jv' }, - { name: 'ქართული', code: 'ka' }, - { name: 'Қазақ Tілі', code: 'kk' }, - { name: 'Cambodian', code: 'km' }, // TODO translate - { name: 'ಕನ್ನಡ', code: 'kn' }, - { name: '한국어', code: 'ko' }, - { name: 'Kurdish', code: 'ku' }, // TODO translate - { name: 'Northern Kurdish', code: 'ku' }, // TODO translate - { name: 'Кыргыз тили', code: 'ky' }, - { name: 'Lëtzebuergesch', code: 'lb' }, - { name: 'ພາສາລາວ', code: 'lo' }, - { name: 'Lietuvių', code: 'lt' }, - { name: 'latviešu', code: 'lv' }, - { name: 'Mакедонски', code: 'mk' }, - { name: 'മലയാളം', code: 'ml' }, - { name: 'te Reo Māori', code: 'mi' }, - { name: 'crnogorski', code: 'me' }, + // Georgian - Georgia + { name: 'ქართული ენა', code: 'ka-GE' }, + // Kazakh - Kazakhstan + { name: 'Қазақ тілі', code: 'kk-KZ' }, + // Khmer - Cambodia + { name: 'ខ្មែរ', code: 'km-KH' }, + // Kannada - India + { name: 'ಕನ್ನಡ', code: 'kn-IN' }, + // Korean - South Korea + { name: '한국어', code: 'ko-KR' }, + // Kurdish - Kurdistan (Iraq, Iran, Syria, Turkey) + { name: 'Kurdî', code: 'ku' }, + // Kyrgyz - Kyrgyzstan + { name: 'Кыргыз тили', code: 'ky-KG' }, + // Luxembourgish - Luxembourg + { name: 'Lëtzebuergesch', code: 'lb-LU' }, + // Lao - Laos + { name: 'ພາສາລາວ', code: 'lo-LA' }, + // Lithuanian - Lithuania + { name: 'Lietuvių kalba', code: 'lt-LT' }, + // Latvian - Latvia + { name: 'Latviešu valoda', code: 'lv-LV' }, + // Macedonian - North Macedonia + { name: 'Македонски јазик', code: 'mk-MK' }, + // Malayalam - Kerala (India) + { name: 'മലയാളം', code: 'ml-IN' }, + // Māori - New Zealand + { name: 'Te Reo Māori', code: 'mi-NZ' }, + // Montenegrin - Montenegro + { name: 'Црногорски језик', code: 'cnr-ME' }, + // Marathi - Maharashtra (India) { name: 'मराठी', code: 'mr' }, + // Malay - Malaysia, Singapore, Brunei { name: 'Bahasa Melayu', code: 'ms' }, - { name: 'Malti', code: 'mt' }, - { name: 'Монгол Хэл', code: 'mn' }, - { name: 'Burmese', code: 'my' }, // TODO trasnlate: မြန်မာစာ ?? - { name: 'Norwegian Bokmål', code: 'nb' }, // TODO translate + // Maltese - Malta + { name: 'Malti', code: 'mt-MT' }, + // Mongolian - Mongolia + { name: 'Монгол хэл', code: 'mn-MN' }, + // Burmese - Myanmar + { name: 'မြန်မာစာ', code: 'my-MM' }, + // Norwegian Bokmål - Norway + { name: 'Norsk bokmål', code: 'nb' }, + // Nepali - Nepal and India { name: 'नेपाली', code: 'ne' }, - { name: 'Nederlands', code: 'nl' }, - { name: 'Nederlands (België)', code: 'nl-be' }, - { name: 'Ninorks', code: 'nn' }, //?? - { name: 'Occitan (Lengadocian)', code: 'oc-lnc' }, - { name: 'पंजाबी (ਭਾਰਤ)', code: 'pa-in' }, - { name: 'Polski', code: 'pl' }, - { name: 'Português', code: 'pt' }, - { name: 'Português (Brasil)', code: 'pt-br' }, - { name: 'Română', code: 'ro' }, - { name: 'Русский', code: 'ru' }, - { name: 'Nothern Sami', code: 'se' }, // TODO translate + // Dutch - Netherlands + { name: 'Nederlands', code: 'nl-NL' }, + // Dutch - Belgium (Flemish) + { name: 'Nederlands (België)', code: 'nl-BE' }, + // Norwegian Nynorsk - Norway + { name: 'Nynorsk', code: 'nn-NO' }, + // Occitan - Southern France, Monaco, Italy + { name: 'Occitan', code: 'oc' }, + // Punjabi - Punjab (India and Pakistan) + { name: 'ਪੰਜਾਬੀ', code: 'pa' }, + // Polish - Poland + { name: 'Polski', code: 'pl-PL' }, + // Portuguese - Portugal + { name: 'Português', code: 'pt-PT' }, + // Portuguese - Brazil + { name: 'Português (Brasil)', code: 'pt-BR' }, + // Romanian - Romania + { name: 'Română', code: 'ro-RO' }, + // Russian - Russia + { name: 'Русский язык', code: 'ru-RU' }, + // Northern Sami - Northern Scandinavia + { name: 'Davvisámegiella', code: 'se' }, + // Sindhi - Pakistan and India { name: 'سنڌي', code: 'sd' }, - { name: 'සිංහල', code: 'si' }, - { name: 'Slovenčina', code: 'sk' }, - { name: 'Slovenščina', code: 'sl' }, + // Sinhala - Sri Lanka + { name: 'සිංහල', code: 'si-LK' }, + // Slovak - Slovakia + { name: 'Slovenský jazyk', code: 'sk-SK' }, + // Slovenian - Slovenia + { name: 'Slovenski jezik', code: 'sl-SI' }, + // Albanian - Albania, Kosovo { name: 'Shqip', code: 'sq' }, + // Serbian - Serbia (Default) { name: 'Српски', code: 'sr' }, - { name: 'Serbian Cyrillic', code: 'sr-cyrl' }, // TODO translate - { name: 'siSwati', code: 'ss' }, + // Serbian - Serbia (Cyrillic script) + { name: 'Српски (ћирилица)', code: 'sr-Cyrl' }, + // Swati - Eswatini (Swaziland) + { name: 'SiSwati', code: 'ss' }, + // Swahili - East Africa { name: 'Kiswahili', code: 'sw' }, + // Swedish - Sweden { name: 'Svenska', code: 'sv' }, + // Tamil - Tamil Nadu (India), Sri Lanka, Singapore { name: 'தமிழ்', code: 'ta' }, + // Telugu - Andhra Pradesh, Telangana (India) { name: 'తెలుగు', code: 'te' }, - { name: 'Lia-Tetun', code: 'tet' }, + // Tetum - East Timor + { name: 'Tetun', code: 'tet' }, + // Tajik - Tajikistan { name: 'Тоҷикӣ', code: 'tg' }, - { name: 'ภาษาไทย', code: 'th' }, - { name: 'Türkmençe', code: 'tk' }, - { name: 'Tagalog (Philippines)', code: 'tl-ph' }, // TODO translate + // Thai - Thailand + { name: 'ภาษาไทย', code: 'th-TH' }, + // Turkmen - Turkmenistan + { name: 'Türkmen dili', code: 'tk-TM' }, + // Tagalog - Philippines + { name: 'Wikang Tagalog', code: 'tl-PH' }, + // Klingon - Constructed Language (Star Trek) { name: 'tlhIngan Hol', code: 'tlh' }, - { name: 'Türkçe', code: 'tr' }, - { name: 'Talossan', code: 'tzl' }, // TODO translate - { name: 'أمازيغية أطلس الأوسط', code: 'tzm' }, - { name: 'Central Atlas Tamazight Latin', code: 'tzm-latn' }, // TODO translate - { name: 'ئۇيغۇر تىلى', code: 'ug-cn' }, - { name: 'Українська', code: 'uk' }, - { name: 'اُردُو', code: 'ur' }, - { name: 'Ўзбек', code: 'uz' }, - { name: 'Uzbek (Latin)', code: 'uz-latn' }, // TODO translate - { name: 'tiếng Việt', code: 'vi' }, - { name: 'Chinese (China)', code: 'zh-cn' }, // TODO translate - { name: 'Chinese (Hong Kong)', code: 'zh-hk' }, // TODO translate - { name: 'Chinese (Macau)', code: 'zh-mo' }, // TODO translate - { name: 'Chinese (Taiwan)', code: 'zh-tw' }, // TODO translate - { name: 'Èdè Yorùbá', code: 'yo-ng' }, + // Turkish - Turkey + { name: 'Türkçe', code: 'tr-TR' }, + // Talossan - Constructed Language + { name: 'Talossan', code: 'tzl' }, + // Tamazight (Tifinagh script) - North Africa + { name: 'ⵜⴰⵎⴰⵣⵉⵖⵜ', code: 'tzm' }, + // Tamazight (Latin script) - North Africa + { name: 'Tamazight', code: 'tzm-Latn' }, + // Uyghur - Xinjiang (China) + { name: 'ئۇيغۇرچە', code: 'ug-CN' }, + // Ukrainian - Ukraine + { name: 'Українська мова', code: 'uk-UA' }, + // Urdu - Pakistan and India + { name: 'اردو', code: 'ur-PK' }, + // Uzbek - Uzbekistan (Cyrillic script) + { name: 'Ўзбек тили', code: 'uz-UZ' }, + // Uzbek - Uzbekistan (Latin script) + { name: "O'zbek tili", code: 'uz-Latn' }, + // Vietnamese - Vietnam + { name: 'Tiếng Việt', code: 'vi-VN' }, + // Chinese - China + { name: '中文', code: 'zh-CN' }, + // Chinese - Simplified + { name: '简体中文', code: 'zh-Hans' }, + // Chinese - Traditional + { name: '繁體中文', code: 'zh-Hant' }, + // Chinese - Hong Kong + { name: '中文 (香港)', code: 'zh-HK' }, + // Chinese - Taiwan + { name: '正體中文 (台灣)', code: 'zh-TW' }, + // Chinese - Macau + { name: '中文 (澳門)', code: 'zh-MO' }, + // Yoruba - Nigeria, Benin, Togo + { name: 'Yorùbá', code: 'yo' }, ];