gettext を使ったローカライズ

CSV形式の 翻訳のインポート に加えて、GodotはGNU gettext(.po)形式で記述された翻訳ファイルの読み込みもサポートしています。

注釈

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

利点

  • gettextは標準形式であり、任意のテキストエディタまたは Poedit などのGUIエディタを使用して編集できます。
  • gettextは、TransifexWeblate などの翻訳プラットフォームでサポートされており、人々がローカライズに協力しやすくなります。
  • CSVに比べて、gettextは各ロケール用に個別のメッセージファイルがあるため、Gitなどのバージョン管理システムでより適切に動作します。
  • 複数行の文字列は、CSVファイルと比べるとgettextファイルで編集する方が便利です。

欠点

  • gettextはCSVよりも複雑な形式であり、ソフトウェアのローカライズを初めて行う人にとっては把握が難しい場合があります。
  • ローカリゼーションファイルを管理する人は、システムにgettextツールをインストールする必要があります。ただし、Godotはコンパイルされたメッセージオブジェクトファイル(.mo)を使用しないため、翻訳者はgettextツールをインストールしなくても作業をテストできます。

注意事項

  • Godotは独自のPOファイルパーサーをバックグラウンドで使用するため(GNU gettextのリファレンス実装よりも制限されています)、複数形化などの一部の機能はサポートされていません。

gettextツールのインストール

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

  • Windows: このページ からインストーラーをダウンロードします。すべてのアーキテクチャおよびバイナリタイプ(共有または静的)が機能します。疑わしい場合は、64ビットの静的インストーラーを選択してください。
  • macOS: Homebrew を使用して brew install gettext コマンドでgettextをインストールします。
  • Linux: ほとんどのディストリビューションでは、ディストリビューションのパッケージマネージャーから gettext パッケージをインストールします。

POテンプレート (POT)の手動作成

Godotは現在、xgettext を使用したソース文字列の抽出をサポートしていないため、.pot ファイルを手動で作成する必要があります。このファイルはプロジェクトディレクトリのどこにでも配置できますが、各ロケールは個別のファイルで定義されるため、サブディレクトリに保存することをお勧めします。

プロジェクトディレクトリに locale という名前のディレクトリを作成します。このディレクトリに、次の内容の messages.pot という名前のファイルを保存します:

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

msgid "Hello world!"
msgstr ""

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

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

pybabelを使ったPOテンプレート(POT)の作成

PythonツールpybabelはGodotをサポートしており、シーンファイルとスクリプトからPOTファイルを自動的に作成および更新するために使用できます。

babelbabel-godot をインストールした後、例えばpipを使用して:

pip install babel babel-godot

pybabelが処理する必要があるファイルを示すマッピングファイル(たとえば babelrc)を記述します(GDScriptをPythonとして処理することに注意してください。通常はこれで事足ります):

[python: **.gd]
encoding = utf-8

[godot_scene: **.tscn]
encoding = utf-8

pybabelを次のように実行できます:

pybabel extract -F babelrc -k text -k LineEdit/placeholder_text -k tr -o godot-l10n.pot .

抽出する必要があるものを指定するには、-k オプションを使用します。この場合、tr() への引数と、(コントロールノードで一般的に使用される)"text"、およびLineEditの "placeholder_text"という名前のプロパティが変換されます。

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

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

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

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

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

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

メッセージファイルをプロジェクトの翻訳として登録するには、プロジェクト設定を開き、ローカライズタブに移動します。翻訳で、追加…をクリックし、ファイルダイアログで .po ファイルを選択します。ロケールは、メッセージファイルの "Language:<code>\n" プロパティから推測されます。

注釈

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

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

POテンプレートを更新した後、POテンプレートで削除されたPOテンプレートに存在しなくなった文字列を削除すると同時に、新しい文字列を含むようにメッセージファイルを更新する必要があります。これは msgmerge ツールを使用して自動的に実行できます:

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

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

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

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

msgfmt fr.po --check

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