Temat: [SWT] Lokalizacja/Internacjonalizacja
Po kolei:
Pliki i18n powinny byc tworzene wedlug standardowej struktury sufixow, np:
labels.properties (plik domyslny)
labels_pl_PL.properties (plik z polskimi etykietami)
labels_de.properties (plik z niemieckimi etykietami)
itp.
W aplikacji może być combobox, albo inny rodzaj przycisków, które zapewnia użytkownikowi funkcjonalność wyboru języka. Wywołanie takiej akcji (klikniecie) powinno robić cos takiego:
ResourceBundle bundle = ResourceBundle.getBundle("org.ts.i18n.labels", Locale.ENGLISH);
// Gdzie pierwszy atrybut funkcji odwoluje sie do pliki domyslnego z etykietami (w tym przypadku jest rowniez dolaczona sciezka pakietowa)
// Drugi atrybut okresla lokalizacje, w tym przypadku jest to angielska, zatem JAVA sama bedzie wiedziala, ze powinna szukac etykiet w pliki _en. W aplikacji w zaleznosci od wybranego elementu z combobox powinien ten atrybut sie zmieniac, tzn jesli np. użytkownik wybierze z combobox'a jezyk niemiecki, to ta metoda powinna wygladac tak:
ResourceBundle bundle = ResourceBundle.getBundle("org.ts.i18n.labels", Locale.GERMAN);
Dla polskich etykiet:
ResourceBundle bundle = ResourceBundle.getBundle("org.ts.i18n.labels", new Locale("pl","PL"));
I tyle, pozniej etykiety wywoluje sie standardowo:
bundle.getString("message") (gdzie 'message' jest w tym przypadku kluczem w pliku properties).
Co do odpowiedzi:
1. Co do języka domyślnego, to zazwyczaj będzie to język systemu operacyjnego?
2. Aplikacji nie trzeba restartować, po prostu musisz wywołać raz jeszcze funkcje, która wczyta odpowiedni plik properties, a co ty z tym dalej zrobisz to już twoja decyzja. Oczywiście, jeśli masz gotowe GUI z etykietami, to one nagle się nie zmienia, trzeba je będzie zmienić na podstawie nowych etykiet.
Przykladowa strona pokazujaca w kilku linijkach kodu jak korzystac z takich rzeczy:
http://www.kodejava.org/examples/220.htmlTomasz Stachlewski edytował(a) ten post dnia 07.03.11 o godzinie 23:19