Article View: pl.comp.lang.ruby
Article #1279Re: [SWT] Internacjonalizacja
From: Zbigniew Malec
Date: Mon, 07 Mar 2011 22:57
Date: Mon, 07 Mar 2011 22:57
105 lines
3558 bytes
3558 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
Message-ID:
<8xy0x5mjg9dj.2h5tkjzzip8t.dlg@40tude.net>
Path:
polish.pugleaf.net!archive.newsdeef.eu!mbox2nntp-pl.comp.lang.ruby.mbox.zip!g2news2.google.com!news1.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!newsfeed.pionier.net.pl!news.gazeta.pl!not-for-mail
References:
<ijuort$qi4$1@news.onet.pl> <ikr4f0$1ig$1@news.onet.pl> <p83hvonarioj$.1epyxc6os9qs6.dlg@40tude.net> <il3iaq$pcn$1@news.onet.pl>