Home » September 2007 » MT4プラグインの多言語化Tips

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

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

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

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

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

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

cfg_plugins.png

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

dashboard.png

これはウィジェットや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)コアコンポーネントの辞書を使ったローカライズを行う(実際には変換すべきタグがないので何もしない)ことになる。

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

dashboard2.png

めでたしめでたし。

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

このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/549

Links referred to this entry

Comments (3)

  1. thanks!

  2. 前略
    MT4を使って、トップページ内に
    当方の峰の原、という観光地の
    枝道番号を表示したいと思い
    (右側等に、その該当する枝道にあるペンション名を表記)
    有料にてこのようなGoogleマップ作成可能かどうか
    お問い合わせするしだいです。

    お忙しいところ、ごめんなさい!

Post a comment

Remember me?