前回は実際にプラグインとして最低限必要であろう機能を実装した抽象クラスを扱いましたが、今回は Wordpress のとても重要な機能の一つである”翻訳”について一から作る場合の方法を解説します。
プラグインを作るにあたり、翻訳データを新規に作成していく方法がまとまった文章として見つからなかったので、ステップアップ的に進めていきます。
ステップ1:翻訳の仕組み
Wordpress の翻訳機能からは、2種類のインターフェースが用意されています。
__() と、_e() と言うこれらの関数は、__() であれば返り値として値が渡され、_e() は echo します。
使い方はとっても簡単。
__(“ラベル”, “ドメイン”)と、_e(“ラベル”, “ドメイン”) です。
ラベルとは、翻訳の元となる文字列です。ドメインが存在していない、もしくはドメイン内にラベルの翻訳データが存在しない場合はこのラベルを返す事となります。
ドメインとは”翻訳のグループ”とでも言うような概念で、このドメインでグループ分けをする事により翻訳に表現の幅が広がります。
例えば、「A プラグインと B プラグインでそれぞれ解釈は違うけれど文字列の構成が全く同じラベル」を気にする必要がないため、他のプラグインでの翻訳内容を加味する必要がなくなるわけです。
同時にこの __()と _e() は Wordpress が選択している言語を判断してはおらず、load_textdomain() で翻訳データを読み込ませる時に、Wordpress が利用している言語を元に各国語の翻訳データを読み込むよう調整しなければなりません。
逆を言えば、このように「言語に応じて翻訳データを読み分ける」事で多言語に対応しています。
Wordpress が利用している言語は get_locale() で判断するため、翻訳データで表現できる言語は、wordpress 本体に翻訳データがある言語にしか対応していないとも言えます。
また、__()と _e() で指定するラベルは利用者がエンコードを意識する必要のない言語(英語など)で記述した方が合理的です。
load_textdomain() は load_textdomain( ’ドメイン’, dirname(__FILE__).DIRECTORY_SEPARATOR.get_locale().’.mo’); や load_textdomain( ’ドメイン’, dirname(__FILE__).DIRECTORY_SEPARATOR.’language’.DIRECTORY_SEPARATOR.get_locale().’.mo’); などと言った指定である事が多いです。
このようにプラグイン内の翻訳データである事を明示しておく方が再利用性も高く、複数のプラグインを開発している場合インターフェースが統一されるため合理的です。
ステップ2:翻訳データの制作環境を整える
翻訳データである .mo ファイルはバイナリである必要があります。即ちコンパイルできる環境が必要になるわけですが、poedit と言う便利なソフトがあります。
僕が知る限り Windows の GUI で Wordpress の翻訳データをコンパイルできるソフトは poedit だけなので、今回は poedit で翻訳データを作る方法を解説します。
poedit 本体をダウンロードしてインストールして起動して下さい。
poedit 自体インターフェースが多言語対応なので操作に手間取る事はあまりありませんが、方法が若干わかりにくいため翻訳データまでは作っていないと言う方もいるのではないでしょうか。
ステップ3:翻訳データを新規作成してみる
新規に翻訳データ( poedit ではカタログと言う概念)を作成する場合は”メニュー>新規カタログ”を選択します。
カタログを新規作成するにあたり、カタログのメタ情報をプロジェクトと言う概念で設定します。
新規にカタログを作成すると以下のダイアログが表示されます。

- プロジェクトの名前とバージョン
- ここが評価される事はないので、自由な名前を設定する事が出来ます。
- 翻訳チーム
- このカタログを作成する( チーム || 個人名 )を入力します。もちろんウェブサイトやハンドルネームでも OK です。
- 翻訳チームのメールアドレス
- 翻訳データを作成した責任として、連絡先のメールアドレスをここに記載しておきます。
- 言語
- このカタログに登録される翻訳データの言語を選択します。
- 国または地域
- このカタログに登録される翻訳データの言語を使う国?を選択します。
言語にしても国にしても poedit 独自のメタ情報であるため、スクリプトを意識する必要はありません。 - 文字符号化方法
- 文字のエンコードを指定します。
多言語に対応している utf-8 を選択するケースがほとんどだと思います。 - ソースコードの符号化方法
- 紛らわしいですが文字符号化方法とは別の設定です。
翻訳データを扱うスクリプトのエンコードを指定します。
まだ euc-jp を利用できた頃は意味がありましたが、utf-8 のみとなっている現在の Wordpress ではあまり気にする必要はないでしょう。
文字符号化方法と同じく、utf-8 である事がほとんどだと思います。 - 複数形
- 僕は複数形のない日本語を使っているのでよくわかりませんが、複数形のある言語を使っている場合、状況に応じて自動的に複数形に変えてくれるのでしょうか?
入力した事ないのでよくわかりません><
続いて”パス”タブに移動します。

poedit は任意のディレクトリにある全ての PHP ファイルを対象に定義されている翻訳データを抽出してくれます。
”パス”タブでは抽出したいディレクトリを設定します。僕の場合は linux サーバの web 公開ディレクトリを samba を経由して Windows クライアントのネットワークドライブにしています。
よって x:\wordpress\httpdocs\wp-content\plugins\pluginName のような指定になっています。
状況に合わせて指定して下さい。
最後にキーワードタブ。

