"""
Language code and name mapping for wittrans.

SPDX-FileCopyrightText: 2024 Jiri Grönroos <jiri.gronroos@iki.fi>

SPDX-License-Identifier: LGPL-3.0-or-later
"""

iso_639_1 = {
    "aa": "Afar",
    "ab": "Abkhazian",
    "ae": "Avestan",
    "af": "Afrikaans",
    "ak": "Akan",
    "am": "Amharic",
    "an": "Aragonese",
    "ar": "Arabic",
    "as": "Assamese",
    "av": "Avaric",
    "ay": "Aymara",
    "az": "Azerbaijani",
    "ba": "Bashkir",
    "be": "Belarusian",
    "bg": "Bulgarian",
    "bh": "Bihari",
    "bi": "Bislama",
    "bm": "Bambara",
    "bn": "Bengali",
    "bo": "Tibetan",
    "br": "Breton",
    "bs": "Bosnian",
    "ca": "Catalan",
    "ce": "Chechen",
    "ch": "Chamorro",
    "co": "Corsican",
    "cr": "Cree",
    "cs": "Czech",
    "cu": "Church Slavic",
    "cv": "Chuvash",
    "cy": "Welsh",
    "da": "Danish",
    "de": "German",
    "dv": "Divehi",
    "dz": "Dzongkha",
    "ee": "Ewe",
    "el": "Greek",
    "en": "English",
    "eo": "Esperanto",
    "es": "Spanish",
    "et": "Estonian",
    "eu": "Basque",
    "fa": "Persian",
    "ff": "Fulah",
    "fi": "Finnish",
    "fj": "Fijian",
    "fo": "Faroese",
    "fr": "French",
    "fy": "Western Frisian",
    "ga": "Irish",
    "gd": "Gaelic",
    "gl": "Galician",
    "gn": "Guarani",
    "gu": "Gujarati",
    "gv": "Manx",
    "ha": "Hausa",
    "he": "Hebrew",
    "hi": "Hindi",
    "ho": "Hiri Motu",
    "hr": "Croatian",
    "ht": "Haitian",
    "hu": "Hungarian",
    "hy": "Armenian",
    "hz": "Herero",
    "ia": "Interlingua",
    "id": "Indonesian",
    "ie": "Interlingue",
    "ig": "Igbo",
    "ii": "Sichuan Yi",
    "ik": "Inupiaq",
    "io": "Ido",
    "is": "Icelandic",
    "it": "Italian",
    "iu": "Inuktitut",
    "ja": "Japanese",
    "jv": "Javanese",
    "ka": "Georgian",
    "kg": "Kongo",
    "ki": "Kikuyu",
    "kj": "Kwanyama",
    "kk": "Kazakh",
    "kl": "Kalaallisut",
    "km": "Khmer",
    "kn": "Kannada",
    "ko": "Korean",
    "kr": "Kanuri",
    "ks": "Kashmiri",
    "ku": "Kurdish",
    "kv": "Komi",
    "kw": "Cornish",
    "ky": "Kirghiz",
    "la": "Latin",
    "lb": "Luxembourgish",
    "lg": "Ganda",
    "li": "Limburgan",
    "ln": "Lingala",
    "lo": "Lao",
    "lt": "Lithuanian",
    "lu": "Luba-Katanga",
    "lv": "Latvian",
    "mg": "Malagasy",
    "mh": "Marshallese",
    "mi": "Maori",
    "mk": "Macedonian",
    "ml": "Malayalam",
    "mn": "Mongolian",
    "mr": "Marathi",
    "ms": "Malay",
    "mt": "Maltese",
    "my": "Burmese",
    "na": "Nauru",
    "nb": "Norwegian Bokmål",
    "nd": "North Ndebele",
    "ne": "Nepali",
    "ng": "Ndonga",
    "nl": "Dutch",
    "nn": "Norwegian Nynorsk",
    "no": "Norwegian",
    "nr": "South Ndebele",
    "nv": "Navajo",
    "ny": "Chichewa",
    "oc": "Occitan",
    "oj": "Ojibwa",
    "om": "Oromo",
    "or": "Oriya",
    "os": "Ossetian",
    "pa": "Panjabi",
    "pi": "Pali",
    "pl": "Polish",
    "ps": "Pashto",
    "pt": "Portuguese",
    "qu": "Quechua",
    "rm": "Romansh",
    "rn": "Rundi",
    "ro": "Romanian",
    "ru": "Russian",
    "rw": "Kinyarwanda",
    "sa": "Sanskrit",
    "sc": "Sardinian",
    "sd": "Sindhi",
    "se": "Northern Sami",
    "sg": "Sango",
    "si": "Sinhala",
    "sk": "Slovak",
    "sl": "Slovenian",
    "sm": "Samoan",
    "sn": "Shona",
    "so": "Somali",
    "sq": "Albanian",
    "sr": "Serbian",
    "ss": "Swati",
    "st": "Southern Sotho",
    "su": "Sundanese",
    "sv": "Swedish",
    "sw": "Swahili",
    "ta": "Tamil",
    "te": "Telugu",
    "tg": "Tajik",
    "th": "Thai",
    "ti": "Tigrinya",
    "tk": "Turkmen",
    "tl": "Tagalog",
    "tn": "Tswana",
    "to": "Tonga",
    "tr": "Turkish",
    "ts": "Tsonga",
    "tt": "Tatar",
    "tw": "Twi",
    "ty": "Tahitian",
    "ug": "Uighur",
    "uk": "Ukrainian",
    "ur": "Urdu",
    "uz": "Uzbek",
    "ve": "Venda",
    "vi": "Vietnamese",
    "vo": "Volapük",
    "wa": "Walloon",
    "wo": "Wolof",
    "xh": "Xhosa",
    "yi": "Yiddish",
    "yo": "Yoruba",
    "za": "Zhuang",
    "zh": "Chinese",
    "zu": "Zulu",
}

