hiromasa.zone : o)

2005/8/28 Sunday 投稿時の月齢:23.5  月名:真夜中の月  潮汐:小潮 Moon:23.5[真夜中の月]今日の心技体 : 好調期好調期低調期

WordPress プラグイン日本語化 Tips このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - ひろまさ @ 15:39

英語版の WordPress プラグインを日本語化する際のちょっとした小話(?)、小技エントリです。

日本語化には2つあって、ひとつはマルチバイト文字で動作させると不具合が出る場合のプログラムの修正。 もうひとつは、管理画面等のメッセージの日本語化です。 ここでは、後者のメッセージの日本語化について書きます。

WordPress では、gettext による言語カタログがサポートされており、メッセージの国際化が簡単にできるようになっています。

このようなソフトウェアの国際化のことを、

I18n

I18nはinternationalizationを省略した記述法。ジャーゴン。
あいいちはちえぬ、インターナショナリゼーション、国際化と読む。
internationalizationの意味は国際化。転じてオープンソースのプログラムでは多言語・多国語対応の意味。
 例: 今回のバージョンからi18nに対応しました。
i18nの18は、internationalizationの先頭のiと語尾のnの間に”nternationalizatio”の18文字があることに帰因する。18ヶ国語に対応しているわけではない。

といいます。

・・・そうなんです、昨日リリースした、WP-Cache 日本語パッチの

wp-cache_l18n-1.0.zip

ファイル名をよーくみると・・・。 i (アイ)じゃなくて、、l (エル)にしちゃいました。 わはは、間違えました。 という懺悔のエントリ・・・。 実は、l10n (地域化 – localization)という別な言葉もあってそれとまぜこぜになった次第です。 ごめんなさい。。(ちなみに、ファイル名だけなので動作には問題はないです)

たぶん、言語ファイル取り替えれば 他言語にも対応できるので、i18n でいいと思うのですが、もしかしたら、l10n なのかな・・・。 詳しい方教えてください。 🙂

懺悔としまして(?) WP プラグインの i18n 化の方法を紹介します。

詳しいやり方は、

WordPress Japan – プラグインを日本語で

イキナリでは少し難しいとは思いますが、ここでは日本の WordPress ユーザーも多く利用されている wp-amazon を例にとって簡単に解説させていただきます。

に otsukare さんが書かれています。 非常に分かりやすく、ぼくもこちらを参考にやっています。

このエントリには、ちょっとした小技を書きたいと思います。

■ load_plugin_textdomain($domain) の小技

WP のプラグインは wp-content/plugin/ ディレクトリの下に格納することになっています。 前にも書きましたが、実はこのディレクトリの直下に .php を配置せずにさらにディレクトリ内に .php をいれても WP はちゃんとプラグインを認識してくれます。

特に言語ファイルで多国語化すると多くのファイルが出来ため、ディレクトリにプラグインファイルを格納できると便利なのですが、言語ファイルを読み込ませる load_plugin_textdomain 関数に不具合があって、ディレクトリにプラグインを格納すると言語ファイルをうまく読んでくれません。(wp-content/plugins/ 直下しか検索にいってくれない)

この問題は、

load_plugin_textdomain() should accept variable paths

Currently, the load_plugin_textdomain() function is hardcoded to look under [ABSPATH . “wp-content/plugins/”] for a plugin’s translation file. It should take an optional argument specifying the location of this file, such as wp-content/plugins/plugin-name/translations/ and so on.

ということで、WP 1.6 系では修正されるようです。 で、今のことろ回避策として load_plugin_textdomain することろを次のように書くと回避できます。

  1.  $domain_name  = 'ドメイン名';
  2.  $locale_name  = get_locale();
  3.  $mofile_name  = dirname(__FILE__);
  4.  $mofile_name .= "/$domain_name-$locale_name.mo";
  5.  load_textdomain("$domain_name", $mofile_name);

■メッセージの __ 関数 _e 関数 でのくくりだし Tips

