Article View: pl.comp.lang.ruby
Article #1301Re: [SWT] Internacjonalizacja
From: Zbigniew Malec
Date: Mon, 07 Mar 2011 21:57
Date: Mon, 07 Mar 2011 21:57
104 lines
4395 bytes
4395 bytes
On Mon, 07 Mar 2011 22:22:26 +0100, Mariusz Pieniążek wrote:
> Dzięki za odpowiedź. Z trzymaniem listy raczej odpuszczę. Zostanę przy
> ResourceBundle. Chciałbym mieć listę dostępnych języków. Pewnie muszę
> stworzyć jakąś kontrolkę typu lista lub combo i tam trzymać jakoś listę
> dostępnych języków w postaci stringów lub enuma. Klikam na dany język
> wywołując słuchacza wywołującego getBundle. I restart aplikacji
> rozumiem? Tylko skąd moja aplikacja javowa będzie teraz wiedziała jaką
> lokalizację (czyli plik properties z danym tłumaczeniem stringów)
> załadować? Przechowywać tę informację gdzieś w zewnętrznym pliku
> konfiguracyjnym? Rozumiem, że Locale.getDefault() pobierze mi
> lokalizację na podstawie aktualnej lokalizacji systemu operacyjnego
> (czyli na starcie moja aplikacja javowa będzie w języku systemu
> operacyjnego)?
Nie bardzo rozumiem o co chodzi z tym trzymaniem listy. O te wszystkie
komponenty z tekstem?
Co do restartu - dość drastyczne - lepiej po prostu napisać użytkownikowi
widomość, że zmiany języka zaczną obowiązywać od następnego restartu i jak
użytkownik będzie potrzebował, to sobie sam zrestartuje. Byłoby bardzo źle,
jakby stracił swoją pracę przez samą zmianę języka aplikacji :}
Możesz też zmieniać język w locie, tylko że wtedy musisz jednak mieć jakąś
listę tych wszystkich obiektów.
Jeżeli nie chcesz, żeby aplikacja zapominała, jaki język użytkownik sobie
wybrał, to oczywiście trzeba gdzieś to zapisać w konfiguracji programu.
Użycie properties jest sposobem wygodnym i łatwym w obsłudze.
Jeżeli chodzi o odpalenie początkowe, to bym po prostu zastosował default,
że jak w konfiguracji nie ma słowa na temat locale, to ustawiamy domyślne
(albo Locale.getDefault() albo jakieś wcześniej ustalone).
Możesz rozważyć też utworzenie hierarchii listenerów związanych z
poszczególnymi komponentami i centralnego rejestru komponentów zależnych od
języka, np (tak na szybko, więc mogą być błędy):
class I18nManager {
public static final I18nManager INSTANCE = new I18nManager();
private I18nManager() {
}
public void addLocaleChangeListener(LocaleChangeListener listener) {
...
}
public void removeLocaleChangeListener(LocaleChangeListener listener)) {
...
}
public void setLocale(Locale locale) {
this.locale = locale;
for(LocaleChangeListener listener : listeners) {
listener.localeChanged(locale);
}
}
public String getMessage(String key) {
//zwroc tekst bazujac na Locale oraz kluczu
}
}
public interface LocaleChangedListener
{
void localeChanged(Locale locale);
}
public class LabelLocaleChangedListener implements LocaleChangedListener
{
public LabelLocaleChangedListener(String messageKey, Label label) {
this.messageKey = messageKey;
this.label = label;
localeChanged(I18nManager.INSTANCE.getCurrentLocale());
}
@Override
public void localeChanged(Locale locale) {
label.setText(I18nManager.INSTANCE.getMessage(messageKey));
}
}
//analogicznie na innych potrzebnych komponentów
a potem w kodzie
Label sexLabel = new Label();
I18nManager.INSTANCE.addLocaleChangedListener(new
LabelChangedListener(sexLabel, "com.mycompany.hr.employee.sex");
container.add(sexLabel, ...);
a w listenerze combo boxa wołać
I18nManager.INSTANCE.setCurrentLocale(locale);
i się samo zrobi.
--
Pozdrawiam
Zbyszek Malec
Technical Details
Message-ID:
<8xy0x5mjg9dj.2h5tkjzzip8t.dlg@40tude.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<ijuort$qi4$1@news.onet.pl> <ikr4f0$1ig$1@news.onet.pl> <p83hvonarioj$.1epyxc6os9qs6.dlg@40tude.net> <il3iaq$pcn$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: Zbigniew Malec <alpha@invalid.invalid> Newsgroups: pl.comp.lang.ruby Subject: Re: [SWT] Internacjonalizacja Date: Mon, 7 Mar 2011 22:57:44 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 104 Message-ID: <8xy0x5mjg9dj.2h5tkjzzip8t.dlg@40tude.net> References: <ijuort$qi4$1@news.onet.pl> <ikr4f0$1ig$1@news.onet.pl> <p83hvonarioj$.1epyxc6os9qs6.dlg@40tude.net> <il3iaq$pcn$1@news.onet.pl> NNTP-Posting-Host: 89-75-68-72.dynamic.chello.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1299535065 12997 89.75.68.72 (7 Mar 2011 21:57:45 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Mon, 7 Mar 2011 21:57:45 +0000 (UTC) X-User: zbyszanna User-Agent: 40tude_Dialog/2.0.15.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit