TranslationManager - Sprachen & Übersetzungen in Unity managen

Übersetzungen sind immer ein wichtiges Thema bei der Entwicklung von Spielen. Viele Spieler werden weder deine Landessprache noch Englisch beherrschen. Du wirst also eine möglichst große Auswahl an gesprochenen Sprachen unterstützen wollen, oder zumindest die größten Sprachgruppen. Aber wie verwaltet man Übersetzungen in Unity am besten? Für einfache Texte hat sich für mich der TranslationManager bewährt.

So funktioniert der TranslationManager

Dieses Modul bietet einen Manager für die Übersetzung von Strings in Deiner Anwendung. Du kannst verschiedene Sprachen registrieren und zwischen ihnen wechseln. Die Übersetzungen werden in JSON- oder CSV-Dateien gespeichert. Der Manager lädt automatisch die richtige Datei für die jeweilige Sprache. Behaviours übersetzen dann zum Beispiel automatisch Textfelder mit Hilfe des Services.

Übersetzungsdateien werden über adressierbare Assets geladen. Daher musst Du die Basisadresse der Übersetzungsdateien angeben. Dies kann der Ordner sein, in dem alle Dateien gespeichert sind. Der Manager wird versuchen, die entsprechende Übersetzungsdatei über ihren adressierbaren Namen zu laden. Der adressierbare Name muss derselbe sein wie der Sprachcode, den Du bei der Registrierung einer Sprache festlegst.

Du kannst neue Sprache registrieren:

TranslationManager.service?.RegisterLanguage("en", SystemLanguage.English);
TranslationManager.service?.RegisterLanguage("de", SystemLanguage.German);

Nun kannst Du zu einer bestimmten Sprache wechseln:

TranslationManager.service?.ChangeLanguage("en");

Die folgenden Übersetzungsdateien würden geladen werden:

/your/base/path/de

Der Übersetzungsdienst versucht zu erraten, ob die Datei im JSON- oder CSV-Format vorliegt. Es werden nur einfache Key-Value-Maps unterstützt.

Du kannst einen Übersetzungsstring mit der Get()-Methode abrufen:

TranslationManager.service?.Get("myKey");

Wenn der Übersetzungsstring nicht gefunden wird, wird der Schlüssel zurückgegeben und ein Fehler ausgegeben.

Übersetzungsstrings können Variablen enthalten. Du kannst diese Variablen an die Get()-Methode übergeben:

var variables = new Dictionary<string, string>();
variables.Add("username", "Alfred");
TranslationManager.service?.Get("welcome", variables);

Der Übersetzungsstring ist wie folgt definiert:

{
    "welcome": "Welcome :username!"
}

Dann wird die folgende Zeichenkette wird zurückgegeben:

"Willkommen Alfred!"

Du kannst die aktuelle Sprache abfragen:

var currentLanguage = TranslationManager.service?.language;

Und Du kannst prüfen, ob eine Sprache bereits registriert ist:

var isRegistered = TranslationManager.service?.IsRegistered("en");
var isRegistered = TranslationManager.service?.IsRegistered(SystemLanguage.English);

Dein Feedback ist wichtig!

Was hältst Du von den hier vorgestellten Services? Fehlt Dir etwas oder funktioniert etwas nicht wie erwartet? Wie immer freue ich mich über Feedback. Lass mich gerne wissen was Du über dieses Modul denkst. Dafür kannst Du zum Beispiel die Kommentarfunktion unter dem Artikel nutzen. Weitere Kontakt-Möglichkeiten findest Du auf hier. Wenn Du einen Bug gefunden hast oder Dir eine Erweiterung wünscht, erstelle bitte einen Issue im GitHub-Repository. Weitere Dokumentation findest Du wie immer in der README des entsprechenden Moduls.

Noch keine Kommentare vorhanden.