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

July 14, 2002

[Misc] (続)ファイルシステムクラッシュ

部分的にファイルが壊れてしまっているのだが思ったより量が多い。

プログラムを起動しようとすると、そんなプログラム無いよ、と言われ、コンパイルしようとするとそんなヘッダやライブラリは無いよ、と言われてしまう。

困った。


July 14, 2007

[Ruby] Ruby-GetText-Packageについての誤解

暇だったのでちとリファラを辿ってRuby-GetText-Packageについて言及しているブログ等をいくつか拝見させていただきました。

まだまだ誤解している人もいる模様ですが、とりあえず2つほどこちらに書いておきます。FAQ扱いかな。

知り合いに似たような誤解をしている人がいたら是非指摘してあげてくださいまし。

1. Shift_JISで出力したい場合でも、rails.poを手作業でShift_JISに変換する必要はありません

出力文字コードはrails.po内の文字コードに依存しません。環境に応じた文字コードで出力されます.これはGetTextのウリの一つです。

Railsの場合、init_gettextで

init_gettext "foo", :charset => "Shift_JIS"

とさえすれば、Shift_JISで出力されるようになります。
ちなみに、app/views/layouts/foo.rbのheadタグのcontent-type指定は以下のように変更すると良いでしょう。

<meta http-equiv="content-type" content="text/html;charset=<%= GetText.output_charset %>" />

ここはShift_JISと固定で書いてもOK。

ViewについてはShift_JISでベタ書きしても良いのですが、GetTextの_(), n_()等を使ってpoファイルを使うようにすればこちらも同様に出力文字コードが変換されます。

Modelのカラム名等も変換されます。

注意する必要があるのはDBの文字コードをShift_JISにするということですね。

蛇足ですが、もし、DBの文字コードをUTF-8にして出力だけをShift_JISにしたい場合は、hメソッドをオーバーライドすれば大方大丈夫なような気がします(未確認)。

どこかに以下のコードを追加。どこが良いのかな。application.rbあたり?
alias orig_h h
def h(str)
  begin
    ret = Iconv.iconv(GetText.output_charset, "UTF-8", str).join
  rescue Iconv::Failure
    #異常処理
  end
  ret orig_h(str)
end

でも、まぁ、Shift_JISを使いたいというのはそれなりの理由があるでしょうし、毎回変換かけると性能に影響もあるでしょうからやっぱりDBの文字コードは出力文字コードに合わせた方がよいのではないかな、と思います(Ruby-GetTextの場合、適切な文字コードに変換された後の文字列がキャッシュされるので変換による性能上の影響はほとんどありません)。

2. GNU Gettextが入っていない環境ではrmsgmergeを使う

rmsgmergeは確かにRuby-GetText-Packageが提供するmsgmergeの代替品ではあります。が、fuzzyに対応していない等、機能的にかなり劣っていますので、少なくとも現時点では極力GNU Gettextを入れるべきです。通常の環境ではGNU Gettextのバイナリをすぐに用意できると思います。Windowsの人は是非、Ruby-GNOME2 Win32 GUI Installerをインストールしてください。GNU GettextだけではなくRuby-GNOME2もおまけでついてくるという優れものです(いや、本当はGNU Gettextの方がおまけなんですが(苦笑))。

以前、これについてはもう少し詳しく書いたのでこちらを参照してください。


追記