package com.tinesoft.droidlinguist.server.controller; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.text.WordUtils; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.tinesoft.droidlinguist.server.json.Language; @Controller @RequestMapping(value = "/api/language") public class LanguageController { // taken from https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1 // current total of active language 184/186 private static final List<Language> LANGUAGES = Arrays.asList(// new Language("aa", "Afar", "Afaraf"),// new Language("ab", "Abkhazian", "Аҧсуа"),// new Language("ae", "Avestan", "Avesta"),// new Language("af", "Afrikaans", "Afrikaans"),// new Language("ak", "Akan", "Akan"),// new Language("am", "Amharic", "አማርኛ"),// new Language("an", "Aragonese", "Aragonés"),// new Language("ar", "Arabic", "‫العربية"),// new Language("as", "Assamese", "অসমীয়া"),// new Language("av", "Avaric", "Авар МацӀ "),// new Language("ay", "Aymara", "Aymar Aru"),// new Language("az", "Azerbaijani", "Azərbaycan Dili"),// new Language("ba", "Bashkir", "Башҡорт Теле"),// new Language("be", "Belarusian", "Беларуская"),// new Language("bg", "Bulgarian", "Български Език"),// new Language("bh", "Bihari", "भोजपुरी"),// new Language("bi", "Bislama", "Bislama"),// new Language("bm", "Bambara", "Bamanankan"),// new Language("bn", "Bengali", "বাংলা"),// new Language("bo", "Tibetan", "བོད་ཡིག"),// new Language("br", "Breton", "Brezhoneg"),// new Language("bs", "Bosnian", "Bosanski Jezik"),// new Language("ca", "Catalan", "Català"),// new Language("ce", "Chechen", "Нохчийн Мотт"),// new Language("ch", "Chamorro", "Chamoru"),// new Language("co", "Corsican", "Corsu "),// new Language("cr", "Cree", "ᓀᐦᐃᔭᐍᐏᐣ"),// new Language("cs", "Czech", "Česky "),// new Language("cu", "Old Church Slavonic", "Словѣньскъ"),// new Language("cv", "Chuvash", "Чӑваш Чӗлхи"),// new Language("cy", "Welsh", "Cymraeg"),// new Language("da", "Danish", "Dansk"),// new Language("de", "German", "Deutsch"),// new Language("dv", "Divehi", "‫ދިވެހި"),// new Language("dz", "Dzongkha", "རྫོང་ཁ"),// new Language("ee", "Ewe", "Ɛʋɛgbɛ"),// new Language("el", "Greek", "Ελληνικά"),// new Language("en", "English", "English"),// new Language("eo", "Esperanto", "Esperanto"),// new Language("es", "Spanish", "Español"),// new Language("et", "Estonian", "Eesti Keel"),// new Language("eu", "Basque", "Euskara"),// new Language("fa", "Persian", "‫فارسی"),// new Language("ff", "Fulah", "Fulfulde"),// new Language("fi", "Finnish", "Suomen Kieli"),// new Language("fj", "Fijian", "Vosa Vakaviti"),// new Language("fo", "Faroese", "Føroyskt"),// new Language("fr", "French", "Français "),// new Language("fy", "Western Frisian", "Frysk"),// new Language("ga", "Irish", "Gaeilge"),// new Language("gd", "Scottish Gaelic", "Gàidhlig"),// new Language("gl", "Galician", "Galego"),// new Language("gn", "Guarani", "Avañe'ẽ"),// new Language("gu", "Gujarati", "ગુજરાતી"),// new Language("gv", "Manx", "Ghaelg"),// new Language("ha", "Hausa", "‫هَوُسَ"),// new Language("he", "Hebrew", "‫עברית"),// new Language("hi", "Hindi", "हिन्दी "),// new Language("ho", "Hiri Motu", "Hiri Motu"),// new Language("hr", "Croatian", "Hrvatski"),// new Language("ht", "Haitian", "Kreyòl Ayisyen"),// new Language("hu", "Hungarian", "Magyar"),// new Language("hy", "Armenian", "Հայերեն"),// new Language("hz", "Herero", "Otjiherero"),// new Language("ia", "Interlingua", "Interlingua"),// new Language("id", "Indonesian", "Bahasa Indonesia"),// new Language("ie", "Interlingue", "Interlingue"),// new Language("ig", "Igbo", "Igbo"),// new Language("ii", "Sichuan Yi", "ꆇꉙ"),// new Language("ik", "Inupiaq", "Iñupiaq "),// new Language("io", "Ido", "Ido"),// new Language("is", "Icelandic", "Íslenska"),// new Language("it", "Italian", "Italiano"),// new Language("iu", "Inuktitut", "ᐃᓄᒃᑎᑐᑦ"),// new Language("ja", "Japanese", "日本語 (にほんご)"),// new Language("jv", "Javanese", "Basa Jawa"),// new Language("ka", "Georgian", "ქართული"),// new Language("kg", "Kongo", "KiKongo"),// new Language("ki", "Kikuyu", "Gĩkũyũ"),// new Language("kj", "Kwanyama", "Kuanyama"),// new Language("kk", "Kazakh", "Қазақ Тілі"),// new Language("kl", "Kalaallisut", "Kalaallisut "),// new Language("km", "Khmer", "ភាសាខ្មែរ"),// new Language("kn", "Kannada", "ಕನ್ನಡ"),// new Language("ko", "Korean", "한국어 (韓國語) "),// new Language("kr", "Kanuri", "Kanuri"),// new Language("ks", "Kashmiri", "कश्मीरी "),// new Language("ku", "Kurdish", "Kurdî "),// new Language("kv", "Komi", "Коми Кыв"),// new Language("kw", "Cornish", "Kernewek"),// new Language("ky", "Kirghiz", "Кыргыз Тили"),// new Language("la", "Latin", "Latine "),// new Language("lb", "Luxembourgish", "Lëtzebuergesch"),// new Language("lg", "Ganda", "Luganda"),// new Language("li", "Limburgish", "Limburgs"),// new Language("ln", "Lingala", "Lingála"),// new Language("lo", "Lao", "ພາສາລາວ"),// new Language("lt", "Lithuanian", "Lietuvių Kalba"),// new Language("lu", "Luba-Katanga", "Kiluba"),// new Language("lv", "Latvian", "Latviešu Valoda"),// new Language("mg", "Malagasy", "Fiteny Malagasy"),// new Language("mh", "Marshallese", "Kajin M̧ajeļ"),// new Language("mi", "Māori", "Te Reo Māori"),// new Language("mk", "Macedonian", "Македонски Јазик"),// new Language("ml", "Malayalam", "മലയാളം"),// new Language("mn", "Mongolian", "Монгол"),// new Language("mo", "Moldavian", "Лимба Молдовеняскэ"),// new Language("mr", "Marathi", "मराठी"),// new Language("ms", "Malay", "Bahasa Melayu "),// new Language("mt", "Maltese", "Malti"),// new Language("my", "Burmese", "ဗမာစာ"),// new Language("na", "Nauru", "Ekakairũ Naoero"),// new Language("nb", "Norwegian Bokmål", "Norsk Bokmål"),// new Language("nd", "North Ndebele", "IsiNdebele"),// new Language("ne", "Nepali", "नेपाली"),// new Language("ng", "Ndonga", "Owambo"),// new Language("nl", "Dutch", "Nederlands"),// new Language("nn", "Norwegian Nynorsk", "Norsk Nynorsk"),// new Language("no", "Norwegian", "Norsk"),// new Language("nr", "South Ndebele", "Ndébélé"),// new Language("nv", "Navajo", "Diné Bizaad "),// new Language("ny", "Chichewa", "ChiCheŵa "),// new Language("oc", "Occitan", "Occitan"),// new Language("oj", "Ojibwa", "ᐊᓂᔑᓈᐯᒧᐎᓐ"),// new Language("om", "Oromo", "Afaan Oromoo"),// new Language("or", "Oriya", "ଓଡ଼ିଆ"),// new Language("os", "Ossetian", "Ирон Æвзаг"),// new Language("pa", "Panjabi", "ਪੰਜਾਬੀ "),// new Language("pi", "Pāli", "पािऴ"),// new Language("pl", "Polish", "Polski"),// new Language("ps", "Pashto", "‫پښتو"),// new Language("pt", "Portuguese", "Português"),// new Language("qu", "Quechua", "Runa Simi "),// new Language("rm", "Romansh", "Rumantsch Grischun"),// new Language("rn", "Kirundi", "KiRundi"),// new Language("ro", "Romanian", "Română"),// new Language("ru", "Russian", "Русский Язык"),// new Language("rw", "Kinyarwanda", "Kinyarwanda"),// new Language("sa", "Sanskrit", "संस्कृतम्"),// new Language("sc", "Sardinian", "Sardu"),// new Language("sd", "Sindhi", "सिन्धी "),// new Language("se", "Northern Sami", "Davvisámegiella"),// new Language("sg", "Sango", "Yângâ Tî Sängö"),// // FIXME tko: no name new Language("sh", "", ""),// new Language("si", "Sinhalese", "සිංහල"),// new Language("sk", "Slovak", "Slovenčina"),// new Language("sl", "Slovene", "Slovenščina"),// new Language("sm", "Samoan", "Gagana Fa'a Samoa"),// new Language("sn", "Shona", "ChiShona"),// new Language("so", "Somali", "Soomaaliga "),// new Language("sq", "Albanian", "Shqip"),// new Language("sr", "Serbian", "Српски Језик"),// new Language("ss", "Swati", "SiSwati"),// new Language("st", "Sotho", "SeSotho"),// new Language("su", "Sundanese", "Basa Sunda"),// new Language("sv", "Swedish", "Svenska"),// new Language("sw", "Swahili", "Kiswahili"),// new Language("ta", "Tamil", "தமிழ்"),// new Language("te", "Telugu", "తెలుగు"),// new Language("tg", "Tajik", "Тоҷикӣ "),// new Language("th", "Thai", "ไทย"),// new Language("ti", "Tigrinya", "ትግርኛ"),// new Language("tk", "Turkmen", "Türkmen "),// new Language("tl", "Tagalog", "Tagalog"),// new Language("tn", "Tswana", "SeTswana"),// new Language("to", "Tonga", "Faka Tonga"),// new Language("tr", "Turkish", "Türkçe"),// new Language("ts", "Tsonga", "XiTsonga"),// new Language("tt", "Tatar", "Татарча "),// new Language("tw", "Twi", "Twi"),// new Language("ty", "Tahitian", "Reo Mā`ohi"),// new Language("ug", "Uighur", "Uyƣurqə "),// new Language("uk", "Ukrainian", "Українська Мова"),// new Language("ur", "Urdu", "‫اردو"),// new Language("uz", "Uzbek", "O'zbek "),// new Language("ve", "Venda", "TshiVenḓa"),// new Language("vi", "Viêt Namese", "Tiếng Việt"),// new Language("vo", "Volapük", "Volapük"),// new Language("wa", "Walloon", "Walon"),// new Language("wo", "Wolof", "Wollof"),// new Language("xh", "Xhosa", "IsiXhosa"),// // FIXME TKO: encoding new Language("yi", "Yiddish", "‫ייִדיש"),// new Language("yo", "Yoruba", "Yorùbá"),// new Language("za", "Zhuang", "Saɯ Cueŋƅ "),// new Language("zh", "Chinese", "中文"),// new Language("zu", "Zulu", "IsiZulu")// ); public static final void main(String[] args) { LANGUAGES.stream().forEach(l -> { System.out.println("new Language(\"" + l.getCode() + "\", \"" + // WordUtils.capitalize(l.getNativeName()).split("[,;]")[0] + "\", \"" + // WordUtils.capitalize(l.getName()).split("[,;]")[0] + "\"),//"); }); } private static final Map<String, String> LANGUAGE_COUNTRY_MAP = new HashMap<>(); static { LANGUAGE_COUNTRY_MAP.put("ar", "mc"); LANGUAGE_COUNTRY_MAP.put("bg", "bg"); LANGUAGE_COUNTRY_MAP.put("cs", "cz"); LANGUAGE_COUNTRY_MAP.put("da", "dk"); LANGUAGE_COUNTRY_MAP.put("de", "de"); LANGUAGE_COUNTRY_MAP.put("el", "gr"); LANGUAGE_COUNTRY_MAP.put("en", "gb"); LANGUAGE_COUNTRY_MAP.put("es", "es"); LANGUAGE_COUNTRY_MAP.put("et", "ee"); LANGUAGE_COUNTRY_MAP.put("fi", "fi"); LANGUAGE_COUNTRY_MAP.put("fr", "fr"); LANGUAGE_COUNTRY_MAP.put("hu", "hu"); LANGUAGE_COUNTRY_MAP.put("he", "he"); LANGUAGE_COUNTRY_MAP.put("is", "is"); LANGUAGE_COUNTRY_MAP.put("it", "it"); LANGUAGE_COUNTRY_MAP.put("ja", "jp"); LANGUAGE_COUNTRY_MAP.put("ko", "ko"); LANGUAGE_COUNTRY_MAP.put("nl", "nl"); LANGUAGE_COUNTRY_MAP.put("no", "no"); LANGUAGE_COUNTRY_MAP.put("pl", "pl"); LANGUAGE_COUNTRY_MAP.put("pt", "pt"); LANGUAGE_COUNTRY_MAP.put("ro", "ro"); LANGUAGE_COUNTRY_MAP.put("ru", "ru"); LANGUAGE_COUNTRY_MAP.put("sk", "sk"); LANGUAGE_COUNTRY_MAP.put("sl", "si"); LANGUAGE_COUNTRY_MAP.put("sq", "al"); LANGUAGE_COUNTRY_MAP.put("sv", "se"); LANGUAGE_COUNTRY_MAP.put("zh", "cn"); } @RequestMapping(value = "/all", // method = RequestMethod.GET, // produces = { MediaType.APPLICATION_JSON_VALUE }) public @ResponseBody List<Language> getLanguages() { return LANGUAGES; } @RequestMapping(value = "/country", // method = RequestMethod.GET, // produces = MediaType.TEXT_PLAIN_VALUE) public @ResponseBody String getLanguageCountryCode(@RequestParam("langCode") String langCode) { return LANGUAGE_COUNTRY_MAP.getOrDefault(langCode, "xx"); } }