switchlingo / app /languages.py
MsThai's picture
Upload folder using huggingface_hub
9a82967 verified
Raw History Blame Contribute Delete
7.17 kB
"""Language table: one row per language with the codes each engine needs.
code = our ID (ISO 639-1 style; also what Whisper understands for speech input)
nllb = Meta NLLB-200 code (offline engine) or None
google = Google Translate code or None
tts = Edge neural-voice locale prefix (None = no voice for that language)
speech = True if the speech model can transcribe it (source language)
"""
from __future__ import annotations
# code, name, nllb, google, tts, speech
_ROWS = [
("af", "Afrikaans", "afr_Latn", "af", "af-ZA", True),
("am", "Amharic", "amh_Ethi", "am", "am-ET", True),
("ar", "Arabic", "arb_Arab", "ar", "ar-EG", True),
("as", "Assamese", "asm_Beng", "as", None, True),
("az", "Azerbaijani", "azj_Latn", "az", "az-AZ", True),
("be", "Belarusian", "bel_Cyrl", "be", None, True),
("bg", "Bulgarian", "bul_Cyrl", "bg", "bg-BG", True),
("bn", "Bengali", "ben_Beng", "bn", "bn-BD", True),
("bo", "Tibetan", "bod_Tibt", None, None, True),
("bs", "Bosnian", "bos_Latn", "bs", "bs-BA", True),
("ca", "Catalan", "cat_Latn", "ca", "ca-ES", True),
("ceb", "Cebuano", "ceb_Latn", "ceb", None, False),
("ckb", "Kurdish (Sorani)", "ckb_Arab", "ckb", None, False),
("cs", "Czech", "ces_Latn", "cs", "cs-CZ", True),
("cy", "Welsh", "cym_Latn", "cy", "cy-GB", True),
("da", "Danish", "dan_Latn", "da", "da-DK", True),
("de", "German", "deu_Latn", "de", "de-DE", True),
("el", "Greek", "ell_Grek", "el", "el-GR", True),
("en", "English", "eng_Latn", "en", "en-US", True),
("es", "Spanish", "spa_Latn", "es", "es-MX", True),
("et", "Estonian", "est_Latn", "et", "et-EE", True),
("eu", "Basque", "eus_Latn", "eu", None, True),
("fa", "Persian (Farsi)", "pes_Arab", "fa", "fa-IR", True),
("fi", "Finnish", "fin_Latn", "fi", "fi-FI", True),
("fr", "French", "fra_Latn", "fr", "fr-FR", True),
("ga", "Irish", "gle_Latn", "ga", "ga-IE", False),
("gl", "Galician", "glg_Latn", "gl", "gl-ES", True),
("gu", "Gujarati", "guj_Gujr", "gu", "gu-IN", True),
("ha", "Hausa", "hau_Latn", "ha", None, True),
("haw", "Hawaiian", None, "haw", None, True),
("he", "Hebrew", "heb_Hebr", "iw", "he-IL", True),
("hi", "Hindi", "hin_Deva", "hi", "hi-IN", True),
("hmn", "Hmong", None, "hmn", None, False),
("hr", "Croatian", "hrv_Latn", "hr", "hr-HR", True),
("ht", "Haitian Creole", "hat_Latn", "ht", None, True),
("hu", "Hungarian", "hun_Latn", "hu", "hu-HU", True),
("hy", "Armenian", "hye_Armn", "hy", None, True),
("id", "Indonesian", "ind_Latn", "id", "id-ID", True),
("ig", "Igbo", "ibo_Latn", "ig", None, False),
("ilo", "Ilocano", "ilo_Latn", "ilo", None, False),
("is", "Icelandic", "isl_Latn", "is", "is-IS", True),
("it", "Italian", "ita_Latn", "it", "it-IT", True),
("ja", "Japanese", "jpn_Jpan", "ja", "ja-JP", True),
("jw", "Javanese", "jav_Latn", "jw", "jv-ID", True),
("ka", "Georgian", "kat_Geor", "ka", "ka-GE", True),
("kk", "Kazakh", "kaz_Cyrl", "kk", "kk-KZ", True),
("km", "Khmer", "khm_Khmr", "km", "km-KH", True),
("kn", "Kannada", "kan_Knda", "kn", "kn-IN", True),
("ko", "Korean", "kor_Hang", "ko", "ko-KR", True),
("ku", "Kurdish (Kurmanji)", "kmr_Latn", "ku", None, False),
("ky", "Kyrgyz", "kir_Cyrl", "ky", None, False),
("lb", "Luxembourgish", "ltz_Latn", "lb", None, True),
("lo", "Lao", "lao_Laoo", "lo", "lo-LA", True),
("lt", "Lithuanian", "lit_Latn", "lt", "lt-LT", True),
("lv", "Latvian", "lvs_Latn", "lv", "lv-LV", True),
("mg", "Malagasy", "plt_Latn", "mg", None, True),
("mi", "Maori", "mri_Latn", "mi", None, True),
("mk", "Macedonian", "mkd_Cyrl", "mk", "mk-MK", True),
("ml", "Malayalam", "mal_Mlym", "ml", "ml-IN", True),
("mn", "Mongolian", "khk_Cyrl", "mn", "mn-MN", True),
("mr", "Marathi", "mar_Deva", "mr", "mr-IN", True),
("ms", "Malay", "zsm_Latn", "ms", "ms-MY", True),
("mt", "Maltese", "mlt_Latn", "mt", "mt-MT", True),
("my", "Burmese (Myanmar)", "mya_Mymr", "my", "my-MM", True),
("ne", "Nepali", "npi_Deva", "ne", "ne-NP", True),
("nl", "Dutch", "nld_Latn", "nl", "nl-NL", True),
("no", "Norwegian", "nob_Latn", "no", "nb-NO", True),
("ny", "Chichewa", "nya_Latn", "ny", None, False),
("om", "Oromo", "gaz_Latn", "om", None, False),
("pa", "Punjabi", "pan_Guru", "pa", None, True),
("pl", "Polish", "pol_Latn", "pl", "pl-PL", True),
("ps", "Pashto", "pbt_Arab", "ps", "ps-AF", True),
("pt", "Portuguese", "por_Latn", "pt", "pt-BR", True),
("ro", "Romanian", "ron_Latn", "ro", "ro-RO", True),
("ru", "Russian", "rus_Cyrl", "ru", "ru-RU", True),
("rw", "Kinyarwanda", "kin_Latn", "rw", None, False),
("sd", "Sindhi", "snd_Arab", "sd", None, True),
("si", "Sinhala", "sin_Sinh", "si", "si-LK", True),
("sk", "Slovak", "slk_Latn", "sk", "sk-SK", True),
("sl", "Slovenian", "slv_Latn", "sl", "sl-SI", True),
("sm", "Samoan", "smo_Latn", "sm", None, False),
("sn", "Shona", "sna_Latn", "sn", None, True),
("so", "Somali", "som_Latn", "so", "so-SO", True),
("sq", "Albanian", "als_Latn", "sq", "sq-AL", True),
("sr", "Serbian", "srp_Cyrl", "sr", "sr-RS", True),
("su", "Sundanese", "sun_Latn", "su", "su-ID", True),
("sv", "Swedish", "swe_Latn", "sv", "sv-SE", True),
("sw", "Swahili", "swh_Latn", "sw", "sw-KE", True),
("ta", "Tamil", "tam_Taml", "ta", "ta-IN", True),
("te", "Telugu", "tel_Telu", "te", "te-IN", True),
("tg", "Tajik", "tgk_Cyrl", "tg", None, True),
("th", "Thai", "tha_Thai", "th", "th-TH", True),
("ti", "Tigrinya", "tir_Ethi", "ti", None, False),
("tk", "Turkmen", "tuk_Latn", "tk", None, True),
("tl", "Filipino (Tagalog)", "tgl_Latn", "tl", "fil-PH", True),
("tr", "Turkish", "tur_Latn", "tr", "tr-TR", True),
("tt", "Tatar", "tat_Cyrl", "tt", None, True),
("uk", "Ukrainian", "ukr_Cyrl", "uk", "uk-UA", True),
("ur", "Urdu", "urd_Arab", "ur", "ur-PK", True),
("uz", "Uzbek", "uzn_Latn", "uz", "uz-UZ", True),
("vi", "Vietnamese", "vie_Latn", "vi", "vi-VN", True),
("xh", "Xhosa", "xho_Latn", "xh", None, False),
("yi", "Yiddish", "ydd_Hebr", "yi", None, True),
("yo", "Yoruba", "yor_Latn", "yo", None, True),
("yue", "Cantonese", "yue_Hant", "zh-TW", "zh-HK", True),
("zh", "Chinese (Simplified)", "zho_Hans", "zh-CN", "zh-CN", True),
("zh-TW", "Chinese (Traditional)", "zho_Hant", "zh-TW", "zh-TW", False),
("zu", "Zulu", "zul_Latn", "zu", "zu-ZA", False),
]
LANGS = {r[0]: {"code": r[0], "name": r[1], "nllb": r[2], "google": r[3], "tts": r[4],
"speech": r[5]} for r in _ROWS}
# Most spoken languages in US homes (Census ACS), shown first in the menus
POPULAR_US = ["en", "es", "zh", "tl", "vi", "ar", "fr", "ko", "ru", "ht", "pt", "hi", "de", "ur", "fa", "ja",
"pl", "it", "so", "lo", "km", "hmn", "th", "am", "pa"]
def get(code: str) -> dict:
if code not in LANGS:
raise ValueError(f"Unknown language code: {code}")
return LANGS[code]
def public_list() -> list[dict]:
return sorted(LANGS.values(), key=lambda r: r["name"])