キーワードタブでは翻訳データを定義している関数をキーワードとして登録します。パスタブで指定したディレクトリにある PHP ファイルの中に、このキーワードで定義された翻訳データを抽出してくれる事になります。
基本的には __ と _e (括弧(())は入力しない)だけだと思いますが、__() をラップする関数などを作った場合には、ここで任意に指定できます。
これらの設定を行ったら、OK ボタンをクリックして新規作成を開始して下さい。
poedit はすぐに指定したディレクトリを走査します。抽出された翻訳データのラベルが表示され、そのうちいくつかは poedit によって自動的に翻訳されているかもしれません。
機械翻訳なので間違った訳をしているかもしれません。そもそも翻訳されていないラベルもあるはずです。
ステップ4で走査した内容を元に編集をしましょう。
ステップ4:訳語の編集
さて、ステップ3:までの手順で abstractClass のディレクトリを走査すると、以下の訳語がリスト表示さているはずです。
poedit の標準的なこの画面では、上から順に「単語リスト」、「(訳語リストで選択している単語の)原文」、「対訳」として走査したディレクトリの訳語が表示されます。
翻訳されていない、または翻訳の内容がおかしい単語に関しては、三つ目の「対訳」を直接編集して下さい。
単語リストのうち、太字の単語は未確定翻訳(機械翻訳か翻訳されていない単語)として扱われます。
対訳を編集する事で未確定翻訳は確定されます。
ここで注意すべきなのは、poedit は任意のディレクトリにあるスクリプトで使われている訳語をリストアップするのみで、スクリプトにない訳語を poedit で新規に追加する事はできません。
即ちあらかじめプラグインなどを作ってから、その後に訳語を編集するのが一般的な流れとなります。
ただ、カタログは一度作ってしまえばメニューの「カタログ>ソースから更新」でいつでも再走査する事が可能です。
さて、訳語を一通り編集したら保存してみましょう。
poedit は保存時に保存したカタログと同じディレクトリにコンパイル済みの.mo ファイルも保存してくれます。
要するに保存するだけで OK です。
Wordpress の翻訳ファイルを作成する手順は以上で終わりです。
POT ファイルについて
poedit で作る事の出来る .po ファイルや .mo ファイルは gettext というソフトウェアの国際化用ライブラリのファイルです。
それぞれの位置づけは .pot が翻訳テンプレートで .po が翻訳リソース、.mo がコンパイル済み翻訳リソースとなり、多言語での翻訳を他人に頼むのであれば翻訳テンプレートである .pot ファイルを同梱するのが望ましいでしょう。
しかし、残念ながら.pot ファイルは poedit で生成する事は出来ません。が、翻訳テンプレートである .pot は、対訳が一切入っていない .po ファイルを代用する事が可能です。
新規にカタログを作成し、対訳の入っていないまっさらな状態の .po ファイルをコピーして .pot ファイルとして保存しておき、配布ファイルに含めればそれで OK です。
ね、簡単でしょう?
関連ページ
- 新しい: 書置き
- 古い: Wordpress プラグインの作り方(2)
コメント:0
トラックバック:14
- この記事のトラックバック URL
- http://spais.jp/php/wordpress-%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b93/2008-08-01/trackback
- トラックバックの送信元リスト
- Wordpress プラグインの作り方(3) - SPaiS より
- pingback - SPaiS - Wordpress プラグインの作り方(1) より 2008 年 8 月 16 日
[...] Wordpress プラグインの作り方(3) [...]
- pingback - SPaiS - Wordpress プラグインの作り方(4) より 2008 年 8 月 18 日
[...] Wordpress の翻訳の仕組みを扱った前回から約半月経ってしまいましたが第4回はプラグインの設定画面を管理画面に追加してみたいと思います。 [...]
- pingback - プラグインディレクトリの隠蔽 - typista より 2008 年 11 月 17 日
[...] さわしいパッチがあれば、プラグイン実装していく。 日本語決め打ちではなく、多国語対応方法も気長に調べていきたい。 → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - WordPressノウハウ~走り書き~ - typista より 2008 年 11 月 20 日
[...] ◆プラグインの翻訳方法など http://spais.jp/php/wordpress-%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B92/2008-07-30 http://spais.jp/php/wordpress-%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%... [...]
- pingback - ほんとにかゆいところに手が届く「ダッシュボードシンプル化」プラグインの詳細オプション対応 - typista より 2009 年 8 月 13 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - WordPressをCMS利用するときに欠かせないプラグイン - typista より 2009 年 8 月 26 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - ダッシュボードのロゴ差し替え - typista より 2009 年 8 月 28 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - WordPressMUも視野に入れたプラグイン機能追加 - typista より 2009 年 9 月 17 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - 予約投稿の失敗&メール投稿の失敗を回避するプラグイン - typista より 2009 年 9 月 25 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - GETパラメータの文字数制限回避 - typista より 2009 年 10 月 22 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - WordPressでGmail受信(連携)なプラグイン - typista より 2009 年 12 月 14 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - ニッチなパッチプラグイン→WordPress2.9対応 - typista より 2009 年 12 月 25 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み [...]
- pingback - ニッチなパッチプラグイン→WordPress3.0対応 より 2010 年 7 月 13 日
[...] → SPaiS Wordpress プラグインの作り方(3) ステップ1:翻訳の仕組み AKPC_IDS += "657,"; [...]
- pingback - PostCategoryPlusプラグインのチェックとWordPress3.0対応その2 より 2010 年 7 月 21 日
[...] → SPaiS WordPress プラグインの作り方(3) ステップ1:翻訳の仕組み AKPC_IDS += "661,"; Posted in WordPress, ニッチなパッチ系, 自作プラグイン | Tags: PHP, WordPress, プラグイン [...]