WordPressの翻訳文を変更する


WordPressは自動翻訳機能を備えています。WordPressの翻訳機能にはGNUプロジェクトのソフトウェア国際化API、GetTextが利用されています。GetTextはPloneのような他のCMSをはじめ、さまざまなソフトウェアに採用されています。翻訳文の変更方法を概説します。

GNU GetText : poファイルとmoファイル

GetTextの辞書は、xxxxx-<ロケール名>.poとxxxxx-<ロケール名>.moというファイルで構成されます。*.poファイルはテキストファイルで、GetTextの文法にしたがって、英文とその翻訳文が羅列されています。*.moファイルは、*.poファイルを「コンパイル」したバイナリー形式のファイルです。Wordpressの場合、代表的なものはwp_content/languageフォルダの下にある以下のファイルなどです。

  • ja.po, ja.mo
  • admin-network-ja.po,admin-network-ja.mo
  • continets-cities-ja.po,continets-cities-ja.mo

poファイル

各poファイルの先頭部分には、翻訳ファイルの仕様を宣言した以下のようなヘッダー部分があります。

# Translation of Development in Japanese
# This file is distributed under the same license as the Development package.
msgid “”
msgstr “”
“PO-Revision-Date: 2014-10-21 06:30:27+0000n”
“MIME-Version: 1.0n”
“Content-Type: text/plain; charset=UTF-8n”
“Content-Transfer-Encoding: 8bitn”
“Plural-Forms: nplurals=1; plural=0;n”
“X-Generator: GlotPress/0.1n”
“Project-Id-Version: Developmentn”

これに、元の単語・文と、それを翻訳した文字列のリストが続きます。

#: wp-includes/media.php:2942
msgid “Trash Selected”
msgstr “選択した項目を削除”
#: wp-includes/media.php:2943
msgid “Untrash Selected”
msgstr “選択した項目をゴミ箱から戻す”

moファイル

「poファイルの変更、moファイルへの変換にはpoeditを」という記事をネットでよく目にします。実際、大々的に変更を加えたり、自製したプラグイン用に翻訳ファイルを新規作成するなどという場合にはpoeditを利用するのがよいでしょう。一方、既成のpoファイルをちょっと変更したいというような場合は、poeditを使用するよりも、viでpoファイルに変更を加えて、コマンドラインツールであるmsgfmtを使って変換するほうがはるかに簡単です。

poeditはgtkを使用したGUI型のソフトウェアです。Linuxへのインストール作業は、多数の依存モジュールのインストールを伴い、多くの場合、ソースからビルドする必要があり、煩雑ですので、Windows版で編集を行い、作ったファイルをプロダクションサーバにコピーするいう方法をおすすめします。

msgfmtを使用する場合、poファイルをもとに、以下のコマンドを実行することによってバイナリ形式のmoファイルを生成することができます。

 msgfmt -o ja.mo ja.po

上記の例では、ja.poファイルをもとに、-oパラメータで指定された出力先ファイル、ja.moが生成されます。

実際にWordPressの翻訳文を変更してみる

WordPressには、<!–more–>というコメントをコンテンツに挿入すると、一覧表示されたときにこのコンテンツの<!–more–>までの部分が要約として表示されるという機能があります。この際、<!–more–>の位置には、英語の場合「(more…)」という本文全体へのリンクが挿入・表示されるのですが、日本語ですと「(さらに…)」と、表示されます。あまりすわりのいい訳ではありません。最近のヴァージョンアップで出た「デグレ」のようです。

この文字列は、<WordPressホーム>/wp-includes/post-template.phpの中で以下のように定義され、一覧表示を伴うあちこちのテンプレートで参照されています。

function get_the_content( $more_link_text = null, $strip_teaser = false ) {
        global $page, $more, $preview, $pages, $multipage;

        $post = get_post();

        if ( null === $more_link_text )
                $more_link_text = __( ‘(more…)’ );

        $output = ”;
        $has_teaser = false;

 「more…」の日本語への変換は、前述のja.poの中で以下のように定義されています。

#: wp-includes/post-template.php:242
msgid “(more…)”
msgstr “(さらに…)”

viを使って、ja.poの該当箇所を以下のように修正します。

#: wp-includes/post-template.php:242
msgid “(more…)”
msgstr “(つづき…)”

以下のようにmoファイルへの変換を行えば、変更はただちに反映されます。

msgfmt -o ja.mo ja.po

雑記の中の雑記

エディターでは”Read more …”→”続きを読む”という文言変換が、登録されているようです。poファイルにmsgid(英文)とmsgstr(和文)を追加して新たな語を定義して、phpファイルの参照箇所で参照している語を差し換えても、同様に対応可能です。