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