# Dictionary for ISO 639-2/3 codes (three-letter)
iso_639_2 = {
    "aar": "Afar",
    "abk": "Abkhazian",
    "afr": "Afrikaans",
    "amh": "Amharic",
    "ara": "Arabic",
    "asm": "Assamese",
    "aym": "Aymara",
    "aze": "Azerbaijani",
    "bak": "Bashkir",
    "bel": "Belarusian",
    "bul": "Bulgarian",
    "ben": "Bengali",
    "bod": "Tibetan",
    "bre": "Breton",
    "cat": "Catalan",
    "ces": "Czech",
    "cym": "Welsh",
    "dan": "Danish",
    "deu": "German",
    "ell": "Greek",
    "eng": "English",
    "epo": "Esperanto",
    "spa": "Spanish",
    "est": "Estonian",
    "eus": "Basque",
    "fas": "Persian",
    "fin": "Finnish",
    "fra": "French",
    "gle": "Irish",
    "guj": "Gujarati",
    "heb": "Hebrew",
    "hin": "Hindi",
    "hrv": "Croatian",
    "hun": "Hungarian",
    "hye": "Armenian",
    "ind": "Indonesian",
    "isl": "Icelandic",
    "ita": "Italian",
    "jpn": "Japanese",
    "kat": "Georgian",
    "kaz": "Kazakh",
    "khm": "Khmer",
    "kan": "Kannada",
    "kor": "Korean",
    "kur": "Kurdish",
    "lao": "Lao",
    "lit": "Lithuanian",
    "lav": "Latvian",
    "mkd": "Macedonian",
    "mal": "Malayalam",
    "mon": "Mongolian",
    "mar": "Marathi",
    "msa": "Malay",
    "mlt": "Maltese",
    "mya": "Burmese",
    "nob": "Norwegian Bokmål",
    "nep": "Nepali",
    "nld": "Dutch",
    "nno": "Norwegian Nynorsk",
    "nor": "Norwegian",
    "pan": "Punjabi",
    "pol": "Polish",
    "por": "Portuguese",
    "ron": "Romanian",
    "rus": "Russian",
    "sin": "Sinhala",
    "slk": "Slovak",
    "slv": "Slovenian",
    "sqi": "Albanian",
    "srp": "Serbian",
    "swe": "Swedish",
    "tam": "Tamil",
    "tel": "Telugu",
    "tha": "Thai",
    "tur": "Turkish",
    "ukr": "Ukrainian",
    "urd": "Urdu",
    "vie": "Vietnamese",
    "zho": "Chinese",
}

