# Mehrsprachige Programme in Java



## Zilchinger (10. September 2005)

Hi,
ich implementiere gerade ein Tool, welches in mehreren Sprachen verfügbar sein soll.
Ich wollte mal fragen welche Lösungen es für die Mehrsprachigkeit gibt.
Zur Zeit mach ich das über Properties! Gibt es da noch was eleganteres?

Danke schonmal...


----------



## matdacat (10. September 2005)

Fest steht, dass die Texte während der Laufzeit eingelesen werden müssen. Ich finde ein Property-File für jede angebotene Sprache eine gute Lösung. Die sind einfach zu lesen und vor allem auch einfach zu erstellen.


----------



## RedWing (11. September 2005)

Hallo man koennte es auch mittels eines Ressourcebundles loesen:


```
import java.util.*;

public class Dictionary extends ResourceBundle{
        protected Hashtable<String,String> words = new Hashtable<String,String>();

        public Enumeration<String> getKeys(){
                return words.keys();
        }

        public String handleGetObject(String key){
                return words.get(key);
        }

        public ResourceBundle getParent(){
                return parent;
        }
}
```


```
public class MyDictionary extends Dictionary{
        public MyDictionary(){
                words.put("Hi", "Hello");
                words.put("To", "World");

        }
}
```


```
public class MyDictionary_de extends Dictionary{
        public MyDictionary_de(){
                words.put("Hi", "Hallo");
                words.put("To", "Welt");
        }
}
```


```
public class MyDictionary_de_CH extends Dictionary{
        public MyDictionary_de_CH(){
                words.put("Hi", "Gruezi");
                words.put("To", "Schwiez");
        }
}
```


```
public class MyDictionaryTest{
        private static void sayHello(Locale loc){
                ResourceBundle dictbundle = ResourceBundle.getBundle("MyDictionary", loc);
                if(dictbundle != null){
                        System.out.print(dictbundle.getString("Hi") + ", ");
                        System.out.println(dictbundle.getString("To"));
                }
        }

        public static void main(String[] args){
                sayHello(Locale.getDefault());
                sayHello(new Locale("de", "CH"));
                sayHello(new Locale("us", "US"));

        }
}
```

Die unterschiedlichen Endungen der Klasse (die Locales) stellen eine 
Hierarchie dar. Ganz oben steht MyDictionary, MyDictionary_de_CH 
ist eine sublocale von MyDictionary_de.
Wenn das angeforderte Resourcebundle in dieser Hierarchie nicht 
vorhanden ist (sayHello(new Locale("us", "US")) wird automatisch das 
das Bundle dahergenommen welches in der Hierarchie ganz oben steht
(Defaultverhalten) nämlich MyDictionary...

Gruß

RedWing


----------



## Zilchinger (11. September 2005)

Suppi,
danke, ich wollte nur mal fragen ob es Alternativen gibt.

Schönen Abend noch...


----------



## Thomas Darimont (11. September 2005)

Hallo!

 Soviel mal zum ResourceBundle:
http://www.tutorials.de/tutorials183993.html&highlight=Locale

 (Sun) Tutorials:
http://java.sun.com/docs/books/tutorial/i18n/
http://java.sun.com/developer/technicalArticles/Intl/IntlIntro/

 Gruß Tom


----------

