【WordPress】テーマの翻訳対応(gettextと.po/.moファイル)

WordPress

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を使えば効率的に翻訳ファイルを管理でき、多言語展開や海外ユーザーへの配布にも柔軟に対応できます。