
この記事では、翻訳ツールであるPoeditを活用してWordPressの翻訳ファイルを編集し、Webサイトを国際化対応する方法をご紹介します。
Poeditを使用して翻訳ファイルを編集する前に、国際化(i18n)とは何か、そしてWordPressにおける国際化の仕組みを理解しておくことが重要です。
以下では、Poeditの使用方法に入る前に、WordPressの国際化の仕様について詳しく説明します。
WordPressと国際化
国際化(Internationalization: i18n)とは、ソフトウェアやウェブサイトを複数の言語や文化に対応させるための設計・開発プロセスを指します。
これは、テーマやプラグインを他の言語に容易に翻訳できるようにすることを意味します。
WordPressは世界中で利用されており、そのプラグインやテーマは、特定の方法でコーディングすることで、他の言語への翻訳が容易になります。
これにより、開発者がすべての言語の翻訳ファイルを作成する必要がなくなり、コミュニティによる翻訳が可能となります。
WordPressの国際化方法
テーマやプラグインのテキストを簡単に翻訳するには、テキストをハードコードせずに、WordPressの国際化機能を介して、引数として渡す必要があります。
<h1>Profile Page</h1>
文字列を国際化関数に渡すことで、簡単に解析して翻訳できます。
<h1><?php _e( 'Profile Page' ) ?></h1>
テキストドメイン
テキストドメインは、WordPressのテーマやプラグインにおける翻訳機能を管理するための一意の識別子です。
これにより、WordPressは各テーマやプラグインの翻訳ファイルを適切に識別し、読み込むことが可能となります。
通常、テキストドメインにはテーマやプラグインの名前を使用します。
例えば、プラグイン名が「sample-plugin」の場合、テキストドメインも「sample-plugin」とするのが一般的です。
このテキストドメインは、翻訳関数の第二引数として指定されます。
<h1><?php _e( 'Profile Page', 'sample-plugin' ) ?></h1>
テキストドメインを指定することで、sample-themeドメインのProfile Pageというテキストを翻訳できます。
翻訳ファイルのローディング
WordPressの翻訳は、.poファイルと.moファイルという翻訳ファイルに保存され、ロードする必要があります。
翻訳ファイルは、多くの場合は.poファイルと.moファイルであり、.poファイルのテンプレートとなる.potファイルは含まれません。
これらは、load_theme_textdomain()やload_child_theme_textdomain()、またはload_plugin_textdomain()を使用してロードできます。
次の例は、プラグインの翻訳ファイルを読み込む例です。3番目の引数で翻訳ファイルを読み込むベースディレクトリを指定しています。
load_plugin_textdomain(
'sample-plugin' // slug
,false // deprecated
,dirname( plugin_basename( __FILE__ ) ).'/languages/' // dir
);
また、翻訳ファイルを /wp-content/languages/themes/ や /wp-content/languages/plugins/に置いた場合は、load_theme_textdomain()やload_plugin_textdomain()で指定したベースディレクトリも先に、翻訳ファイルがロードされます。
翻訳ファイルのファイル名
翻訳ファイルは、load_theme_textdomain()やload_child_theme_textdomain()、またはload_plugin_textdomain()で指定したベースディレクトリから、
- {言語コード}.mo
- {テキストドメイン}-{言語コード}.mo
のいずれかで読み込まれす。
今回の例では、
- ja_JP.mo(またはja.mo)
- sample-plugin-ja_JP.mo(またはsample-plugin-ja.mo)
となります。
なお、{locale}は言語を表すコードですが、日本国内は日本語しかないため、{locale}はjaで問題ありません。上記の例では、sample-plugin-ja.moが良いでしょう。
.poファイルの翻訳設定
では実際に、次の国際化関数を使った場合の翻訳ファイルの中身を見てみましょう。
<h1><?php _e( 'Profile Page', 'sample-plugin' ) ?></h1>
.poファイルの中身は次のようになります。
msgid "Profile Page"
sample-plugin-ja.po
msgstr "プロフィールページ"
msgidは翻訳する文字列のキーであり、msgstrは翻訳後の文字列です。
今回の例では、Profile Pageというキーを、日本語のプロフィールページという文字列に変換します。
Poeditを使った翻訳ファイルの作成

