1. 全体の概観
  2. 希哲館

道草録

未整理資料など

内容

  1. 本文
  2. 読者のご意見
  3. ご意見をどうぞ
  4. トラックバック

他の記事

カテゴリー

アーカイブ

  1. 2010年 7月
  2. 2009年 1月
  3. 2008年 6月
  4. 2008年 3月
  5. 2008年 2月
  6. 2007年 12月
  7. 2007年 11月

WordPress 多言語対応の仕組みと翻訳作業 — その1

2008/2/2 土曜日 (15:50:09)、宇田川 浩行 による、WordPress への投稿。

WordPress は、gettext を利用して多言語に対応しています。

WordPress 上の日本語で表示されている見出しやメッセージ類を変更したい場合や、未訳部分を日本語化したい場合などには、gettext に関する多少の知識が必要になります。

本記事では、WordPress を利用していて、日本語化部分を少し修正できればいいという方から、gettext の仕組みをある程度理解したい方までを対象に、段階的に gettext への理解が進むような解説を心がけています。

gettext とは

gettext とは、ソフトウェアの利用者に対して表示される定型文などの言語を、利用者の母国語などに合わせて簡単に翻訳文に差し替えるための仕組みを実現する、ライブラリ (システム側で用意するもの) とツール一式 (利用者側で使用するもの) のことを差します。

WordPress では PHP-gettext というライブラリを利用して、この仕組みを提供しています。

これによって、一般のブログ運用者でも gettext のツールを利用すれば、ソフトウェア内部の仕組みに立ち入らずに割と簡単に翻訳内容を修正することができます。

gettext ツールは UNIX 向けの GNU gettext が主流です。Windows では、PoEdit という直感的に操作できるものもあります (MMRT daily life さんのページで解説されています)。Windows 上で GNU gettext を使用したい場合は、Cygwin を導入するか、移植版を利用することになります。

既存の翻訳を修正したい場合

WordPress Japan で配布されている日本語版 WordPress (ME 2.2.3) を例にとり、既に表示されている日本語文を修正する手順を見ていきます。

(インストール先) wp-content/languages/

ja.poja.mo というファイルがあります。それぞれ拡張子と同じく PO ファイル、MO ファイルと呼ばれており、次のような役割があります。

実際に翻訳内容を修正するためには最低限、PO ファイルを編集し、それを gettext ツールによって MO ファイルへ変換するという作業が必要になります。なお、本記事ではGNU gettext を使って解説していきますが、この基本的な流れはどのツールを利用しても共通です。

PO ファイルの書式

PO ファイルをテキストエディタなどで覗いてみると、このような形式で翻訳前・翻訳後の文が羅列されています。

#: wp-content/themes/abc/index.php:11
msgid "This is a translatable string."
msgstr "これが可訳文字列です。"

このうち、重要なのは “msgid” と “msgstr” で始まる二つの行です。プログラムのソースファイル中で翻訳対象として記述された「可訳文字列」(translatable string, 翻訳可能な文字列の意) が msgid の行に抽出されています。翻訳者は msgstr の行で、可訳文字列に対する翻訳後の文字列を記述します。この二つの行は必ず対で、翻訳前後の文字列を表わすようになっています。

“#” で始まる行はコメントです。コメントにはいくつか種類がありますが、いずれも読み手に情報を与えるためのもので、システム上の意味は通常ありません。翻訳上の必要が生じた時に参照します。

WordPress ME の ja.po ファイルには、Default テーマや Classic テーマ、付属のプラグインなどの可訳文字列が抽出されているので、どの英語をどういう日本語に訳しているのか、ということがこのファイルを見れば分かります。念のため ja.po ファイルのバックアップを取り、msgstr で始まる行の文を好きなように書き換えてみても大丈夫です (msgid で始まる行は変更しないで下さい)。

MO ファイルを作る

PO ファイルは翻訳作業を行なうためのファイルです。PO ファイルを書き換えるだけでは、プログラムに新しい翻訳内容は反映されません。修正した翻訳内容を反映させるには、PO ファイルをもとに作成した MO ファイルがプログラム指定の場所に置かれている必要があります。WordPress ME では ja.po と同じ場所に ja.mo というファイルを置きます。

MO ファイルは、 GNU gettext を使う場合、付属の msgfmt というコマンドで作成します。msgfmt は下記の要領で使います。

$ msgfmt -o [作成する MO ファイル名] [PO ファイル名]

WordPress ME の場合、ja.po と同じディレクトリに移動して、下記のように実行します。

$ msgfmt -o ja.mo ja.po

これで修正した PO ファイルにもとづいた MO ファイルが作成され、プログラムに翻訳内容が反映されるようになります。

新しく可訳文字列を指定する

これまでの方法で、すでに用意されている (PO ファイルに抽出されている) 可訳文字列を修正することは出来ます。しかし、プログラム中のある文字列が可訳文字列かどうか、ということは逐一プログラムのソースファイル中で指定する必要があり、これは当該プログラム開発者の翻訳者に対する配慮に依っています。特に WordPress の場合、一般にブログ等として公開されるページデザインの全ては「テーマ」という単位で定義するため、利用したテーマが海外製で多言語化に配慮されていないと、当然ほとんどの部分が元の言語のまま表示されます。

こういう場合は、ソースファイルを修正して目的の文字列を可訳文字列として指定する以外ありません。幸い、WordPress は PHP で作られているので、HTML コードを修正する感覚でこうした作業ができます。可訳文字列の指定は文字列を特定のキーワード関数の引数として指定するだけです。

WordPress で可訳文字列の指定に使用するのは以下の二つのキーワード関数です。

