Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Lokalisierung mittels gettext

Zusätzlich zu Übersetzungen importieren im CSV-Format unterstützt Godot auch das Laden von Übersetzungsdateien, die im GNU gettext-Format geschrieben wurden (textbasierte .po und kompilierte .mo seit Godot 4.0).

Bemerkung

Eine Einführung in gettext finden Sie in A Quick Gettext Tutorial. Es wurde mit Blick auf C-Projekte geschrieben, aber viele der Ratschläge gelten auch für Godot (mit Ausnahme von xgettext).

Vorteile

  • gettext ist ein Standardformat, dass mit jedem Texteditor oder GUI-Editor wie Poedit editiert werden kann.

  • gettext wird von Übersetzungsplattformen wie Transifex und Weblate unterstützt, wodurch die Zusammenarbeit bei der Lokalisierung erleichtert wird.

  • Im Vergleich zu CSV funktioniert gettext besser mit Versionsverwaltungssystemen wie Git, da jedes Gebietsschema seine eigene Übersetzungsdatei hat.

  • Mehrzeilige Strings lassen sich in gettext-Dateien bequemer bearbeiten als in CSV-Dateien.

Nachteile

  • gettext ist ein komplexeres Format als CSV und kann für Personen, die neu in der Softwarelokalisierung sind, schwieriger zu verstehen sein.

  • Wer Lokalisierungsdateien pflegt, muss gettext-Tools auf seinem System installieren. Da Godot jedoch die Verwendung textbasierter Nachrichtendateien (.po) unterstützt, können Übersetzer ihre Arbeit testen, ohne gettext-Tools installieren zu müssen.

Installation der gettext-Tools

Die gettext-Tools für die Kommandozeile sind erforderlich, um Wartungsarbeiten wie die Aktualisierung von Übersetzungsdateien durchzuführen. Es wird daher dringend empfohlen, sie zu installieren.

  • Windows: Laden Sie ein Installationsprogramm von dieser Seite herunter. Jede Architektur und jeder Binärtyp (dynamisch oder statisch) funktioniert; im Zweifelsfall wählen Sie das statische 64-Bit-Installationsprogramm.

  • macOS: Installieren Sie gettext entweder über Homebrew mit dem Befehl brew install gettext, oder über MacPorts mit dem Befehl sudo port install gettext.

  • Linux: Bei den meisten Distributionen installieren Sie das Paket gettext über den Paketmanager Ihrer Distribution.

Erstellen der PO-Vorlage

Automatische Generierung über den Editor

Since Godot 4.0, the editor can generate a PO template automatically from specified scene and GDScript files. This POT generation also supports translation contexts and pluralization if used in a script, with the optional second argument of tr() and the tr_n() method.

Öffnen Sie in den Projekteinstellungen das Tab Lokalisierung > POT-Generierung und verwenden Sie den Button Hinzufügen..., um den Pfad zu den Szenen und Skripten Ihres Projekts anzugeben, die lokalisierbare Strings enthalten:

Erstellen einer PO-Vorlage auf dem Tab Lokalisierung > POT-Generierung in den Projekteinstellungen

Erstellen einer PO-Vorlage auf dem Tab Lokalisierung > POT-Generierung der Projekteinstellungen

Nachdem Sie mindestens eine Szene oder ein Skript hinzugefügt haben, klicken Sie auf POT Erstellen in der oberen rechten Ecke und geben dann den Pfad zur Ausgabedatei an. Diese Datei kann an beliebiger Stelle im Projektverzeichnis abgelegt werden, aber es wird empfohlen, sie in einem Unterverzeichnis wie locale abzulegen, da jedes Gebietsschema in einer eigenen Datei definiert wird.

Sie können dann zu Erstellung einer Nachrichtendatei aus einer PO-Vorlage übergehen.

Bemerkung

Denken Sie daran, die PO-Vorlage neu zu generieren, nachdem Sie Änderungen an lokalisierbaren Strings vorgenommen oder neue Szenen oder Skripte hinzugefügt haben. Andernfalls werden neu hinzugefügte Strings nicht lokalisierbar sein und Übersetzer werden nicht in der Lage sein, Übersetzungen für veraltete Strings zu aktualisieren.

Manuelle Erstellung

Wenn die automatische Generierung für Ihre Bedürfnisse nicht geeignet ist, können Sie eine PO-Vorlage von Hand in einem Texteditor erstellen. Diese Datei kann an beliebiger Stelle im Projektverzeichnis abgelegt werden, aber es wird empfohlen, sie in einem Unterverzeichnis zu speichern, da jedes Gebietsschema in einer eigenen Datei definiert wird.

Erstellen Sie ein Verzeichnis namens locale im Projektverzeichnis. Speichern Sie in diesem Verzeichnis eine Datei namens messages.pot mit folgendem Inhalt:

# Don't remove the two lines below, they're required for gettext to work correctly.
msgid ""
msgstr ""

# Example of a regular string.
msgid "Hello world!"
msgstr ""