.poファイルをコンパイルして.moファイルを作るには、msgfmtコマンド、もしくはPoeditというツールを使います。ただし、msgfmtコマンドを使うにはgettext()コマンドをインストールするなどの手間があるため、Poeditの利用をお勧めします。
Poeditとは
Poeditとは、.poファイルを.moファイルにコンパイルできる、クロスプラットフォーム(Windows、Mac)に対応した無料ツールです。有料版もありますが、多くの場合はその機能は不要でしょう。
WordPressの開発者によれば、Poeditは.poファイルを編集するための「最も人気があるツールの一つ」とのことです。
Poeditを使った翻訳
.poファイルを読み込んで編集する
Poeditで.poファイルを開くと、ソーステキストと翻訳の一覧が表示されます。ソーステキストを選択すると、その対訳が編集できます。なお、ソーステキストはPoeditでは編集できません。
気になる対訳があれば、右側の「要確認」トグルをONにすれば、後ほど確認できます。

翻訳の編集を終えて保存すると、自動的に.moファイルも生成されます。
.potファイルから.poファイルを作成する
新しい言語を追加する場合は、Poeditで.potファイルを開いて.poファイルを生成します。
.poファイルの作成時の言語を選択します。
.poファイルが生成されたら翻訳を編集します。
翻訳ファイルのアップロード
編集した.poファイルと.moファイルを、WordPressにアップロードします。
テーマやプラグインが継続的にアップデートされることを考慮すると、翻訳ファイルはWordPressの共通言語フォルダに配置するのが望ましいです。
これは、テーマやプラグインのフォルダに翻訳ファイルを置くと、アップデート時にそれらが上書きされ、翻訳が失われる可能性があるためです。
- テーマの翻訳ファイル:/wp-content/languages/themes/
- プラグインの翻訳ファイル: /wp-content/languages/plugins/
これらのディレクトリに翻訳ファイルを配置することで、テーマやプラグインのアップデート後も翻訳が保持される可能性が高まります。
WordPress 6.7以降は翻訳ファイルの読み込み方法が変更になった
WordPressのバージョンによっては翻訳ファイルの読み込み方法が変更されることがあります。
たとえば、WordPress 6.7以降では、翻訳ファイルの参照先の優先度や翻訳処理の仕様が変更されています。そのため、テーマやプラグインの開発者は、最新のWordPressの仕様に合わせて翻訳ファイルの読み込み方法を調整する必要があります。
Translations and styling gone after WP 6.7 update | WordPress.org
Translations and styling gone after WP 6.7 update bladeke (@bladeke) 4 months, 2 weeks ago After WP upgrade to 6.7, the custom styling and also translations on the theme/child-theme are gone, even …
さらに、翻訳ファイルのパーミッション設定にも注意が必要です。
最低限、読み込み可能なパーミッション(例:444)を設定しないと、WordPressが翻訳ファイルを正しく読み込めない場合があります。
以上の点を踏まえ、翻訳ファイルの配置場所や設定を適切に行うことで、テーマやプラグインのアップデート時にも翻訳が維持され、サイトの多言語対応を安定して行うことができます。
まとめ
WordPressは日本国内でも広く普及していますが、高品質なプラグインの多くは英語圏で開発されており、日本語対応が進んでいない場合があります。
そのため、Webサイトをお客様に提供する際には、フロントエンド画面だけでなく、WordPressの管理メニューも日本語化することが重要です。
これは、ブラウザの翻訳機能では限界があり、必ずしもお客様が望む適切な日本語表現にならないことがあるためです。
この記事が、皆さまのWebサイトの日本語化対応にお役立ていただければ幸いです。