Mängu lokaliseerimine

Miks lokaliseerimine?

Lokaliseerimine tähendab mängu tekstide eraldamist koodist, et toetada mitut keelt. Selle asemel et kirjutada tekstid otse koodi, hoitakse neid eraldi failides – nii saab keelt vahetada ilma koodi muutmata. i18n ehk internationalization tähendab mängu ettevalmistamist mitme keele toetamiseks

Tõlkefailide loomine

Loo kaust assets/i18n/ ja lisa sinna .properties failid. Faili nimi peab lõppema keelekoodiga:

assets/i18n/messages.properties # vaikekeel (inglise)
assets/i18n/messages_et.properties # eesti keel

Näidemessages.properties:

game.title=My Awesome Game
menu.start=Start Game
menu.quit=Quit
hud.score=Score: {0}

Näidemessages_et.properties:

game.title=Minu Uhke Mäng
menu.start=Alusta mängu
menu.quit=Välju
hud.score=Skoor: {0}

NB! Faili kodeering peab olema UTF-8, muidu eesti tähed (ä, ö, ü) ei kuva õigesti.

I18NBundle kasutamine koodis

Laadi tõlkefail create() meetodis ja kasuta get() meetodit teksti kuvamiseks:

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.utils.I18NBundle;
import com.badlogic.gdx.Gdx;
import java.util.Locale;

public class MyGame extends ApplicationAdapter {
    I18NBundle bundle;

    @Override
    public void create() {
        // Laeb messages_et.properties (eesti keel)
        bundle = I18NBundle.createBundle(
        Gdx.files.internal("i18n/messages"),
        new Locale("et")
        );
    }

    @Override
    public void render() {

    // Lihtne tekst
    String title = bundle.get("game.title");

    // Tekst parameetriga ({0} asendatakse väärtusega)
    String score = bundle.format("hud.score", 42);
    }
}

Keele vahetamine

Keele vahetamiseks laadi bundle uuesti soovitud Locale'ga:

public void setLanguage(String langCode) {
    bundle = I18NBundle.createBundle(
    Gdx.files.internal("i18n/messages"),
    new Locale(langCode)
    );
}

// Kasutus:
setLanguage("et"); // eesti keel
setLanguage("en"); // inglise keel

Kui soovitud keele faili ei leita, kasutab LibGDX automaatselt vaikekeelt (messages.properties ilma keelekoodita).