# Eclipse: externalize String mit Mehrsprachigkeit



## mschlegel (19. Februar 2009)

Hallo

Ich habe mir diverse Strings von Eclipse in ein MessageBundle packen lassen. Eclipse hat mir dazu eine Klasse und eine Textdatei messages.properties angelegt. Ich bräuchte das ganze jetzt aber mit einer Textdatei pro Sprache (also messages_de.properties) und je nach übergebener Locale soll dann die richtige Datei ausgewählt werden.

Kann ich so etwas mittels Eclipse machen, oder wie würde eine eigene Klasse dafür ausschauen?

Danke


----------



## zeja (20. Februar 2009)

Bei mir sehen die Klassen die auf ResourceBundles zugreifen immer so in der Art aus:

```
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class ResourceBundleTranslationProvider {

	private ResourceBundle bundle;
	private final String baseName;

	public ResourceBundleTranslationProvider(String baseName, Locale locale) {
		this.baseName = baseName;
		setLocale(locale);
	}

	@Override
	public Locale getLocale() {
		if(bundle == null){
			return Locale.getDefault();
		}
		return bundle.getLocale();
	}

	@Override
	public void setLocale(Locale locale) {
		try {
			bundle = ResourceBundle.getBundle(baseName, locale,
					new FallbackEnglishControl());
		} catch (MissingResourceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public String translate(String key) {
		if (key == null) {
			return undefined(key);
		}
		if (bundle == null) {
			return undefined(key);
		}
		try {
			final String translation = bundle.getString(key);
			if (translation == null) {
				return undefined(key);
			}
			return translation;
		} catch (java.util.MissingResourceException ex) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return undefined(key);
	}

	private String undefined(String key) {
		return key;
	}

	private static class FallbackEnglishControl extends ResourceBundle.Control {

		@Override
		public Locale getFallbackLocale(String baseName, Locale locale) {
			if (locale.equals(Locale.ENGLISH)) {
				return null;
			}
			return Locale.ENGLISH;
		}

	}
}
```


----------

