diff --git a/CHANGELIST.md b/CHANGELIST.md index c1312680..e53149a3 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -51,6 +51,7 @@ - Use volume label in checks, not formatted version - Sync with Redump region and language selection - Try to delete old log archive before writing +- Add support for all ISO language codes ### 2.2 (2021-12-30) - Fix Saturn header finding diff --git a/MPF.Library/InfoTool.cs b/MPF.Library/InfoTool.cs index 6b2b7b4d..d0618e0c 100644 --- a/MPF.Library/InfoTool.cs +++ b/MPF.Library/InfoTool.cs @@ -649,7 +649,7 @@ namespace MPF.Library AddIfExists(output, Template.CategoryField, info.CommonDiscInfo.Category.LongName(), 1); AddIfExists(output, Template.MatchingIDsField, info.MatchedIDs, 1); AddIfExists(output, Template.RegionField, info.CommonDiscInfo.Region.LongName() ?? "SPACE! (CHANGE THIS)", 1); - AddIfExists(output, Template.LanguagesField, (info.CommonDiscInfo.Languages ?? new Language?[] { null }).Select(l => l.LongName() ?? "Klingon (CHANGE THIS)").ToArray(), 1); + AddIfExists(output, Template.LanguagesField, (info.CommonDiscInfo.Languages ?? new Language?[] { null }).Select(l => l.LongName() ?? "SILENCE! (CHANGE THIS)").ToArray(), 1); AddIfExists(output, Template.PlaystationLanguageSelectionViaField, (info.CommonDiscInfo.LanguageSelection ?? new LanguageSelection?[] { }).Select(l => l.LongName()).ToArray(), 1); AddIfExists(output, Template.DiscSerialField, info.CommonDiscInfo.Serial, 1); diff --git a/RedumpLib/Attributes/LanguageAttribute.cs b/RedumpLib/Attributes/LanguageAttribute.cs new file mode 100644 index 00000000..8a819257 --- /dev/null +++ b/RedumpLib/Attributes/LanguageAttribute.cs @@ -0,0 +1,23 @@ +namespace RedumpLib.Attributes +{ + /// + /// Attribute specifc to Language values + /// + public class LanguageAttribute : HumanReadableAttribute + { + /// + /// ISO 639-1 Code + /// + public string TwoLetterCode { get; set; } = null; + + /// + /// ISO 639-2 Code (Standard or Bibliographic) + /// + public string ThreeLetterCode { get; set; } = null; + + /// + /// ISO 639-2 Code (Terminology) + /// + public string ThreeLetterCodeAlt { get; set; } = null; + } +} \ No newline at end of file diff --git a/RedumpLib/Data/Enumerations.cs b/RedumpLib/Data/Enumerations.cs index f92b5ada..9e7e7a2e 100644 --- a/RedumpLib/Data/Enumerations.cs +++ b/RedumpLib/Data/Enumerations.cs @@ -118,151 +118,1582 @@ namespace RedumpLib.Data /// /// List of all disc langauges /// + /// https://www.loc.gov/standards/iso639-2/php/code_list.php public enum Language { - [HumanReadable(LongName = "Afrikaans", ShortName = "afr")] + #region A + + [Language(LongName = "Abkhazian", TwoLetterCode = "ab", ThreeLetterCode = "abk")] + Abkhazian, + + [Language(LongName = "Achinese", ThreeLetterCode = "ace")] + Achinese, + + [Language(LongName = "Acoli", ThreeLetterCode = "ach")] + Acoli, + + [Language(LongName = "Adangme", ThreeLetterCode = "ada")] + Adangme, + + [Language(LongName = "Adyghe; Adygei", ThreeLetterCode = "ady")] + Adyghe, + + [Language(LongName = "Afar", TwoLetterCode = "aa", ThreeLetterCode = "aar")] + Afar, + + [Language(LongName = "Afrihili", ThreeLetterCode = "afh")] + Afrihili, + + [Language(LongName = "Afrikaans", TwoLetterCode = "af", ThreeLetterCode = "afr")] Afrikaans, - [HumanReadable(LongName = "Albanian", ShortName = "sqi")] + [Language(LongName = "Ainu", ThreeLetterCode = "ain")] + Ainu, + + [Language(LongName = "Akan", TwoLetterCode = "ak", ThreeLetterCode = "aka")] + Akan, + + [Language(LongName = "Akkadian", ThreeLetterCode = "akk")] + Akkadian, + + [Language(LongName = "Albanian", TwoLetterCode = "sq", ThreeLetterCode = "alb", ThreeLetterCodeAlt = "sqi")] Albanian, - [HumanReadable(LongName = "Arabic", ShortName = "ara")] + [Language(LongName = "Aleut", ThreeLetterCode = "ale")] + Aleut, + + [Language(LongName = "Amharic", TwoLetterCode = "am", ThreeLetterCode = "amh")] + Amharic, + + [Language(LongName = "Angika", ThreeLetterCode = "anp")] + Angika, + + [Language(LongName = "Arabic", TwoLetterCode = "ar", ThreeLetterCode = "ara")] Arabic, - [HumanReadable(LongName = "Armenian", ShortName = "hye")] + [Language(LongName = "Aragonese", TwoLetterCode = "an", ThreeLetterCode = "arg")] + Aragonese, + + // Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) + [Language(LongName = "Aramaic", ThreeLetterCode = "arc")] + Aramaic, + + [Language(LongName = "Armenian", TwoLetterCode = "hy", ThreeLetterCode = "arm", ThreeLetterCodeAlt = "hye")] Armenian, - [HumanReadable(LongName = "Basque", ShortName = "baq")] + [Language(LongName = "Arapaho", ThreeLetterCode = "arp")] + Arapaho, + + [Language(LongName = "Aromanian; Arumanian; Macedo-Romanian", ThreeLetterCode = "rup")] + Aromanian, + + [Language(LongName = "Arawak", ThreeLetterCode = "arw")] + Arawak, + + [Language(LongName = "Assamese", TwoLetterCode = "as", ThreeLetterCode = "asm")] + Assamese, + + [Language(LongName = "Asturian; Bable; Leonese; Asturleonese", ThreeLetterCode = "ast")] + Asturian, + + [Language(LongName = "Athapascan", ThreeLetterCode = "den")] + Athapascan, + + [Language(LongName = "Avaric", TwoLetterCode = "av", ThreeLetterCode = "ava")] + Avaric, + + [Language(LongName = "Avestan", TwoLetterCode = "ae", ThreeLetterCode = "ave")] + Avestan, + + [Language(LongName = "Awadhi", ThreeLetterCode = "awa")] + Awadhi, + + [Language(LongName = "Aymara", TwoLetterCode = "ay", ThreeLetterCode = "aym")] + Aymara, + + [Language(LongName = "Azerbaijani", TwoLetterCode = "az", ThreeLetterCode = "aze")] + Azerbaijani, + + #endregion + + #region B + + [Language(LongName = "Balinese", ThreeLetterCode = "ban")] + Balinese, + + [Language(LongName = "Baluchi", ThreeLetterCode = "bal")] + Baluchi, + + [Language(LongName = "Bambara", TwoLetterCode = "bm", ThreeLetterCode = "bam")] + Bambara, + + [Language(LongName = "Basa", ThreeLetterCode = "bas")] + Basa, + + [Language(LongName = "Bashkir", TwoLetterCode = "ba", ThreeLetterCode = "bak")] + Bashkir, + + [Language(LongName = "Basque", TwoLetterCode = "eu", ThreeLetterCode = "baq", ThreeLetterCodeAlt = "eus")] Basque, - [HumanReadable(LongName = "Belarusian", ShortName = "bel")] + [Language(LongName = "Beja; Bedawiyet", ThreeLetterCode = "bej")] + Beja, + + [Language(LongName = "Belarusian", TwoLetterCode = "be", ThreeLetterCode = "bel")] Belarusian, - [HumanReadable(LongName = "Bulgarian", ShortName = "bul")] + [Language(LongName = "Bemba", ThreeLetterCode = "bem")] + Bemba, + + [Language(LongName = "Bengali", TwoLetterCode = "bn", ThreeLetterCode = "ben")] + Bengali, + + [Language(LongName = "Bhojpuri", ThreeLetterCode = "bho")] + Bhojpuri, + + [Language(LongName = "Bikol", ThreeLetterCode = "bik")] + Bikol, + + [Language(LongName = "Bini; Edo", ThreeLetterCode = "bin")] + Bini, + + [Language(LongName = "Bislama", TwoLetterCode = "bla", ThreeLetterCode = "bis")] + Bislama, + + [Language(LongName = "Blin; Bilin", ThreeLetterCode = "byn")] + Blin, + + [Language(LongName = "Blissymbols; Blissymbolics; Bliss", ThreeLetterCode = "zbl")] + Blissymbols, + + [Language(LongName = "Bosnian", TwoLetterCode = "bs", ThreeLetterCode = "bos")] + Bosnian, + + [Language(LongName = "Braj", ThreeLetterCode = "bra")] + Braj, + + [Language(LongName = "Breton", TwoLetterCode = "br", ThreeLetterCode = "bre")] + Breton, + + [Language(LongName = "Buginese", ThreeLetterCode = "bug")] + Buginese, + + [Language(LongName = "Bulgarian", TwoLetterCode = "bg", ThreeLetterCode = "bul")] Bulgarian, - [HumanReadable(LongName = "Catalan", ShortName = "cat")] + [Language(LongName = "Buriat", ThreeLetterCode = "bua")] + Buriat, + + [Language(LongName = "Burmese", TwoLetterCode = "my", ThreeLetterCode = "bur", ThreeLetterCodeAlt = "mya")] + Burmese, + + #endregion + + #region C + + [Language(LongName = "Caddo", ThreeLetterCode = "cad")] + Caddo, + + [Language(LongName = "Catalan; Valencian", TwoLetterCode = "ca", ThreeLetterCode = "cat")] Catalan, - [HumanReadable(LongName = "Chinese", ShortName = "chi")] + [Language(LongName = "Cebuano", ThreeLetterCode = "ceb")] + Cebuano, + + [Language(LongName = "Central Khmer", TwoLetterCode = "km", ThreeLetterCode = "khm")] + CentralKhmer, + + [Language(LongName = "Chagatai", ThreeLetterCode = "chg")] + Chagatai, + + [Language(LongName = "Chamorro", TwoLetterCode = "ch", ThreeLetterCode = "cha")] + Chamorro, + + [Language(LongName = "Chechen", TwoLetterCode = "ce", ThreeLetterCode = "che")] + Chechen, + + [Language(LongName = "Cherokee", ThreeLetterCode = "chr")] + Cherokee, + + [Language(LongName = "Cheyenne", ThreeLetterCode = "chy")] + Cheyenne, + + [Language(LongName = "Chibcha", ThreeLetterCode = "chb")] + Chibcha, + + [Language(LongName = "Chichewa; Chewa; Nyanja", TwoLetterCode = "ny", ThreeLetterCode = "nya")] + Chichewa, + + [Language(LongName = "Chinese", TwoLetterCode = "zh", ThreeLetterCode = "chi", ThreeLetterCodeAlt = "zho")] Chinese, - [HumanReadable(LongName = "Croatian", ShortName = "hrv")] + [Language(LongName = "Chinook jargon", ThreeLetterCode = "chn")] + ChinookJargon, + + [Language(LongName = "Chipewyan; Dene Suline", ThreeLetterCode = "chp")] + Chipewyan, + + [Language(LongName = "Choctaw", ThreeLetterCode = "cho")] + Choctaw, + + // Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic + [Language(LongName = "Church Slavic", TwoLetterCode = "cu", ThreeLetterCode = "chu")] + ChurchSlavic, + + [Language(LongName = "Chuukese", ThreeLetterCode = "chk")] + Chuukese, + + [Language(LongName = "Chuvash", TwoLetterCode = "cv", ThreeLetterCode = "chv")] + Chuvash, + + // Classical Newari; Old Newari; Classical Nepal Bhasa + [Language(LongName = "Classical Newari", ThreeLetterCode = "nwc")] + ClassicalNewari, + + [Language(LongName = "Coptic", ThreeLetterCode = "cop")] + Coptic, + + [Language(LongName = "Cornish", TwoLetterCode = "kw", ThreeLetterCode = "cor")] + Cornish, + + [Language(LongName = "Corsican", TwoLetterCode = "co", ThreeLetterCode = "cos")] + Corsican, + + [Language(LongName = "Cree", TwoLetterCode = "cr", ThreeLetterCode = "cre")] + Cree, + + [Language(LongName = "Creek", ThreeLetterCode = "mus")] + Creek, + + [Language(LongName = "Creoles and pidgins", ThreeLetterCode = "crp")] + CreolesAndPidgins, + + [Language(LongName = "Creoles and pidgins, English-based", ThreeLetterCode = "cpe")] + EnglishCreole, + + [Language(LongName = "Creoles and pidgins, French-based", ThreeLetterCode = "cpf")] + FrenchCreole, + + [Language(LongName = "Creoles and pidgins, Portuguese-based", ThreeLetterCode = "cpp")] + PortugueseCreole, + + [Language(LongName = "Crimean Tatar; Crimean Turkish", ThreeLetterCode = "crh")] + CrimeanTatar, + + [Language(LongName = "Croatian", TwoLetterCode = "hr", ThreeLetterCode = "hrv")] Croatian, - [HumanReadable(LongName = "Czech", ShortName = "cze")] + [Language(LongName = "Czech", TwoLetterCode = "cs", ThreeLetterCode = "cze", ThreeLetterCodeAlt = "ces")] Czech, - [HumanReadable(LongName = "Danish", ShortName = "dan")] + #endregion + + #region D + + [Language(LongName = "Dakota", ThreeLetterCode = "dak")] + Dakota, + + [Language(LongName = "Danish", TwoLetterCode = "da", ThreeLetterCode = "dan")] Danish, - [HumanReadable(LongName = "Dutch", ShortName = "dut")] + [Language(LongName = "Dargwa", ThreeLetterCode = "dar")] + Dargwa, + + [Language(LongName = "Delaware", ThreeLetterCode = "del")] + Delaware, + + [Language(LongName = "Dinka", ThreeLetterCode = "din")] + Dinka, + + [Language(LongName = "Divehi; Dhivehi; Maldivian", TwoLetterCode = "dv", ThreeLetterCode = "div")] + Divehi, + + [Language(LongName = "Dogrib", ThreeLetterCode = "dgr")] + Dogrib, + + [Language(LongName = "Dogri", ThreeLetterCode = "doi")] + Dogri, + + [Language(LongName = "Duala", ThreeLetterCode = "dua")] + Duala, + + [Language(LongName = "Dutch; Flemish", TwoLetterCode = "nl", ThreeLetterCode = "dut", ThreeLetterCodeAlt = "nld")] Dutch, - [HumanReadable(LongName = "English", ShortName = "eng")] + [Language(LongName = "Dutch, Middle (ca.1050-1350)", ThreeLetterCode = "dum")] + MiddleDutch, + + [Language(LongName = "Dyula", ThreeLetterCode = "dyu")] + Dyula, + + [Language(LongName = "Dzongkha", TwoLetterCode = "dz", ThreeLetterCode = "dzo")] + Dzongkha, + + #endregion + + #region E + + [Language(LongName = "Eastern Frisian", ThreeLetterCode = "frs")] + EasternFrisian, + + [Language(LongName = "Efik", ThreeLetterCode = "efi")] + Efik, + + [Language(LongName = "Egyptian (Ancient)", ThreeLetterCode = "egy")] + AncientEgyptian, + + [Language(LongName = "Ekajuk", ThreeLetterCode = "eka")] + Ekajuk, + + [Language(LongName = "Elamite", ThreeLetterCode = "elx")] + Elamite, + + [Language(LongName = "English", TwoLetterCode = "en", ThreeLetterCode = "eng")] English, - [HumanReadable(LongName = "Estonian", ShortName = "est")] + [Language(LongName = "English, Old (ca.450-1100)", ThreeLetterCode = "ang")] + OldEnglish, + + [Language(LongName = "English, Middle (1100-1500)", ThreeLetterCode = "enm")] + MiddleEnglish, + + [Language(LongName = "Erzya", ThreeLetterCode = "myv")] + Erzya, + + [Language(LongName = "Esperanto", TwoLetterCode="eo", ThreeLetterCode = "epo")] + Esperanto, + + [Language(LongName = "Estonian", TwoLetterCode = "et", ThreeLetterCode = "est")] Estonian, - [HumanReadable(LongName = "Finnish", ShortName = "fin")] + [Language(LongName = "Ewe", TwoLetterCode = "ee", ThreeLetterCode = "ewe")] + Ewe, + + [Language(LongName = "Ewondo", ThreeLetterCode = "ewo")] + Ewondo, + + #endregion + + #region F + + [Language(LongName = "Fang", ThreeLetterCode = "fan")] + Fang, + + [Language(LongName = "Faroese", TwoLetterCode = "fo", ThreeLetterCode = "fao")] + Faroese, + + [Language(LongName = "Fanti", ThreeLetterCode = "fat")] + Fanti, + + [Language(LongName = "Fijian", TwoLetterCode = "fj", ThreeLetterCode = "fij")] + Fijian, + + [Language(LongName = "Filipino; Pilipino", ThreeLetterCode = "fil")] + Filipino, + + [Language(LongName = "Finnish", TwoLetterCode = "fi", ThreeLetterCode = "fin")] Finnish, - [HumanReadable(LongName = "French", ShortName = "fre")] + [Language(LongName = "Fon", ThreeLetterCode = "fon")] + Fon, + + [Language(LongName = "French", TwoLetterCode = "fr", ThreeLetterCode = "fre", ThreeLetterCodeAlt = "fra")] French, - [HumanReadable(LongName = "Gaelic", ShortName = "gla")] + [Language(LongName = "French, Middle (ca.1400-1600)", ThreeLetterCode = "frm")] + MiddleFrench, + + [Language(LongName = "French, Old (842-ca.1400)", ThreeLetterCode = "fro")] + OldFrench, + + [Language(LongName = "Friulian", ThreeLetterCode = "fur")] + Friulian, + + [Language(LongName = "Fulah", TwoLetterCode = "ff", ThreeLetterCode = "ful")] + Fulah, + + #endregion + + #region G + + [Language(LongName = "Ga", ThreeLetterCode = "gaa")] + Ga, + + [Language(LongName = "Gaelic; Scottish Gaelic", TwoLetterCode = "gd", ThreeLetterCode = "gla")] Gaelic, - [HumanReadable(LongName = "German", ShortName = "ger")] + [Language(LongName = "Galibi Carib", ThreeLetterCode = "car")] + GalibiCarib, + + [Language(LongName = "Galician", TwoLetterCode = "gl", ThreeLetterCode = "glg")] + Galician, + + [Language(LongName = "Ganda", TwoLetterCode = "lg", ThreeLetterCode = "lug")] + Ganda, + + [Language(LongName = "Gayo", ThreeLetterCode = "gay")] + Gayo, + + [Language(LongName = "Gbaya", ThreeLetterCode = "gba")] + Gbaya, + + [Language(LongName = "Geez", ThreeLetterCode = "gez")] + Geez, + + [Language(LongName = "Georgian", TwoLetterCode = "ka", ThreeLetterCode = "geo", ThreeLetterCodeAlt = "kat")] + Georgian, + + [Language(LongName = "German", TwoLetterCode = "de", ThreeLetterCode = "ger", ThreeLetterCodeAlt = "deu")] German, - [HumanReadable(LongName = "Greek", ShortName = "gre")] + [Language(LongName = "German, Middle High (ca.1050-1500)", ThreeLetterCode = "gmh")] + MiddleHighGerman, + + [Language(LongName = "German, Old High (ca.750-1050)", ThreeLetterCode = "goh")] + OldHighGerman, + + [Language(LongName = "Gilbertese", ThreeLetterCode = "gil")] + Gilbertese, + + [Language(LongName = "Gondi", ThreeLetterCode = "gon")] + Gondi, + + [Language(LongName = "Gorontalo", ThreeLetterCode = "gor")] + Gorontalo, + + [Language(LongName = "Gothic", ThreeLetterCode = "got")] + Gothic, + + [Language(LongName = "Grebo", ThreeLetterCode = "grb")] + Grebo, + + [Language(LongName = "Greek", TwoLetterCode = "el", ThreeLetterCode = "gre", ThreeLetterCodeAlt = "eli")] Greek, - [HumanReadable(LongName = "Hebrew", ShortName = "heb")] + [Language(LongName = "Greek, Ancient (to 1453)", ThreeLetterCode = "grc")] + AncientGreek, + + [Language(LongName = "Guarani", TwoLetterCode = "gn", ThreeLetterCode = "grn")] + Guarani, + + [Language(LongName = "Gujarati", TwoLetterCode = "gu", ThreeLetterCode = "guj")] + Gujarati, + + [Language(LongName = "Gwich'in", ThreeLetterCode = "gwi")] + Gwichin, + + #endregion + + #region H + + [Language(LongName = "Haida", ThreeLetterCode = "hai")] + Haida, + + [Language(LongName = "Haitian; Haitian Creole", TwoLetterCode = "ht", ThreeLetterCode = "hat")] + Haitian, + + [Language(LongName = "Hausa", TwoLetterCode = "ha", ThreeLetterCode = "gau")] + Hausa, + + [Language(LongName = "Hawaiian", ThreeLetterCode = "haw")] + Hawaiian, + + [Language(LongName = "Hebrew", TwoLetterCode = "he", ThreeLetterCode = "heb")] Hebrew, - [HumanReadable(LongName = "Hindi", ShortName = "hin")] + [Language(LongName = "Herero", TwoLetterCode = "hz", ThreeLetterCode = "her")] + Herero, + + [Language(LongName = "Hiligaynon", ThreeLetterCode = "hil")] + Hiligaynon, + + [Language(LongName = "Hindi", TwoLetterCode = "hi", ThreeLetterCode = "hin")] Hindi, - [HumanReadable(LongName = "Hungarian", ShortName = "hun")] + [Language(LongName = "Hiri Motu", ThreeLetterCode = "hmo")] + HiriMotu, + + [Language(LongName = "Hittite", ThreeLetterCode = "hit")] + Hittite, + + [Language(LongName = "Hmong; Mong", ThreeLetterCode = "hmn")] + Hmong, + + [Language(LongName = "Hungarian", TwoLetterCode = "hu", ThreeLetterCode = "hun")] Hungarian, - [HumanReadable(LongName = "Icelandic", ShortName = "isl")] + [Language(LongName = "Hupa", ThreeLetterCode = "hup")] + Hupa, + + #endregion + + #region I + + [Language(LongName = "Iban", ThreeLetterCode = "iba")] + Iban, + + [Language(LongName = "Icelandic", TwoLetterCode = "is", ThreeLetterCode = "ice", ThreeLetterCodeAlt = "isl")] Icelandic, - [HumanReadable(LongName = "Indonesian", ShortName = "ind")] + [Language(LongName = "Ido", TwoLetterCode = "io", ThreeLetterCode = "ido")] + Ido, + + [Language(LongName = "Igbo", TwoLetterCode = "ig", ThreeLetterCode = "ibo")] + Igbo, + + [Language(LongName = "Iloko", ThreeLetterCode = "ilo")] + Iloko, + + [Language(LongName = "Inari Sami", ThreeLetterCode = "smn")] + InariSami, + + [Language(LongName = "Indonesian", TwoLetterCode = "id", ThreeLetterCode = "ind")] Indonesian, - [HumanReadable(LongName = "Italian", ShortName = "ita")] + [Language(LongName = "Ingush", ThreeLetterCode = "inh")] + Ingush, + + [Language(LongName = "Interlingua (International Auxiliary Language Association)", TwoLetterCode = "ia", ThreeLetterCode = "ina")] + Interlingua, + + [Language(LongName = "Interlingue; Occidental", TwoLetterCode = "ie", ThreeLetterCode = "ile")] + Interlingue, + + [Language(LongName = "Inuktitut", TwoLetterCode = "iu", ThreeLetterCode = "iku")] + Inuktitut, + + [Language(LongName = "Inupiaq", TwoLetterCode = "ik", ThreeLetterCode = "ipk")] + Inupiaq, + + [Language(LongName = "Irish", TwoLetterCode = "ga", ThreeLetterCode = "gle")] + Irish, + + [Language(LongName = "Irish, Middle (900-1200)", ThreeLetterCode = "mga")] + MiddleIrish, + + [Language(LongName = "Irish, Old (to 900)", ThreeLetterCode = "sga")] + OldIrish, + + [Language(LongName = "Italian", TwoLetterCode = "it", ThreeLetterCode = "ita")] Italian, - [HumanReadable(LongName = "Japanese", ShortName = "jap")] + #endregion + + #region J + + [Language(LongName = "Japanese", TwoLetterCode = "ja", ThreeLetterCode = "jap")] Japanese, - [HumanReadable(LongName = "Korean", ShortName = "kor")] + [Language(LongName = "Javanese", TwoLetterCode = "jv", ThreeLetterCode = "jav")] + Javanese, + + [Language(LongName = "Judeo-Arabic", ThreeLetterCode = "jrb")] + JudeoArabic, + + [Language(LongName = "Judeo-Persian", ThreeLetterCode = "jpr")] + JudeoPersian, + + #endregion + + #region K + + [Language(LongName = "Kabardian", ThreeLetterCode = "kbd")] + Kabardian, + + [Language(LongName = "Kabyle", ThreeLetterCode = "kab")] + Kabyle, + + [Language(LongName = "Kachin; Jingpho", ThreeLetterCode = "kac")] + Kachin, + + [Language(LongName = "Kalaallisut; Greenlandic", TwoLetterCode = "kl", ThreeLetterCode = "kal")] + Kalaallisut, + + [Language(LongName = "Kalmyk; Oirat", ThreeLetterCode = "xal")] + Kalmyk, + + [Language(LongName = "Kamba", ThreeLetterCode = "kam")] + Kamba, + + [Language(LongName = "Kannada", TwoLetterCode = "kn", ThreeLetterCode = "kan")] + Kannada, + + [Language(LongName = "Kanuri", TwoLetterCode = "kr", ThreeLetterCode = "kau")] + Kanuri, + + [Language(LongName = "Karachay-Balkar", ThreeLetterCode = "krc")] + KarachayBalkar, + + [Language(LongName = "Kara-Kalpak", ThreeLetterCode = "kaa")] + KaraKalpak, + + [Language(LongName = "Karelian", ThreeLetterCode = "krl")] + Karelian, + + [Language(LongName = "Kashmiri", TwoLetterCode = "ks", ThreeLetterCode = "kas")] + Kashmiri, + + [Language(LongName = "Kashubian", ThreeLetterCode = "csb")] + Kashubian, + + [Language(LongName = "Kawi", ThreeLetterCode = "kaw")] + Kawi, + + [Language(LongName = "Kazakh", TwoLetterCode = "kk", ThreeLetterCode = "kaz")] + Kazakh, + + [Language(LongName = "Khasi", ThreeLetterCode = "kha")] + Khasi, + + [Language(LongName = "Khotanese; Sakan", ThreeLetterCode = "kho")] + Khotanese, + + [Language(LongName = "Kikuyu; Gikuyu", TwoLetterCode = "ki", ThreeLetterCode = "kik")] + Kikuyu, + + [Language(LongName = "Kimbundu", ThreeLetterCode = "kmb")] + Kimbundu, + + [Language(LongName = "Kinyarwanda", TwoLetterCode = "rw", ThreeLetterCode = "kin")] + Kinyarwanda, + + [Language(LongName = "Kirghiz; Kyrgyz", TwoLetterCode = "ky", ThreeLetterCode = "kir")] + Kirghiz, + + [Language(LongName = "Klingon; tlhIngan-Hol", ThreeLetterCode = "tlh")] + Klingon, + + [Language(LongName = "Komi", TwoLetterCode = "kv", ThreeLetterCode = "kom")] + Komi, + + [Language(LongName = "Kongo", TwoLetterCode = "kg", ThreeLetterCode = "kon")] + Kongo, + + [Language(LongName = "Konkani", ThreeLetterCode = "kok")] + Konkani, + + [Language(LongName = "Korean", TwoLetterCode = "ko", ThreeLetterCode = "kor")] Korean, - [HumanReadable(LongName = "Latin", ShortName = "lat")] + [Language(LongName = "Kosraean", ThreeLetterCode = "kos")] + Kosraean, + + [Language(LongName = "Kpelle", ThreeLetterCode = "kpe")] + Kpelle, + + [Language(LongName = "Kuanyama; Kwanyama", TwoLetterCode = "kj", ThreeLetterCode = "kua")] + Kuanyama, + + [Language(LongName = "Kumyk", ThreeLetterCode = "kum")] + Kumyk, + + [Language(LongName = "Kurdish", TwoLetterCode = "ku", ThreeLetterCode = "kur")] + Kurdish, + + [Language(LongName = "Kurukh", ThreeLetterCode = "kru")] + Kurukh, + + [Language(LongName = "Kutenai", ThreeLetterCode = "kut")] + Kutenai, + + #endregion + + #region L + + [Language(LongName = "Ladino", ThreeLetterCode = "lad")] + Ladino, + + [Language(LongName = "Lahnda", ThreeLetterCode = "lah")] + Lahnda, + + [Language(LongName = "Lamba", ThreeLetterCode = "lam")] + Lamba, + + [Language(LongName = "Lao", TwoLetterCode = "lo", ThreeLetterCode = "lao")] + Lao, + + [Language(LongName = "Latin", TwoLetterCode = "la", ThreeLetterCode = "lat")] Latin, - [HumanReadable(LongName = "Latvian", ShortName = "lav")] + [Language(LongName = "Latvian", TwoLetterCode = "lv", ThreeLetterCode = "lav")] Latvian, - [HumanReadable(LongName = "Lithuanian", ShortName = "lit")] + [Language(LongName = "Lezghian", ThreeLetterCode = "lez")] + Lezghian, + + [Language(LongName = "Limburgan; Limburger; Limburgish", TwoLetterCode = "li", ThreeLetterCode = "lim")] + Limburgan, + + [Language(LongName = "Lingala", TwoLetterCode = "ln", ThreeLetterCode = "lin")] + Lingala, + + [Language(LongName = "Lithuanian", TwoLetterCode = "lt", ThreeLetterCode = "lit")] Lithuanian, - [HumanReadable(LongName = "Macedonian", ShortName = "mkd")] + [Language(LongName = "Lojban", ThreeLetterCode = "jbo")] + Lojban, + + [Language(LongName = "Low German; Low Saxon", ThreeLetterCode = "nds")] + LowGerman, + + [Language(LongName = "Lower Sorbian", ThreeLetterCode = "dsb")] + LowerSorbian, + + [Language(LongName = "Lozi", ThreeLetterCode = "loz")] + Lozi, + + [Language(LongName = "Luba-Katanga", TwoLetterCode = "lu", ThreeLetterCode = "loz")] + LubaKatanga, + + [Language(LongName = "Luba-Lulua", ThreeLetterCode = "lua")] + LubaLulua, + + [Language(LongName = "Luiseno", ThreeLetterCode = "lui")] + Luiseno, + + [Language(LongName = "Lule Sami", ThreeLetterCode = "smj")] + LuleSami, + + [Language(LongName = "Lunda", ThreeLetterCode = "lun")] + Lunda, + + [Language(LongName = "Luo (Kenya and Tanzania)", ThreeLetterCode = "luo")] + Luo, + + [Language(LongName = "Lushai", ThreeLetterCode = "lus")] + Lushai, + + [Language(LongName = "Luxembourgish; Letzeburgesch", TwoLetterCode = "lb", ThreeLetterCode = "ltz")] + Luxembourgish, + + #endregion + + #region M + + [Language(LongName = "Macedonian", TwoLetterCode = "mk", ThreeLetterCode = "mac", ThreeLetterCodeAlt = "mkd")] Macedonian, - [HumanReadable(LongName = "Norwegian", ShortName = "nor")] + [Language(LongName = "Madurese", ThreeLetterCode = "mad")] + Madurese, + + [Language(LongName = "Magahi", ThreeLetterCode = "mag")] + Magahi, + + [Language(LongName = "Maithili", ThreeLetterCode = "mai")] + Maithili, + + [Language(LongName = "Makasar", ThreeLetterCode = "mak")] + Makasar, + + [Language(LongName = "Malagasy", TwoLetterCode = "mg", ThreeLetterCode = "mlg")] + Malagasy, + + [Language(LongName = "Malay", TwoLetterCode = "ms", ThreeLetterCode = "may", ThreeLetterCodeAlt = "msa")] + Malay, + + [Language(LongName = "Malayalam", TwoLetterCode = "ml", ThreeLetterCode = "mal")] + Malayalam, + + [Language(LongName = "Maltese", TwoLetterCode = "mt", ThreeLetterCode = "mlt")] + Maltese, + + [Language(LongName = "Manchu", ThreeLetterCode = "mnc")] + Manchu, + + [Language(LongName = "Mandar", ThreeLetterCode = "mdr")] + Mandar, + + [Language(LongName = "Mandingo", ThreeLetterCode = "man")] + Mandingo, + + [Language(LongName = "Manipuri", ThreeLetterCode = "mni")] + Manipuri, + + [Language(LongName = "Manx", TwoLetterCode = "gv", ThreeLetterCode = "glv")] + Manx, + + [Language(LongName = "Maori", TwoLetterCode = "mi", ThreeLetterCode = "mao", ThreeLetterCodeAlt = "mri")] + Maori, + + [Language(LongName = "Mapudungun; Mapuche", ThreeLetterCode = "arn")] + Mapudungun, + + [Language(LongName = "Marathi", TwoLetterCode = "mr", ThreeLetterCode = "mar")] + Marathi, + + [Language(LongName = "Mari", ThreeLetterCode = "chm")] + Mari, + + [Language(LongName = "Marshallese", TwoLetterCode = "mh", ThreeLetterCode = "mah")] + Marshallese, + + [Language(LongName = "Marwari", ThreeLetterCode = "mwr")] + Marwari, + + [Language(LongName = "Masai", ThreeLetterCode = "mas")] + Masai, + + [Language(LongName = "Mende", ThreeLetterCode = "men")] + Mende, + + [Language(LongName = "Mi'kmaq; Micmac", ThreeLetterCode = "mic")] + Mikmaq, + + [Language(LongName = "Minangkabau", ThreeLetterCode = "min")] + Minangkabau, + + [Language(LongName = "Mirandese", ThreeLetterCode = "mwl")] + Mirandese, + + [Language(LongName = "Mohawk", ThreeLetterCode = "moh")] + Mohawk, + + [Language(LongName = "Moksha", ThreeLetterCode = "mdf")] + Moksha, + + [Language(LongName = "Mongo", ThreeLetterCode = "lol")] + Mongo, + + [Language(LongName = "Mongolian", TwoLetterCode = "mn", ThreeLetterCode = "mon")] + Mongolian, + + [Language(LongName = "Montenegrin", ThreeLetterCode = "cnr")] + Montenegrin, + + [Language(LongName = "Mossi", ThreeLetterCode = "mos")] + Mossi, + + #endregion + + #region N + + [Language(LongName = "N'Ko", ThreeLetterCode = "nqo")] + NKo, + + [Language(LongName = "Nauru", TwoLetterCode = "na", ThreeLetterCode = "nau")] + Nauru, + + [Language(LongName = "Navajo; Navaho", TwoLetterCode = "nv", ThreeLetterCode = "nav")] + Navajo, + + [Language(LongName = "Ndonga", TwoLetterCode = "ng", ThreeLetterCode = "ndo")] + Ndonga, + + [Language(LongName = "Neapolitan", ThreeLetterCode = "nap")] + Neapolitan, + + [Language(LongName = "Nepal Bhasa; Newari", ThreeLetterCode = "new")] + NepalBhasa, + + [Language(LongName = "Nepali", TwoLetterCode = "ne", ThreeLetterCode = "nep")] + Nepali, + + [Language(LongName = "Nias", ThreeLetterCode = "nia")] + Nias, + + [Language(LongName = "Niuean", ThreeLetterCode = "niu")] + Niuean, + + // Commented out to avoid confusion + //[Language(LongName = "No linguistic content; Not applicable", ThreeLetterCode = "zxx")] + //NoLinguisticContent, + + [Language(LongName = "Nogai", ThreeLetterCode = "nog")] + Nogai, + + [Language(LongName = "Norse, Old", ThreeLetterCode = "non")] + OldNorse, + + [Language(LongName = "North Ndebele", TwoLetterCode = "nd", ThreeLetterCode = "nde")] + NorthNdebele, + + [Language(LongName = "Northern Frisian", ThreeLetterCode = "frr")] + NorthernFrisian, + + [Language(LongName = "Northern Sami", TwoLetterCode = "se", ThreeLetterCode = "sme")] + NorthernSami, + + [Language(LongName = "Norwegian", TwoLetterCode = "no", ThreeLetterCode = "nor")] Norwegian, - [HumanReadable(LongName = "Polish", ShortName = "pol")] + [Language(LongName = "Norwegian Bokmål", TwoLetterCode = "nb", ThreeLetterCode = "nob")] + NorwegianBokmal, + + [Language(LongName = "Norwegian Nynorsk", TwoLetterCode = "nn", ThreeLetterCode = "nno")] + NorwegianNynorsk, + + [Language(LongName = "Nyamwezi", ThreeLetterCode = "nym")] + Nyamwezi, + + [Language(LongName = "Nyankole", ThreeLetterCode = "nyn")] + Nyankole, + + [Language(LongName = "Nyoro", ThreeLetterCode = "nyo")] + Nyoro, + + [Language(LongName = "Nzima", ThreeLetterCode = "nzi")] + Nzima, + + #endregion + + #region O + + [Language(LongName = "Occitan (post 1500)", TwoLetterCode = "oc", ThreeLetterCode = "oci")] + Occitan, + + [Language(LongName = "Occitan, Old (to 1500); Provençal, Old (to 1500)", ThreeLetterCode = "pro")] + OldOccitan, + + [Language(LongName = "Ojibwa", TwoLetterCode = "oj", ThreeLetterCode = "oji")] + Ojibwa, + + [Language(LongName = "Oriya", TwoLetterCode = "or", ThreeLetterCode = "ori")] + Oriya, + + [Language(LongName = "Oromo", TwoLetterCode = "om", ThreeLetterCode = "orm")] + Oromo, + + [Language(LongName = "Osage", ThreeLetterCode = "osa")] + Osage, + + [Language(LongName = "Ossetian; Ossetic", TwoLetterCode = "os", ThreeLetterCode = "oss")] + Ossetian, + + #endregion + + #region P + + [Language(LongName = "Pahlavi", ThreeLetterCode = "pal")] + Pahlavi, + + [Language(LongName = "Palauan", ThreeLetterCode = "pau")] + Palauan, + + [Language(LongName = "Pali", TwoLetterCode = "pi", ThreeLetterCode = "pli")] + Pali, + + [Language(LongName = "Pampanga; Kapampangan", ThreeLetterCode = "pam")] + Pampanga, + + [Language(LongName = "Pangasinan", ThreeLetterCode = "pag")] + Pangasinan, + + [Language(LongName = "Panjabi; Punjabi", TwoLetterCode = "pa", ThreeLetterCode = "pan")] + Panjabi, + + [Language(LongName = "Papiamento", ThreeLetterCode = "pap")] + Papiamento, + + [Language(LongName = "Pedi; Sepedi; Northern Sotho", ThreeLetterCode = "nso")] + Pedi, + + [Language(LongName = "Persian", TwoLetterCode = "fa", ThreeLetterCode = "per", ThreeLetterCodeAlt = "fas")] + Persian, + + [Language(LongName = "Persian, Old (ca.600-400 B.C.)", ThreeLetterCode = "peo")] + OldPersian, + + [Language(LongName = "Phoenician", ThreeLetterCode = "phn")] + Phoenician, + + [Language(LongName = "Polish", TwoLetterCode = "pl", ThreeLetterCode = "pol")] Polish, - [HumanReadable(LongName = "Portuguese", ShortName = "por")] + [Language(LongName = "Portuguese", TwoLetterCode = "pt", ThreeLetterCode = "por")] Portuguese, - [HumanReadable(LongName = "Punjabi", ShortName = "pan")] - Punjabi, + [Language(LongName = "Pushto; Pashto", TwoLetterCode = "ps", ThreeLetterCode = "pus")] + Pushto, - [HumanReadable(LongName = "Romanian", ShortName = "ron")] + #endregion + + #region Q + + // qaa-qtz: Reserved for local use + + [Language(LongName = "Quechua", TwoLetterCode = "qu", ThreeLetterCode = "que")] + Quechua, + + #endregion + + #region R + + [Language(LongName = "Rajasthani", ThreeLetterCode = "raj")] + Rajasthani, + + [Language(LongName = "Rapanui", ThreeLetterCode = "rap")] + Rapanui, + + [Language(LongName = "Rarotongan; Cook Islands Maori", ThreeLetterCode = "rar")] + Rarotongan, + + [Language(LongName = "Romanian; Moldavian; Moldovan", TwoLetterCode = "ro", ThreeLetterCode = "rum", ThreeLetterCodeAlt = "ron")] Romanian, - [HumanReadable(LongName = "Russian", ShortName = "rus")] + [Language(LongName = "Romansh", TwoLetterCode = "rm", ThreeLetterCode = "roh")] + Romansh, + + [Language(LongName = "Romany", ThreeLetterCode = "rom")] + Romany, + + [Language(LongName = "Rundi", TwoLetterCode = "rn", ThreeLetterCode = "run")] + Rundi, + + [Language(LongName = "Russian", TwoLetterCode = "ru", ThreeLetterCode = "rus")] Russian, - [HumanReadable(LongName = "Serbian", ShortName = "srp")] + #endregion + + #region S + + [Language(LongName = "Samaritan Aramaic", ThreeLetterCode = "sam")] + SamaritanAramaic, + + [Language(LongName = "Samoan", TwoLetterCode = "sm", ThreeLetterCode = "smo")] + Samoan, + + [Language(LongName = "Sandawe", ThreeLetterCode = "sad")] + Sandawe, + + [Language(LongName = "Sango", TwoLetterCode = "sg", ThreeLetterCode = "sag")] + Sango, + + [Language(LongName = "Sanskrit", TwoLetterCode = "sa", ThreeLetterCode = "san")] + Sanskrit, + + [Language(LongName = "Santali", ThreeLetterCode = "sat")] + Santali, + + [Language(LongName = "Sardinian", TwoLetterCode = "sc", ThreeLetterCode = "srd")] + Sardinian, + + [Language(LongName = "Sasak", ThreeLetterCode = "sas")] + Sasak, + + [Language(LongName = "Scots", ThreeLetterCode = "sco")] + Scots, + + [Language(LongName = "Selkup", ThreeLetterCode = "sel")] + Selkup, + + [Language(LongName = "Serbian", TwoLetterCode = "sr", ThreeLetterCode = "srp")] Serbian, - [HumanReadable(LongName = "Slovak", ShortName = "slk")] + [Language(LongName = "Serer", ThreeLetterCode = "srr")] + Serer, + + [Language(LongName = "Shan", ThreeLetterCode = "shn")] + Shan, + + [Language(LongName = "Shona", TwoLetterCode = "sn", ThreeLetterCode = "sna")] + Shona, + + [Language(LongName = "Sichuan Yi; Nuosu", TwoLetterCode = "ii", ThreeLetterCode = "iii")] + SichuanYi, + + [Language(LongName = "Sicilian", ThreeLetterCode = "scn")] + Sicilian, + + [Language(LongName = "Sidamo", ThreeLetterCode = "sid")] + Sidamo, + + [Language(LongName = "Sign Languages", ThreeLetterCode = "sgn")] + SignLanguages, + + [Language(LongName = "Siksika", ThreeLetterCode = "bla")] + Siksika, + + [Language(LongName = "Sindhi", TwoLetterCode = "sd", ThreeLetterCode = "snd")] + Sindhi, + + [Language(LongName = "Sinhala; Sinhalese", TwoLetterCode = "si", ThreeLetterCode = "sin")] + Sinhala, + + [Language(LongName = "Skolt Sami", ThreeLetterCode = "sms")] + SkoltSami, + + [Language(LongName = "Slovak", TwoLetterCode = "sk", ThreeLetterCode = "slo", ThreeLetterCodeAlt = "slk")] Slovak, - [HumanReadable(LongName = "Slovenian", ShortName = "slv")] + [Language(LongName = "Slovenian", TwoLetterCode = "sl", ThreeLetterCode = "slv")] Slovenian, - [HumanReadable(LongName = "Spanish", ShortName = "spa")] + [Language(LongName = "Sogdian", ThreeLetterCode = "sog")] + Sogdian, + + [Language(LongName = "Somali", TwoLetterCode = "so", ThreeLetterCode = "som")] + Somali, + + [Language(LongName = "Soninke", ThreeLetterCode = "snk")] + Soninke, + + [Language(LongName = "Sotho, Southern", TwoLetterCode = "st", ThreeLetterCode = "sot")] + Sotho, + + [Language(LongName = "South Ndebele", TwoLetterCode = "nr", ThreeLetterCode = "nbl")] + SouthNdebele, + + [Language(LongName = "Southern Altai", ThreeLetterCode = "alt")] + SouthernAltai, + + [Language(LongName = "Southern Sami", ThreeLetterCode = "sma")] + SouthernSami, + + [Language(LongName = "Spanish; Castilian", TwoLetterCode = "es", ThreeLetterCode = "spa")] Spanish, - [HumanReadable(LongName = "Swedish", ShortName = "swe")] + [Language(LongName = "Sranan Tongo", ThreeLetterCode = "srn")] + SrananTongo, + + [Language(LongName = "Standard Moroccan Tamazight", ThreeLetterCode = "zgh")] + StandardMoroccanTamazight, + + [Language(LongName = "Sukuma", ThreeLetterCode = "suk")] + Sukuma, + + [Language(LongName = "Sumerian", ThreeLetterCode = "sux")] + Sumerian, + + [Language(LongName = "Sundanese", TwoLetterCode = "su", ThreeLetterCode = "sun")] + Sundanese, + + [Language(LongName = "Susu", ThreeLetterCode = "sus")] + Susu, + + [Language(LongName = "Susu", TwoLetterCode = "sw", ThreeLetterCode = "swa")] + Swahili, + + [Language(LongName = "Swatio", TwoLetterCode = "ss", ThreeLetterCode = "ssw")] + Swati, + + [Language(LongName = "Swedish", TwoLetterCode = "sv", ThreeLetterCode = "swe")] Swedish, - [HumanReadable(LongName = "Tamil", ShortName = "tam")] + [Language(LongName = "Swiss German; Alemannic; Alsatian", ThreeLetterCode = "gsw")] + SwissGerman, + + [Language(LongName = "Syriac", ThreeLetterCode = "syr")] + Syriac, + + [Language(LongName = "Syriac, Classical", ThreeLetterCode = "syc")] + ClassicalSyriac, + + #endregion + + #region T + + [Language(LongName = "Tagalog", TwoLetterCode = "tl", ThreeLetterCode = "tgl")] + Tagalog, + + [Language(LongName = "Tahitian", TwoLetterCode = "ty", ThreeLetterCode = "tah")] + Tahitian, + + [Language(LongName = "Tajik", TwoLetterCode = "tg", ThreeLetterCode = "tgk")] + Tajik, + + [Language(LongName = "Tamashek", ThreeLetterCode = "tmh")] + Tamashek, + + [Language(LongName = "Tamil", TwoLetterCode = "ta", ThreeLetterCode = "tam")] Tamil, - [HumanReadable(LongName = "Thai", ShortName = "tha")] + [Language(LongName = "Tatar", TwoLetterCode = "tt", ThreeLetterCode = "tat")] + Tatar, + + [Language(LongName = "Telugu", TwoLetterCode = "te", ThreeLetterCode = "tel")] + Telugu, + + [Language(LongName = "Tereno", ThreeLetterCode = "ter")] + Tereno, + + [Language(LongName = "Tetum", ThreeLetterCode = "tet")] + Tetum, + + [Language(LongName = "Thai", TwoLetterCode = "th", ThreeLetterCode = "tha")] Thai, - [HumanReadable(LongName = "Turkish", ShortName = "tur")] + [Language(LongName = "Tibetan", TwoLetterCode = "bo", ThreeLetterCode = "tib", ThreeLetterCodeAlt = "bod")] + Tibetan, + + [Language(LongName = "Tigre", ThreeLetterCode = "tig")] + Tigre, + + [Language(LongName = "Tigrinya", TwoLetterCode = "ti", ThreeLetterCode = "tir")] + Tigrinya, + + [Language(LongName = "Timne", ThreeLetterCode = "tem")] + Timne, + + [Language(LongName = "Tiv", ThreeLetterCode = "tiv")] + Tiv, + + [Language(LongName = "Tlingit", ThreeLetterCode = "tli")] + Tlingit, + + [Language(LongName = "Tok Pisin", ThreeLetterCode = "tpi")] + TokPisin, + + [Language(LongName = "Tokelau", ThreeLetterCode = "tkl")] + Tokelau, + + [Language(LongName = "Tonga (Nyasa)", ThreeLetterCode = "tog")] + TongaNyasa, + + [Language(LongName = "Tonga (Tonga Islands)", TwoLetterCode = "to", ThreeLetterCode = "ton")] + TongaIslands, + + [Language(LongName = "Tsimshian", ThreeLetterCode = "tsi")] + Tsimshian, + + [Language(LongName = "Tsonga", TwoLetterCode = "ts", ThreeLetterCode = "tso")] + Tsonga, + + [Language(LongName = "Tswana", TwoLetterCode = "tn", ThreeLetterCode = "tsn")] + Tswana, + + [Language(LongName = "Tumbuka", ThreeLetterCode = "tum")] + Tumbuka, + + [Language(LongName = "Turkish", TwoLetterCode = "tr", ThreeLetterCode = "tur")] Turkish, - [HumanReadable(LongName = "Ukrainian", ShortName = "ukr")] + [Language(LongName = "Turkish, Ottoman (1500-1928)", ThreeLetterCode = "ota")] + OttomanTurkish, + + [Language(LongName = "Turkmen", TwoLetterCode = "tk", ThreeLetterCode = "tuk")] + Turkmen, + + [Language(LongName = "Tuvalu", ThreeLetterCode = "tvl")] + Tuvalu, + + [Language(LongName = "Tuvinian", ThreeLetterCode = "tyv")] + Tuvinian, + + [Language(LongName = "Twi", TwoLetterCode = "tw", ThreeLetterCode = "twi")] + Twi, + + #endregion + + #region U + + [Language(LongName = "Udmurt", ThreeLetterCode = "udm")] + Udmurt, + + [Language(LongName = "Ugaritic", ThreeLetterCode = "uga")] + Ugaritic, + + [Language(LongName = "Uighur; Uyghur", TwoLetterCode = "ug", ThreeLetterCode = "uig")] + Uighur, + + [Language(LongName = "Ukrainian", TwoLetterCode = "uk", ThreeLetterCode = "ukr")] Ukrainian, - [HumanReadable(LongName = "Vietnamese", ShortName = "vie")] + [Language(LongName = "Umbundu", ThreeLetterCode = "umb")] + Umbundu, + + // Commented out to avoid confusion + //[Language(LongName = "Undetermined", ThreeLetterCode = "und")] + //Undetermined, + + [Language(LongName = "Upper Sorbian", ThreeLetterCode = "hsb")] + UpperSorbian, + + [Language(LongName = "Urdu", TwoLetterCode = "ur", ThreeLetterCode = "urd")] + Urdu, + + [Language(LongName = "Uzbek", TwoLetterCode = "uz", ThreeLetterCode = "uzb")] + Uzbek, + + #endregion + + #region V + + [Language(LongName = "Vai", ThreeLetterCode = "vai")] + Vai, + + [Language(LongName = "Venda", TwoLetterCode = "ve", ThreeLetterCode = "ven")] + Venda, + + [Language(LongName = "Vietnamese", TwoLetterCode = "vi", ThreeLetterCode = "vie")] Vietnamese, + + [Language(LongName = "Volapük", TwoLetterCode = "vo", ThreeLetterCode = "vol")] + Volapuk, + + [Language(LongName = "Votic", ThreeLetterCode = "vot")] + Votic, + + #endregion + + #region W + + [Language(LongName = "Walloon", TwoLetterCode = "wa", ThreeLetterCode = "wln")] + Walloon, + + [Language(LongName = "Waray", ThreeLetterCode = "war")] + Waray, + + [Language(LongName = "Washo", ThreeLetterCode = "was")] + Washo, + + [Language(LongName = "Welsh", TwoLetterCode = "cy", ThreeLetterCode = "wel", ThreeLetterCodeAlt = "cym")] + Welsh, + + [Language(LongName = "Western Frisian", TwoLetterCode = "fy", ThreeLetterCode = "fry")] + WesternFrisian, + + [Language(LongName = "Wolaitta; Wolaytta", ThreeLetterCode = "wal")] + Wolaitta, + + [Language(LongName = "Wolof", TwoLetterCode = "wo", ThreeLetterCode = "wol")] + Wolof, + + #endregion + + #region X + + [Language(LongName = "Xhosa", TwoLetterCode = "xh", ThreeLetterCode = "xho")] + Xhosa, + + #endregion + + #region Y + + [Language(LongName = "Yakut", ThreeLetterCode = "sah")] + Yakut, + + [Language(LongName = "Yao", ThreeLetterCode = "yao")] + Yao, + + [Language(LongName = "Yapese", ThreeLetterCode = "yap")] + Yapese, + + [Language(LongName = "Yiddish", TwoLetterCode = "yi", ThreeLetterCode = "yid")] + Yiddish, + + [Language(LongName = "Yoruba", TwoLetterCode = "yo", ThreeLetterCode = "yor")] + Yoruba, + + #endregion + + #region Z + + [Language(LongName = "Zapotec", ThreeLetterCode = "zap")] + Zapotec, + + //Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki + [Language(LongName = "Zaza", ThreeLetterCode = "zza")] + Zaza, + + [Language(LongName = "Zenaga", ThreeLetterCode = "zen")] + Zenaga, + + [Language(LongName = "Zhuang; Chuang", TwoLetterCode = "za", ThreeLetterCode = "zha")] + Zhuang, + + [Language(LongName = "Zulu", TwoLetterCode = "zu", ThreeLetterCode = "zul")] + Zulu, + + [Language(LongName = "Zuni", ThreeLetterCode = "zun")] + Zuni, + + #endregion + + #region Language Families + + /* + [Language(LongName = "Afro-Asiatic languages", ThreeLetterCode = "afa")] + AfroAsiaticLanguages, + + [Language(LongName = "Algonquian languages", ThreeLetterCode = "alg")] + AlgonquianLanguages, + + [Language(LongName = "Altaic languages", ThreeLetterCode = "tut")] + AltaicLanguages, + + [Language(LongName = "Apache languages", ThreeLetterCode = "apa")] + ApacheLanguages, + + [Language(LongName = "Artificial languages", ThreeLetterCode = "art")] + ArtificialLanguages, + + [Language(LongName = "Athapascan languages", ThreeLetterCode = "ath")] + AthapascanLanguages, + + [Language(LongName = "Australian languages", ThreeLetterCode = "aus")] + AustralianLanguages, + + [Language(LongName = "Austronesian languages", ThreeLetterCode = "map")] + AustronesianLanguages, + + [Language(LongName = "Baltic languages", ThreeLetterCode = "bat")] + BalticLanguages, + + [Language(LongName = "Bamileke languages", ThreeLetterCode = "bai")] + BamilekeLanguages, + + [Language(LongName = "Banda languages", ThreeLetterCode = "bad")] + BandaLanguages, + + [Language(LongName = "Bantu languages", ThreeLetterCode = "bnt")] + BantuLanguages, + + [Language(LongName = "Batak languages", ThreeLetterCode = "btk")] + BatakLanguages, + + [Language(LongName = "Berber languages", ThreeLetterCode = "ber")] + BerberLanguages, + + [Language(LongName = "Bihari languages", TwoLetterCode = "bh", ThreeLetterCode = "bih")] + BihariLanguages, + + [Language(LongName = "Caucasian languages", ThreeLetterCode = "cau")] + CaucasianLanguages, + + [Language(LongName = "Celtic languages", ThreeLetterCode = "cel")] + CelticLanguages, + + [Language(LongName = "Central American Indian languages", ThreeLetterCode = "cai")] + CentralAmericanIndianLanguages, + + [Language(LongName = "Chamic languages", ThreeLetterCode = "cmc")] + ChamicLanguages, + + [Language(LongName = "Cushitic languages", ThreeLetterCode = "cus")] + CushiticLanguages, + + [Language(LongName = "Dravidian languages", ThreeLetterCode = "dra")] + DravidianLanguages, + + [Language(LongName = "Finno-Ugrian languages", ThreeLetterCode = "fiu")] + FinnoUgrianLanguages, + + [Language(LongName = "Germanic languages", ThreeLetterCode = "gem")] + GermanicLanguages, + + [Language(LongName = "Himachali languages; Western Pahari languages", ThreeLetterCode = "him")] + HimachaliLanguages, + + [Language(LongName = "Ijo languages", ThreeLetterCode = "ijo")] + IjoLanguages, + + [Language(LongName = "Indic languages", ThreeLetterCode = "inc")] + IndicLanguages, + + [Language(LongName = "Indo-European languages", ThreeLetterCode = "ine")] + IndoEuropeanLanguages, + + [Language(LongName = "Iranian languages", ThreeLetterCode = "ira")] + IranianLanguages, + + [Language(LongName = "Iroquoian languages", ThreeLetterCode = "iro")] + IroquoianLanguages, + + [Language(LongName = "Karen languages", ThreeLetterCode = "kar")] + KarenLanguages, + + [Language(LongName = "Khoisan languages", ThreeLetterCode = "khi")] + KhoisanLanguages, + + [Language(LongName = "Kru languages", ThreeLetterCode = "kro")] + KruLanguages, + + [Language(LongName = "Land Dayak languages", ThreeLetterCode = "day")] + LandDayakLanguages, + + [Language(LongName = "Manobo languages", ThreeLetterCode = "mno")] + ManoboLanguages, + + [Language(LongName = "Mayan languages", ThreeLetterCode = "myn")] + MayanLanguages, + + [Language(LongName = "Mon-Khmer languages", ThreeLetterCode = "mkh")] + MonKhmerLanguages, + + // Commented out to avoid confusion + //[Language(LongName = "Multiple languages", ThreeLetterCode = "mul")] + //MultipleLanguages, + + [Language(LongName = "Munda languages", ThreeLetterCode = "mun")] + MundaLanguages, + + [Language(LongName = "Nahuatl languages", ThreeLetterCode = "nah")] + NahuatlLanguages, + + [Language(LongName = "Niger-Kordofanian languages", ThreeLetterCode = "nic")] + NigerKordofanianLanguages, + + [Language(LongName = "Nilo-Saharan languages", ThreeLetterCode = "ssa")] + NiloSaharanLanguages, + + [Language(LongName = "North American Indian languages", ThreeLetterCode = "nai")] + NorthAmericanIndianLanguages, + + [Language(LongName = "Nubian languages", ThreeLetterCode = "nub")] + NubianLanguages, + + [Language(LongName = "Otomian languages", ThreeLetterCode = "oto")] + OtomianLanguages, + + [Language(LongName = "Papuan languages", ThreeLetterCode = "paa")] + PapuanLanguages, + + [Language(LongName = "Philippine languages", ThreeLetterCode = "phi")] + PhilippineLanguages, + + [Language(LongName = "Prakrit languages", ThreeLetterCode = "pra")] + PrakritLanguages, + + [Language(LongName = "Romance languages", ThreeLetterCode = "roa")] + RomanceLanguages, + + [Language(LongName = "Salishan languages", ThreeLetterCode = "sal")] + SalishanLanguages, + + [Language(LongName = "Sami languages", ThreeLetterCode = "smi")] + SamiLanguages, + + [Language(LongName = "Semitic languages", ThreeLetterCode = "sem")] + SemiticLanguages, + + [Language(LongName = "Sino-Tibetan languages", ThreeLetterCode = "sit")] + SinoTibetanLanguages, + + [Language(LongName = "Siouan languages", ThreeLetterCode = "sio")] + SiouanLanguages, + + [Language(LongName = "Slavic languages", ThreeLetterCode = "sla")] + SlavicLanguages, + + [Language(LongName = "Songhai languages", ThreeLetterCode = "son")] + SonghaiLanguages, + + [Language(LongName = "Sorbian languages", ThreeLetterCode = "wen")] + SorbianLanguages, + + [Language(LongName = "South American Indian languages", ThreeLetterCode = "sai")] + SouthAmericanIndianLanguages, + + [Language(LongName = "Tai languages", ThreeLetterCode = "tai")] + TaiLanguages, + + [Language(LongName = "Tupi languages", ThreeLetterCode = "tup")] + TupiLanguages, + + [Language(LongName = "Uncoded languages", ThreeLetterCode = "mis")] + UncodedLanguages, + + [Language(LongName = "Wakashan languages", ThreeLetterCode = "wak")] + WakashanLanguages, + + [Language(LongName = "Yupik languages", ThreeLetterCode = "ypk")] + YupikLanguages, + + [Language(LongName = "Zande languages", ThreeLetterCode = "znd")] + ZandeLanguages, + */ + + #endregion } /// diff --git a/RedumpLib/Data/Extensions.cs b/RedumpLib/Data/Extensions.cs index 13e59a29..4e616cff 100644 --- a/RedumpLib/Data/Extensions.cs +++ b/RedumpLib/Data/Extensions.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using RedumpLib.Attributes; namespace RedumpLib.Data @@ -909,7 +911,23 @@ namespace RedumpLib.Data /// /// /// - public static string ShortName(this Language? language) => AttributeHelper.GetAttribute(language)?.ShortName; + public static string ShortName(this Language? language) + { + // Some languages need to use the alternate code instead + switch (language) + { + case Language.Albanian: + case Language.Armenian: + case Language.Icelandic: + case Language.Macedonian: + case Language.Romanian: + case Language.Slovak: + return language.ThreeLetterCodeAlt(); + + default: + return language.ThreeLetterCode(); + } + } /// /// Get the Language enum value for a given string @@ -918,109 +936,56 @@ namespace RedumpLib.Data /// Language represented by the string, if possible public static Language? ToLanguage(string lang) { - switch (lang) - { - case "afr": - return Language.Afrikaans; - case "sqi": - return Language.Albanian; - case "ara": - return Language.Arabic; - case "hye": - return Language.Armenian; - case "baq": - return Language.Basque; - case "bel": - return Language.Belarusian; - case "bul": - return Language.Bulgarian; - case "cat": - return Language.Catalan; - case "chi": - return Language.Chinese; - case "hrv": - return Language.Croatian; - case "cze": - return Language.Czech; - case "dan": - return Language.Danish; - case "dut": - return Language.Dutch; - case "eng": - return Language.English; - case "est": - return Language.Estonian; - case "fin": - return Language.Finnish; - case "fre": - return Language.French; - case "gla": - return Language.Gaelic; - case "ger": - return Language.German; - case "gre": - return Language.Greek; - case "heb": - return Language.Hebrew; - case "hin": - return Language.Hindi; - case "hun": - return Language.Hungarian; - case "isl": - return Language.Icelandic; - case "ind": - return Language.Indonesian; - case "ita": - return Language.Italian; - case "jap": - return Language.Japanese; - case "kor": - return Language.Korean; - case "lat": - return Language.Latin; - case "lav": - return Language.Latvian; - case "lit": - return Language.Lithuanian; - case "mkd": - return Language.Macedonian; - case "nor": - return Language.Norwegian; - case "pol": - return Language.Polish; - case "por": - return Language.Portuguese; - case "pan": - return Language.Punjabi; - case "ron": - return Language.Romanian; - case "rus": - return Language.Russian; - case "srp": - return Language.Serbian; - case "slk": - return Language.Slovak; - case "slv": - return Language.Slovenian; - case "spa": - return Language.Spanish; - case "swe": - return Language.Swedish; - case "tam": - return Language.Tamil; - case "tha": - return Language.Thai; - case "tur": - return Language.Turkish; - case "ukr": - return Language.Ukrainian; - case "vie": - return Language.Vietnamese; - default: - return null; - } + var languages = Enum.GetValues(typeof(Language)).Cast().ToList(); + + // Check ISO 639-1 codes + Dictionary languageMapping = languages + .Where(l => l.TwoLetterCode() != null) + .ToDictionary(l => l.TwoLetterCode(), l => l); + + if (languageMapping.ContainsKey(lang)) + return languageMapping[lang]; + + // Check standard ISO 639-2 codes + languageMapping = languages + .Where(l => l.ThreeLetterCode() != null) + .ToDictionary(l => l.ThreeLetterCode(), l => l); + + if (languageMapping.ContainsKey(lang)) + return languageMapping[lang]; + + // Check alternate ISO 639-2 codes + languageMapping = languages + .Where(l => l.ThreeLetterCodeAlt() != null) + .ToDictionary(l => l.ThreeLetterCodeAlt(), l => l); + + if (languageMapping.ContainsKey(lang)) + return languageMapping[lang]; + + return null; } + /// + /// Get the ISO 639-2 code for each known language + /// + /// + /// + private static string ThreeLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCode; + + /// + /// Get the ISO 639-2 alternate code for each known language + /// + /// + /// + private static string ThreeLetterCodeAlt(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCodeAlt; + + /// + /// Get the ISO 639-1 code for each known language + /// + /// + /// + private static string TwoLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.TwoLetterCode; + #endregion #region Language Selection