# Sprache ändern



## Kazuya38 (1. Dez 2016)

Hallo Leute,

undzwar hatte ich vor in meinem programm die möglichkeit zu bieten die Sprache zu ändern zwischen Deutsch und Englisch per klick eines JButtons nur verstehe ich nicht ganz wie man da vorgeht. Alle JLabels und JButtons sind schon auf Deutsch. Wie kann ich ich das so Programmieren das per JButton(z.B Sprache ändern) klick alle JButtons und JLabels auf englisch geswitcht werden und umgekehrt?

Danke im vorraus...


----------



## Joose (1. Dez 2016)

Dieser Link kann dir weiterhelfen für einen Überblick: https://docs.oracle.com/javase/tutorial/i18n/
Dieser Link zeigt ein simples Beispiel: https://docs.oracle.com/javase/tutorial/i18n/intro/after.html


----------



## Kazuya38 (1. Dez 2016)

Joose hat gesagt.:


> Dieser Link kann dir weiterhelfen für einen Überblick: https://docs.oracle.com/javase/tutorial/i18n/
> Dieser Link zeigt ein simples Beispiel: https://docs.oracle.com/javase/tutorial/i18n/intro/after.html


Danke für die Hilfe nur ich kriegs nicht zum laufem mit dem beispiel folgender fehler :/

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name MessagesBundle, locale en_US
   at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
   at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
   at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
   at Languages.I18NSample.main(I18NSample.java:25)


----------



## Joose (1. Dez 2016)

Einfach mal nach dieser Exception googeln  das finden sich genug die das selbe Problem gehabt haben.


----------



## Kazuya38 (1. Dez 2016)

Joose hat gesagt.:


> Einfach mal nach dieser Exception googeln  das finden sich genug die das selbe Problem gehabt haben.


Danke nochmal hab das Problem gelöst nur jetzt wie bringe ich die JButtons und JLabels mit ein  soll ich die Buttons und Labels in die Property datei packen oder wie läuft das, weil im beispiel sind das nur Sysos


----------



## Kazuya38 (1. Dez 2016)

Kazuya38 hat gesagt.:


> Danke nochmal hab das Problem gelöst nur jetzt wie bringe ich die JButtons und JLabels mit ein  soll ich die Buttons und Labels in die Property datei packen oder wie läuft das, weil im beispiel sind das nur Sysos




Oh ich habs Danke auf Youtube ist ein ganz einfaches Tutorial endlich


----------



## Joose (1. Dez 2016)

Aus dem Beispiel:

```
Locale currentLocale;
ResourceBundle messages;

currentLocale = new Locale(language, country);

messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("greetings"));
System.out.println(messages.getString("inquiry"));
System.out.println(messages.getString("farewell"));
```

Das `System.out.println` sagt doch nur was mit den String passieren soll die von `messages.getString(....)` zurückgegeben werden.
Ansonsten kannst du damit ganz normal arbeiten als wäre es ein String 


```
String buttonText = messages.getString("contactButton");
JButton b = new JButton(buttonText);
```

Sprich du müsstest bei allen Komponenten den Text neu setzen und das UI neu zeichnen lassen.
Was bei einem komplexen UI sicher sehr umständlich ist, aber ehrlich gesagt habe ich das noch nie probiert und kann dir hier nur zu Google raten 
Habe zum Beispiel sowas gefunden: http://stackoverflow.com/questions/...onalization-how-to-update-language-at-runtime


----------



## Kazuya38 (1. Dez 2016)

Danke für die Hilfe nur ein letztes Problem hab ich noch ich benutze Eclipse und bei Netbeans kann man für die Buttons und JLabels auf Automatic Internationalization(beim WindowBuilder) drücken dann erscheint die Bundle.properties datei und wie läuft da auf eclipse danke im vorraus :/


----------



## Thallius (1. Dez 2016)

Da gibt es das Menu Externalize Strings wenn du einen Rechtsklick auf das Projekt machst


----------



## Kazuya38 (1. Dez 2016)

Jo danke aber Bundle Properties wird nicht erstellt da wird messages.properties erstellt und eine klasse Messages weiss nicht was ich damit anfangen soll und die Button haben auf einmal in der messages.properties folgende namen bekommen Sprachen.0 = Bestätigen normalerweise stand bei Netbeans immer btnButton= Bestätigen ach man so ne sch... 

danke trotzdem für die Hilfe


----------



## Kazuya38 (3. Dez 2016)

Ich habs man muss einfach denn namen von messages.properties auf Bundle.properties umändern und eine neue properties datei erstellen für die gewünschte Sprache


----------



## dzim (5. Dez 2016)

Diese Zeile vom @Joose hier legt fest, wie das Namensschema der Properties-Datei aussieht:

```
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
```
Dementsprechend musst du

MessagesBundle.properties (sprachunabhängig, Fallback)
MessagesBundle_de.properties (Deutsch, allgemein)

MessagesBundle_de_DE.properties (Deutsch, Deutschland)

MessagesBundle_de_CH.properties (Deutsch, Schweiz)

...
Ich verwende meist, der Einfachheit halber ein Android-ähnliches Schema und nenne meine Dateien "_strings[_<language-code>[_<country-code>]].properties_"

Grüsse,
Daniel


----------

