\r
public class Language {\r
\r
+ static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();\r
+\r
+ \r
final String symbol;\r
final Locale locale;\r
\r
- final Collator sortCollator;\r
+ Collator sortCollator;\r
final Comparator<String> sortComparator;\r
\r
- final Collator findCollator;\r
+ private Collator findCollator;\r
final Comparator<String> findComparator;\r
\r
- public Language(final String symbol, final Locale locale) {\r
- this.symbol = symbol;\r
+ public Language(final Locale locale) {\r
+ this.symbol = locale.getLanguage();\r
this.locale = locale;\r
\r
- this.sortCollator = Collator.getInstance(locale);\r
- this.sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
- this.sortCollator.setStrength(Collator.IDENTICAL);\r
this.sortComparator = new Comparator<String>() {\r
public int compare(final String s1, final String s2) {\r
- return sortCollator.compare(textNorm(s1), textNorm(s2));\r
+ return getSortCollator().compare(textNorm(s1), textNorm(s2));\r
}\r
};\r
\r
- this.findCollator = Collator.getInstance(locale);\r
- this.findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
- this.findCollator.setStrength(Collator.SECONDARY);\r
this.findComparator = new Comparator<String>() {\r
public int compare(final String s1, final String s2) {\r
- return findCollator.compare(textNorm(s1), textNorm(s2));\r
+ return getFindCollator().compare(textNorm(s1), textNorm(s2));\r
}\r
};\r
-\r
+ \r
+ symbolToLangauge.put(symbol.toLowerCase(), this);\r
}\r
\r
public String textNorm(final String s) {\r
\r
@Override\r
public String toString() {\r
+ return locale.toString();\r
+ }\r
+ \r
+ public String getSymbol() {\r
return symbol;\r
}\r
+ \r
+ synchronized Collator getFindCollator() {\r
+ if (findCollator == null) {\r
+ findCollator = Collator.getInstance(locale);\r
+ findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
+ findCollator.setStrength(Collator.SECONDARY);\r
+ }\r
+ return findCollator;\r
+ }\r
+\r
+ synchronized Collator getSortCollator() {\r
+ if (sortCollator == null) {\r
+ sortCollator = Collator.getInstance(locale);\r
+ sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
+ sortCollator.setStrength(Collator.IDENTICAL);\r
+ }\r
+ return sortCollator;\r
+ }\r
\r
// ----------------------------------------------------------------\r
\r
- public static final Language EN = new Language("EN", Locale.ENGLISH);\r
+ public static final Language en = new Language(Locale.ENGLISH);\r
+ public static final Language fr = new Language(Locale.FRENCH);\r
+ public static final Language it = new Language(Locale.ITALIAN);\r
\r
- public static final Language DE = new Language("DE", Locale.GERMAN) {\r
+ public static final Language de = new Language(Locale.GERMAN) {\r
@Override\r
public String textNorm(String token) {\r
boolean sub = false;\r
if (!sub) {\r
return token;\r
}\r
- token = token.replaceAll("ae", "ä");\r
- token = token.replaceAll("oe", "ö");\r
- token = token.replaceAll("ue", "ü");\r
-\r
- token = token.replaceAll("Ae", "Ä");\r
- token = token.replaceAll("Oe", "Ö");\r
- token = token.replaceAll("Ue", "Ü");\r
- return token;\r
+ token = token.replaceAll("ae", "ä");\r
+ token = token.replaceAll("oe", "ö");\r
+ token = token.replaceAll("ue", "ü");\r
+\r
+ token = token.replaceAll("Ae", "Ä");\r
+ token = token.replaceAll("Oe", "Ö");\r
+ token = token.replaceAll("Ue", "Ü");\r
+ return token; \r
}\r
};\r
-\r
- // ----------------------------------------------------------------\r
-\r
- private static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();\r
-\r
+ \r
static {\r
- symbolToLangauge.put(EN.symbol, EN);\r
- symbolToLangauge.put(DE.symbol, DE);\r
+ for (final String lang : Locale.getISOLanguages()) {\r
+ if (lookup(lang) == null) {\r
+ new Language(new Locale(lang));\r
+ }\r
+ }\r
}\r
\r
+ // ----------------------------------------------------------------\r
+\r
static Language lookup(final String symbol) {\r
- return symbolToLangauge.get(symbol);\r
+ return symbolToLangauge.get(symbol.toLowerCase());\r
}\r
\r
}\r