From: thadh Date: Sun, 22 Jul 2012 01:43:48 +0000 (-0700) Subject: Refactor code to generate dictionaries to make it all one loop! X-Git-Url: http://gitweb.fperrin.net/?p=DictionaryPC.git;a=commitdiff_plain;h=4d8a2efb83009dbcca069fe9cac7b8e7d2f72161 Refactor code to generate dictionaries to make it all one loop! --- diff --git a/src/com/hughes/android/dictionary/engine/CheckDictionariesMain.java b/src/com/hughes/android/dictionary/engine/CheckDictionariesMain.java index e4d5c0c..3beb2ba 100644 --- a/src/com/hughes/android/dictionary/engine/CheckDictionariesMain.java +++ b/src/com/hughes/android/dictionary/engine/CheckDictionariesMain.java @@ -56,8 +56,8 @@ public class CheckDictionariesMain { // Find the stats. System.out.println("Stats..."); - final String lang1 = WiktionaryLangs.isoCodeToWikiName.get(dictionaryInfo.indexInfos.get(0).shortName); - final String lang2 = WiktionaryLangs.isoCodeToWikiName.get(dictionaryInfo.indexInfos.get(1).shortName); + final String lang1 = WiktionaryLangs.isoCodeToEnWikiName.get(dictionaryInfo.indexInfos.get(0).shortName); + final String lang2 = WiktionaryLangs.isoCodeToEnWikiName.get(dictionaryInfo.indexInfos.get(1).shortName); dictNames.add(String.format("%s-%s\n", lang1, lang2)); final String row = dictionaryInfo.append(new StringBuilder()).toString(); if (!zipFile.canRead()) { diff --git a/src/com/hughes/android/dictionary/engine/DictionaryBuilderMain.java b/src/com/hughes/android/dictionary/engine/DictionaryBuilderMain.java index db5c757..c17ebec 100644 --- a/src/com/hughes/android/dictionary/engine/DictionaryBuilderMain.java +++ b/src/com/hughes/android/dictionary/engine/DictionaryBuilderMain.java @@ -14,6 +14,7 @@ package com.hughes.android.dictionary.engine; +import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -31,47 +32,128 @@ public class DictionaryBuilderMain extends TestCase { static final String INPUTS = "data/inputs/"; static final String STOPLISTS = "data/inputs/stoplists/"; static final String OUTPUTS = "data/outputs/"; + + + static final Map isoToDedication = new LinkedHashMap(); + static { + isoToDedication.put("AF", "Afrikaans dictionary dedicated to Heiko and Mariëtte Horn."); + isoToDedication.put("HR", "Croatian dictionary dedicated to Ines Viskic and Miro Kresonja."); + isoToDedication.put("NL", "Dutch dictionary dedicated to Mike LeBeau."); + // German handled in file. + isoToDedication.put("EL", "Greek dictionary dedicated to Noah Egge."); + isoToDedication.put("IT", "Italian dictionary dedicated to Carolina Tropini, my favorite stardust in the whole universe! Ti amo!"); + isoToDedication.put("KO", "Korean dictionary dedicated to Ande Elwood--fall fashion und Fernsehturms!"); + isoToDedication.put("PT", "Portuguese dictionary dedicated to Carlos Melo, one Tough Mudder."); + isoToDedication.put("RO", "Romanian dictionary dedicated to Radu Teodorescu."); + isoToDedication.put("RU", "Russian dictionary dedicated to Maxim Aronin--best friend always!."); + isoToDedication.put("SR", "Serbian dictionary dedicated to Filip Crnogorac--thanks for the honey."); + isoToDedication.put("ES", "Spanish dictionary made especially for Carolina Tropini! <3 XoXoXXXXX!"); + isoToDedication.put("SV", "Swedish dictionary dedicated to Kajsa Palmblad--björn kramar!"); + } + private static String getDedication(String iso) { + return isoToDedication.containsKey(iso) ? "\n\n" + isoToDedication.get(iso) : ""; + } + + static final Map isoToStoplist = new LinkedHashMap(); + static { + isoToStoplist.put("DE", "de.txt"); + isoToStoplist.put("EN", "en.txt"); + isoToStoplist.put("ES", "es.txt"); + isoToStoplist.put("IT", "it.txt"); + isoToStoplist.put("FR", "fr.txt"); + } + private static String getStoplist(String iso) { + return isoToStoplist.containsKey(iso) ? isoToStoplist.get(iso) : "empty.txt"; + } + + static List getMainArgs(final String[] pair) { + final List result = new ArrayList(); - public static void main(final String[] args) throws Exception { + final String lang1 = pair[0]; + final String lang2 = pair[1]; - // Builds all the dictionaries it can, outputs list to a text file. + final String dictFile = String.format("%s/%s-%s.quickdic", + OUTPUTS, lang1, lang2); - final Map isoToWikiName = new LinkedHashMap(WiktionaryLangs.isoCodeToWikiName); - isoToWikiName.remove("EN"); - isoToWikiName.remove("DE"); + result.add(String.format("--dictOut=%s", dictFile)); + result.add(String.format("--lang1Stoplist=%s", STOPLISTS + getStoplist(lang1))); + result.add(String.format("--lang2Stoplist=%s", STOPLISTS + getStoplist(lang2))); - final Map isoToDedication = new LinkedHashMap(); - isoToDedication.put("AF", "Afrikaans dictionary dedicated to Heiko and Mariëtte Horn."); - isoToDedication.put("HR", "Croatian dictionary dedicated to Ines Viskic and Miro Kresonja."); - isoToDedication.put("NL", "Dutch dictionary dedicated to Mike LeBeau."); - // German handled in file. - isoToDedication.put("EL", "Greek dictionary dedicated to Noah Egge."); - isoToDedication.put("IT", "Italian dictionary dedicated to Carolina Tropini, my favorite stardust in the whole universe! Ti amo!"); - isoToDedication.put("KO", "Korean dictionary dedicated to Ande Elwood--fall fashion und Fernsehturms!"); - isoToDedication.put("PT", "Portuguese dictionary dedicated to Carlos Melo, one Tough Mudder."); - isoToDedication.put("RO", "Romanian dictionary dedicated to Radu Teodorescu."); - isoToDedication.put("RU", "Russian dictionary dedicated to Maxim Aronin--best friend always!."); - isoToDedication.put("SR", "Serbian dictionary dedicated to Filip Crnogorac--thanks for the honey."); - isoToDedication.put("ES", "Spanish dictionary made especially for Carolina Tropini! <3 XoXoXXXXX!"); - isoToDedication.put("SV", "Swedish dictionary dedicated to Kajsa Palmblad--björn kramar!"); + int i = 2; + + // Deal with the pairs where one is English. + if (Arrays.asList(pair).contains("EN")) { + final String foreignIso = pair[0].equals("EN") ? pair[1] : pair[0]; + + + String foreignRegex = WiktionaryLangs.isoCodeToEnWikiName.get(foreignIso); + if (foreignIso.equals("ZH")) { + // HACK: The missing "e" prevents a full match, causing "Cantonese" to be appended to the entries. + foreignRegex = "Chinese|Mandarin|Cantones"; + } + + final int enIndex; + if (foreignIso.equals("DE")) { + // German-English is a special case since it was the first ever QuickDic! + result.add(String.format("--lang1=%s", "DE")); + result.add(String.format("--lang2=%s", "EN")); + result.add("--dictInfo=@" + INPUTS + "de-en_chemnitz_enwiktionary.info"); - final Map isoToStoplist = new LinkedHashMap(); - isoToStoplist.put("DE", "de.txt"); - isoToStoplist.put("EN", "en.txt"); - isoToStoplist.put("ES", "es.txt"); - isoToStoplist.put("IT", "it.txt"); - isoToStoplist.put("FR", "fr.txt"); + enIndex = 2; + } else { + result.add(String.format("--lang1=%s", "EN")); + result.add(String.format("--lang2=%s", foreignIso)); + result.add(String.format("--dictInfo=(EN)Wikitionary-based EN-%s dictionary.%s", foreignIso, getDedication(foreignIso))); + enIndex = 1; + } + + result.add(String.format("--input%d=%s/wikiSplit/en/%s.data", i, INPUTS, foreignIso)); + result.add(String.format("--input%dName=enwiktionary.%s", i, foreignIso)) ; + result.add(String.format("--input%dFormat=enwiktionary", i)); + result.add(String.format("--input%dWiktionaryType=EnForeign", i)); + result.add(String.format("--input%dLangPattern=%s", i, foreignRegex)); + result.add(String.format("--input%dLangCodePattern=%s", i, foreignIso.toLowerCase())); + result.add(String.format("--input%dEnIndex=%d", i, enIndex)); + ++i; + + result.add(String.format("--input%d=%swikiSplit/en/EN.data", i, INPUTS)); + result.add(String.format("--input%dName=enwiktionary.english", i)); + result.add(String.format("--input%dFormat=enwiktionary", i)); + result.add(String.format("--input%dWiktionaryType=EnToTranslation", i)); + result.add(String.format("--input%dLangPattern=%s", i, foreignRegex)); + result.add(String.format("--input%dLangCodePattern=%s", i, foreignIso.toLowerCase())); + result.add(String.format("--input%dEnIndex=%d", i, enIndex)); + ++i; + + if (foreignIso.equals("DE")) { + result.add(String.format("--input%d=%sde-en_chemnitz.txt", i, INPUTS)); + result.add(String.format("--input%dName=chemnitz", i)); + result.add(String.format("--input%dCharset=UTF8", i)); + result.add(String.format("--input%dFormat=chemnitz", i)); + ++i; + } + } else { + // Pairs without English. + result.add(String.format("--lang1=%s", lang1)); + result.add(String.format("--lang2=%s", lang2)); + + result.add(String.format("--input%d=%swikiSplit/en/EN.data", i, INPUTS)); + result.add(String.format("--input%dName=BETA!enwiktionary.%s-%s", i, lang1, lang2)); + result.add(String.format("--input%dFormat=%s", i, EnTranslationToTranslationParser.NAME)); + result.add(String.format("--input%dLangPattern1=%s", i, lang1)); + result.add(String.format("--input%dLangPattern2=%s", i, lang2)); + ++i; + } + return result; + } - final Map isoToRegex = new LinkedHashMap(); - // HACK: The missing "e" prevents a full match, causing "Cantonese" to be appended to the entries. - isoToRegex.put("ZH", "Chinese|Mandarin|Cantones"); + public static void main(final String[] args) throws Exception { + final List allPairs = new ArrayList(); // Build the non EN ones. - final String[][] nonEnPairs = new String[][] { - /* {"AR", "DE" }, {"AR", "ES" }, {"AR", "FR" }, @@ -148,14 +230,24 @@ public class DictionaryBuilderMain extends TestCase { {"PL", "RU" }, // Polish {"PL", "HU" }, // Polish {"PL", "ES" }, // Polish - - */ + //{"TR", "EL" }, // Turkish, Greek }; + allPairs.addAll(Arrays.asList(nonEnPairs)); + + // Add all the EN-XX pairs. + for (final String isoCode : WiktionaryLangs.isoCodeToEnWikiName.keySet()) { + if (isoCode.equals("EN") || isoCode.equals("DE")) { + continue; + } + allPairs.add(new String[] {"EN", isoCode}); + } + allPairs.add(new String[] {"EN", "DE"}); + final Set> done = new LinkedHashSet>(); - for (final String[] pair : nonEnPairs) { + for (final String[] pair : allPairs) { Arrays.sort(pair); final List pairList = Arrays.asList(pair); if (done.contains(pairList)) { @@ -163,127 +255,8 @@ public class DictionaryBuilderMain extends TestCase { } done.add(pairList); - final String lang1 = pair[0]; - final String lang2 = pair[1]; - - final String dictFile = String.format("%s/%s-%s_enwiktionary_BETA.quickdic", - OUTPUTS, lang1, lang2); - System.out.println("building dictFile: " + dictFile); - - if (!isoToStoplist.containsKey(lang1)) { - isoToStoplist.put(lang1, "empty.txt"); - } - if (!isoToStoplist.containsKey(lang2)) { - isoToStoplist.put(lang2, "empty.txt"); - } - - DictionaryBuilder.main(new String[] { - String.format("--dictOut=%s", dictFile), - String.format("--lang1=%s", lang1), - String.format("--lang2=%s", lang2), - String.format("--lang1Stoplist=%s", STOPLISTS + isoToStoplist.get(lang1)), - String.format("--lang2Stoplist=%s", STOPLISTS + isoToStoplist.get(lang2)), - String.format("--dictInfo=(EN)Wikitionary-based %s-%s dictionary.", lang1, lang2), - - String.format("--input2=%swikiSplit/en/EN.data", INPUTS), - String.format("--input2Name=BETA!enwiktionary.%s-%s", lang1, lang2), - String.format("--input2Format=%s", EnTranslationToTranslationParser.NAME), - String.format("--input2LangPattern1=%s", lang1), - String.format("--input2LangPattern2=%s", lang2), - }); + DictionaryBuilder.main(getMainArgs(pair).toArray(new String[0])); } - if (1==1) { - //return; - } - - - // Now build the EN ones. - -// isoToWikiName.keySet().retainAll(Arrays.asList("UK", "HR", "FI")); - //isoToWikiName.clear(); - boolean go = false; - for (final String foreignIso : isoToWikiName.keySet()) { - if (foreignIso.equals("SL")) { - go = true; - } - if (!go) { - continue; - } - - final String dictFile = String.format("%s/EN-%s_enwiktionary.quickdic", OUTPUTS, foreignIso); - System.out.println("building dictFile: " + dictFile); - - if (!isoToStoplist.containsKey(foreignIso)) { - isoToStoplist.put(foreignIso, "empty.txt"); - } - if (!isoToDedication.containsKey(foreignIso)) { - isoToDedication.put(foreignIso, ""); - } - if (!isoToRegex.containsKey(foreignIso)) { - isoToRegex.put(foreignIso, isoToWikiName.get(foreignIso)); - } - - DictionaryBuilder.main(new String[] { - String.format("--dictOut=%s", dictFile), - String.format("--lang1=EN"), - String.format("--lang2=%s", foreignIso), - String.format("--lang1Stoplist=%s", STOPLISTS + isoToStoplist.get("EN")), - String.format("--lang2Stoplist=%s", STOPLISTS + isoToStoplist.get(foreignIso)), - String.format("--dictInfo=(EN)Wikitionary-based EN-%s dictionary.\n\n%s", foreignIso, isoToDedication.get(foreignIso)), - - "--input2=" + INPUTS + "wikiSplit/en/" + foreignIso + ".data", - "--input2Name=enwiktionary." + foreignIso, - "--input2Format=enwiktionary", - "--input2WiktionaryType=EnForeign", - "--input2LangPattern=" + isoToRegex.get(foreignIso), - "--input2LangCodePattern=" + foreignIso.toLowerCase(), - "--input2EnIndex=1", - - "--input3=" + INPUTS + "wikiSplit/en/EN.data", - "--input3Name=enwiktionary.english", - "--input3Format=enwiktionary", - "--input3WiktionaryType=EnToTranslation", - "--input3LangPattern=" + isoToRegex.get(foreignIso), - "--input3LangCodePattern=" + foreignIso.toLowerCase(), - "--input3EnIndex=1", - - }); - - } // foreignIso - - // Now special case German-English. - - final String dictFile = String.format("%s/DE-EN_chemnitz_enwiktionary.quickdic", OUTPUTS); - DictionaryBuilder.main(new String[] { - "--dictOut=" + dictFile, - "--lang1=DE", - "--lang2=EN", - String.format("--lang1Stoplist=%s", STOPLISTS + "de.txt"), - String.format("--lang2Stoplist=%s", STOPLISTS + "en.txt"), - "--dictInfo=@" + INPUTS + "de-en_chemnitz_enwiktionary.info", - - "--input4=" + INPUTS + "de-en_chemnitz.txt", - "--input4Name=chemnitz", - "--input4Charset=UTF8", - "--input4Format=chemnitz", - - "--input2=" + INPUTS + "wikiSplit/en/DE.data", - "--input2Name=enwiktionary.DE", - "--input2Format=enwiktionary", - "--input2WiktionaryType=EnForeign", - "--input2LangPattern=German", - "--input2LangCodePattern=de", - "--input2EnIndex=2", - - "--input3=" + INPUTS + "wikiSplit/en/EN.data", - "--input3Name=enwiktionary.english", - "--input3Format=enwiktionary", - "--input3WiktionaryType=EnToTranslation", - "--input3LangPattern=German", - "--input3LangCodePattern=de", - "--input3EnIndex=2", - }); - - } + } } diff --git a/src/com/hughes/android/dictionary/engine/LanguageTest.java b/src/com/hughes/android/dictionary/engine/LanguageTest.java index 7b84dd6..4f90962 100644 --- a/src/com/hughes/android/dictionary/engine/LanguageTest.java +++ b/src/com/hughes/android/dictionary/engine/LanguageTest.java @@ -183,8 +183,8 @@ public class LanguageTest extends TestCase { public void testEnWiktionaryNames() { - final Set enLangs = new LinkedHashSet(WiktionaryLangs.isoCodeToWikiName.keySet()); - for (final String code : WiktionaryLangs.isoCodeToWikiName.keySet()) { + final Set enLangs = new LinkedHashSet(WiktionaryLangs.isoCodeToEnWikiName.keySet()); + for (final String code : WiktionaryLangs.isoCodeToEnWikiName.keySet()) { enLangs.add(code.toLowerCase()); } assertEquals(enLangs.toString(), Language.isoCodeToResources.keySet().toString()); diff --git a/src/com/hughes/android/dictionary/parser/wiktionary/WiktionaryLangs.java b/src/com/hughes/android/dictionary/parser/wiktionary/WiktionaryLangs.java index e2caa41..bf855b3 100644 --- a/src/com/hughes/android/dictionary/parser/wiktionary/WiktionaryLangs.java +++ b/src/com/hughes/android/dictionary/parser/wiktionary/WiktionaryLangs.java @@ -20,94 +20,94 @@ import java.util.regex.Pattern; public class WiktionaryLangs { - public static final Map isoCodeToWikiName = new LinkedHashMap(); + public static final Map isoCodeToEnWikiName = new LinkedHashMap(); static { - isoCodeToWikiName.put("AF", "Afrikaans"); - isoCodeToWikiName.put("SQ", "Albanian"); - isoCodeToWikiName.put("AR", "Arabic"); - isoCodeToWikiName.put("HY", "Armenian"); - isoCodeToWikiName.put("BE", "Belarusian"); - isoCodeToWikiName.put("BN", "Bengali"); - isoCodeToWikiName.put("BS", "Bosnian"); - isoCodeToWikiName.put("BG", "Bulgarian"); - isoCodeToWikiName.put("CA", "Catalan"); - isoCodeToWikiName.put("HR", "Croatian"); - isoCodeToWikiName.put("CS", "Czech"); - isoCodeToWikiName.put("ZH", "Chinese|Mandarin|Cantonese"); - isoCodeToWikiName.put("DA", "Danish"); - isoCodeToWikiName.put("NL", "Dutch"); - isoCodeToWikiName.put("EN", "English"); - isoCodeToWikiName.put("EO", "Esperanto"); - isoCodeToWikiName.put("ET", "Estonian"); - isoCodeToWikiName.put("FI", "Finnish"); - isoCodeToWikiName.put("FR", "French"); - isoCodeToWikiName.put("DE", "German"); - isoCodeToWikiName.put("EL", "Greek"); - isoCodeToWikiName.put("haw", "Hawaiian"); - isoCodeToWikiName.put("HE", "Hebrew"); - isoCodeToWikiName.put("HI", "Hindi"); - isoCodeToWikiName.put("HU", "Hungarian"); - isoCodeToWikiName.put("IS", "Icelandic"); - isoCodeToWikiName.put("ID", "Indonesian"); - isoCodeToWikiName.put("GA", "Irish"); - isoCodeToWikiName.put("GD", "Gaelic"); - isoCodeToWikiName.put("IT", "Italian"); - isoCodeToWikiName.put("LA", "Latin"); - isoCodeToWikiName.put("LV", "Latvian"); - isoCodeToWikiName.put("LT", "Lithuanian"); - isoCodeToWikiName.put("JA", "Japanese"); - isoCodeToWikiName.put("KO", "Korean"); - isoCodeToWikiName.put("KU", "Kurdish"); - isoCodeToWikiName.put("LO", "Lao"); - isoCodeToWikiName.put("MS", "Malay"); - isoCodeToWikiName.put("ML", "Malayalam"); - isoCodeToWikiName.put("MI", "Maori"); - isoCodeToWikiName.put("MN", "Mongolian"); - isoCodeToWikiName.put("NE", "Nepali"); - isoCodeToWikiName.put("NO", "Norwegian"); - isoCodeToWikiName.put("FA", "Persian"); - isoCodeToWikiName.put("PL", "Polish"); - isoCodeToWikiName.put("PT", "Portuguese"); - isoCodeToWikiName.put("PA", "Punjabi"); - isoCodeToWikiName.put("RO", "Romanian"); - isoCodeToWikiName.put("RU", "Russian"); - isoCodeToWikiName.put("SA", "Sanskrit"); - isoCodeToWikiName.put("SR", "Serbian"); - isoCodeToWikiName.put("SK", "Slovak"); - isoCodeToWikiName.put("SL", "Slovene|Slovenian"); - isoCodeToWikiName.put("SO", "Somali"); - isoCodeToWikiName.put("ES", "Spanish"); - isoCodeToWikiName.put("SW", "Swahili"); - isoCodeToWikiName.put("SV", "Swedish"); - isoCodeToWikiName.put("TL", "Tagalog"); - isoCodeToWikiName.put("TG", "Tajik"); - isoCodeToWikiName.put("TH", "Thai"); - isoCodeToWikiName.put("BO", "Tibetan"); - isoCodeToWikiName.put("TR", "Turkish"); - isoCodeToWikiName.put("UK", "Ukrainian"); - isoCodeToWikiName.put("UR", "Urdu"); - isoCodeToWikiName.put("VI", "Vietnamese"); - isoCodeToWikiName.put("CI", "Welsh"); - isoCodeToWikiName.put("YI", "Yiddish"); - isoCodeToWikiName.put("ZU", "Zulu"); + isoCodeToEnWikiName.put("AF", "Afrikaans"); + isoCodeToEnWikiName.put("SQ", "Albanian"); + isoCodeToEnWikiName.put("AR", "Arabic"); + isoCodeToEnWikiName.put("HY", "Armenian"); + isoCodeToEnWikiName.put("BE", "Belarusian"); + isoCodeToEnWikiName.put("BN", "Bengali"); + isoCodeToEnWikiName.put("BS", "Bosnian"); + isoCodeToEnWikiName.put("BG", "Bulgarian"); + isoCodeToEnWikiName.put("CA", "Catalan"); + isoCodeToEnWikiName.put("HR", "Croatian"); + isoCodeToEnWikiName.put("CS", "Czech"); + isoCodeToEnWikiName.put("ZH", "Chinese|Mandarin|Cantonese"); + isoCodeToEnWikiName.put("DA", "Danish"); + isoCodeToEnWikiName.put("NL", "Dutch"); + isoCodeToEnWikiName.put("EN", "English"); + isoCodeToEnWikiName.put("EO", "Esperanto"); + isoCodeToEnWikiName.put("ET", "Estonian"); + isoCodeToEnWikiName.put("FI", "Finnish"); + isoCodeToEnWikiName.put("FR", "French"); + isoCodeToEnWikiName.put("DE", "German"); + isoCodeToEnWikiName.put("EL", "Greek"); + isoCodeToEnWikiName.put("haw", "Hawaiian"); + isoCodeToEnWikiName.put("HE", "Hebrew"); + isoCodeToEnWikiName.put("HI", "Hindi"); + isoCodeToEnWikiName.put("HU", "Hungarian"); + isoCodeToEnWikiName.put("IS", "Icelandic"); + isoCodeToEnWikiName.put("ID", "Indonesian"); + isoCodeToEnWikiName.put("GA", "Irish"); + isoCodeToEnWikiName.put("GD", "Gaelic"); + isoCodeToEnWikiName.put("IT", "Italian"); + isoCodeToEnWikiName.put("LA", "Latin"); + isoCodeToEnWikiName.put("LV", "Latvian"); + isoCodeToEnWikiName.put("LT", "Lithuanian"); + isoCodeToEnWikiName.put("JA", "Japanese"); + isoCodeToEnWikiName.put("KO", "Korean"); + isoCodeToEnWikiName.put("KU", "Kurdish"); + isoCodeToEnWikiName.put("LO", "Lao"); + isoCodeToEnWikiName.put("MS", "Malay"); + isoCodeToEnWikiName.put("ML", "Malayalam"); + isoCodeToEnWikiName.put("MI", "Maori"); + isoCodeToEnWikiName.put("MN", "Mongolian"); + isoCodeToEnWikiName.put("NE", "Nepali"); + isoCodeToEnWikiName.put("NO", "Norwegian"); + isoCodeToEnWikiName.put("FA", "Persian"); + isoCodeToEnWikiName.put("PL", "Polish"); + isoCodeToEnWikiName.put("PT", "Portuguese"); + isoCodeToEnWikiName.put("PA", "Punjabi"); + isoCodeToEnWikiName.put("RO", "Romanian"); + isoCodeToEnWikiName.put("RU", "Russian"); + isoCodeToEnWikiName.put("SA", "Sanskrit"); + isoCodeToEnWikiName.put("SR", "Serbian"); + isoCodeToEnWikiName.put("SK", "Slovak"); + isoCodeToEnWikiName.put("SL", "Slovene|Slovenian"); + isoCodeToEnWikiName.put("SO", "Somali"); + isoCodeToEnWikiName.put("ES", "Spanish"); + isoCodeToEnWikiName.put("SW", "Swahili"); + isoCodeToEnWikiName.put("SV", "Swedish"); + isoCodeToEnWikiName.put("TL", "Tagalog"); + isoCodeToEnWikiName.put("TG", "Tajik"); + isoCodeToEnWikiName.put("TH", "Thai"); + isoCodeToEnWikiName.put("BO", "Tibetan"); + isoCodeToEnWikiName.put("TR", "Turkish"); + isoCodeToEnWikiName.put("UK", "Ukrainian"); + isoCodeToEnWikiName.put("UR", "Urdu"); + isoCodeToEnWikiName.put("VI", "Vietnamese"); + isoCodeToEnWikiName.put("CI", "Welsh"); + isoCodeToEnWikiName.put("YI", "Yiddish"); + isoCodeToEnWikiName.put("ZU", "Zulu"); - isoCodeToWikiName.put("AZ", "Azeri"); - isoCodeToWikiName.put("EU", "Basque"); - isoCodeToWikiName.put("BR", "Breton"); - isoCodeToWikiName.put("MR", "Burmese"); - isoCodeToWikiName.put("FO", "Faroese"); - isoCodeToWikiName.put("GL", "Galician"); - isoCodeToWikiName.put("KA", "Georgian"); - isoCodeToWikiName.put("HT", "Haitian Creole"); - isoCodeToWikiName.put("LB", "Luxembourgish"); - isoCodeToWikiName.put("MK", "Macedonian"); + isoCodeToEnWikiName.put("AZ", "Azeri"); + isoCodeToEnWikiName.put("EU", "Basque"); + isoCodeToEnWikiName.put("BR", "Breton"); + isoCodeToEnWikiName.put("MR", "Burmese"); + isoCodeToEnWikiName.put("FO", "Faroese"); + isoCodeToEnWikiName.put("GL", "Galician"); + isoCodeToEnWikiName.put("KA", "Georgian"); + isoCodeToEnWikiName.put("HT", "Haitian Creole"); + isoCodeToEnWikiName.put("LB", "Luxembourgish"); + isoCodeToEnWikiName.put("MK", "Macedonian"); } public static final Map> wikiCodeToIsoCodeToWikiName = new LinkedHashMap>(); static { // en - wikiCodeToIsoCodeToWikiName.put("en", isoCodeToWikiName); + wikiCodeToIsoCodeToWikiName.put("en", isoCodeToEnWikiName); Map isoCodeToWikiName;