]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/engine/Language.java
Add Slovak, increment version, show what's new.
[Dictionary.git] / src / com / hughes / android / dictionary / engine / Language.java
1 // Copyright 2011 Google Inc. All Rights Reserved.\r
2 //\r
3 // Licensed under the Apache License, Version 2.0 (the "License");\r
4 // you may not use this file except in compliance with the License.\r
5 // You may obtain a copy of the License at\r
6 //\r
7 //     http://www.apache.org/licenses/LICENSE-2.0\r
8 //\r
9 // Unless required by applicable law or agreed to in writing, software\r
10 // distributed under the License is distributed on an "AS IS" BASIS,\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 // See the License for the specific language governing permissions and\r
13 // limitations under the License.\r
14 \r
15 package com.hughes.android.dictionary.engine;\r
16 \r
17 import java.util.LinkedHashMap;\r
18 import java.util.Locale;\r
19 import java.util.Map;\r
20 \r
21 import com.ibm.icu.text.Collator;\r
22 \r
23 public class Language {\r
24 \r
25   public static final Map<String,String> isoCodeToWikiName = new LinkedHashMap<String,String>();\r
26   static {\r
27     isoCodeToWikiName.put("AF", "Afrikaans");\r
28     isoCodeToWikiName.put("SQ", "Albanian");\r
29     isoCodeToWikiName.put("AR", "Arabic");\r
30     isoCodeToWikiName.put("HY", "Armenian");\r
31     isoCodeToWikiName.put("BE", "Belarusian");\r
32     isoCodeToWikiName.put("BN", "Bengali");\r
33     isoCodeToWikiName.put("BS", "Bosnian");\r
34     isoCodeToWikiName.put("BG", "Bulgarian");\r
35     isoCodeToWikiName.put("CA", "Catalan");\r
36     isoCodeToWikiName.put("HR", "Croatian");\r
37     isoCodeToWikiName.put("CS", "Czech");\r
38     isoCodeToWikiName.put("ZH", "Chinese|Mandarin|Cantonese");\r
39     isoCodeToWikiName.put("DA", "Danish");\r
40     isoCodeToWikiName.put("NL", "Dutch");\r
41     isoCodeToWikiName.put("EN", "English");\r
42     isoCodeToWikiName.put("EO", "Esperanto");\r
43     isoCodeToWikiName.put("ET", "Estonian");\r
44     isoCodeToWikiName.put("FI", "Finnish");\r
45     isoCodeToWikiName.put("FR", "French");\r
46     isoCodeToWikiName.put("DE", "German");\r
47     isoCodeToWikiName.put("EL", "Greek");\r
48     isoCodeToWikiName.put("haw", "Hawaiian");\r
49     isoCodeToWikiName.put("HE", "Hebrew");\r
50     isoCodeToWikiName.put("HI", "Hindi");\r
51     isoCodeToWikiName.put("HU", "Hungarian");\r
52     isoCodeToWikiName.put("IS", "Icelandic");\r
53     isoCodeToWikiName.put("ID", "Indonesian");\r
54     isoCodeToWikiName.put("GA", "Irish");\r
55     isoCodeToWikiName.put("IT", "Italian");\r
56     isoCodeToWikiName.put("LA", "Latin");\r
57     isoCodeToWikiName.put("LV", "Latvian");\r
58     isoCodeToWikiName.put("LT", "Lithuanian");\r
59     isoCodeToWikiName.put("JA", "Japanese");\r
60     isoCodeToWikiName.put("KO", "Korean");\r
61     isoCodeToWikiName.put("KU", "Kurdish");\r
62     isoCodeToWikiName.put("MS", "Malay");\r
63     isoCodeToWikiName.put("MI", "Maori");\r
64     isoCodeToWikiName.put("MN", "Mongolian");\r
65     isoCodeToWikiName.put("NE", "Nepali");\r
66     isoCodeToWikiName.put("NO", "Norwegian");\r
67     isoCodeToWikiName.put("FA", "Persian");\r
68     isoCodeToWikiName.put("PL", "Polish");\r
69     isoCodeToWikiName.put("PT", "Portuguese");\r
70     isoCodeToWikiName.put("PA", "Punjabi");\r
71     isoCodeToWikiName.put("RO", "Romanian");\r
72     isoCodeToWikiName.put("RU", "Russian");\r
73     isoCodeToWikiName.put("SA", "Sanskrit");\r
74     isoCodeToWikiName.put("SR", "Serbian");\r
75     isoCodeToWikiName.put("SK", "Slovak");\r
76     isoCodeToWikiName.put("SO", "Somali");\r
77     isoCodeToWikiName.put("ES", "Spanish");\r
78     isoCodeToWikiName.put("SW", "Swahili");\r
79     isoCodeToWikiName.put("SV", "Swedish");\r
80     isoCodeToWikiName.put("TG", "Tajik");\r
81     isoCodeToWikiName.put("TH", "Thai");\r
82     isoCodeToWikiName.put("BO", "Tibetan");\r
83     isoCodeToWikiName.put("TR", "Turkish");\r
84     isoCodeToWikiName.put("UK", "Ukrainian");\r
85     isoCodeToWikiName.put("VI", "Vietnamese");\r
86     isoCodeToWikiName.put("CI", "Welsh");\r
87     isoCodeToWikiName.put("YI", "Yiddish");\r
88     isoCodeToWikiName.put("ZU", "Zulu");\r
89   }\r
90 \r
91   static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();\r
92 \r
93   final String symbol;\r
94   final Locale locale;\r
95   \r
96   private Collator collator;\r
97 \r
98   public Language(final Locale locale) {\r
99     this.symbol = locale.getLanguage();\r
100     this.locale = locale;\r
101 \r
102     symbolToLangauge.put(symbol.toLowerCase(), this);\r
103   }\r
104 \r
105   @Override\r
106   public String toString() {\r
107     return locale.toString();\r
108   }\r
109   \r
110   public String getSymbol() {\r
111     return symbol;\r
112   }\r
113   \r
114   public synchronized Collator getCollator() {\r
115     if (collator == null) {\r
116       this.collator = Collator.getInstance(locale);\r
117       this.collator.setStrength(Collator.IDENTICAL);\r
118     }\r
119     return collator;\r
120   }\r
121   \r
122   public String getDefaultNormalizerRules() {\r
123     return ":: Any-Latin; ' ' > ; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;";\r
124   }\r
125   // ----------------------------------------------------------------\r
126 \r
127   public static final Language en = new Language(Locale.ENGLISH);\r
128   public static final Language fr = new Language(Locale.FRENCH);\r
129   public static final Language it = new Language(Locale.ITALIAN);\r
130 \r
131   public static final Language de = new Language(Locale.GERMAN) {\r
132     @Override\r
133     public String getDefaultNormalizerRules() {\r
134       return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; ";\r
135     }\r
136   };\r
137   \r
138   // ----------------------------------------------------------------\r
139 \r
140   public static synchronized Language lookup(final String symbol) {\r
141     Language lang = symbolToLangauge.get(symbol.toLowerCase());\r
142     if (lang == null) {\r
143       lang = new Language(new Locale(symbol));\r
144     }\r
145     return lang;\r
146   }\r
147 \r
148 }\r