Localizing jME 3 Games

Scope

Localizing an application can mean several things:

There are tools that assist you with localizing Java Swing GUIs. jME3 applications do not typically have a Swing GUI, so those tools are not of much help. Just stick to the normal Java rules about using Bundle Properties:

Preparing the Localization

Tip: The jMonkeyPlatform supports opening and editing Bundle.properties files. Also note the Tools > Localization menu.

To prepare the application for localization, you have to first identify all hard-coded messages.

  1. Find every line in your jME3 game where you hard-coded message strings, e.g.
    System.out.print("Hello World!");
    UiText.setText("Score: "+score);
  2. Create one file named Bundle.properties in each directory where there are Java file that contain messages.
  3. For every hard-coded message, you add one line to the Bundle.properties file: First specify a unique key that identifies this string; then an equal sign; and the literal string itself.
    greeting=Hello World!
    score.display=Score: 
  4. In the source code, replace every occurence of a hard-coded message with the appropriate Resource Bundle call to its unique key:
    ResourceBundle.getBundle("Bundle").getString("greeting"));
    UiText.setText(ResourceBundle.getBundle("Bundle").getString("score.display")+score);

The language used in the Bundle.properties files will be the default language for your game.

Translating the Messages

Each additional language comes in a set of files that is marked with a (usually) two-letter suffix. Common locales are de for German, en for English, fr for French, ja for Japanese, pt for Portuguese, etc.

To translate the messages to another language, for example, German:

  1. Make a copy of the Bundle.properties files.
  2. Name the copy Bundle_de.properties for German. Note the added suffix _de.
  3. Translate all strings (text on the right side of the equal sign) in the Bundle_de.properties to German.
    greeting=Hallo Welt!
    score.display=Spielstand: 

    Important: Do not modify any of the keys (text to the left of the equal sign)!

  4. To test the German localization, start the application from the command line with -Duser.language=de. Note the parameter de.

Tip: In the jMonkeyPlatform, you set this VM Option in the Project properties under Run. Here you can also save individual run configuraions for each language you want to test.

To get the full list of language suffixes use

Locale.getISOLanguages()));

Which Strings Not to Translate

Important: In the Bundle.properties file, do not include any strings that are asset paths, node or geometry names, input mappings, or material layers.

Only localize messages and UI text!

Common Localization Problems

Typical problems include:

More Documentation

http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/

http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Localisation

view online version