# Languages that only have three-letter codes (no two-letter equivalent)
iso_639_3 = {
    "ace": "Achinese",
    "ach": "Acoli",
    "ada": "Adangme",
    "ady": "Adyghe",
    "afh": "Afrihili",
    "agr": "Aguaruna",
    "ain": "Ainu",
    "akk": "Akkadian",
    "ale": "Aleut",
    "alt": "Southern Altai",
    "ang": "Old English",
    "anp": "Angika",
    "arp": "Arapaho",
    "arw": "Arawak",
    "ast": "Asturian",
    "awa": "Awadhi",
    "ban": "Balinese",
    "bej": "Beja",
    "bem": "Bemba",
    "bho": "Bhojpuri",
    "bik": "Bikol",
    "bin": "Bini",
    "bla": "Siksika",
    "bua": "Buriat",
    "bug": "Buginese",
    "cad": "Caddo",
    "car": "Galibi Carib",
    "ceb": "Cebuano",
    "fil": "Filipino",
    "fon": "Fon",
    "frr": "Northern Frisian",
    "fur": "Friulian",
    "gaa": "Ga",
    "gay": "Gayo",
    "gil": "Gilbertese",
    "gmh": "Middle High German",
    "gon": "Gondi",
    "gor": "Gorontalo",
    "got": "Gothic",
    "grb": "Grebo",
    "hai": "Haida",
    "haw": "Hawaiian",
    "hil": "Hiligaynon",
    "hit": "Hittite",
    "hmn": "Hmong",
    "hup": "Hupa",
    "iba": "Iban",
    "ilo": "Iloko",
    "inh": "Ingush",
    "jbo": "Lojban",
    "kaa": "Kara-Kalpak",
    "kab": "Kabyle",
    "kac": "Kachin",
    "kam": "Kamba",
    "kaw": "Kawi",
    "kbd": "Kabardian",
    "kha": "Khasi",
    "kmb": "Kimbundu",
    "kpe": "Kpelle",
    "krc": "Karachay-Balkar",
    "krl": "Karelian",
    "kru": "Kurukh",
    "kum": "Kumyk",
    "lad": "Ladino",
    "lah": "Lahnda",
    "lam": "Lamba",
    "lez": "Lezghian",
    "lol": "Mongo",
    "loz": "Lozi",
    "lua": "Luba-Lulua",
    "lui": "Luiseno",
    "lun": "Lunda",
    "luo": "Luo",
    "mad": "Madurese",
    "mag": "Magahi",
    "mai": "Maithili",
    "mak": "Makasar",
    "man": "Mandingo",
    "mas": "Masai",
    "mdf": "Moksha",
    "men": "Mende",
    "mic": "Mi'kmaq",
    "min": "Minangkabau",
    "mni": "Manipuri",
    "mos": "Mossi",
    "mul": "Multiple Languages",
    "mwr": "Marwari",
    "myv": "Erzya",
    "nap": "Neapolitan",
    "nds": "Low German",
    "new": "Newari",
    "nia": "Nias",
    "niu": "Niuean",
    "nog": "Nogai",
    "non": "Old Norse",
    "nso": "Northern Sotho",
    "osa": "Osage",
    "pag": "Pangasinan",
    "pam": "Pampanga",
    "pap": "Papiamento",
    "pau": "Palauan",
    "pon": "Pohnpeian",
    "raj": "Rajasthani",
    "rap": "Rapanui",
    "rar": "Rarotongan",
    "rom": "Romany",
    "sad": "Sandawe",
    "sah": "Yakut",
    "sas": "Sasak",
    "sat": "Santali",
    "scn": "Sicilian",
    "sco": "Scots",
    "sel": "Selkup",
    "shn": "Shan",
    "sid": "Sidamo",
    "srn": "Sranan Tongo",
    "suk": "Sukuma",
    "sus": "Susu",
    "tem": "Timne",
    "ter": "Tereno",
    "tet": "Tetum",
    "tig": "Tigre",
    "tiv": "Tiv",
    "tkl": "Tokelau",
    "tli": "Tlingit",
    "tmh": "Tamashek",
    "tpi": "Tok Pisin",
    "tsi": "Tsimshian",
    "tum": "Tumbuka",
    "tvl": "Tuvalu",
    "tyv": "Tuvinian",
    "udm": "Udmurt",
    "uga": "Ugaritic",
    "umb": "Umbundu",
    "vec": "Venetian",
    "vot": "Votic",
    "wal": "Wolaytta",
    "war": "Waray",
    "was": "Washo",
    "xal": "Kalmyk",
    "yao": "Yao",
    "yap": "Yapese",
    "zap": "Zapotec",
    "zza": "Zaza",
}

