La solución utilizada generalmente es tener un hash de usuario orientada cadenas en una clase de gerente central. Realizar una llamada a esa clase siempre que lo desee para rellenar un campo con datos:
JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));
Dentro de la LocalizationManager
tendrá que buscar el idioma actual del programa, a continuación, busque la cadena apropiada para MY_LABEL_TEXT
en el apropiado idioma. El administrador luego devuelve la cadena ahora 'localizada', o algunos valores predeterminados si el idioma o la cadena no está disponible.
Piense en el administrador como un mapa un poco más complicado; es mapear desde una clave (es decir, 'MY_LABEL_TEXT') a lo que desea mostrar ("¡Buen día!" o "Bienvenido!") según el idioma en el que se encuentre. Hay muchas maneras de implementar esto, pero usted quiere que el administrador sea estático o un singleton (cargado una vez) por razones de memoria/rendimiento.
Por ejemplo: (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) No he probado esto, ni tampoco es un singleton, pero es un fuera de la ejemplo manguito.
¿Tiene cadenas localizadas para cada idioma posible? ¿Cómo estás buscando esas cadenas? ¿O están las cadenas actualmente codificadas en cada elemento? –
Todavía no he escrito el programa, solo un par de líneas, exactamente para evitar ese problema. ¡Estoy abierto a todo! – Karlovsky120
¿Qué tipo de programa va a escribir? ¿Una aplicación web con JavaEE/JSF/etc. u otra cosa? – jahroy