プラグインの日本語化の基本は、元プラグインのハードコードされているメッセージを見つけて、__ 関数や _e 関数でくくり、その ID を言語ファイルに対応させ日本語に変換して出力します。

たとえば、

  1.  echo "Hello,I'm hiromasa.How are you."

であれば、

  1.  echo __("Hello,I'm hiromasa.How are you." ,"ドメイン");

として、.po 言語ファイルで

  1.  msgid "Hello,I'm hiromasa.How are you."
  2.  msgstr "こんにちは。 ぼくはひろまさだよ。元気?"

とかって指定するわけです。 で、ちょっと困るのが次のようになっている場合。

  1.  $name = "hiromasa";
  2.  echo "Hello, I'm $name. How are you.";

変数がメッセージに入っているときです。 これを単純に、

  1.  echo __("Hello, I'm $name. How are you.", "ドメイン名");

としてしまうと、先に $name が PHP によって “hiromasa” に展開されてしまうため言語ファイル側で

  1.  msgid "Hello, I'm $name. How are you. "
  2.  msgstr "こんにちは。私は $name です。ご機嫌いかがですか。"

としても、うまく検索にあたってくれず日本語が出力されません。(”Hello, I’m hiromasa. How are you” という ID で言語ファイルを検索してしまう)

  1.  echo __("Hello, I'm") . $name . __(". How are you.");

なんてしても良いですが、メッセージファイルとしていまいちですし、ちょっと面倒なので次のようにするといいでしょう。

PHP の sprintf  という関数を使って変数を 固定文字の %s としてくくり出し、msgid も %s を使って登録します。

  1.  $name = "hiromasa";
  2.  echo
  3.   sprintf(
  4.    __("Hello, I'm %s. How are you. ", "ドメイン"),
  5.    $name
  6.   );
  1.  msgid "Hello, I'm %s. How are you."
  2.  msgstr "こんにちは。私は %s です。ご機嫌いかがですか。"

なにか数学やっているみたいですね。 🙂

このようにすると、メッセージID を固定の %s という文字で登録できるので不具合が出ませんし、メッセージも分かりやすくプログラムの書き換えが簡単です。

以上、簡単ながら小技紹介でした。 ご参考になれば幸いです。 😛

3 Comments

Trackback

  1. From: テーマ、プラグイン、日本語 « 作業記録 - 2006/10/31 Tuesday Daytime (Pingback)

    […] 明日これを試す。http://wordpress.xwd.jp/tutorials/j_plugin.php   http://zone.maple4ever.net/blog/archives/366/ […]

  2. From: WordPressプラグインの日本語化ファイルの設置場所 » Others » おじさんの備忘録-番外編- - 2007/11/30 Friday Nighttime (Pingback)

    […] しかしマニュアルを再読していると /wp-content/plugins/ 直下に配置しろと書いてある。 WordPressの場合pluginsディレクトリを掘り下げてディレクトリを作成しそこにプラグインファイルを置いても読み込んでくれる仕組みになっているが、言語ファイルについてはこちらの記事を見ているとそうはならないらしい。 […]

  3. From: load_plugin_textdomain の適切な指定方法 « 鵺的:想空間 - 2009/5/12 Tuesday Morning (Pingback)

    […] WordPress のプラグインをどうやってローカライズするのか調べてたのだけれど、どうも検索で引っかかるのがどうも古かったり、wp-content/plugins/ 直下しか検索にいってくれない問題も 「WP 1.6 系では修正されるようです」がどうもいまでも修正されてないっぽい。結局ソースコードをのぞいたところ現状のバージョン(WordPress MU 2.7.1)では以下のように指定するのが一番よさげです。 […]

Comment


このサイトはコンテンツをフリーズしました。トラックバック・コメントは閉じられています。

新しいサイトは、

hiromasa.another :o)

です。 :-)

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

30 queries. 0.095 seconds.

このページの先頭へ