.pot・.po・.mo:WordPress の言語ファイルの役割と翻訳方法
· 2026年10月18日 更新· 2026年9月23日 に実画面で確認
テーマやプラグインには、翻訳可能な文字列をすべて含み、訳文が空の .pot ファイルが同梱されています。これを対象言語の .po にコピーして訳文を入力し、その .po を .mo にコンパイルします。WordPress が実行時に読み込むのは .mo で、.po だけではサイトの表示は変わりません。
入力した訳文がサイトに反映されない場合、一般的な原因はコンパイルしていないか、ファイル名が正しくないかのいずれかです。どちらもこのページの後半で説明しています。
3 種類のファイル
- .pot:テンプレート。テーマやプラグイン内の翻訳可能な文字列がすべて含まれ、訳文は空です。開発者がソースコードから生成します。編集せず、コピーして使います。
- .po:1 言語分の訳文。人が読めるテキストで、各原文の下に訳文が並びます。翻訳作業はこのファイルで行います。
- .mo:.po をコンパイルしたファイル。バイナリ形式で、人が読むためのものではありません。WordPress が読み込むのはこのファイルです。
WordPress 6.5 以降は 4 つめの形式として .l10n.php があります。読み込みが速く、存在する場合は優先され、.mo はフォールバックになります。手動で作成する必要はなく、WordPress が生成するため、追加した覚えのないファイルが言語フォルダに表示されることがあります。
.pot ファイルの翻訳手順
- .pot ファイルを探します。通常はプラグインやテーマのフォルダ内の
languages/にあります。 - 次の節の命名規則に従い、対象言語の
.poファイルとしてコピーします。 - 項目を翻訳します。PO エディタで 1 件ずつ、または一括で翻訳できます。プレースホルダーは原文とまったく同じにしてください。
- .po を .mo にコンパイルし、両方を WordPress が読み込む場所に置きます。gettext がインストールされていない場合は、無料のブラウザ版コンパイラを利用できます。
ファイルが大きい場合は、PO / POT 翻訳ツールでファイル全体を 1 回で翻訳し、同じ形式で書き出せます。送信されるのは文字列だけで、ファイルはアップロードされません。
ファイル名の規則
WordPress は {テキストドメイン}-{ロケール}.mo という名前でファイルを探します。1 文字でも異なると WordPress はそのファイルを読み込まず、エラーや通知なしに英語に戻ります。翻訳済みのファイルが反映されない原因として最も多いのがこれです。
- テキストドメインはプラグインやテーマ固有のもので、
woocommerce、twentytwentyfive、my-cool-pluginなどです。プラグインヘッダーで宣言され、フォルダ名と同じとは限りません。 - ロケールは 2 文字の言語コードではなく、WordPress のロケールです。日本語は
ja、アラビア語はar、フィンランド語はfiで地域コードは付きません。一方、簡体字中国語はzh_CN、英語はen_US、フランス語はfr_FRです。 - 元のファイル名にロケールが含まれている場合(
woocommerce-en_US.poなど)は、それを外してから新しいロケールを付けます。外さないとwoocommerce-en_US-ja.moのような、どのロケールにも一致しない名前になります。
ファイルの配置場所
WordPress は 2 か所から訳文を読み込みます。プラグインやテーマの更新時の扱いが異なります。
wp-content/languages/plugins/とwp-content/languages/themes/:推奨。 WordPress が先に参照する場所で、プラグインやテーマの更新で上書きされません。- プラグインやテーマ自身の
languages/フォルダ:読み込まれますが、次の更新でフォルダごと置き換わり、訳文も削除されます。
訳文が反映されない場合の確認手順
.moファイルがあることを確認します。.poだけでは反映されません。- ファイル名が厳密に
{テキストドメイン}-{ロケール}.moであることを確認します。テキストドメインはプラグインヘッダーで、ロケールは WordPress のロケール一覧で確認します。 - サイトの言語が 設定 → 一般 でその言語に設定されていることを確認します。
- ファイルが
wp-content/languages/…にあることを確認します。プラグインのフォルダにしかないファイルは、プラグインの更新時に削除されます。 - それでも反映されない場合は、オブジェクトキャッシュとページキャッシュを削除します。訳文はリクエストごとに 1 度だけ読み込まれ、キャッシュされます。
プレースホルダー
%1$s 件中 %2$s 件を表示 のような文字列には、PHP が値を入れるプレースホルダーが含まれています。訳文でプレースホルダーが欠ける、番号付きの形式を使わずに順序を入れ替える、%s を全角の %s にする、といった場合は、表示の問題ではなく実際のページで実行時エラーになります。ファイルを配置する前にプレースホルダーを確認してください。プレースホルダー検査のあるコンパイラはこれらの誤りを指摘します。
よくある質問
- .po ファイルだけをアップロードしてもよいですか。
- いいえ。WordPress が読み込むのは `.mo`(6.5 以降は `.l10n.php` も)で、`.po` は読み込みません。languages フォルダに `.po` を置いても反映されず、エラーも表示されないまま、サイトは英語のままになります。
- gettext や Poedit のインストールは必要ですか。
- コンパイルには必要ありません。ブラウザのツールで、インストールなしに .po を .mo に変換できます。[AumCreate の PO コンパイラ](/tools/po-compiler?utm_source=guide&utm_medium=tutorial&utm_campaign=po-files)はブラウザ内で処理するため、ファイルはアップロードされません。1 行ずつ細かく編集する場合は、デスクトップの PO エディタが適しています。
- .pot に含まれていない文字列はどうすればよいですか。
- ソースコードで翻訳可能として指定されていないため、言語ファイルでは翻訳できません。テーマやプラグイン自体の修正が必要です。固定ページ・商品・投稿などのサイトのコンテンツは、.po ファイルではなく多言語プラグインで翻訳します。
- テーマは翻訳されたのに、プラグインが英語のままなのはなぜですか。
- テーマとプラグインはそれぞれ固有のテキストドメインと言語ファイルを持つため、一方を翻訳しても他方には影響しません。WordPress が対応する言語では、多くのプラグインが translate.wordpress.org から自動で訳文を取得します。商用プラグインは対象外であることが多くあります。
このガイドで使うプラグイン
AumLang対応する Elementor、Gutenberg、WooCommerce コンテンツを翻訳し、言語別 URL、hreflang、言語別 canonical 設定、多言語サイトマップに対応します。プラグインのページ →