Sep 25, 2007

MT4プラグインの多言語化 Tips

MT4のプラグインの多言語化機能は一部の部位にしか有効でない。

例えば、下記リンクから得られるような多言語化済みサンプルプラグインを考える。

MT4-L10N-Example.zip (リンク切れ直しました)

このプラグインは、プラグイン設定画面、ダッシュボードウィジェット、ダッシュボードウィジェットから起動できるポップアップ画面を備え、それぞれ多言語化してある(ダッシュボードウィジェットやポップアップ画面の作り方などはRegistering Dashboard Widgets | Movable Type DocsCreating a New Screen Inside the Application | Movable Type Docsなどを参照のこと)。

実際に動かしてみると、プラグインの設定画面はローカライズされる。

また、ウィジェットの選択メニューの項目もローカライズされる。が、ウィジェット本体とポップアップ画面はローカライズされない。

これはウィジェットやMT::App::build_pageを使って生成されるページなどは、プラグインの言語辞書ではなく、コアコンポーネントの言語辞書を用いてローカライズされるからである。これは結構鬱陶しい。

そこでプラグインのクラス(サンプルではMT::Plugin::Example1)に以下のメソッドを追加する。

sub load_tmpl {
    my $plugin = shift;
    my $tmpl = $plugin->SUPER::load_tmpl(@_);
    $tmpl->text($plugin->translate_templatized($tmpl->text));
    $tmpl;
}

これはプラグインの用意したテンプレートを読み込んだ直後にそのテンプレートの内容をローカライズするように、デフォルトのload_tmplメソッドをオーバーライドするものである。通常は(1)テンプレートを読み込み、(2)テンプレートに含まれるMTタグを評価し、(3)コアコンポーネントの辞書を使ったローカライズを行うことでページ生成している。これに対して、上記のメソッドを追加すると、(1)テンプレートを読み込み、(2)プラグインの辞書を使ったローカライズを行い、(3)テンプレートに含まれるMTタグを評価し、(4)コアコンポーネントの辞書を使ったローカライズを行う(実際には変換すべきタグがないので何もしない)ことになる。

結果は以下のようになる。

めでたしめでたし。

このTipsの有効期限はMT4がこの問題に対処するまで、だけど。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com