La soluzione generalmente utilizzato è quello di avere un hash di user-facing stringhe in una classe dirigente centrale. Si effettua una chiamata in quella classe ogni volta che si desidera popolare un campo con i dati:
JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));
All'interno della LocalizationManager
si dovrà prendere la lingua corrente del programma, poi cercare la stringa appropriata per MY_LABEL_TEXT
nella appropriata linguaggio. Il gestore restituisce quindi la stringa ora 'localizzata', oppure alcuni di default se la lingua o la stringa non sono disponibili.
Pensa al gestore come a una mappa leggermente più complicata; sta mappando da una chiave (cioè 'MY_LABEL_TEXT') a ciò che vuoi mostrare ("Buongiorno!" o "Bienvenido!") a seconda della lingua in cui ti trovi. Ci sono molti modi per implementarlo, ma tu vuoi che il gestore sia statico o un singleton (caricato una volta) per ragioni di memoria/prestazioni.
Ad esempio: (1)
public class LocalizationManager {
private SupportedLanguage currentLanguage = SupportedLanguage.ENGLISH;//defaults to english
private Map<SupportedLanguage, Map<String, String>> translations;
public LocalizationManager() {
//Initialize the strings.
//This is NOT a good way; don't hardcode it. But it shows how they're set up.
Map<String, String> english = new HashMap<String, String>();
Map<String, String> french = new HashMap<String, String>();
english.set("MY_LABEL_TEXT", "Good day!");
french.set("MY_LABEL_TEXT", "Beinvenido!");//is that actually french?
translations.set(SupportedLanguage.ENGLISH, english);
translations.set(SupportedLanguage.FRENCH, french);
}
public get(String key) {
return this.translations.get(this.currentLanguage).get(key);
}
public setLanguage(SupportedLanguage language) {
this.currentLanguage = language;
}
public enum SupportedLanguage {
ENGLISH, CHINESE, FRENCH, KLINGON, RUSSIAN;
}
}
(1) non ho testato questo, né è un singoletto, ma è un off il bracciale esempio.
fonte
2012-08-17 18:33:51
Avete stringhe localizzate per ogni lingua possibile? Come stai attualmente recuperando quelle stringhe? O le stringhe sono attualmente codificate in ogni elemento? –
Non ho ancora scritto il programma in modo accurato, solo un paio di righe, esattamente per evitare questo problema. Sono aperto a tutto! – Karlovsky120
Che tipo di programma Java stai scrivendo? Un'app Web che utilizza JavaEE/JSF/etc o qualcos'altro? – jahroy