自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。
Ruby言語やLinuxのネタが多いです。
July 07, 2008 [おもひで]
■ N_()の使いかた(再)
いまだにN_()の使い方やN_()と_()の違いについての質問が絶えないのでもう一度整理してみる。
まず、以下のようなコード。
class Hello
bindtextdomain("hello")
HELLO_WORLD = _("Hello world")
def say_hello
_("Hello!")
end
def say_hello_world
HELLO_WORLD
end
end
say_helloとsay_hello_world、2つのメソッドがある。_("")の使い方としては前者が正解で後者が間違い。なぜか。
通常のCUI/GUIアプリだと1回起動してしまえば全ての同じシステム上のロケールを使うことになるだろうからほとんど気にしないでも良いかもしれないが、RailsのようなWebアプリだとリクエストごとにクライアントのロケールが異なるため、say_hello_worldの方法だと意図しない動作になってしまう。
では、どのように書くと良いかというと、N_()を使って以下のように記述する。
class Hello
bindtextdomain("hello")
HELLO_WORLD = N_("Hello world")
def say_hello
_("Hello!")
end
def say_hello_world
_(HELLO_WORLD)
end
end
N_()は実は何もしないメソッド。rgettext(poファイル抽出時)にそれが翻訳対象文字列であることを伝えるためのメソッドで、実際の翻訳はsay_hello_world内の_()で行っている。
まとめると、_()はインスタンス化後に使用するもの、N_()はクラスレベルで使用し、実際に使うときに_()で使用するもの、というのがRuby-GetTextの基本的なお作法だという風に覚えてしまうと良いと思う。
[ツッコミを入れる]
July 26, 2008 [おもひで]
■ [Ruby] Ruby-GetText-Package ラトビア語リソース
ラトビア語のリソースファイルを追加しました。
ラトビア共和国は、バルト海に面する北東ヨーロッパの国で、第一次世界大戦後の1918年に独立。その後1940年にソビエト連邦に併合。旧ソ連、バルト三国を構成する共和国の一つ。1991年にソ連から独立を回復したとのこと。1991年というと、ついこの前の出来事じゃんとか思ってしまう自分(苦笑)。

[ツッコミを入れる]
