🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.ruby
Article #1279

Re: [SWT] Internacjonalizacja

#1279
From: Zbigniew Malec
Date: Mon, 07 Mar 2011 22:57
105 lines
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>