2026年10月20日
2026年10月20日
WordPressのテーマで国際化(i18n/l10n)を実装する方法
はじめに
WordPressのテーマ開発において、多言語対応は多くのウェブサイトにとって重要な要素です。国際化(i18n)とローカライゼーション(l10n)を適切に行うことで、テーマが簡単に複数の言語に対応することができます。
症状・背景
この記事が必要になる主な場面:
- テーマ開発者が多言語対応のウェブサイトを作成する場合
- クライアントが特定の地域向けにローカル化されたテーマを必要とする場合
- WordPressプラグインを使用せずに、独自で翻訳ファイルを管理したい場合
手順・設定方法
ステップ1: テーマ内のメッセージの抽出
# WordPressのテーマディレクトリに移動します。
cd wp-content/themes/your-theme-name/
# テーマ内の全てのphpファイルから、gettext関数を用いた翻訳対象のメッセージを抽出し、ポケージファイルを作成します。
xgettext --from-code=UTF-8 -o languages/your-theme.pot --keyword=_ --keyword=__ --keyword=esc_attr__ --keyword=esc_html__ --language=PHP ./*.php ./includes/*.php
ステップ2: ポケージファイルから特定言語の翻訳ファイルを生成
# 作成したポケージファイル(your-theme.pot)をもとに、具体的な言語の翻訳ファイルを作成します。例えば、日本語版は以下のように生成します。
msginit --input=languages/your-theme.pot --output-file=languages/ja_JP.po --locale=ja_JP
# 他の言語も同様に作成できます。例:英語版
msginit --input=languages/your-theme.pot --output-file=languages/en_US.po --locale=en_US
ステップ3: テーマ内で翻訳ファイルを読み込む
# functions.php かテーマの初期化関数に、load_theme_textdomain 関数を使って翻訳ファイルを読み込みます。
add_action( 'after_setup_theme', 'mytheme_setup' );
function mytheme_setup() {
load_theme_textdomain('your-theme-name', get_template_directory() . '/languages');
}
# テーマのテンプレートファイルで、gettext関数を使ってメッセージを翻訳します。
echo esc_html__( 'Welcome to our website!', 'your-theme-name' );
ステップ4: 翻訳ファイルの更新とアップデート
# 新しいメッセージが追加された場合や既存のメッセージが変更になった場合は、再度ポケージファイルを生成し、翻訳ファイルを更新します。
xgettext --from-code=UTF-8 -o languages/your-theme.pot --keyword=_ --keyword=__ --keyword=esc_attr__ --keyword=esc_html__ --language=PHP ./*.php ./includes/*.php
# 既存のPO/POTファイルを最新版に更新します。例えば、日本語版は以下のように更新します。
msgmerge -U languages/ja_JP.po languages/your-theme.pot
注意事項
- 翻訳ファイルを適切な場所(themes/your-theme/languages/)に配置すること。
- テーマのアップデート時に翻訳ファイルが上書きされないように注意すること。
- 複数言語のウェブサイトでは、wp-config.php で WordPress のデフォルト言語を設定する必要がある場合があります。例:define('WPLANG', 'ja_JP');
- テーマの翻訳ファイルは、開発者のみが管理し、クライアントやユーザーに直接触れることがないように注意すること。
まとめ
1. メッセージの抽出: xgettextを使用してテーマ内のすべての翻訳可能なテキストを抽出します。
2. 翻訳ファイルの生成: msginitコマンドを使って特定言語の翻訳ファイルを作成します。
3. 読み込みと使用: テーマ内で翻訳ファイルを読み込み、gettext関数を使用してメッセージを翻訳します。
4. 更新: 新しいメッセージや変更点に対応するために、定期的に翻訳ファイルを更新します。
関連記事: