よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

March 11, 2006 [おもひで]

[Ruby] Ruby-GetText-Package-1.3.0

リリースしました。今回はみなさんからいろいろなアイデア&バグレポートをいただき、特にRuby on Rails周りで機能向上しました。ぜひ、お試しくださいませ。

目玉1:[RoR] ローカライズド・テンプレートのサポート

例えば、app/views/foo/list.rhtmlというファイルに対し、app/views/foo/list_ja.rhtmlという名前のファイルを用意すると日本語の場合のみそちらを読み込むようになります。しかも、どちらのファイルとも、従来通り、_("")等のGetTextのメソッドを利用することが可能です。

これはつまり、基本的には通常用意されたテンプレートを、ある特定の言語のみ特別なテンプレートを使うことができる、ということになるため、可能な限りテンプレートは1つにしてDRYに開発できるメリットを残せると思います。 Thanks to Yuguiさん。

目玉2:[RoR] ActionMailerのサポート

ActionMailerのテンプレートファイル(.rhtml)にも_("")等のGetTextのメソッドを利用することが可能になりました。扱いはViewのテンプレート(.rhtml)と同じですので、上のローカライズド・テンプレートも使用可能です。

また、日本語の場合のみ、ISO-2022-JPでメール送信するようになりました。

ActiveHeartに含まれるIso2022Mailerを作者のdrawnboyさんのご厚意で取り込まさせて頂きました。ただ、Iso2022MailerではメールのSubjectがUTF-8で変換されてしまい、私のメーラでは文字化けになってしまっていたので、その辺はmoriqさんのActionMailerに関する記事を参考にメールのSubjectもISO-2022-JPで送信するようにしてあります。

#こういう微妙な調整は作者が日本人の特権ですね(^^)。

目玉3:[RoR] ActiveRecord::Column.human_nameのローカライズ

ActiveRecord::Column.human_nameがそのModelクラスから抽出したmsgidを用いて翻訳するようになりました。今まではエラーメッセージ用でしたが、scaffoldで生成したノーマルのテンプレートファイルでも自動的に翻訳される部分が増えたと思います。

#ざんねんながら、scaffold時にすでに文字列としてカラム名が埋め込まれてる部分があって、そこはもうしょうがないんですけどね。

Thanks to: ZnZさん

目玉4:[RoR] @params["lang"]を最優先でチェックするようになりました

例えば、routes.rb等で@params["lang"]をセットすると、その言語が使われるようになりました。

Thanks to: Erkki Eilonenさん

その他、バグ修正として、RoR周りではproductionモードで動作するようにしたのと、メモリリークの修正、あとはLocale::Objectの改善、などなど。盛りだくさんです。

そうそう、RoRのモデルでvalidates_* のmessageをローカライズする場合、_("")の代わりにN_("")を使ってください。そうしないと、productionモードで表示文字が変わらなくなるので注意してください。

class Article < ActiveRecord::Base
 validates_presence_of :title, :message => N_("%{fn} can't be empty")
 set_error_message_title(N_("An error is occured on %{record}"),
                         N_("%{num} errors are occured on %{record}"))
end

本日のツッコミ(全2件) [ツッコミを入れる]
nov (March 13, 2006 20:40)

ActionMailer のサポートがうれしいのですが、
multipart なメールを ja な環境で送るとおかしいような気がします。
http://nov.tdiary.net/20060313.html#p01
どうでしょうか?

むとう (March 13, 2006 20:58)

うぅ。multipartなメールは考えてませんでした(汗)。

よろしければサンプルコードをいただけないでしょうか。
#そのまま動くととてもありがたいですm(__)m


編集