WordPressのテーマを国際化対応(i18n)させることで、多言語環境で利用する際に翻訳が容易になります。gettext関数を使ったコード修正と、翻訳ファイル(.po/.mo)の準備が基本です。ここではテーマを翻訳対応させるための流れを整理します。
gettext関数を使って文字列を翻訳対応させる
テーマ内にベタ書きした文字列をそのままでは翻訳できません。gettext関数を用いて「翻訳可能な文字列」としてマークアップします。
<?php
// 基本
_e('続きを読む', 'mytheme');
// 翻訳済み文字列を返す
echo __('コメントを表示', 'mytheme');
// 書式指定
printf(__('ようこそ、%sさん', 'mytheme'), $username);
// コンテキストを加える場合
_x('投稿', 'noun', 'mytheme');
関数に共通して「テキストドメイン」を指定する必要があります。ここではテーマの識別子として「mytheme」を利用します。
テキストドメインの読み込み
functions.phpにload_theme_textdomainを追加し、翻訳ファイルを読み込ませます。languagesディレクトリをテーマ直下に作成し、その中に.po/.moファイルを配置します。
<?php
add_action('after_setup_theme', function () {
load_theme_textdomain('mytheme', get_template_directory() . '/languages');
});
.po/.moファイルの生成
翻訳ファイルはgettext形式で、.poがテキスト編集可能な翻訳定義、.moが実際にWordPressが読み込むバイナリファイルです。通常はPoeditやwp-cli、Loco Translateプラグインなどで生成します。
– Poeditを使う方法
1. Poeditで新規翻訳カタログを作成
2. テキストドメインやテーマ情報を設定
3. ソースコードをスキャンし、gettext関数で囲まれた文字列を抽出
4. 翻訳を追加して保存すると「ja.po」と「ja.mo」がlanguagesフォルダに出力される
– WP-CLIを使う方法
コマンドラインからpotファイルを作り、翻訳に利用できます。
wp i18n make-pot ./ ./languages/mytheme.pot --exclude=node_modules
翻訳ファイルの配置と読み込み
ファイル名は「ロケール.po/.mo」に揃えます。日本語なら「ja.po」「ja.mo」、英語(米国)なら「en_US.po」「en_US.mo」となります。
mytheme/
├─ functions.php
└─ languages/
├─ ja.po
├─ ja.mo
└─ mytheme.pot
WordPressの言語設定が日本語ならja.moが自動的に適用されます。
翻訳対応のベストプラクティス
– テーマ内のテキストはすべてgettext関数で囲む
– テキストドメインはテーマフォルダ名に統一する
– 複数の文脈で同じ単語を使う場合は_xや_nを使って曖昧さを排除する
– 翻訳ファイルはlanguagesフォルダにまとめる
– テキストドメインをload_theme_textdomainで必ず登録する
まとめ
WordPressテーマを翻訳対応させるには、gettext関数で文字列をマークし、テキストドメインを設定し、.po/.moファイルを用意して読み込ませます。PoeditやWP-CLIを使えば効率的に翻訳ファイルを管理でき、多言語展開や海外ユーザーへの配布にも柔軟に対応できます。