2002年12月04日

Templateローカライズのためのplugin

Kuro-san: 更新日誌: Movable Type多国語対応について提案 に書いた、Template へのタグ追加提案ですが、とりあえずプラグインという仕方で、元のコードに変更を加えずに追加できることが
わかりました。

MTPublishCharset というタグを使えるようにするには:

http://noir.s7.xrea.com/pub/template_l10n.txt
(拡張子は .txt になっていますが、Perlスクリプトです) をダウンロードして、拡張子を .pl に変更します。

Movable Type のトップディレクトリ (mt.cfg があるディレクトリ) に plugins サブディレクトリを作り、そこに template_l10n.pl を転送します。

これで、テンプレートに <$MTPublishCharset$> というタグが使えるようになります。

template_l10n.pl の中身を見ていただければわかりますが、mt.cfg の PublishCharset の値をとるようになっています。

できれば language 属性をシステムから取得するためのタグ MTPublishLanguage も加えたいところです。

MTのソースを見ると、ユーザープロフィールの Preferred Language から language をとっている個所があり、それに倣えばできそうです。しかし、mt.cfg から値をとるよりもちょっと複雑そうです。だれかチャレンジしませんか?

(2002/12/04 07:27追記)

いろいろ調べて試行錯誤した結果、上記のpluginは次のようなものにしました。

・mt.cfg からではなく、blog ごとに設定する日付・時刻表示の使用言語から値をとる。

・MTLanguage と MTEncoding というタグが追加される。MTPublishCharset, MTPublishLanguage という名前は廃止。

昨晩は lib/MT/Blog.pm の修正が必要と書いていましたが、それも必要ないものにしました。

Blogごとに設定する日付・時刻表示の使用言語を Japanese にすると、MTLanguage が ja を返し、MTEncoding は、インストールされている Japanese Language Pack のエンコーディング (EUC-JP か UTF-8) を返します。

副作用として、今までblogの言語は日本語でも、日付・時刻は英語 (Engligh) で使っており、それを続けたい場合、template の MTDate タグを修正しなければなりません。また、Japanese Language Pack をインストールせずに Japanese を選択した場合、MTEncoding は正しい値を返しません。

Posted by Hiroyuki KUROSAKI at 2002年12月04日 06:50 このエントリーを含むはてなブックマーク
この記事の TrackBack URL:
http://noir.s7.xrea.com/mt/mt-tb.cgi/15
多国語化Plugin発見!
Excerpt: このところMovableTypeの日本語化(多国語対応)の動きが激しい。 今までの多国語対応ではMovableTypeのソースコード(Perl)を修正することが前提だったのだが、多国語対応のためのPluginを作...
Weblog: Aga-Ye!! : Kasedac
Tracked: 2004年04月09日 10:23
Comments

http://noir.s7.xrea.com/pub/template_l10n.txt
を、MTPublishLanguage というタグが使えるようにしてみました。

mt.cfg には、DefaultLanguage というundocumentedのキーワードがあります。これの初期値は en-us ですが、mt.cfgに

DefaultLanguage ja

という一行を加えてやると、MTPublishLanguage も ja になります。

ほんとうは language pack の選択が反映されるのが一番理想的だと思うんですが。

Posted by: noir on 2002年12月03日 18:07

…と思っていましたが、考えが変わってきました。

全体、ユーザー単位、blog単位それぞれに使用言語が指定できて、その順にoverrideされていく(blog単位が最優先) のがいいんじゃないかと。エンコーディングについてはユーザー単位まででよいかもしれませんが。

Posted by: noir on 2002年12月03日 19:11

blog単位だと、languageというフィールドがあるのですが、これは日付・時刻フォーマットの指定に使われていて、しかも日本語はなぜかjaでなくjpという値をとるようになっています (tmpl/cms/cfg_prefs.tmpl 195行目、lib/MT/Util.pm 103, 637行目)。

日付は英語のほうがカコイイ! という人もいるだろうし、ややこしいなぁ。

Posted by: noir on 2002年12月03日 20:38

結局、lib/MT/Blog.pm に手を加えて、MT::Blog オブジェクトが encoding を返すようにし (
http://www.movabletype.org/cgi-bin/ikonboard/ikonboard.cgi?s=3deca460380fffff;act=ST;f=12;t=11128
をご覧ください。迷いつつ書いたので少し紆余曲折してしまいました)、
タグ MTLanguage, MTEncoding でblog単位の使用言語を取得できるようにしました。
http://noir.s7.xrea.com/pub/template_l10n.txt
そのため、このpluginを使用するためには、まずlib/MT/Blog.pmを修正する必要があります。

Posted by: noir on 2002年12月03日 21:51

TrackBack をたどってきました。どうもです。

Encoding, Language が TAG で取れるのはいいですね。

英語/日本語の両方、マルチユーザの blog を運用している Movable Type の某サイトを手伝っているのですが、その経験上では、おっしゃるとおり、全体、User単位、Blog単位の順番に override されていくのがうれしいです。

Language Pack にパッチいれちゃうのはいいと思っていて、Trackback, Bookmarklet, Mail への patch を同梱しようかと思い、ご指摘いただいたのを直すついでに本家に聞いているところです。

Posted by: hirata on 2002年12月03日 22:53

hirataさん、ありがとうございます。

MT::Blogオブジェクトがencodingを返すとtemplate以外のケースでも有用じゃないかと思って lib/MT/Blog.pm に対する修正を行ったんですが、templateに限ればそこまでしなくてもpluginのなかで解決できる問題でした。

現在の
http://noir.s7.xrea.com/pub/template_l10n.txt
は、lib/MT/Blog.pm を修正しなくても動きます。

language packへのパッチ同梱、楽しみにしております。

Posted by: noir on 2002年12月04日 06:34

Support Forum では、開発者の方から、日付時刻表記の言語とblogの言語が一致するとは限らない、さらに、投稿された記事エントリに使われている言語も特定できない、というもっともなツッコミが入りました。

エントリ単位で言語情報を持つのは、けっこうなことだと思いますが、解決に時間がかかりそう。

Posted by: noir on 2002年12月04日 10:55

ここまでくると、内部コードと出力コードを分けられないと辛いような気がします。

うちで、utf-8 を使っているのは、unicode 原理主義者だからではなくて、templates で iso-8859-1 でやっているページがあると、コメントが utf-8 で入ってくることがあったからです。

Posted by: hirata on 2002年12月04日 11:49
Post a comment

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?