Ik ben bezig een applicatie te internationaliseren. Ik gebruik het locale-mechanisme van de JDK om taalafhankelijke teksten weer te geven. Hieronder even een stukje code dat illustreert waar het misgaat:
Bovenstaande code genereert de volgende output bij executie:
Uitgezocht:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import java.util.Locale; public class Test { public static void main(String[] args) { System.out.println( new Locale("ja").getDisplayLanguage(new Locale("fr")) ); // dit moet opleveren: japonais System.out.println( new Locale("ja").getDisplayLanguage(Locale.ENGLISH) ); // dit moet opleveren: Japanese System.out.println( new Locale("ja").getDisplayLanguage(new Locale("nl")) ); // dit moet opleveren: Japans } } |
Bovenstaande code genereert de volgende output bij executie:
Op de laatste regel had natuurlijk "Japans" moeten staan. Blijkbaar heeft de JDK standaard geen Nederlandse definitie voor Japanse taal en wordt de Engelse variant gebruikt. Dit staat ook zo omschreven in de JavaDoc. Maar hoe hier nu mee om te gaan?japonais
Japanese
Japanese
Uitgezocht:
- Ik had bedacht dat de locale definities waarschijnlijk ergens als properties in de JDK moeten staan. Het enige relevante wat ik kon vinden was in JAVA_HOME/jre/lib/ext/localedata.jar. Deze jar bevat sun.text.resources.* klassen. Deze zijn intern voor de JDK en zijn ook niet gedocumenteerd door Sun.
- De Locale-klasse heeft geen methoden om een lokale definitie (op basis van properties) te instantieren.
"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand