Up to date

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

gettext を使ったローカライズ

In addition to 翻訳のインポート in CSV format, Godot also supports loading translation files written in the GNU gettext format (text-based .po and compiled .mo since Godot 4.0).

注釈

gettextの概要については、A Quick Gettext Tutorial をご覧ください。 Cプロジェクトを念頭に置いて書かれていますが、アドバイスの多くはGodotにも当てはまります(``xgettext``を除く)。

利点

  • gettextは標準形式であり、任意のテキストエディタまたは Poedit などのGUIエディタを使用して編集できます。

  • gettextは、TransifexWeblate などの翻訳プラットフォームでサポートされており、人々がローカライズに協力しやすくなります。

  • CSVに比べて、gettextは各ロケール用に個別のメッセージファイルがあるため、Gitなどのバージョン管理システムでより適切に動作します。

  • 複数行の文字列は、CSVファイルと比べるとgettextファイルで編集する方が便利です。

欠点

  • gettextはCSVよりも複雑な形式であり、ソフトウェアのローカライズを初めて行う人にとっては把握が難しい場合があります。

  • People who maintain localization files will have to install gettext tools on their system. However, as Godot supports using text-based message files (.po), translators can test their work without having to install gettext tools.

gettextツールのインストール

メッセージファイルの更新などのメンテナンス操作を実行するには、コマンドラインのgettextツールが必要です。したがって、それらをインストールすることを強くお勧めします。

  • Windows: このページ からインストーラーをダウンロードします。すべてのアーキテクチャおよびバイナリタイプ(共有または静的)が機能します。疑わしい場合は、64ビットの静的インストーラーを選択してください。

  • macOS: Install gettext either using Homebrew with the brew install gettext command, or using MacPorts with the sudo port install gettext command.

  • Linux: ほとんどのディストリビューションでは、ディストリビューションのパッケージマネージャーから gettext パッケージをインストールします。

Creating the PO template

Automatic generation using the editor

Since Godot 4.0, the editor can generate a PO template automatically from specified scene and script 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.

Open the Project Settings' Localization > POT Generation tab, then use the Add… button to specify the path to your project's scenes and scripts that contain localizable strings:

Creating a PO template in the Localization > POT Generation tab of the Project Settings

Creating a PO template in the Localization > POT Generation tab of the Project Settings

After adding at least one scene or script, click Generate POT in the top-right corner, then specify the path to the output file. This file can be placed anywhere in the project directory, but it's recommended to keep it in a subdirectory such as locale, as each locale will be defined in its own file.

You can then move over to creating a messages file from a PO template.

注釈

Remember to regenerate the PO template after making any changes to localizable strings, or after adding new scenes or scripts. Otherwise, newly added strings will not be localizable and translators won't be able to update translations for outdated strings.

Manual creation

If the automatic generation approach doesn't work out for your needs, you can create a PO template by hand in a text editor. This file can be placed anywhere in the project directory, but it's recommended to keep it in a subdirectory, as each locale will be defined in its own file.

Create a directory named locale in the project directory. In this directory, save a file named messages.pot with the following contents:

# 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 ""

gettextのメッセージは、msgidmsgstr のペアで構成されています。msgid はソース文字列(通常は英語)で、msgstr は翻訳された文字列です。

警告

POテンプレートファイル(.pot)の msgstr 値は常に空である必要があります。代わりに、生成された .po ファイルでローカライズが行われます。

POテンプレートからメッセージファイルを作成する

msginit コマンドは、POテンプレートをメッセージファイルに変換するために使用されます。たとえば、フランス語のローカライズファイルを作成するには、locale ディレクトリで次のコマンドを使用します:

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

上記のコマンドは、POテンプレートと同じディレクトリに fr.po という名前のファイルを作成します。

または、Poeditを使用してグラフィカルに行うか、選択したWebプラットフォームにPOTファイルをアップロードします。

Godot でのメッセージ ファイルの読み込み

To register a messages file as a translation in a project, open the Project Settings, then go to the Localization tab. In Translations, click Add… then choose the .po or .mo file in the file dialog. The locale will be inferred from the "Language: <code>\n" property in the messages file.

注釈

Godotでの翻訳のインポートとテストの詳細については、ゲームの国際化 を参照してください。

POテンプレートに従うようにメッセージファイルを更新する

After updating the PO template, you will have to update message files so that they contain new strings, while removing strings that are no longer present in the PO template. This can be done automatically using the msgmerge tool:

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

元のメッセージファイル(この例では fr.po~ として保存される)のバックアップを保持する場合は、--backup=none 引数を削除します。

注釈

After running msgmerge, strings which were modified in the source language will have a "fuzzy" comment added before them in the .po file. This comment denotes that the translation should be updated to match the new source string, as the translation will most likely be inaccurate until it's updated.

Strings with "fuzzy" comments will not be read by Godot until the translation is updated and the "fuzzy" comment is removed.

POファイルまたはテンプレートの有効性の確認

以下のコマンドを実行すると、gettextファイルの構文が有効かどうかを確認できます:

msgfmt fr.po --check

構文エラーまたは警告がある場合は、コンソールに表示されます。そうでなければ、msgfmt は何も出力しません。

Using binary MO files (useful for large projects only)

For large projects with several thousands of strings to translate or more, it can be worth it to use binary (compiled) MO message files instead of text-based PO files. Binary MO files are smaller and faster to read than the equivalent PO files.

You can generate a MO file with the command below:

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

If the PO file is valid, this command will create a fr.mo file besides the PO file. This MO file can then be loaded in Godot as described above.

The original PO file should be kept in version control so you can update your translation in the future. In case you lose the original PO file and wish to decompile a MO file into a text-based PO file, you can do so with:

msgunfmt fr.mo > fr.po

The decompiled file will not include comments or fuzzy strings, as these are never compiled in the MO file in the first place.