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
44 isoCodeToWikiName.put("AF", "Afrikaans");
\r
45 isoCodeToWikiName.put("AR", "Arabic");
\r
46 isoCodeToWikiName.put("HY", "Armenian");
\r
47 isoCodeToWikiName.put("HR", "Croatian");
\r
48 isoCodeToWikiName.put("CS", "Czech");
\r
49 isoCodeToWikiName.put("ZH", "Chinese|Mandarin|Cantonese");
\r
50 isoCodeToWikiName.put("DA", "Danish");
\r
51 isoCodeToWikiName.put("NL", "Dutch");
\r
52 isoCodeToWikiName.put("EN", "English");
\r
53 isoCodeToWikiName.put("EO", "Esperanto");
\r
54 isoCodeToWikiName.put("FI", "Finnish");
\r
55 isoCodeToWikiName.put("FR", "French");
\r
56 isoCodeToWikiName.put("DE", "German");
\r
57 isoCodeToWikiName.put("EL", "Greek");
\r
58 isoCodeToWikiName.put("haw", "Hawaiian");
\r
59 isoCodeToWikiName.put("HE", "Hebrew");
\r
60 isoCodeToWikiName.put("HI", "Hindi");
\r
61 isoCodeToWikiName.put("IS", "Icelandic");
\r
62 isoCodeToWikiName.put("GA", "Irish");
\r
63 isoCodeToWikiName.put("IT", "Italian");
\r
64 isoCodeToWikiName.put("LT", "Lithuanian");
\r
65 isoCodeToWikiName.put("JA", "Japanese");
\r
66 isoCodeToWikiName.put("KO", "Korean");
\r
67 isoCodeToWikiName.put("KU", "Kurdish");
\r
68 isoCodeToWikiName.put("MS", "Malay");
\r
69 isoCodeToWikiName.put("MI", "Maori");
\r
70 isoCodeToWikiName.put("MN", "Mongolian");
\r
71 isoCodeToWikiName.put("NO", "Norwegian");
\r
72 isoCodeToWikiName.put("FA", "Persian");
\r
73 isoCodeToWikiName.put("PL", "Polish");
\r
74 isoCodeToWikiName.put("PT", "Portuguese");
\r
75 isoCodeToWikiName.put("RO", "Romanian");
\r
76 isoCodeToWikiName.put("RU", "Russian");
\r
77 isoCodeToWikiName.put("SA", "Sanskrit");
\r
78 isoCodeToWikiName.put("SR", "Serbian");
\r
79 isoCodeToWikiName.put("SO", "Somali");
\r
80 isoCodeToWikiName.put("ES", "Spanish");
\r
81 isoCodeToWikiName.put("SV", "Swedish");
\r
82 isoCodeToWikiName.put("TG", "Tajik");
\r
83 isoCodeToWikiName.put("TH", "Thai");
\r
84 isoCodeToWikiName.put("BO", "Tibetan");
\r
85 isoCodeToWikiName.put("TR", "Turkish");
\r
86 isoCodeToWikiName.put("UK", "Ukrainian");
\r
87 isoCodeToWikiName.put("VI", "Vietnamese");
\r
88 isoCodeToWikiName.put("CI", "Welsh");
\r
89 isoCodeToWikiName.put("YI", "Yiddish");
\r
90 isoCodeToWikiName.put("ZU", "Zulu");
\r
93 static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();
\r
95 final String symbol;
\r
96 final Locale locale;
\r
98 private Collator collator;
\r
100 public Language(final Locale locale) {
\r
101 this.symbol = locale.getLanguage();
\r
102 this.locale = locale;
\r
104 symbolToLangauge.put(symbol.toLowerCase(), this);
\r
108 public String toString() {
\r
109 return locale.toString();
\r
112 public String getSymbol() {
\r
116 public synchronized Collator getCollator() {
\r
117 if (collator == null) {
\r
118 this.collator = Collator.getInstance(locale);
\r
119 this.collator.setStrength(Collator.IDENTICAL);
\r
124 public String getDefaultNormalizerRules() {
\r
125 return ":: Any-Latin; ' ' > ; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;";
\r
127 // ----------------------------------------------------------------
\r
129 public static final Language en = new Language(Locale.ENGLISH);
\r
130 public static final Language fr = new Language(Locale.FRENCH);
\r
131 public static final Language it = new Language(Locale.ITALIAN);
\r
133 public static final Language de = new Language(Locale.GERMAN) {
\r
135 public String getDefaultNormalizerRules() {
\r
136 return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; ";
\r
140 // ----------------------------------------------------------------
\r
142 public static synchronized Language lookup(final String symbol) {
\r
143 Language lang = symbolToLangauge.get(symbol.toLowerCase());
\r
144 if (lang == null) {
\r
145 lang = new Language(new Locale(symbol));
\r