Track your Anki study sessions directly into Yōten.
at master 169 lines 3.9 kB view raw
1# An ISO 639-1 two-letter language code (e.g., 'en', 'es', 'ko') 2# Pulled from https://tangled.org/yoten.app/yoten/blob/master/internal/db/language.go 3LANGUAGE_CODES = { 4 "aa": "Afar", 5 "ab": "Abkhazian", 6 "af": "Afrikaans", 7 "am": "Amharic", 8 "ar": "Arabic", 9 "as": "Assamese", 10 "ay": "Aymara", 11 "az": "Azerbaijani", 12 "ba": "Bashkir", 13 "be": "Byelorussian", 14 "bg": "Bulgarian", 15 "bh": "Bihari", 16 "bi": "Bislama", 17 "bn": "Bengali", 18 "bo": "Tibetan", 19 "br": "Breton", 20 "ca": "Catalan", 21 "co": "Corsican", 22 "cs": "Czech", 23 "cy": "Welsh", 24 "da": "Danish", 25 "de": "German", 26 "dz": "Bhutani", 27 "el": "Greek", 28 "en": "English", 29 "eo": "Esperanto", 30 "es": "Spanish", 31 "et": "Estonian", 32 "eu": "Basque", 33 "fa": "Persian", 34 "fi": "Finnish", 35 "fj": "Fiji", 36 "fo": "Faroese", 37 "fr": "French", 38 "fy": "Frisian", 39 "ga": "Irish", 40 "gd": "Gaelic (Scottish)", 41 "gl": "Galician", 42 "gn": "Guarani", 43 "gu": "Gujarati", 44 "ha": "Hausa", 45 "he": "Hebrew", 46 "hi": "Hindi", 47 "hr": "Croatian", 48 "hu": "Hungarian", 49 "hy": "Armenian", 50 "ia": "Interlingua", 51 "id": "Indonesian", 52 "ie": "Interlingue", 53 "ik": "Inupiak", 54 "is": "Icelandic", 55 "it": "Italian", 56 "iu": "Inuktitut", 57 "ja": "Japanese", 58 "jw": "Javanese", 59 "ka": "Georgian", 60 "kk": "Kazakh", 61 "kl": "Greenlandic", 62 "km": "Cambodian", 63 "kn": "Kannada", 64 "ko": "Korean", 65 "ks": "Kashmiri", 66 "ku": "Kurdish", 67 "ky": "Kirghiz", 68 "la": "Latin", 69 "ln": "Lingala", 70 "lo": "Laothian", 71 "lt": "Lithuanian", 72 "lv": "Latvian", 73 "mg": "Malagasy", 74 "mi": "Maori", 75 "mk": "Macedonian", 76 "ml": "Malayalam", 77 "mn": "Mongolian", 78 "mo": "Moldavian", 79 "mr": "Marathi", 80 "ms": "Malay", 81 "mt": "Maltese", 82 "my": "Burmese", 83 "na": "Nauru", 84 "ne": "Nepali", 85 "nl": "Dutch", 86 "no": "Norwegian", 87 "oc": "Occitan", 88 "om": "Oromo (Afan)", 89 "or": "Oriya", 90 "pa": "Punjabi", 91 "pl": "Polish", 92 "ps": "Pashto (Pushto)", 93 "pt": "Portuguese", 94 "qu": "Quechua", 95 "rm": "Rhaeto-Romance", 96 "rn": "Kirundi", 97 "ro": "Romanian", 98 "ru": "Russian", 99 "rw": "Kinyarwanda", 100 "sa": "Sanskrit", 101 "sd": "Sindhi", 102 "sg": "Sangro", 103 "sh": "Serbo-Croatian", 104 "si": "Singhalese", 105 "sk": "Slovak", 106 "sl": "Slovenian", 107 "sm": "Samoan", 108 "sn": "Shona", 109 "so": "Somali", 110 "sq": "Albanian", 111 "sr": "Serbian", 112 "ss": "Siswati", 113 "st": "Sesotho", 114 "su": "Sundanese", 115 "sv": "Swedish", 116 "sw": "Swahili", 117 "ta": "Tamil", 118 "te": "Tegulu", 119 "tg": "Tajik", 120 "th": "Thai", 121 "ti": "Tigrinya", 122 "tk": "Turkmen", 123 "tl": "Tagalog", 124 "tn": "Setswana", 125 "to": "Tonga", 126 "tr": "Turkish", 127 "ts": "Tsonga", 128 "tt": "Tatar", 129 "tw": "Twi", 130 "ug": "Uigur", 131 "uk": "Ukrainian", 132 "ur": "Urdu", 133 "uz": "Uzbek", 134 "vi": "Vietnamese", 135 "vo": "Volapuk", 136 "wo": "Wolof", 137 "xh": "Xhosa", 138 "yi": "Yiddish", 139 "yo": "Yoruba", 140 "za": "Zhuang", 141 "zh": "Chinese", 142 "zu": "Zulu", 143} 144 145 146def get_common_languages(): 147 common_codes = [ 148 "en", "es", "fr", "de", "it", "pt", "ru", "ja", "ko", "zh", 149 "ar", "hi", "nl", "pl", "tr", "vi", "th", "sv", "he", "id" 150 ] 151 152 common = [(code, LANGUAGE_CODES[code]) 153 for code in common_codes if code in LANGUAGE_CODES] 154 155 remaining_codes = set(LANGUAGE_CODES.keys()) - set(common_codes) 156 remaining = sorted( 157 [(code, LANGUAGE_CODES[code]) for code in remaining_codes], 158 key=lambda x: x[1] # Sort by language name 159 ) 160 161 return common + [("---", "─── Other Languages ───")] + remaining 162 163 164def get_language_name(code: str) -> str: 165 return LANGUAGE_CODES.get(code, code.upper()) 166 167 168def is_valid_language_code(code: str) -> bool: 169 return code in LANGUAGE_CODES