rozwiązanie powszechnie stosowane jest mieć hash łatwość okładziny ciągi w klasie centralnego menedżera. Można dodzwonić do tej klasy, kiedy tylko chcesz, aby wypełnić pola z danymi:
JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));
Wewnątrz LocalizationManager
trzeba będzie pobrać aktualny język programu, a następnie wyszukać odpowiedni ciąg do MY_LABEL_TEXT
w odpowiedni język. Menedżer następnie zwraca teraz "zlokalizowany" ciąg lub niektóre domyślne, jeśli język lub ciąg znaków nie są dostępne.
Pomyśl o menedżerze jako o nieco bardziej skomplikowanej Mapie; to odwzorowanie z klucza (tj. "MY_LABEL_TEXT") na to, co chcesz wyświetlić ("Dzień dobry!" lub "Bienvenido!") w zależności od języka, w którym się znajdujesz. Jest wiele sposobów na wdrożenie tego, ale Ty aby menedżer był statyczny lub singleton (ładowany raz) ze względu na pamięć/wydajność.
na przykład: (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) nie zostały przetestowane, nie jest to pojedyncza, ale jest to przykładowo od mankietu.
Czy masz zlokalizowane ciągi znaków dla każdego możliwego języka? Jak obecnie pobierasz te łańcuchy? A może ciągi są obecnie zakodowane na stałe w każdym elemencie? –
Jeszcze nie napisałem dokładnie programu, tylko kilka linii, dokładnie by uniknąć tego problemu. Jestem otwarty na wszystko! – Karlovsky120
Jakiego rodzaju program java będziesz pisać? Aplikacja internetowa korzystająca z JavaEE/JSF/etc lub coś innego? – jahroy