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äide – messages.properties:
game.title=My Awesome Game
menu.start=Start Game
menu.quit=Quit
hud.score=Score: {0}
Näide – messages_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).