_e()
可訳文字列を標準出力 (echo) する関数。ただ単にその文字列を表示したい時に用いる。関数内で引数になっている文字列の指定には使えない。
__()
可訳文字列を戻り値として返す関数。その文字列を別の関数に引数として渡したい時に用いる。単体で使うだけでは何も出力 (表示) されない。

ここではソースファイル

(インストール先) wp-content/themes/default/index.php

を参考にして、実際にどのように修正すればよいかを説明します。

<div class="entry">
	<?php the_content('Read the rest of this entry &raquo;'); ?>
</div>

これはエントリを出力する the_content() 関数の例です。この関数の第一引数へは、エントリ一覧などで長い文章を省略するときに全文へのリンクになっている、「続きを読む」のような文を指定します。これを可訳文字列に指定したい場合は、別の関数への引数としての指定なので __() 関数を使用します。

<div class="entry">
	<?php the_content(__(‘Read the rest of this entry &raquo;’)); ?>
</div>

これで、__() 関数で指定された可訳文字列が、__() 関数の戻り値として the_content() 関数に渡されることになります。

<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>

一方、こちらはエントリが見つからなかった場合に表示される文です。これは、PHP 文ではなく単に HTML コードとして書かれています。この場合は単純にそのまま表示される文字列を可訳文字列に置き換えたいだけなので、指定したい箇所を PHP 文にして __e 関数を使用します。

<h2 class="center"><?php _e(’Not Found‘) ?></h2>
<p class=”center”><?php _e(’Sorry, but you are looking for something that isn’t here.‘) ?></p>

あとは、下記のように PO ファイルでこれらの可訳文字列に対応する翻訳文を設定し、MO ファイルを作成すればよいです。後述するように gettext には、ソースファイル中の可訳文字列を自動的に抽出して PO ファイルの雛形を作成するコマンドがありますが、ここでは簡単に効果を確かめるため、既存の ja.po ファイルに手入力で追記する例を示します。このようにしても、各可訳文字列に対する翻訳文が適用されます。msgid に指定する文字列は、キーワード関数に渡した文字列と同じにしなくてはなりません (msgid は当の可訳文字列を識別する ID という意味です)。

# test
msgid "Read the rest of this entry &raquo;"
msgstr "続きを読む &raquo;"
msgid "Not Found"
msgstr "見つかりません"
msgid "Sorry, but you are looking for something that isn't here."
msgstr "ごめんなさい。お探しのものはここにはありません。"

ソースファイルから可訳文字列や特定のコメントを抽出する xgettext コマンドの使い方、テーマ別に PO ファイルを用意する方法などの解説は「その2」に続きます。

2008/2/28 修正

巻き戻し

読者のご意見

この記事に寄せられたご意見は、現在 6件です。(RSS 2.0)

2008/12/10 水曜日 (16:08:45)、wordpressのテンプレート wpskinのブログ さんによる投稿。

wordpress | poエディトを使い、多言語用のキーワ…

wordpressで多言語用のブログを作ろう。poエディットを使って一つの言葉を言語によって違う言葉に表示させることが出来ます。 … (more…)

2009/8/27 木曜日 (19:40:27)、WordPress開始メモ4 -テキストを書きかえる さんによる投稿。

[…] 参考サイト:WordPress 多言語対応の仕組みと翻訳作業 — その1 ・・・多言語対応、てどういうことなのかよくわからないのと、 ここで説明されている 「.po」 「.mo」なるファイルが翻訳をつかさどっている?らしいということなのですが これらのファイルでテキストも変更できたので、 テンプレートになるテキスト(文言)と、その翻訳と、両方をつかさどっている?となかんでしょうか・・・ […]

2010/3/6 土曜日 (16:35:31)、[Wordpress]多言語対応の仕組みと翻訳作業 « はいね的のーとぶっく さんによる投稿。

[…] WordPress 多言語対応の仕組みと翻訳作業 — その1 « 道草録 [希哲館] […]

2010/3/27 土曜日 (13:40:38)、クレヤボヤンス - 多言語化に使われている仕組み さんによる投稿。

[…] 希哲館 – 参考にさせていただきました しかしさー 「レンタルサーバにFTP接続だけでブログを設置してみたwindowsユーザー」 ってたくさんいると思うんだけど。一般的なユーザーってそんな感じじゃないのかな。 そういう人が、SSH接続して msgfmt 使うかね? ローカルに msgfmt を入れたりするか? あとは?PHPから system… とかでも実行できるのかな?わかんねーけど。 なんか、僕だったらそういう発想できないのね。 「え?エディタとFTPだけで更新できないの?」 みたいな。 それとも、こんなに難しいことを誰でも平気でやっちゃう時代なんですかねー。 とかつぶやきながら、問題のPHPファイル、けっきょく全部日本語で直書きにしたぞ。 これが俺のローカライズや! […]

2010/5/12 水曜日 (11:36:45)、BuddyPressの日本語化、これで上手くいく | 杉並区おた助 さんによる投稿。

[…] という認識で大丈夫かと。詳しく知りたい方は、WordPress 多言語対応の仕組みと翻訳作業 — その1をどうぞ。私たちが読み書き・編集できて、さらにBuddyPress1.2.3についてアップロードされているファイルは.poです。下のバージョンでは.moもアップロードされていたようですが。 […]

2010/6/19 土曜日 (10:07:22)、NO PC,NO LIFE » .poファイル・.moファイル さんによる投稿。

[…] 詳しくはこちら。 […]

巻き戻し

ご意見をどうぞ









巻き戻し

トラックバック

この記事へのトラックバック URI :

http://www.kitetu.net/old/notes/0008.html/trackback

巻き戻し
http://www.kitetu.net
info_at_kitetu.net