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

August 16, 2004

[Ruby-GNOME2] GnomeFiles

たむらさん安部さん、他、協力してくださったみなさん、どうもありがとうございます。

おかげさまでいい感じで上位に食い込んでいるようです(私が見たときにBest Ratedが2位)。

バージョンが0.10.1になったことでまたVoteできるようになっていたのでまたまたRating 10(best)でVoteしちゃいました。

もうVoteしちゃった方も、まだの方も、是非、あなたの一票を!.....Ratingは10でよろぴくね(^^;)

#思いっきり組織票だな....。でも良いんです。目立つことが大事なのですっ!

[Ruby] sgettext

ふと、相花さんが和訳されたlibglade リファレンスマニュアルを読んでて(いつもお世話になってます)、libglade を使った国際化の章に、ナニゲにおもしろいことが書いてあるのに気づいた。

リンク先のGNU GetTextのドキュメントを見てもらえば詳細はわかると思うんだけど、GUIでありがち(?)な「表示文字は同じなんだけど機能が違うもの」があった場合の扱いが書いてある。

たとえば、GUIのメニューで、Fileメニュー → Openって言うメニューとPrinterメニュー → Openって言うメニューがあるとする。

通常のGetTextでは、表示文字列が同じOpenなのだから、これらは同じmsgid(つまり同じ訳)になってしまう。でも、実はOpenを訳そうとすると両方とも意味が違うので、両方とも「開く」ではちょっと気持ち悪い。

そんな時に、GetTextに渡す文字列を_("Menu|File|Open")とか、_("Menu|Printer|Open")って感じにして、デフォルト(つまり翻訳語が見つからないときに)表示するのは一番最後の"|"より右側の文字(この場合はOpen)にする、というものだ。もちろん、翻訳語がヒットした場合はそれをそのまま使う。

正直、あまり使い道はなさげ、というか、おそらく最初にツールを作る人が英語ネイティブな人だときっと気づかないと思うしGNU GetTextには実装されていないみたいなんだけど、なかなかおもしろそうなのでRuby-GetText-Packageでも実装してみようかな。セパレータは選択できるようにして、こんな感じでどうだろう?

def sgettext(msgid, div = '|')
  msg = gettext(msgid)
  if msg == msgid
    if index = msg.rindex(div)
      msg = msg[(index + 1)..-1]
    end
  end
  msg
end

ってか未だにGNU GetTextの仕様書を全部読み切れてないオレって...(汗。


更新 設定