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.Arrays;
\r
18 import java.util.LinkedHashMap;
\r
19 import java.util.List;
\r
20 import java.util.Locale;
\r
21 import java.util.Map;
\r
23 import com.ibm.icu.text.Collator;
\r
25 public class Language {
\r
27 public static final Map<String,String> isoCodeToWikiName = new LinkedHashMap<String,String>();
\r
46 isoCodeToWikiName.put("AF", "Afrikaans");
\r
47 isoCodeToWikiName.put("AR", "Arabic");
\r
48 isoCodeToWikiName.put("HY", "Armenian");
\r
49 isoCodeToWikiName.put("HR", "Croation");
\r
50 isoCodeToWikiName.put("CS", "Czech");
\r
51 isoCodeToWikiName.put("ZH", "Chinese|Mandarin|Cantonese");
\r
52 isoCodeToWikiName.put("DA", "Danish");
\r
53 isoCodeToWikiName.put("NL", "Dutch");
\r
54 isoCodeToWikiName.put("EN", "English");
\r
55 isoCodeToWikiName.put("FI", "Finish");
\r
56 isoCodeToWikiName.put("FR", "French");
\r
57 isoCodeToWikiName.put("DE", "German");
\r
58 isoCodeToWikiName.put("EL", "Greek");
\r
59 isoCodeToWikiName.put("haw", "Hawaiian");
\r
60 isoCodeToWikiName.put("HE", "Hebrew");
\r
61 isoCodeToWikiName.put("HI", "Hindi");
\r
62 isoCodeToWikiName.put("IS", "Icelandic");
\r
63 isoCodeToWikiName.put("GA", "Irish");
\r
64 isoCodeToWikiName.put("IT", "Italian");
\r
65 isoCodeToWikiName.put("LT", "Lithuanian");
\r
66 isoCodeToWikiName.put("JA", "Japanese");
\r
67 isoCodeToWikiName.put("KO", "Korean");
\r
68 isoCodeToWikiName.put("KU", "Kurdish");
\r
69 isoCodeToWikiName.put("MS", "Malay");
\r
70 isoCodeToWikiName.put("MI", "Maori");
\r
71 isoCodeToWikiName.put("MN", "Mongolian");
\r
72 isoCodeToWikiName.put("NO", "Norwegian");
\r
73 isoCodeToWikiName.put("FA", "Persian");
\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("SU", "Sudanese");
\r
82 isoCodeToWikiName.put("SV", "Swedish");
\r
83 isoCodeToWikiName.put("TG", "Tajik");
\r
84 isoCodeToWikiName.put("TH", "Thai");
\r
85 isoCodeToWikiName.put("BO", "Tibetan");
\r
86 isoCodeToWikiName.put("TR", "Turkish");
\r
87 isoCodeToWikiName.put("UK", "Ukranian");
\r
88 isoCodeToWikiName.put("VI", "Vietnamese");
\r
89 isoCodeToWikiName.put("CI", "Welsh");
\r
90 isoCodeToWikiName.put("YI", "Yiddish");
\r
91 isoCodeToWikiName.put("ZU", "Zulu");
\r
94 static final List<String> ISO_CODES_WITH_DICTS = Arrays.asList();
\r
96 static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();
\r
98 final String symbol;
\r
99 final Locale locale;
\r
101 private Collator collator;
\r
103 public Language(final Locale locale) {
\r
104 this.symbol = locale.getLanguage();
\r
105 this.locale = locale;
\r
107 symbolToLangauge.put(symbol.toLowerCase(), this);
\r
111 public String toString() {
\r
112 return locale.toString();
\r
115 public String getSymbol() {
\r
119 public synchronized Collator getCollator() {
\r
120 if (collator == null) {
\r
121 this.collator = Collator.getInstance(locale);
\r
122 this.collator.setStrength(Collator.IDENTICAL);
\r
127 public String getDefaultNormalizerRules() {
\r
128 return ":: Any-Latin; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;";
\r
130 // ----------------------------------------------------------------
\r
132 public static final Language en = new Language(Locale.ENGLISH);
\r
133 public static final Language fr = new Language(Locale.FRENCH);
\r
134 public static final Language it = new Language(Locale.ITALIAN);
\r
136 public static final Language de = new Language(Locale.GERMAN) {
\r
138 public String getDefaultNormalizerRules() {
\r
139 return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; ";
\r
143 // ----------------------------------------------------------------
\r
145 public static synchronized Language lookup(final String symbol) {
\r
146 Language lang = symbolToLangauge.get(symbol.toLowerCase());
\r
147 if (lang == null) {
\r
148 lang = new Language(new Locale(symbol));
\r