<figure class="wp-block-post-featured-image"><img width="320" height="180" src="https://wakatchi.dev/wp-content/uploads/2025/03/i18n-poedit-320x180.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="多言語翻訳アプリのコンセプトイラスト。スマートフォン画面に各国の国旗アイコンが表示され、翻訳機能を示す要素が周囲に配置されている。" style="object-fit:cover;" /></figure>
<p class="wp-block-paragraph">この記事では、翻訳ツールであるPoeditを活用してWordPressの翻訳ファイルを編集し、Webサイトを国際化対応する方法をご紹介します。</p>
<p class="wp-block-paragraph">Poeditを使用して翻訳ファイルを編集する前に、国際化(i18n)とは何か、そしてWordPressにおける国際化の仕組みを理解しておくことが重要です。</p>
<p class="wp-block-paragraph">以下では、Poeditの使用方法に入る前に、WordPressの国際化の仕様について詳しく説明します。</p>
<div class="wp-block-vk-blocks-table-of-contents-new vk_tableOfContents vk_tableOfContents-style- tabs" data-use-custom-levels="false" data-custom-levels=""><div class="tab"><div class="vk_tableOfContents_title">目次</div><input type="checkbox" id="chck-toc-zow33ivs"/><label class="tab-label vk_tableOfContents_openCloseBtn button_status button_status-open" for="chck-toc-zow33ivs" id="vk-tab-label-toc-zow33ivs">CLOSE</label><ul class="vk_tableOfContents_list tab_content-open">
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-b79e34e3-b58b-4b24-b25d-ab9184272bac" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1. </span>
WordPressと国際化
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-7e716576-575a-4054-a8b7-64c969a0e284" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.1. </span>
WordPressの国際化方法
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-6b0ba445-0b2d-4de2-b833-16b1fb1555e8" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.2. </span>
テキストドメイン
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-5219614e-f77d-4315-8d1c-ea5763def85b" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.3. </span>
翻訳ファイルのローディング
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-5">
<a href="#vk-htags-a15ff23f-9be1-43ea-9cb4-c9fbb535ff38" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.3.1.1. </span>
.potファイル(Portable Object Template)
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-5">
<a href="#vk-htags-c5717a69-ca9f-4063-b476-bfe275a02c9e" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.3.1.2. </span>
.poファイル(Portable Object)
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-5">
<a href="#vk-htags-d68c7bb9-8e83-4315-8cf5-3ad3daec43ae" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.3.1.3. </span>
.moファイル(Machine Object)
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-4f0023f1-08fb-4bd1-9f13-496bc5b3032f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.4. </span>
翻訳ファイルのファイル名
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-c8278f15-6a8f-4d7e-bed7-e4492b721862" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.5. </span>
.poファイルの翻訳設定
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-db8ea877-9a3f-4473-9c8f-887eae98b39f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">2. </span>
Poeditを使った翻訳ファイルの作成
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-5e54324b-3078-4bf3-a7cc-651a4db0e719" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">2.1. </span>
Poeditとは
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-6b0f962d-d758-479a-9c42-edda4f8a4082" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3. </span>
Poeditを使った翻訳
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#edit-po-file" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3.1. </span>
.poファイルを読み込んで編集する
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-6e30994e-1333-46e6-b340-b278bef79325" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3.2. </span>
.potファイルから.poファイルを作成する
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-c8d76828-d163-4ae3-b4e3-7a705d6e5fa6" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3.3. </span>
翻訳ファイルのアップロード
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-4">
<a href="#vk-htags-c8d76828-d163-4ae3-b4e3-7a705d6e5fa6-2" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3.3.1. </span>
WordPress 6.7以降は翻訳ファイルの読み込み方法が変更になった
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-4f0023f1-08fb-4bd1-9f13-496bc5b3032f-2" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4. </span>
まとめ
</a>
</li>
</ul></div></div>
<h2 class="wp-block-heading" id="vk-htags-b79e34e3-b58b-4b24-b25d-ab9184272bac">WordPressと国際化</h2>
<p class="wp-block-paragraph">国際化(Internationalization: i18n)とは、ソフトウェアやウェブサイトを複数の言語や文化に対応させるための設計・開発プロセスを指します。</p>
<p class="wp-block-paragraph">これは、テーマやプラグインを他の言語に容易に翻訳できるようにすることを意味します。</p>
<p class="wp-block-paragraph">WordPressは世界中で利用されており、そのプラグインやテーマは、特定の方法でコーディングすることで、他の言語への翻訳が容易になります。</p>
<p class="wp-block-paragraph">これにより、開発者がすべての言語の翻訳ファイルを作成する必要がなくなり、コミュニティによる翻訳が可能となります。</p>
<h3 class="wp-block-heading" id="vk-htags-7e716576-575a-4054-a8b7-64c969a0e284">WordPressの国際化方法</h3>
<p class="wp-block-paragraph">テーマやプラグインのテキストを簡単に翻訳するには、テキストをハードコードせずに、WordPressの国際化機能を介して、引数として渡す必要があります。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code><h1>Profile Page</h1></code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">文字列を国際化関数に渡すことで、簡単に解析して翻訳できます。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code><h1><?php _e( 'Profile Page' ) ?></h1></code></pre></div>
<p class="wp-block-paragraph"></p>
<h3 class="wp-block-heading" id="vk-htags-6b0ba445-0b2d-4de2-b833-16b1fb1555e8">テキストドメイン</h3>
<p class="wp-block-paragraph">テキストドメインは、WordPressのテーマやプラグインにおける翻訳機能を管理するための一意の識別子です。</p>
<p class="wp-block-paragraph">これにより、WordPressは各テーマやプラグインの翻訳ファイルを適切に識別し、読み込むことが可能となります。</p>
<p class="wp-block-paragraph">通常、テキストドメインにはテーマやプラグインの名前を使用します。</p>
<p class="wp-block-paragraph">例えば、プラグイン名が「sample-plugin」の場合、テキストドメインも「sample-plugin」とするのが一般的です。</p>
<p class="wp-block-paragraph">このテキストドメインは、翻訳関数の第二引数として指定されます。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code><h1><?php _e( 'Profile Page', 'sample-plugin' ) ?></h1></code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">テキストドメインを指定することで、sample-themeドメインのProfile Pageというテキストを翻訳できます。</p>
<div class="wp-block-vk-blocks-alert vk_alert alert alert-info has-alert-icon"><div class="vk_alert_icon"><div class="vk_alert_icon_icon"><i class="fa-solid fa-circle-info" aria-hidden="true"></i></div><div class="vk_alert_icon_text"><span></span></div></div><div class="vk_alert_content">
<p class="wp-block-paragraph">テキストドメイン名は、アンダースコアではなくダッシュを使い、また小文字にする必要があります。</p>
</div></div>
<p class="wp-block-paragraph"></p>
<h3 class="wp-block-heading" id="vk-htags-5219614e-f77d-4315-8d1c-ea5763def85b">翻訳ファイルのローディング</h3>
<p class="wp-block-paragraph">WordPressの翻訳は、.poファイルと.moファイルという<span data-color="#f78da7" style="background: linear-gradient(transparent 60%,rgba(247, 141, 167, 0.7) 0);" class="vk_highlighter">翻訳ファイル</span>に保存され、ロードする必要があります。</p>
<div class="wp-block-vk-blocks-border-box vk_borderBox vk_borderBox-background-transparent has-text-color has-vk-color-primary-dark-color is-style-vk_borderBox-style-solid-kado-tit-banner"><div class="vk_borderBox_title_container has-background has-vk-color-primary-dark-background-color"><i class=""></i><h4 class="vk_borderBox_title" id="vk-border-box-e764106f-e9af-4d20-a457-76ce2efce213">WordPressの翻訳ファイル</h4></div><div class="vk_borderBox_body">
<p class="wp-block-paragraph">WordPressは、フリーソフトウェアの国際化で最も普及しているツールである、GNUの<a href="https://www.gnu.org/software/gettext/" data-type="link" data-id="https://www.gnu.org/software/gettext/"><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">gettext</span>()</a>という仕組みを使っています。.poファイルや.moファイルはWordPress独自ではなく、<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">gettext</span>()に従ったものです。</p>
<p class="wp-block-paragraph">WordPressの翻訳ファイルには、以下の3種類があります。</p>
<h5 class="wp-block-heading" id="vk-htags-a15ff23f-9be1-43ea-9cb4-c9fbb535ff38">.potファイル(Portable Object Template)</h5>
<p class="wp-block-paragraph">Portable Object Templateファイル。</p>
<p class="wp-block-paragraph">翻訳可能な文字列のテンプレートファイルで、翻訳者が具体的な言語の翻訳を行う際の元となります。</p>
<h5 class="wp-block-heading" id="vk-htags-c5717a69-ca9f-4063-b476-bfe275a02c9e">.poファイル(Portable Object)</h5>
<p class="wp-block-paragraph">.potファイルを基に、各言語への翻訳を記述したテキストファイルです。人間が読みやすい形式で、テキストエディタで編集可能です。 </p>
<h5 class="wp-block-heading" id="vk-htags-d68c7bb9-8e83-4315-8cf5-3ad3daec43ae">.moファイル(Machine Object)</h5>
<p class="wp-block-paragraph">.poファイルをコンパイルして生成されるバイナリファイルで、WordPressが実際に翻訳に使用するファイルです。</p>
</div></div>
<p class="wp-block-paragraph">翻訳ファイルは、多くの場合は.poファイルと.moファイルであり、.poファイルのテンプレートとなる.potファイルは含まれません。</p>
<p class="wp-block-paragraph">これらは、<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_theme_textdomain</span>()や<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_child_theme_textdomain</span>()、または<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_plugin_textdomain</span>()を使用してロードできます。</p>
<p class="wp-block-paragraph">次の例は、プラグインの翻訳ファイルを読み込む例です。3番目の引数で翻訳ファイルを読み込むベースディレクトリを指定しています。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>load_plugin_textdomain(
'sample-plugin' // slug
,false // deprecated
,dirname( plugin_basename( __FILE__ ) ).'/languages/' // dir
);</code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">また、翻訳ファイルを /wp-content/languages/themes/ や /wp-content/languages/plugins/に置いた場合は、<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_theme_textdomain</span>()や<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_plugin_textdomain</span>()で指定したベースディレクトリも先に、翻訳ファイルがロードされます。</p>
<h3 class="wp-block-heading" id="vk-htags-4f0023f1-08fb-4bd1-9f13-496bc5b3032f">翻訳ファイルのファイル名</h3>
<p class="wp-block-paragraph">翻訳ファイルは、<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_theme_textdomain</span>()や<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_child_theme_textdomain</span>()、または<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">load_plugin_textdomain</span>()で指定したベースディレクトリから、</p>
<ul class="wp-block-list is-style-vk-check-mark">
<li>{言語コード}.mo</li>
<li>{テキストドメイン}-{言語コード}.mo</li>
</ul>
<p class="wp-block-paragraph">のいずれかで読み込まれす。</p>
<p class="wp-block-paragraph">今回の例では、</p>
<ul class="wp-block-list is-style-vk-check-mark">
<li>ja_JP.mo(またはja.mo)</li>
<li>sample-plugin-ja_JP.mo(またはsample-plugin-ja.mo)</li>
</ul>
<p class="wp-block-paragraph">となります。</p>
<p class="wp-block-paragraph">なお、{locale}は言語を表すコードですが、日本国内は日本語しかないため、{locale}はjaで問題ありません。上記の例では、sample-plugin-ja.moが良いでしょう。</p>
<h3 class="wp-block-heading" id="vk-htags-c8278f15-6a8f-4d7e-bed7-e4492b721862">.poファイルの翻訳設定</h3>
<p class="wp-block-paragraph">では実際に、次の国際化関数を使った場合の翻訳ファイルの中身を見てみましょう。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code><h1><?php _e( 'Profile Page', 'sample-plugin' ) ?></h1></code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">.poファイルの中身は次のようになります。</p>
<blockquote class="wp-block-quote has-white-color has-black-background-color has-text-color has-background is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">msgid "Profile Page"<br>msgstr "プロフィールページ"</p>
<cite>sample-plugin-ja.po</cite></blockquote>
<p class="wp-block-paragraph">msgidは翻訳する文字列のキーであり、msgstrは翻訳後の文字列です。</p>
<p class="wp-block-paragraph">今回の例では、Profile Pageというキーを、日本語のプロフィールページという文字列に変換します。</p>
<h2 class="wp-block-heading" id="vk-htags-db8ea877-9a3f-4473-9c8f-887eae98b39f">Poeditを使った翻訳ファイルの作成</h2>
<figure class="wp-block-image size-full"><img src="https://matchfy.dev/wp-content/uploads/2023/10/image.jpg" alt="" class="wp-image-233"/></figure>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">.poファイルをコンパイルして.moファイルを作るには、<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">msgfmt</span>コマンド、もしくはPoeditというツールを使います。ただし、msgfmtコマンドを使うには<span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">gettext</span>()コマンドをインストールするなどの手間があるため、Poeditの利用をお勧めします。</p>
<h3 class="wp-block-heading" id="vk-htags-5e54324b-3078-4bf3-a7cc-651a4db0e719">Poeditとは</h3>
<p class="wp-block-paragraph">Poeditとは、.poファイルを.moファイルにコンパイルできる、クロスプラットフォーム(Windows、Mac)に対応した無料ツールです。有料版もありますが、多くの場合はその機能は不要でしょう。</p>
<p class="wp-block-paragraph">WordPressの開発者によれば、Poeditは.poファイルを編集するための「最も人気があるツールの一つ」とのことです。</p>
<div class="wp-block-vk-blocks-button vk_button vk_button-color-custom vk_button-align-wide"><a href="https://poedit.net/" class="vk_button_link btn has-background has-vk-color-primary-background-color btn-md" role="button" aria-pressed="true" rel="noopener"><div class="vk_button_link_caption"><span class="vk_button_link_txt">Poedit - translation editorをダウンロード</span></div></a></div>
<p class="wp-block-paragraph"></p>
<h2 class="wp-block-heading" id="vk-htags-6b0f962d-d758-479a-9c42-edda4f8a4082">Poeditを使った翻訳</h2>
<p class="wp-block-paragraph"></p>
<h3 class="wp-block-heading" id="edit-po-file">.poファイルを読み込んで編集する</h3>
<p class="wp-block-paragraph">Poeditで.poファイルを開くと、ソーステキストと翻訳の一覧が表示されます。ソーステキストを選択すると、その対訳が編集できます。なお、ソーステキストはPoeditでは編集できません。</p>
<p class="wp-block-paragraph">気になる対訳があれば、右側の「要確認」トグルをONにすれば、後ほど確認できます。</p>
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img src="https://matchfy.dev/wp-content/uploads/2023/10/スクリーンショット-2023-10-27-11.18.33.jpg" alt="" class="wp-image-234" style="aspect-ratio:0.9877913429522752;width:573px;height:auto"/></figure>
</div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">翻訳の編集を終えて保存すると、自動的に.moファイルも生成されます。</p>
<h3 class="wp-block-heading" id="vk-htags-6e30994e-1333-46e6-b340-b278bef79325">.potファイルから.poファイルを作成する</h3>
<p class="wp-block-paragraph">新しい言語を追加する場合は、Poeditで.potファイルを開いて.poファイルを生成します。</p>
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://matchfy.dev/wp-content/uploads/2023/10/スクリーンショット-2023-10-27-11.29.23.png"><img src="https://matchfy.dev/wp-content/uploads/2023/10/スクリーンショット-2023-10-27-11.29.23.png" alt="" class="wp-image-235" style="aspect-ratio:0.9002145922746781;width:566px;height:auto"/></a></figure>
</div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">.poファイルの作成時の言語を選択します。</p>
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://matchfy.dev/wp-content/uploads/2023/10/スクリーンショット-2023-10-27-11.30.17.jpg"><img src="https://matchfy.dev/wp-content/uploads/2023/10/スクリーンショット-2023-10-27-11.30.17.jpg" alt="" class="wp-image-236" style="aspect-ratio:0.8968850698174007;width:575px;height:auto"/></a></figure>
</div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">.poファイルが生成されたら<a href="#edit-po-file" data-type="internal" data-id="#edit-po-file">翻訳を編集</a>します。</p>
<h3 class="wp-block-heading" id="vk-htags-c8d76828-d163-4ae3-b4e3-7a705d6e5fa6">翻訳ファイルのアップロード</h3>
<p class="wp-block-paragraph">編集した.poファイルと.moファイルを、WordPressにアップロードします。</p>
<p class="wp-block-paragraph">テーマやプラグインが継続的にアップデートされることを考慮すると、翻訳ファイルはWordPressの共通言語フォルダに配置するのが望ましいです。</p>
<p class="wp-block-paragraph">これは、テーマやプラグインのフォルダに翻訳ファイルを置くと、アップデート時にそれらが上書きされ、翻訳が失われる可能性があるためです。</p>
<ul class="wp-block-list">
<li>テーマの翻訳ファイル:<strong><span data-color="#f78da7" style="background: linear-gradient(transparent 60%,rgba(247, 141, 167, 0.7) 0);" class="vk_highlighter">/wp-content/languages/themes/ </span></strong></li>
<li>プラグインの翻訳ファイル:<span data-color="#f78da7" style="background: linear-gradient(transparent 60%,rgba(247, 141, 167, 0.7) 0);" class="vk_highlighter"><strong> /wp-content/languages/plugins/</strong></span></li>
</ul>
<p class="wp-block-paragraph">これらのディレクトリに翻訳ファイルを配置することで、テーマやプラグインのアップデート後も翻訳が保持される可能性が高まります。</p>
<h4 class="wp-block-heading" id="vk-htags-c8d76828-d163-4ae3-b4e3-7a705d6e5fa6-2">WordPress 6.7以降は翻訳ファイルの読み込み方法が変更になった</h4>
<p class="wp-block-paragraph">WordPressのバージョンによっては翻訳ファイルの読み込み方法が変更されることがあります。</p>
<p class="wp-block-paragraph">たとえば、WordPress 6.7以降では、翻訳ファイルの参照先の優先度や翻訳処理の仕様が変更されています。そのため、テーマやプラグインの開発者は、最新のWordPressの仕様に合わせて翻訳ファイルの読み込み方法を調整する必要があります。 </p>
<div class="wp-block-vk-blocks-blog-card has-border-color is-layout-flow wp-block-vk-blocks-blog-card-is-layout-flow" style="border-color:#0000001f;border-width:1px;border-radius:5px;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-e37897db wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.3%"><figure class="wp-block-vk-blocks-blog-card-featured-image"><a href="https://wordpress.org/support/topic/translations-and-styling-gone-after-wp-6-7-update/" target="_self" ><img src='https://s.w.org/images/home/wordpress-default-ogimage.png' class="has-border-color" style="border-color:#0000001f;border-radius:5px;border-width:1px;object-fit:cover;" /></a></figure></div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.6%"><h5 class="wp-block-vk-blocks-blog-card-title"><a href="https://wordpress.org/support/topic/translations-and-styling-gone-after-wp-6-7-update/" target="_self" >Translations and styling gone after WP 6.7 update | WordPress.org</a></h5>
<div class="wp-block-vk-blocks-blog-card-excerpt"><p class="wp-block-vk-blocks-blog-card-excerpt__excerpt">Translations and styling gone after WP 6.7 update bladeke (@bladeke) 1 year, 7 months ago After WP upgrade to 6.7, the custom styling and also translations on the theme/child-theme are gone, even t…</p></div>
<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-17ef6164 wp-block-group-is-layout-flex"><figure class="wp-block-vk-blocks-blog-card-site-logo wp-container-content-b8e8afd0"><a href="https://wordpress.org" target="_self" ><img src='https://s.w.org/favicon.ico?2' /></a></figure>
<p class="wp-block-vk-blocks-blog-card-site-title"><a href="https://wordpress.org" target="_self" >WordPress.org Forums</a></p></div>
</div>
</div>
</div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">さらに、翻訳ファイルのパーミッション設定にも注意が必要です。</p>
<p class="wp-block-paragraph">最低限、読み込み可能なパーミッション(例:444)を設定しないと、WordPressが翻訳ファイルを正しく読み込めない場合があります。 </p>
<p class="wp-block-paragraph">以上の点を踏まえ、翻訳ファイルの配置場所や設定を適切に行うことで、テーマやプラグインのアップデート時にも翻訳が維持され、サイトの多言語対応を安定して行うことができます。</p>
<h2 class="wp-block-heading" id="vk-htags-4f0023f1-08fb-4bd1-9f13-496bc5b3032f-2">まとめ</h2>
<p class="wp-block-paragraph">WordPressは日本国内でも広く普及していますが、高品質なプラグインの多くは英語圏で開発されており、日本語対応が進んでいない場合があります。</p>
<p class="wp-block-paragraph">そのため、Webサイトをお客様に提供する際には、フロントエンド画面だけでなく、WordPressの管理メニューも日本語化することが重要です。</p>
<p class="wp-block-paragraph">これは、ブラウザの翻訳機能では限界があり、必ずしもお客様が望む適切な日本語表現にならないことがあるためです。</p>
<p class="wp-block-paragraph">この記事が、皆さまのWebサイトの日本語化対応にお役立ていただければ幸いです。</p>
この記事では、翻訳ツールであるPoeditを活用してWordPressの翻訳ファイルを編集し、Webサイトを国際化対応する方法をご紹介します。
Poeditを使用して翻訳ファイルを編集する前に、国際化(i18n)とは何か、そしてWordPressにおける国際化の仕組みを理解しておくことが重要です。
以下では、Poeditの使用方法に入る前に、WordPressの国際化の仕様について詳しく説明します。
国際化(Internationalization: i18n)とは、ソフトウェアやウェブサイトを複数の言語や文化に対応させるための設計・開発プロセスを指します。
これは、テーマやプラグインを他の言語に容易に翻訳できるようにすることを意味します。
WordPressは世界中で利用されており、そのプラグインやテーマは、特定の方法でコーディングすることで、他の言語への翻訳が容易になります。
これにより、開発者がすべての言語の翻訳ファイルを作成する必要がなくなり、コミュニティによる翻訳が可能となります。
テーマやプラグインのテキストを簡単に翻訳するには、テキストをハードコードせずに、WordPressの国際化機能を介して、引数として渡す必要があります。
文字列を国際化関数に渡すことで、簡単に解析して翻訳できます。
<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ファイルという翻訳ファイル に保存され、ロードする必要があります。
WordPressの翻訳ファイル
WordPressは、フリーソフトウェアの国際化で最も普及しているツールである、GNUのgettext () という仕組みを使っています。.poファイルや.moファイルはWordPress独自ではなく、gettext ()に従ったものです。
WordPressの翻訳ファイルには、以下の3種類があります。
Portable Object Templateファイル。
翻訳可能な文字列のテンプレートファイルで、翻訳者が具体的な言語の翻訳を行う際の元となります。
.potファイルを基に、各言語への翻訳を記述したテキストファイルです。人間が読みやすい形式で、テキストエディタで編集可能です。
.poファイルをコンパイルして生成されるバイナリファイルで、WordPressが実際に翻訳に使用するファイルです。
翻訳ファイルは、多くの場合は.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が良いでしょう。
では実際に、次の国際化関数を使った場合の翻訳ファイルの中身を見てみましょう。
<h1><?php _e( 'Profile Page', 'sample-plugin' ) ?></h1>
.poファイルの中身は次のようになります。
msgid "Profile Page" msgstr "プロフィールページ"
sample-plugin-ja.po
msgidは翻訳する文字列のキーであり、msgstrは翻訳後の文字列です。
今回の例では、Profile Pageというキーを、日本語のプロフィールページという文字列に変換します。
.poファイルをコンパイルして.moファイルを作るには、msgfmt コマンド、もしくはPoeditというツールを使います。ただし、msgfmtコマンドを使うにはgettext ()コマンドをインストールするなどの手間があるため、Poeditの利用をお勧めします。
Poeditとは、.poファイルを.moファイルにコンパイルできる、クロスプラットフォーム(Windows、Mac)に対応した無料ツールです。有料版もありますが、多くの場合はその機能は不要でしょう。
WordPressの開発者によれば、Poeditは.poファイルを編集するための「最も人気があるツールの一つ」とのことです。
.poファイルを読み込んで編集する
Poeditで.poファイルを開くと、ソーステキストと翻訳の一覧が表示されます。ソーステキストを選択すると、その対訳が編集できます。なお、ソーステキストはPoeditでは編集できません。
気になる対訳があれば、右側の「要確認」トグルをONにすれば、後ほど確認できます。
翻訳の編集を終えて保存すると、自動的に.moファイルも生成されます。
新しい言語を追加する場合は、Poeditで.potファイルを開いて.poファイルを生成します。
.poファイルの作成時の言語を選択します。
.poファイルが生成されたら翻訳を編集 します。
編集した.poファイルと.moファイルを、WordPressにアップロードします。
テーマやプラグインが継続的にアップデートされることを考慮すると、翻訳ファイルはWordPressの共通言語フォルダに配置するのが望ましいです。
これは、テーマやプラグインのフォルダに翻訳ファイルを置くと、アップデート時にそれらが上書きされ、翻訳が失われる可能性があるためです。
テーマの翻訳ファイル:/wp-content/languages/themes/
プラグインの翻訳ファイル: /wp-content/languages/plugins/
これらのディレクトリに翻訳ファイルを配置することで、テーマやプラグインのアップデート後も翻訳が保持される可能性が高まります。
WordPressのバージョンによっては翻訳ファイルの読み込み方法が変更されることがあります。
たとえば、WordPress 6.7以降では、翻訳ファイルの参照先の優先度や翻訳処理の仕様が変更されています。そのため、テーマやプラグインの開発者は、最新のWordPressの仕様に合わせて翻訳ファイルの読み込み方法を調整する必要があります。
Translations and styling gone after WP 6.7 update bladeke (@bladeke) 1 year, 7 months ago After WP upgrade to 6.7, the custom styling and also translations on the theme/child-theme are gone, even t…
さらに、翻訳ファイルのパーミッション設定にも注意が必要です。
最低限、読み込み可能なパーミッション(例:444)を設定しないと、WordPressが翻訳ファイルを正しく読み込めない場合があります。
以上の点を踏まえ、翻訳ファイルの配置場所や設定を適切に行うことで、テーマやプラグインのアップデート時にも翻訳が維持され、サイトの多言語対応を安定して行うことができます。
WordPressは日本国内でも広く普及していますが、高品質なプラグインの多くは英語圏で開発されており、日本語対応が進んでいない場合があります。
そのため、Webサイトをお客様に提供する際には、フロントエンド画面だけでなく、WordPressの管理メニューも日本語化することが重要です。
これは、ブラウザの翻訳機能では限界があり、必ずしもお客様が望む適切な日本語表現にならないことがあるためです。
この記事が、皆さまのWebサイトの日本語化対応にお役立ていただければ幸いです。