# Map of 3-letter to 2-letter codes for languages that use 2-letter locale dirs
iso_639_3_to_1 = {
    "abk": "ab",
    "afr": "af",
    "aka": "ak",
    "amh": "am",
    "ara": "ar",
    "asm": "as",
    "ava": "av",
    "aym": "ay",
    "aze": "az",
    "bak": "ba",
    "bel": "be",
    "bul": "bg",
    "bis": "bi",
    "bam": "bm",
    "ben": "bn",
    "bod": "bo",
    "bre": "br",
    "bos": "bs",
    "cat": "ca",
    "che": "ce",
    "cha": "ch",
    "cos": "co",
    "cre": "cr",
    "ces": "cs",
    "chu": "cu",
    "chv": "cv",
    "cym": "cy",
    "dan": "da",
    "deu": "de",
    "div": "dv",
    "dzo": "dz",
    "ewe": "ee",
    "ell": "el",
    "eng": "en",
    "epo": "eo",
    "spa": "es",
    "est": "et",
    "eus": "eu",
    "fas": "fa",
    "ful": "ff",
    "fin": "fi",
    "fij": "fj",
    "fao": "fo",
    "fra": "fr",
    "fry": "fy",
    "gle": "ga",
    "gla": "gd",
    "glg": "gl",
    "grn": "gn",
    "guj": "gu",
    "glv": "gv",
    "hau": "ha",
    "heb": "he",
    "hin": "hi",
    "hmo": "ho",
    "hrv": "hr",
    "hat": "ht",
    "hun": "hu",
    "hye": "hy",
    "her": "hz",
    "ina": "ia",
    "ind": "id",
    "ile": "ie",
    "ibo": "ig",
    "iii": "ii",
    "ipk": "ik",
    "ido": "io",
    "isl": "is",
    "ita": "it",
    "iku": "iu",
    "jpn": "ja",
    "jav": "jv",
    "kat": "ka",
    "kon": "kg",
    "kik": "ki",
    "kua": "kj",
    "kaz": "kk",
    "kal": "kl",
    "khm": "km",
    "kan": "kn",
    "kor": "ko",
    "kau": "kr",
    "kas": "ks",
    "kur": "ku",
    "kom": "kv",
    "cor": "kw",
    "kir": "ky",
    "lat": "la",
    "ltz": "lb",
    "lug": "lg",
    "lim": "li",
    "lin": "ln",
    "lao": "lo",
    "lit": "lt",
    "lub": "lu",
    "lav": "lv",
    "mlg": "mg",
    "mah": "mh",
    "mri": "mi",
    "mkd": "mk",
    "mal": "ml",
    "mon": "mn",
    "mar": "mr",
    "msa": "ms",
    "mlt": "mt",
    "mya": "my",
    "nau": "na",
    "nob": "nb",
    "nde": "nd",
    "nep": "ne",
    "ndo": "ng",
    "nld": "nl",
    "nno": "nn",
    "nor": "no",
    "nbl": "nr",
    "nav": "nv",
    "nya": "ny",
    "oci": "oc",
    "oji": "oj",
    "orm": "om",
    "ori": "or",
    "oss": "os",
    "pan": "pa",
    "pli": "pi",
    "pol": "pl",
    "pus": "ps",
    "por": "pt",
    "que": "qu",
    "roh": "rm",
    "run": "rn",
    "ron": "ro",
    "rus": "ru",
    "kin": "rw",
    "san": "sa",
    "srd": "sc",
    "snd": "sd",
    "sme": "se",
    "sag": "sg",
    "sin": "si",
    "slk": "sk",
    "slv": "sl",
    "smo": "sm",
    "sna": "sn",
    "som": "so",
    "sqi": "sq",
    "srp": "sr",
    "ssw": "ss",
    "sot": "st",
    "sun": "su",
    "swe": "sv",
    "swa": "sw",
    "tam": "ta",
    "tel": "te",
    "tgk": "tg",
    "tha": "th",
    "tir": "ti",
    "tuk": "tk",
    "tgl": "tl",
    "tsn": "tn",
    "ton": "to",
    "tur": "tr",
    "tso": "ts",
    "tat": "tt",
    "twi": "tw",
    "tah": "ty",
    "uig": "ug",
    "ukr": "uk",
    "urd": "ur",
    "uzb": "uz",
    "ven": "ve",
    "vie": "vi",
    "vol": "vo",
    "wln": "wa",
    "wol": "wo",
    "xho": "xh",
    "yid": "yi",
    "yor": "yo",
    "zha": "za",
    "zho": "zh",
    "zul": "zu",
}


