ローカリゼーション

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

検索結果は次のとおりです。