refactor: replace iso 639 json asset with const dart map
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,406 @@
|
||||
// Generated from iso_639_codes.json — do not edit by hand.
|
||||
|
||||
class LanguageEntry {
|
||||
final String code1;
|
||||
final String code2;
|
||||
final String? code2B;
|
||||
final String name;
|
||||
const LanguageEntry(this.code1, this.code2, this.code2B, this.name);
|
||||
}
|
||||
|
||||
const languageEntries = <String, LanguageEntry>{
|
||||
'aa': LanguageEntry('aa', 'aar', null, 'Afar'),
|
||||
'ab': LanguageEntry('ab', 'abk', null, 'Abkhaz'),
|
||||
'ae': LanguageEntry('ae', 'ave', null, 'Avestan'),
|
||||
'af': LanguageEntry('af', 'afr', null, 'Afrikaans'),
|
||||
'ak': LanguageEntry('ak', 'aka', null, 'Akan'),
|
||||
'am': LanguageEntry('am', 'amh', null, 'Amharic'),
|
||||
'an': LanguageEntry('an', 'arg', null, 'Aragonese'),
|
||||
'ar': LanguageEntry('ar', 'ara', null, 'Arabic'),
|
||||
'as': LanguageEntry('as', 'asm', null, 'Assamese'),
|
||||
'av': LanguageEntry('av', 'ava', null, 'Avaric'),
|
||||
'ay': LanguageEntry('ay', 'aym', null, 'Aymara'),
|
||||
'az': LanguageEntry('az', 'aze', null, 'Azerbaijani'),
|
||||
'ba': LanguageEntry('ba', 'bak', null, 'Bashkir'),
|
||||
'be': LanguageEntry('be', 'bel', null, 'Belarusian'),
|
||||
'bg': LanguageEntry('bg', 'bul', null, 'Bulgarian'),
|
||||
'bh': LanguageEntry('bh', 'bih', null, 'Bihari'),
|
||||
'bi': LanguageEntry('bi', 'bis', null, 'Bislama'),
|
||||
'bm': LanguageEntry('bm', 'bam', null, 'Bambara'),
|
||||
'bn': LanguageEntry('bn', 'ben', null, 'Bengali, Bangla'),
|
||||
'bo': LanguageEntry('bo', 'bod', 'tib', 'Tibetan Standard, Tibetan, Central'),
|
||||
'br': LanguageEntry('br', 'bre', null, 'Breton'),
|
||||
'bs': LanguageEntry('bs', 'bos', null, 'Bosnian'),
|
||||
'ca': LanguageEntry('ca', 'cat', null, 'Catalan'),
|
||||
'ce': LanguageEntry('ce', 'che', null, 'Chechen'),
|
||||
'ch': LanguageEntry('ch', 'cha', null, 'Chamorro'),
|
||||
'co': LanguageEntry('co', 'cos', null, 'Corsican'),
|
||||
'cr': LanguageEntry('cr', 'cre', null, 'Cree'),
|
||||
'cs': LanguageEntry('cs', 'ces', 'cze', 'Czech'),
|
||||
'cu': LanguageEntry('cu', 'chu', null, 'Old Church Slavonic, Church Slavonic, Old Bulgarian'),
|
||||
'cv': LanguageEntry('cv', 'chv', null, 'Chuvash'),
|
||||
'cy': LanguageEntry('cy', 'cym', 'wel', 'Welsh'),
|
||||
'da': LanguageEntry('da', 'dan', null, 'Danish'),
|
||||
'de': LanguageEntry('de', 'deu', 'ger', 'German'),
|
||||
'dv': LanguageEntry('dv', 'div', null, 'Divehi, Dhivehi, Maldivian'),
|
||||
'dz': LanguageEntry('dz', 'dzo', null, 'Dzongkha'),
|
||||
'ee': LanguageEntry('ee', 'ewe', null, 'Ewe'),
|
||||
'el': LanguageEntry('el', 'ell', 'gre', 'Greek (modern)'),
|
||||
'en': LanguageEntry('en', 'eng', null, 'English'),
|
||||
'eo': LanguageEntry('eo', 'epo', null, 'Esperanto'),
|
||||
'es': LanguageEntry('es', 'spa', null, 'Spanish'),
|
||||
'et': LanguageEntry('et', 'est', null, 'Estonian'),
|
||||
'eu': LanguageEntry('eu', 'eus', 'baq', 'Basque'),
|
||||
'fa': LanguageEntry('fa', 'fas', 'per', 'Persian (Farsi)'),
|
||||
'ff': LanguageEntry('ff', 'ful', null, 'Fula, Fulah, Pulaar, Pular'),
|
||||
'fi': LanguageEntry('fi', 'fin', null, 'Finnish'),
|
||||
'fj': LanguageEntry('fj', 'fij', null, 'Fijian'),
|
||||
'fo': LanguageEntry('fo', 'fao', null, 'Faroese'),
|
||||
'fr': LanguageEntry('fr', 'fra', 'fre', 'French'),
|
||||
'fy': LanguageEntry('fy', 'fry', null, 'Western Frisian'),
|
||||
'ga': LanguageEntry('ga', 'gle', null, 'Irish'),
|
||||
'gd': LanguageEntry('gd', 'gla', null, 'Scottish Gaelic, Gaelic'),
|
||||
'gl': LanguageEntry('gl', 'glg', null, 'Galician'),
|
||||
'gn': LanguageEntry('gn', 'grn', null, 'Guaraní'),
|
||||
'gu': LanguageEntry('gu', 'guj', null, 'Gujarati'),
|
||||
'gv': LanguageEntry('gv', 'glv', null, 'Manx'),
|
||||
'ha': LanguageEntry('ha', 'hau', null, 'Hausa'),
|
||||
'he': LanguageEntry('he', 'heb', null, 'Hebrew (modern)'),
|
||||
'hi': LanguageEntry('hi', 'hin', null, 'Hindi'),
|
||||
'ho': LanguageEntry('ho', 'hmo', null, 'Hiri Motu'),
|
||||
'hr': LanguageEntry('hr', 'hrv', null, 'Croatian'),
|
||||
'ht': LanguageEntry('ht', 'hat', null, 'Haitian, Haitian Creole'),
|
||||
'hu': LanguageEntry('hu', 'hun', null, 'Hungarian'),
|
||||
'hy': LanguageEntry('hy', 'hye', 'arm', 'Armenian'),
|
||||
'hz': LanguageEntry('hz', 'her', null, 'Herero'),
|
||||
'ia': LanguageEntry('ia', 'ina', null, 'Interlingua'),
|
||||
'id': LanguageEntry('id', 'ind', null, 'Indonesian'),
|
||||
'ie': LanguageEntry('ie', 'ile', null, 'Interlingue'),
|
||||
'ig': LanguageEntry('ig', 'ibo', null, 'Igbo'),
|
||||
'ii': LanguageEntry('ii', 'iii', null, 'Nuosu'),
|
||||
'ik': LanguageEntry('ik', 'ipk', null, 'Inupiaq'),
|
||||
'io': LanguageEntry('io', 'ido', null, 'Ido'),
|
||||
'is': LanguageEntry('is', 'isl', 'ice', 'Icelandic'),
|
||||
'it': LanguageEntry('it', 'ita', null, 'Italian'),
|
||||
'iu': LanguageEntry('iu', 'iku', null, 'Inuktitut'),
|
||||
'ja': LanguageEntry('ja', 'jpn', null, 'Japanese'),
|
||||
'jv': LanguageEntry('jv', 'jav', null, 'Javanese'),
|
||||
'ka': LanguageEntry('ka', 'kat', 'geo', 'Georgian'),
|
||||
'kg': LanguageEntry('kg', 'kon', null, 'Kongo'),
|
||||
'ki': LanguageEntry('ki', 'kik', null, 'Kikuyu, Gikuyu'),
|
||||
'kj': LanguageEntry('kj', 'kua', null, 'Kwanyama, Kuanyama'),
|
||||
'kk': LanguageEntry('kk', 'kaz', null, 'Kazakh'),
|
||||
'kl': LanguageEntry('kl', 'kal', null, 'Kalaallisut, Greenlandic'),
|
||||
'km': LanguageEntry('km', 'khm', null, 'Khmer'),
|
||||
'kn': LanguageEntry('kn', 'kan', null, 'Kannada'),
|
||||
'ko': LanguageEntry('ko', 'kor', null, 'Korean'),
|
||||
'kr': LanguageEntry('kr', 'kau', null, 'Kanuri'),
|
||||
'ks': LanguageEntry('ks', 'kas', null, 'Kashmiri'),
|
||||
'ku': LanguageEntry('ku', 'kur', null, 'Kurdish'),
|
||||
'kv': LanguageEntry('kv', 'kom', null, 'Komi'),
|
||||
'kw': LanguageEntry('kw', 'cor', null, 'Cornish'),
|
||||
'ky': LanguageEntry('ky', 'kir', null, 'Kyrgyz'),
|
||||
'la': LanguageEntry('la', 'lat', null, 'Latin'),
|
||||
'lb': LanguageEntry('lb', 'ltz', null, 'Luxembourgish, Letzeburgesch'),
|
||||
'lg': LanguageEntry('lg', 'lug', null, 'Ganda'),
|
||||
'li': LanguageEntry('li', 'lim', null, 'Limburgish, Limburgan, Limburger'),
|
||||
'ln': LanguageEntry('ln', 'lin', null, 'Lingala'),
|
||||
'lo': LanguageEntry('lo', 'lao', null, 'Lao'),
|
||||
'lt': LanguageEntry('lt', 'lit', null, 'Lithuanian'),
|
||||
'lu': LanguageEntry('lu', 'lub', null, 'Luba-Katanga'),
|
||||
'lv': LanguageEntry('lv', 'lav', null, 'Latvian'),
|
||||
'mg': LanguageEntry('mg', 'mlg', null, 'Malagasy'),
|
||||
'mh': LanguageEntry('mh', 'mah', null, 'Marshallese'),
|
||||
'mi': LanguageEntry('mi', 'mri', 'mao', 'Māori'),
|
||||
'mk': LanguageEntry('mk', 'mkd', 'mac', 'Macedonian'),
|
||||
'ml': LanguageEntry('ml', 'mal', null, 'Malayalam'),
|
||||
'mn': LanguageEntry('mn', 'mon', null, 'Mongolian'),
|
||||
'mr': LanguageEntry('mr', 'mar', null, 'Marathi (Marāṭhī)'),
|
||||
'ms': LanguageEntry('ms', 'msa', 'may', 'Malay'),
|
||||
'mt': LanguageEntry('mt', 'mlt', null, 'Maltese'),
|
||||
'my': LanguageEntry('my', 'mya', 'bur', 'Burmese'),
|
||||
'na': LanguageEntry('na', 'nau', null, 'Nauruan'),
|
||||
'nb': LanguageEntry('nb', 'nob', null, 'Norwegian Bokmål'),
|
||||
'nd': LanguageEntry('nd', 'nde', null, 'Northern Ndebele'),
|
||||
'ne': LanguageEntry('ne', 'nep', null, 'Nepali'),
|
||||
'ng': LanguageEntry('ng', 'ndo', null, 'Ndonga'),
|
||||
'nl': LanguageEntry('nl', 'nld', 'dut', 'Dutch'),
|
||||
'nn': LanguageEntry('nn', 'nno', null, 'Norwegian Nynorsk'),
|
||||
'no': LanguageEntry('no', 'nor', null, 'Norwegian'),
|
||||
'nr': LanguageEntry('nr', 'nbl', null, 'Southern Ndebele'),
|
||||
'nv': LanguageEntry('nv', 'nav', null, 'Navajo, Navaho'),
|
||||
'ny': LanguageEntry('ny', 'nya', null, 'Chichewa, Chewa, Nyanja'),
|
||||
'oc': LanguageEntry('oc', 'oci', null, 'Occitan'),
|
||||
'oj': LanguageEntry('oj', 'oji', null, 'Ojibwe, Ojibwa'),
|
||||
'om': LanguageEntry('om', 'orm', null, 'Oromo'),
|
||||
'or': LanguageEntry('or', 'ori', null, 'Oriya'),
|
||||
'os': LanguageEntry('os', 'oss', null, 'Ossetian, Ossetic'),
|
||||
'pa': LanguageEntry('pa', 'pan', null, '(Eastern) Punjabi'),
|
||||
'pi': LanguageEntry('pi', 'pli', null, 'Pāli'),
|
||||
'pl': LanguageEntry('pl', 'pol', null, 'Polish'),
|
||||
'ps': LanguageEntry('ps', 'pus', null, 'Pashto, Pushto'),
|
||||
'pt': LanguageEntry('pt', 'por', null, 'Portuguese'),
|
||||
'qu': LanguageEntry('qu', 'que', null, 'Quechua'),
|
||||
'rm': LanguageEntry('rm', 'roh', null, 'Romansh'),
|
||||
'rn': LanguageEntry('rn', 'run', null, 'Kirundi'),
|
||||
'ro': LanguageEntry('ro', 'ron', 'rum', 'Romanian'),
|
||||
'ru': LanguageEntry('ru', 'rus', null, 'Russian'),
|
||||
'rw': LanguageEntry('rw', 'kin', null, 'Kinyarwanda'),
|
||||
'sa': LanguageEntry('sa', 'san', null, 'Sanskrit (Saṁskṛta)'),
|
||||
'sc': LanguageEntry('sc', 'srd', null, 'Sardinian'),
|
||||
'sd': LanguageEntry('sd', 'snd', null, 'Sindhi'),
|
||||
'se': LanguageEntry('se', 'sme', null, 'Northern Sami'),
|
||||
'sg': LanguageEntry('sg', 'sag', null, 'Sango'),
|
||||
'si': LanguageEntry('si', 'sin', null, 'Sinhalese, Sinhala'),
|
||||
'sk': LanguageEntry('sk', 'slk', 'slo', 'Slovak'),
|
||||
'sl': LanguageEntry('sl', 'slv', null, 'Slovene'),
|
||||
'sm': LanguageEntry('sm', 'smo', null, 'Samoan'),
|
||||
'sn': LanguageEntry('sn', 'sna', null, 'Shona'),
|
||||
'so': LanguageEntry('so', 'som', null, 'Somali'),
|
||||
'sq': LanguageEntry('sq', 'sqi', 'alb', 'Albanian'),
|
||||
'sr': LanguageEntry('sr', 'srp', null, 'Serbian'),
|
||||
'ss': LanguageEntry('ss', 'ssw', null, 'Swati'),
|
||||
'st': LanguageEntry('st', 'sot', null, 'Southern Sotho'),
|
||||
'su': LanguageEntry('su', 'sun', null, 'Sundanese'),
|
||||
'sv': LanguageEntry('sv', 'swe', null, 'Swedish'),
|
||||
'sw': LanguageEntry('sw', 'swa', null, 'Swahili'),
|
||||
'ta': LanguageEntry('ta', 'tam', null, 'Tamil'),
|
||||
'te': LanguageEntry('te', 'tel', null, 'Telugu'),
|
||||
'tg': LanguageEntry('tg', 'tgk', null, 'Tajik'),
|
||||
'th': LanguageEntry('th', 'tha', null, 'Thai'),
|
||||
'ti': LanguageEntry('ti', 'tir', null, 'Tigrinya'),
|
||||
'tk': LanguageEntry('tk', 'tuk', null, 'Turkmen'),
|
||||
'tl': LanguageEntry('tl', 'tgl', null, 'Tagalog'),
|
||||
'tn': LanguageEntry('tn', 'tsn', null, 'Tswana'),
|
||||
'to': LanguageEntry('to', 'ton', null, 'Tonga (Tonga Islands)'),
|
||||
'tr': LanguageEntry('tr', 'tur', null, 'Turkish'),
|
||||
'ts': LanguageEntry('ts', 'tso', null, 'Tsonga'),
|
||||
'tt': LanguageEntry('tt', 'tat', null, 'Tatar'),
|
||||
'tw': LanguageEntry('tw', 'twi', null, 'Twi'),
|
||||
'ty': LanguageEntry('ty', 'tah', null, 'Tahitian'),
|
||||
'ug': LanguageEntry('ug', 'uig', null, 'Uyghur'),
|
||||
'uk': LanguageEntry('uk', 'ukr', null, 'Ukrainian'),
|
||||
'ur': LanguageEntry('ur', 'urd', null, 'Urdu'),
|
||||
'uz': LanguageEntry('uz', 'uzb', null, 'Uzbek'),
|
||||
've': LanguageEntry('ve', 'ven', null, 'Venda'),
|
||||
'vi': LanguageEntry('vi', 'vie', null, 'Vietnamese'),
|
||||
'vo': LanguageEntry('vo', 'vol', null, 'Volapük'),
|
||||
'wa': LanguageEntry('wa', 'wln', null, 'Walloon'),
|
||||
'wo': LanguageEntry('wo', 'wol', null, 'Wolof'),
|
||||
'xh': LanguageEntry('xh', 'xho', null, 'Xhosa'),
|
||||
'yi': LanguageEntry('yi', 'yid', null, 'Yiddish'),
|
||||
'yo': LanguageEntry('yo', 'yor', null, 'Yoruba'),
|
||||
'za': LanguageEntry('za', 'zha', null, 'Zhuang, Chuang'),
|
||||
'zh': LanguageEntry('zh', 'zho', 'chi', 'Chinese'),
|
||||
'zu': LanguageEntry('zu', 'zul', null, 'Zulu'),
|
||||
};
|
||||
|
||||
const code2ToCode1 = <String, String>{
|
||||
'aar': 'aa',
|
||||
'abk': 'ab',
|
||||
'ave': 'ae',
|
||||
'afr': 'af',
|
||||
'aka': 'ak',
|
||||
'amh': 'am',
|
||||
'arg': 'an',
|
||||
'ara': 'ar',
|
||||
'asm': 'as',
|
||||
'ava': 'av',
|
||||
'aym': 'ay',
|
||||
'aze': 'az',
|
||||
'bak': 'ba',
|
||||
'bel': 'be',
|
||||
'bul': 'bg',
|
||||
'bih': 'bh',
|
||||
'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',
|
||||
};
|
||||
|
||||
const code2BToCode1 = <String, String>{
|
||||
'tib': 'bo',
|
||||
'cze': 'cs',
|
||||
'wel': 'cy',
|
||||
'ger': 'de',
|
||||
'gre': 'el',
|
||||
'baq': 'eu',
|
||||
'per': 'fa',
|
||||
'fre': 'fr',
|
||||
'arm': 'hy',
|
||||
'ice': 'is',
|
||||
'geo': 'ka',
|
||||
'mao': 'mi',
|
||||
'mac': 'mk',
|
||||
'may': 'ms',
|
||||
'bur': 'my',
|
||||
'dut': 'nl',
|
||||
'rum': 'ro',
|
||||
'slo': 'sk',
|
||||
'alb': 'sq',
|
||||
'chi': 'zh',
|
||||
};
|
||||
@@ -45,7 +45,6 @@ import 'services/plex_api_cache.dart';
|
||||
import 'database/app_database.dart';
|
||||
import 'utils/app_logger.dart';
|
||||
import 'utils/orientation_helper.dart';
|
||||
import 'utils/language_codes.dart';
|
||||
import 'i18n/strings.g.dart';
|
||||
import 'focus/input_mode_tracker.dart';
|
||||
import 'focus/key_event_utils.dart';
|
||||
@@ -140,9 +139,6 @@ Future<void> _bootstrapApp() async {
|
||||
// Initialize storage service
|
||||
futures.add(StorageService.getInstance());
|
||||
|
||||
// Initialize language codes for track selection
|
||||
futures.add(LanguageCodes.initialize());
|
||||
|
||||
// Wait for all parallel services to complete
|
||||
await Future.wait(futures);
|
||||
|
||||
|
||||
@@ -239,14 +239,8 @@ bool _languagesMatch(String? mpvLang, String? plexLang) {
|
||||
// Direct match
|
||||
if (mpvNormalized == plexNormalized) return true;
|
||||
|
||||
// Use LanguageCodes to get all variations and check for overlap
|
||||
try {
|
||||
final mpvVariations = LanguageCodes.getVariations(mpvNormalized);
|
||||
return mpvVariations.contains(plexNormalized);
|
||||
} catch (_) {
|
||||
// LanguageCodes not initialized, fall back to direct comparison
|
||||
return false;
|
||||
}
|
||||
final mpvVariations = LanguageCodes.getVariations(mpvNormalized);
|
||||
return mpvVariations.contains(plexNormalized);
|
||||
}
|
||||
|
||||
/// Check if two subtitle codec strings match
|
||||
|
||||
@@ -1,70 +1,25 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/services.dart';
|
||||
import '../data/iso_639_data.dart';
|
||||
|
||||
/// Helper class for converting between ISO 639-1 (2-letter) and ISO 639-2 (3-letter) language codes
|
||||
class LanguageCodes {
|
||||
static Map<String, dynamic>? _codes;
|
||||
|
||||
/// Load the language codes from JSON
|
||||
static Future<void> initialize() async {
|
||||
if (_codes != null) return;
|
||||
|
||||
final jsonString = await rootBundle.loadString('lib/data/iso_639_codes.json');
|
||||
_codes = json.decode(jsonString) as Map<String, dynamic>;
|
||||
static LanguageEntry? _resolve(String code) {
|
||||
final normalized = code.toLowerCase().trim();
|
||||
final entry = languageEntries[normalized];
|
||||
if (entry != null) return entry;
|
||||
final key = code2ToCode1[normalized] ?? code2BToCode1[normalized];
|
||||
return key != null ? languageEntries[key] : null;
|
||||
}
|
||||
|
||||
/// Get all possible variations of a language code
|
||||
/// Handles both ISO 639-1 (2-letter) and ISO 639-2 (3-letter) codes
|
||||
/// Returns a list of codes to check against track languages
|
||||
/// Returns all code variations (639-1, 639-2, 639-2/B) for a given language code.
|
||||
static List<String> getVariations(String languageCode) {
|
||||
if (_codes == null) {
|
||||
throw StateError('LanguageCodes not initialized. Call initialize() first.');
|
||||
}
|
||||
|
||||
final normalized = languageCode.toLowerCase().trim();
|
||||
final variations = <String>{normalized}; // Use Set to avoid duplicates
|
||||
final variations = <String>{normalized};
|
||||
|
||||
// Check if it's a 2-letter code (ISO 639-1)
|
||||
if (_codes!.containsKey(normalized)) {
|
||||
final entry = _codes![normalized] as Map<String, dynamic>;
|
||||
|
||||
// Add the 639-1 code
|
||||
if (entry.containsKey('639-1')) {
|
||||
variations.add((entry['639-1'] as String).toLowerCase());
|
||||
}
|
||||
|
||||
// Add the 639-2 code
|
||||
if (entry.containsKey('639-2')) {
|
||||
variations.add((entry['639-2'] as String).toLowerCase());
|
||||
}
|
||||
|
||||
// Add the 639-2/B code if it exists (bibliographic variant)
|
||||
if (entry.containsKey('639-2/B')) {
|
||||
variations.add((entry['639-2/B'] as String).toLowerCase());
|
||||
}
|
||||
} else {
|
||||
// It might be a 3-letter code, search for it
|
||||
for (var entry in _codes!.values) {
|
||||
final entryMap = entry as Map<String, dynamic>;
|
||||
|
||||
// Check if this entry contains our code as 639-2 or 639-2/B
|
||||
final code6392 = entryMap['639-2'] as String?;
|
||||
final code6392B = entryMap['639-2/B'] as String?;
|
||||
|
||||
if (code6392?.toLowerCase() == normalized || code6392B?.toLowerCase() == normalized) {
|
||||
// Add all variations from this entry
|
||||
if (entryMap.containsKey('639-1')) {
|
||||
variations.add((entryMap['639-1'] as String).toLowerCase());
|
||||
}
|
||||
if (code6392 != null) {
|
||||
variations.add(code6392.toLowerCase());
|
||||
}
|
||||
if (code6392B != null) {
|
||||
variations.add(code6392B.toLowerCase());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
final entry = _resolve(languageCode);
|
||||
if (entry != null) {
|
||||
variations.add(entry.code1);
|
||||
variations.add(entry.code2);
|
||||
if (entry.code2B != null) variations.add(entry.code2B!);
|
||||
}
|
||||
|
||||
return variations.toList();
|
||||
@@ -73,24 +28,19 @@ class LanguageCodes {
|
||||
/// Get a display name for a language/locale code.
|
||||
/// Handles plain codes ("en" → "English") and locale codes ("en-US" → "English",
|
||||
/// "en-AU" → "English (Australia)").
|
||||
/// Uses [_regionNames] for the country qualifier on non-primary variants.
|
||||
static String getDisplayName(String code) {
|
||||
if (code.isEmpty) return code;
|
||||
|
||||
// Plain language code (e.g. "en", "ja")
|
||||
if (!code.contains('-')) {
|
||||
return getLanguageName(code) ?? code;
|
||||
}
|
||||
|
||||
// Locale code (e.g. "en-US", "zh-TW")
|
||||
final parts = code.split('-');
|
||||
final langName = getLanguageName(parts.first) ?? parts.first;
|
||||
final region = parts.length > 1 ? _regionNames[parts[1]] : null;
|
||||
return region != null ? '$langName ($region)' : langName;
|
||||
}
|
||||
|
||||
// Region qualifiers for Plex locale codes that differ from the primary variant.
|
||||
// Only entries where Plex shows a country qualifier in its UI are listed.
|
||||
static const _regionNames = <String, String>{
|
||||
'AU': 'Australia',
|
||||
'BR': 'Brazil',
|
||||
@@ -102,48 +52,17 @@ class LanguageCodes {
|
||||
'TW': 'Taiwan',
|
||||
};
|
||||
|
||||
/// Get all available languages as (code, name) pairs, sorted by name.
|
||||
/// Returns ISO 639-1 two-letter codes with their English names.
|
||||
/// Returns all languages as (code, name) pairs, sorted by name.
|
||||
static List<({String code, String name})> getAllLanguages() {
|
||||
if (_codes == null) return [];
|
||||
final languages = <({String code, String name})>[];
|
||||
for (final entry in _codes!.entries) {
|
||||
final code = entry.key;
|
||||
// Skip locale variants like "en-GB" — only include base 2-letter codes
|
||||
if (code.contains('-')) continue;
|
||||
final map = entry.value as Map<String, dynamic>;
|
||||
final name = map['name'] as String?;
|
||||
if (name != null) {
|
||||
languages.add((code: code, name: name));
|
||||
}
|
||||
for (final entry in languageEntries.values) {
|
||||
languages.add((code: entry.code1, name: entry.name));
|
||||
}
|
||||
languages.sort((a, b) => a.name.compareTo(b.name));
|
||||
return languages;
|
||||
}
|
||||
|
||||
/// Get the English name of a language from its code
|
||||
static String? getLanguageName(String languageCode) {
|
||||
if (_codes == null) return null;
|
||||
|
||||
final normalized = languageCode.toLowerCase().trim();
|
||||
|
||||
// Check if it's a 2-letter code
|
||||
if (_codes!.containsKey(normalized)) {
|
||||
final entry = _codes![normalized] as Map<String, dynamic>;
|
||||
return entry['name'] as String?;
|
||||
}
|
||||
|
||||
// Search for 3-letter code
|
||||
for (var entry in _codes!.values) {
|
||||
final entryMap = entry as Map<String, dynamic>;
|
||||
final code6392 = entryMap['639-2'] as String?;
|
||||
final code6392B = entryMap['639-2/B'] as String?;
|
||||
|
||||
if (code6392?.toLowerCase() == normalized || code6392B?.toLowerCase() == normalized) {
|
||||
return entryMap['name'] as String?;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
return _resolve(languageCode)?.name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,6 @@ dependency_overrides:
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- lib/data/iso_639_codes.json
|
||||
- assets/plezy.png
|
||||
- assets/plezy_adaptive_foreground.svg
|
||||
- assets/go-noto-current-regular.ttf
|
||||
|
||||
Reference in New Issue
Block a user