# Map of languages that require regional variants
regional_variants = {
    # Chinese variants
    "zh": ["zh_CN", "zh_TW", "zh_HK", "zh_SG"],
    "zho": ["zh_CN", "zh_TW", "zh_HK", "zh_SG"],
    # Portuguese variants
    "pt": ["pt_BR", "pt_PT"],
    "por": ["pt_BR", "pt_PT"],
    # Serbian variants (Latin and Cyrillic)
    "sr": ["sr_RS", "sr@latin", "sr@Latn", "sr_RS@latin"],
    "srp": ["sr_RS", "sr@latin", "sr@Latn", "sr_RS@latin"],
    # Norwegian variants
    "no": ["nb_NO", "nn_NO", "no_NO"],
    "nor": ["nb_NO", "nn_NO", "no_NO"],
    # German variants
    "de": ["de_DE", "de_AT", "de_CH"],
    "deu": ["de_DE", "de_AT", "de_CH"],
    # French variants
    "fr": ["fr_FR", "fr_CA", "fr_BE", "fr_CH"],
    "fra": ["fr_FR", "fr_CA", "fr_BE", "fr_CH"],
    # Spanish variants
    "es": ["es_ES", "es_MX", "es_AR", "es_CO"],
    "spa": ["es_ES", "es_MX", "es_AR", "es_CO"],
    # English variants
    "en": ["en_US", "en_GB", "en_AU", "en_CA"],
    "eng": ["en_US", "en_GB", "en_AU", "en_CA"],
}

# Dictionary for known locale variants
locale_variants = {
    "zh_CN": "Simplified Chinese",
    "zh_TW": "Traditional Chinese",
    "zh_HK": "Hong Kong Chinese",
    "zh_SG": "Singaporean Chinese",
    "pt_BR": "Brazilian Portuguese",
    "pt_PT": "European Portuguese",
    "sr_Latn": "Serbian Latin",
    "sr_Cyrl": "Serbian Cyrillic",
    "de_AT": "Austrian German",
    "de_CH": "Swiss German",
    "fr_CA": "Canadian French",
    "fr_CH": "Swiss French",
    "fr_BE": "Belgian French",
    "nl_BE": "Flemish",
}
