🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: [SWT] Internacjonalizacja

#1301
From: Zbigniew Malec
Date: Mon, 07 Mar 2011 21:57
104 lines
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-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>

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