App-Sprache in der App ändern. Wo ist mein Denkfehler?

Thallius

Top Contributor
Hi,

ich benutze ResourceBundles um meine App zu lokalisieren. Klappt auch alles wunderbar. Trotzdem möchte der Auftraggeber die Möglichkeit die Sprache auch manuell in der App einstellen zu können (Ka warum aber der Kunde ist König).
Ich dachte mir also, ich manipuliere einfach meine Messages Klasse in der Form, dass ich ihn ein bestimmtes ResourceBundle laden lasse. Das klappt aber nicht.

Es gibt die beiden Dateien

meineApp.properties
meineApp_de_DE.properties

Die erste ist englisch die zweite deutsch.

Hier mal ein Testcode, der eigentlich die App ins Englische zwingen sollte. tut er aber nicht. Ist weiterhin alles schön deutsch.

Java:
public class Messages 
{
	private static final String bundleName = "meineApp"; //$NON-NLS-1$

	private static ResourceBundle resourceBundle=null; 

	public static void setBundle() 
	{
		try
		{
			Locale locale=new Locale("en");
			Messages.resourceBundle = ResourceBundle.getBundle(bundleName, locale);
		}
		catch (MissingResourceException e)
		{
			Logger.Log(e.getMessage());
		}
	}

	public static String getString(String key) 
	{
		try 
		{
			return resourceBundle.getString(key);
		} 
		catch (MissingResourceException e)
		{
			return '!' + key + '!';
		}
	}
...

setBundle() rufe ich im Main einmal auf um das resource Bundle zu setzen.

Warum klappt das so nicht?

Gruß

Claus
 
Zuletzt bearbeitet:
Nur eine Vermutung, habe selbst noch nicht so viel damit gemacht:
- Du rufst das ResourceBundle zur Locale.ENGLISH auf.
- Hierzu hast du aber kein entsprechendes properties-file
- also wird das default-file genommen
- default ist nun aber eventuell nicht das default-file nach Dateiendung, sondern möglicherweise das default vom System, was du auf deutsch stehen hast..

Füg doch nur zu Testzwecken einfach mal ein weiteres properties-file hinzu, welches zur Locale.ENGLISH passt
 
Nur eine Vermutung, habe selbst noch nicht so viel damit gemacht:
- Du rufst das ResourceBundle zur Locale.ENGLISH auf.
- Hierzu hast du aber kein entsprechendes properties-file
- also wird das default-file genommen
- default ist nun aber eventuell nicht das default-file nach Dateiendung, sondern möglicherweise das default vom System, was du auf deutsch stehen hast..

Füg doch nur zu Testzwecken einfach mal ein weiteres properties-file hinzu, welches zur Locale.ENGLISH passt

Ja Danke aber die Idee hatte ich auch schon und habe ein

meinApp_en_UK.properties und ein
mainApp_en.properties

erzeugt. Das hat aber auch nicht geholfen.

Gruß

Claus
 
ARGL,,,

stg du hattest doch recht. Ich hatte nur einen Tippfehler im Namen der en lokale.

Danke,

jetzt geht es erstmal weiter.

Gruß

Claus
 
Was ich noch nicht ganz verstehe: Warum hast du eine #setBundle()-Methode, lädst dort aber immer "en"... Eigentlich braucht doch diese Methode einen String-Parameter, mit dem man die Sprache auswählt, oder sehe ich das falsch?
 
Was ich noch nicht ganz verstehe: Warum hast du eine #setBundle()-Methode, lädst dort aber immer "en"... Eigentlich braucht doch diese Methode einen String-Parameter, mit dem man die Sprache auswählt, oder sehe ich das falsch?

Ich gehe einfach mal sehr stark davon aus, dass der Code-Schnipsel nur zu Testzwecken diente. Das Problem auf das Wesentliche reduziert. Die vorherige und spätere Verarbeitung interessiert ja für das hier auftretende Problem nicht bzw lässt sich das im Vorfeld schon leicht im Debugger oder sonst wie überprüfen.
Minimalbeispiele sind doch schon 🙂
 
Ich gehe einfach mal sehr stark davon aus, dass der Code-Schnipsel nur zu Testzwecken diente. Das Problem auf das Wesentliche reduziert. Die vorherige und spätere Verarbeitung interessiert ja für das hier auftretende Problem nicht bzw lässt sich das im Vorfeld schon leicht im Debugger oder sonst wie überprüfen.
Minimalbeispiele sind doch schon 🙂

Danke das Du es für mich erklärt hast 🙂

Das Ganze läuft jetzt übrigens wunderbar.

Gruß

Claus
 

Zurück
Oben