# An ISO 639-1 two-letter language code (e.g., 'en', 'es', 'ko') # Pulled from https://tangled.org/yoten.app/yoten/blob/master/internal/db/language.go LANGUAGE_CODES = { "aa": "Afar", "ab": "Abkhazian", "af": "Afrikaans", "am": "Amharic", "ar": "Arabic", "as": "Assamese", "ay": "Aymara", "az": "Azerbaijani", "ba": "Bashkir", "be": "Byelorussian", "bg": "Bulgarian", "bh": "Bihari", "bi": "Bislama", "bn": "Bengali", "bo": "Tibetan", "br": "Breton", "ca": "Catalan", "co": "Corsican", "cs": "Czech", "cy": "Welsh", "da": "Danish", "de": "German", "dz": "Bhutani", "el": "Greek", "en": "English", "eo": "Esperanto", "es": "Spanish", "et": "Estonian", "eu": "Basque", "fa": "Persian", "fi": "Finnish", "fj": "Fiji", "fo": "Faroese", "fr": "French", "fy": "Frisian", "ga": "Irish", "gd": "Gaelic (Scottish)", "gl": "Galician", "gn": "Guarani", "gu": "Gujarati", "ha": "Hausa", "he": "Hebrew", "hi": "Hindi", "hr": "Croatian", "hu": "Hungarian", "hy": "Armenian", "ia": "Interlingua", "id": "Indonesian", "ie": "Interlingue", "ik": "Inupiak", "is": "Icelandic", "it": "Italian", "iu": "Inuktitut", "ja": "Japanese", "jw": "Javanese", "ka": "Georgian", "kk": "Kazakh", "kl": "Greenlandic", "km": "Cambodian", "kn": "Kannada", "ko": "Korean", "ks": "Kashmiri", "ku": "Kurdish", "ky": "Kirghiz", "la": "Latin", "ln": "Lingala", "lo": "Laothian", "lt": "Lithuanian", "lv": "Latvian", "mg": "Malagasy", "mi": "Maori", "mk": "Macedonian", "ml": "Malayalam", "mn": "Mongolian", "mo": "Moldavian", "mr": "Marathi", "ms": "Malay", "mt": "Maltese", "my": "Burmese", "na": "Nauru", "ne": "Nepali", "nl": "Dutch", "no": "Norwegian", "oc": "Occitan", "om": "Oromo (Afan)", "or": "Oriya", "pa": "Punjabi", "pl": "Polish", "ps": "Pashto (Pushto)", "pt": "Portuguese", "qu": "Quechua", "rm": "Rhaeto-Romance", "rn": "Kirundi", "ro": "Romanian", "ru": "Russian", "rw": "Kinyarwanda", "sa": "Sanskrit", "sd": "Sindhi", "sg": "Sangro", "sh": "Serbo-Croatian", "si": "Singhalese", "sk": "Slovak", "sl": "Slovenian", "sm": "Samoan", "sn": "Shona", "so": "Somali", "sq": "Albanian", "sr": "Serbian", "ss": "Siswati", "st": "Sesotho", "su": "Sundanese", "sv": "Swedish", "sw": "Swahili", "ta": "Tamil", "te": "Tegulu", "tg": "Tajik", "th": "Thai", "ti": "Tigrinya", "tk": "Turkmen", "tl": "Tagalog", "tn": "Setswana", "to": "Tonga", "tr": "Turkish", "ts": "Tsonga", "tt": "Tatar", "tw": "Twi", "ug": "Uigur", "uk": "Ukrainian", "ur": "Urdu", "uz": "Uzbek", "vi": "Vietnamese", "vo": "Volapuk", "wo": "Wolof", "xh": "Xhosa", "yi": "Yiddish", "yo": "Yoruba", "za": "Zhuang", "zh": "Chinese", "zu": "Zulu", } def get_common_languages(): common_codes = [ "en", "es", "fr", "de", "it", "pt", "ru", "ja", "ko", "zh", "ar", "hi", "nl", "pl", "tr", "vi", "th", "sv", "he", "id" ] common = [(code, LANGUAGE_CODES[code]) for code in common_codes if code in LANGUAGE_CODES] remaining_codes = set(LANGUAGE_CODES.keys()) - set(common_codes) remaining = sorted( [(code, LANGUAGE_CODES[code]) for code in remaining_codes], key=lambda x: x[1] # Sort by language name ) return common + [("---", "─── Other Languages ───")] + remaining def get_language_name(code: str) -> str: return LANGUAGE_CODES.get(code, code.upper()) def is_valid_language_code(code: str) -> bool: return code in LANGUAGE_CODES