プラグインの多言語対応をする方法 | WordPress開発

※当サイトはアフィリエイト広告を利用しています。

先日に自作プラグインの多言語対応をしたのですが、私には少し難解ですぐ忘れそうなので、メモとして記事に公開しておきます。
多言語対応がよく分からなくて困っている方の参考になれば幸いです。

ここではプラグインの多言語対応について記載しますが、テーマの多言語対応も概ね同じ手順で実施できます。
スポンサーリンク


使用する関数

多言語対応するために使用する関数は以下の3つです。
  1. load_plugin_textdomain()
  2. __()  ※アンダーバー2個
  3. _e()

load_plugin_textdomain(“text_domain”, false, “dir path of .mo”)

翻訳ファイル(.mo)をプログラムに読み込ませます。.moファイルの作成方法は後述します。
原則はプラグインのphp先頭に記載しておけばOKです。

各引数の意味は前から順に以下です。
  1. テキストドメイン(翻訳ファイルのユニークな名前)です。ユニークなものであれば何でもOKですが、プラグイン名にしておけば安全です。
  2. この引数は現在は使用されていないのでfalse固定です。
  3. moファイルのあるディレクトリのパスを指定します。
“test”というプラグイン名 & .moフォルダを直下のlanguagesフォルダに置いている場合のサンプルコードは以下になります。
load_plugin_textdomain("test", false, dirname(plugin_basename( __FILE__ )) . "/languages");

__(“text”, “text_domain”)

第1引数のテキストを翻訳して返す関数です。
変数に翻訳後のテキストを入力したい場合などに使用します。
アンダーバーが2個なので注意しましょう。

第2引数はさきほどのテキストドメインを指定します。

_e(“text”, “text_domain”)

__()と同様に第1引数のテキストを翻訳しますが、こちらは出力します。
よって、以下のコードと同じ動作をします。
echo __("text", "text_domain");

サンプルコード

今後は以下のサンプルコードに基づいて多言語対応を説明します。

test.php:
<?php

/*
Plugin Name: test
Description: test
Version: 0.1
Author: Aresei
Author URI: https://www.aresei-note.com/
*/

load_plugin_textdomain("test", false, dirname(plugin_basename( __FILE__ )) . "/languages");

var_dump(__("test in php", "test"));

?>
このプラグインを有効にすると以下のように”test in php”のテキストが表示されますが、このテキストを翻訳することを目指します。

翻訳ファイルの作成方法

翻訳ファイル(.mo)の作成方法を説明します。

説明が遅れましたが、.moファイルはバイナリファイルであり、実際は人間が解釈可能な.poファイルというものを作成して、それを.moファイルにコンパイルします。

poファイルはテキストエディタでも作成可能なのですが、Poeditという便利なソフトがあるのでそれを使用すると良いでしょう。

Poeditのインストール

まずこちらのURLからPoeditのインストーラーをダウンロードします。

インストーラーのダウンロードが完了したら、インストーラーを起動してインストールを開始します。
特に設定は変えずに全て「次へ」を押せばOKです。

インストールが完了したらPoeditを起動します。
起動後にツールバー → ファイル → 設定 → PoeditのUI言語を変更 で日本語表示に変えておきましょう。
言語変更後はPoeditの再起動が必要です。

翻訳ファイルの新規作成

まずは.poファイルを新規作成します。

プラグインフォルダの直下にlanguagesというフォルダを作成しておき、Poeditのファイル→新規を選択します。
下図のように言語を聞かれるので、翻訳したい言語を選択します。
今後は日本語に翻訳する例で説明をします。

日本語選択後にCtrl+Sで空のpoファイルを保存します。
保存場所はさきほど作成したlanguagesフォルダ内を選択し、ファイル名は”(テキストドメイン名)-(翻訳言語).po”とします。
今回の例ですと、”test-ja.po”となります。

翻訳対象テキストの抽出

Poeditにはphpコード内の翻訳対象のテキストを抽出する便利な機能が存在するので、それを利用しましょう。

ツールバー → 翻訳 → プロパティ を選択します。
“ソースの検索パス”のタブを選択して、”パス”に翻訳対象のphpファイルをドラッグアンドドロップします。
下図のようになればOKです。
続いて、()と_e()を検索対象に設定します。
“ソース中のキーワード”タブを開いて、”+”ボタンを押して、検索対象に”
“と”_e”を追加します。
下図のようになればOKです。
上記の設定が完了したら、ツールバーの「コードから更新」ボタンを押します。
すると、下図のようにtest.php内の翻訳対象のテキストが自動的に抽出されます。

翻訳作業の実施

翻訳後の文字列を”対訳”の欄に記入します。
今回は下図のように翻訳しました。
.poファイルの仕様は省略しますが、ここで.poファイルをテキストエディタで開いてみると、以下のように翻訳対象のテキストと翻訳後のテキストが入力されていることが分かります。

.moファイルの作成

前に「.poファイルを.moファイルにコンパイルする必要がある」と記載しましたが、Poeidtでは.poファイルを保存すると自動的に.moファイルにコンパイルしてくれます。
よって特に作業はありません。

.poファイル保存後に同じフォルダ内に.moファイルが作成されていることを確認しましょう。

結果の確認

作業は以上で完了です!

WordPressの設定を日本語に変えた後にさきほどの”test in php”と表示されていた画面を更新すると、実際に以下のようにテキストが置換されていることが確認できます。

まとめ

この記事はではプラグイン内のテキストを翻訳し多言語対応する方法を記載しました。
Poeditを使用すれば、自動的に翻訳対象のテキストを抽出してくれるので翻訳作業に集中できて便利ですね!

翻訳後のlanguagesフォルダごとSVNにコミットすれば他のユーザーでも翻訳後のテキストが表示されるようになります。

以上でこの記事は終了です。
プラグインを多言語対応したい方の参考になれば幸いです。

参考: PoeditでHTML内の__(), _e()を抽出したい場合

この記事ではPoeditでphp内の()と_e()を抽出して翻訳する方法を紹介しましたが、HTMLファイル内にある()と_e()はPoeditの標準設定では抽出してくれません。

HTMLファイル内の__()と_e()を抽出する方法は以下の記事にまとめましたので、もしHTML内の翻訳対象を抽出したい場合は以下の記事を参照ください。