# Example of a string with pluralization.
msgid "There is %d apple."
msgid_plural "There are %d apples."
msgstr[0] ""
msgstr[1] ""

# Example of a string with a translation context.
msgctxt "Actions"
msgid "Close"
msgstr ""

Nachrichten in gettext werden aus msgid und msgstr-Paaren gebildet. msgid ist der Quellstring (normalerweise in Englisch), msgstr ist der übersetzte String.

Warnung

Der Wert msgstr in PO-Vorlagendateien (.pot) sollte immer leer sein. Die Lokalisierung wird stattdessen in den erzeugten .po-Dateien durchgeführt.

Erstellen einer Übersetzungsdatei aus einer PO-Vorlage

Der Befehl msginit wird verwendet, um eine PO-Vorlage in eine Übersetzungsdatei zu verwandeln. Um zum Beispiel eine französische Lokalisierungsdatei zu erstellen, verwenden Sie den folgenden Befehl im Verzeichnis locale:

msginit --no-translator --input=messages.pot --locale=fr

Der obige Befehl erzeugt eine Datei namens fr.po im selben Verzeichnis wie die PO-Vorlage.

Alternativ können Sie dies auch grafisch mit Poedit erledigen oder die POT-Datei auf die Webplattform Ihrer Wahl hochladen.

Laden einer Übersetzungsdatei in Godot

Um eine Übersetzungsdatei als Übersetzung in einem Projekt zu registrieren, öffnen Sie die Projekteinstellungen und gehen Sie dann auf den Tab Lokalisierung. In Übersetzungen, klicken Sie auf Hinzufügen... und wählen Sie die Datei .po oder .mo im Dateidialog. Das Gebietsschema wird aus der "Sprache: <code>\n"-Property in der Übersetzungsdatei abgeleitet.

Bemerkung

Weitere Informationen zum Importieren und Testen von Übersetzungen in Godot finden Sie unter Übersetzung von Spielen.

Aktualisieren der Übersetzungsdateien, um der PO-Vorlage zu folgen

Nach der Aktualisierung der PO-Vorlage müssen Sie die Übersetzungsdateien so aktualisieren, dass sie neue Strings enthalten, und gleichzeitig Strings entfernen, die in der PO-Vorlage nicht mehr vorhanden sind. Dies kann automatisch mit dem Tool msgmerge geschehen:

# The order matters: specify the message file *then* the PO template!
msgmerge --update --backup=none fr.po messages.pot

Wenn Sie eine Sicherungskopie der ursprünglichen Übersetzungsdatei behalten wollen (die in diesem Beispiel als fr.po~ gespeichert würde), entfernen Sie das Argument --backup=none.

Bemerkung

Nach der Ausführung von msgmerge werden Strings, die in der Ausgangssprache geändert wurden, in der Datei .po mit einem "fuzzy"-Kommentar versehen. Dieser Kommentar zeigt an, dass die Übersetzung aktualisiert werden sollte, um mit dem neuen Quellstring übereinzustimmen, da die Übersetzung höchstwahrscheinlich ungenau sein wird, bis sie aktualisiert ist.

Strings mit ""fuzzy"-Kommentaren werden nicht von Godot gelesen, bis die Übersetzung aktualisiert und der "fuzzy"-Kommentar entfernt wurde.

Überprüfen der Gültigkeit einer PO-Datei oder -Vorlage

Sie können überprüfen, ob die Syntax einer gettext-Datei gültig ist, indem Sie den folgenden Befehl ausführen:

msgfmt fr.po --check

Wenn es Syntaxfehler oder Warnungen gibt, werden sie in der Konsole angezeigt. Ansonsten wird msgfmt nichts ausgeben.

Verwendung von binären MO-Dateien (nur bei großen Projekten sinnvoll)

Bei großen Projekten mit mehreren Tausend oder mehr zu übersetzenden Strings kann es sich lohnen, binäre (kompilierte) MO-Übersetzungsdateien anstelle von textbasierten PO-Dateien zu verwenden. Binäre MO-Dateien sind kleiner und schneller zu lesen als die entsprechenden PO-Dateien.

Sie können eine MO-Datei mit dem folgenden Befehl erzeugen:

msgfmt fr.po --no-hash -o fr.mo

Wenn die PO-Datei gültig ist, erzeugt dieser Befehl neben der PO-Datei eine fr.mo-Datei. Diese MO-Datei kann dann wie oben beschrieben in Godot geladen werden.

Die ursprüngliche PO-Datei sollte in der Versionsverwaltung aufbewahrt werden, damit Sie Ihre Übersetzung in Zukunft aktualisieren können. Falls Sie die ursprüngliche PO-Datei verlieren und eine MO-Datei in eine textbasierte PO-Datei dekompilieren möchten, können Sie dies mit tun:

msgunfmt fr.mo > fr.po

Die dekompilierte Datei enthält keine Kommentare oder Fuzzy-Strings, da diese in der MO-Datei gar nicht erst kompiliert werden.