ローカリゼーション
GNU gettextを使用したアプリケーションのローカリゼーションは、ほんの少しの手間がかかりますが、比較的簡単です。すべてのローカリゼーション情報のプロジェクトのルートディレクトリにpo
サブディレクトリを作成します。
.potファイルと.poファイルの生成
メインのmeson.buildファイルに、ビルドプロセスにpo
サブディレクトリを含めます。
subdir('po')
このpo
サブディレクトリには、次が必要になります。
-
LINGUAS
:スペースで区切られた言語のリスト -
POTFILES
:翻訳可能な文字列をスキャンするソースファイルのリスト。 -
meson.build
:ローカリゼーションに特有のMesonファイル
LINGUAS
スペースで区切られた言語のリストを含むファイル。サンプルのLINGUASはこのようになります。
aa ab ae af
POTFILES
翻訳する文字列を見つけるためにgettextがスキャンする必要があるすべてのソースファイルがリストされたファイルです。このファイルの構文はソースファイルごとに1行で、行にはソースルートからの相対パスが含まれている必要があります。サンプルのPOTFILESはこのようになります。
src/file1.c
src/file2.c
src/subdir/file3.c
include/mything/somefile.h
meson.build
ローカリゼーションに特有のMesonファイルです。i18n
モジュールをインポートして使用します。事前に定義されていない場合は、GETTEXT_PACKAGE
グローバルを定義する必要があります。
i18n = import('i18n')
# define GETTEXT_PACKAGE
add_project_arguments('-DGETTEXT_PACKAGE="intltest"', language:'c')
i18n.gettext(meson.project_name())
最初のコマンドは、gettext機能を提供するi18n
モジュールをインポートします。4行目は、実際の呼び出しを実行します。最初の引数はgettextパッケージ名です。これにより、2つのことが起こります。1つ目は、Mesonがバイナリのmoファイルを作成し、インストール時にそれらを適切な場所に配置することです。2つ目は、メインのpotファイルを再生成するためのビルドルールを作成することです。Ninjaバックエンドを使用している場合、再ビルドを呼び出す方法は次のとおりです。
.potファイルの生成
次に、メインのpotファイルを生成する必要があります。potfileは任意の名前を付けることができますが、通常はgettextパッケージの名前です。プロジェクトがintltestという名前の場合を考えてみましょう。この場合、対応するpotファイルはintltest.pot
という名前になります。
ビルドフォルダーから、以下のコマンドを実行してpotファイルを生成します。生成後、手動で検査して、適切な著作権情報や連絡先情報を入力することをお勧めします。
$ meson compile intltest-pot
.poファイルの生成
上記の配列にリストされた各言語について、対応する.po
ファイルが必要です。これらはビルドフォルダーから次のコマンドを実行することで生成できます。
$ meson compile intltest-update-po
検索結果は次のとおりです。