1 // Copyright 2011 Google Inc. All Rights Reserved.
\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
7 // http://www.apache.org/licenses/LICENSE-2.0
\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
15 package com.hughes.android.dictionary.engine;
\r
17 import java.util.LinkedHashMap;
\r
18 import java.util.Locale;
\r
19 import java.util.Map;
\r
21 import com.ibm.icu.text.Collator;
\r
23 public class Language {
\r
25 public static final Map<String,String> isoCodeToWikiName = new LinkedHashMap<String,String>();
\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
91 static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();
\r
93 final String symbol;
\r
94 final Locale locale;
\r
96 private Collator collator;
\r
98 public Language(final Locale locale) {
\r
99 this.symbol = locale.getLanguage();
\r
100 this.locale = locale;
\r
102 symbolToLangauge.put(symbol.toLowerCase(), this);
\r
106 public String toString() {
\r
107 return locale.toString();
\r
110 public String getSymbol() {
\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
122 public String getDefaultNormalizerRules() {
\r
123 return ":: Any-Latin; ' ' > ; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;";
\r
125 // ----------------------------------------------------------------
\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
131 public static final Language de = new Language(Locale.GERMAN) {
\r
133 public String getDefaultNormalizerRules() {
\r
134 return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; ";
\r
138 // ----------------------------------------------------------------
\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