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

July 31, 2005 [おもひで]

[Ruby-GNOME2] Ruby-GNOME2-0.13.0 is out!

リリースしました。いやー、いつもながら大変だー、こりゃ。

大変だっただけに良いものになってるはず!?

みなさん、特に学生さんは一人1スクリプト、夏休みの宿題と言うことで!

もちろん、提出先は私で!

....冗談です。まぁ、ともかくRuby-GNOME2を使ってみてくださいな。最近、Webプログラミングに押されまくりではありますが、GUIプログラミングも結構楽しいですよ。

にしても。Win32はとりあえず32bit版のバイナリを用意したけど近い将来は64bit版も用意しなきゃいけなくなるんだろうなぁ。この作業、誰かやってくれないかしらん。

[Ruby] Ruby-GNOME2 + Ruby-GetText-Packageメモ

オレが過去に作った何点かのRuby-GetText-Package対応アプリケーションやruby-glade-create-templateでは、以下のような仕掛けを入れてある。これで、Ruby-GetText-Packageが無い環境であっても、一応は英語でアプリを起動することができる。

begin
  require 'gettext'
rescue LoadError
  unless defined? GetText
    module GetText
      module_function
      def _(msgid); msgid; end
      def N_(msgid); msgid; end
      def n_(msgid, msgid_plural, n)
	n == 1 ? msgid : msgid_plural
      end
      def s_(msgid, div = '|')
	if index = msgid.rindex(div)
	  msgid = msgid[(index + 1)..-1]
	else
	  msgid
	end
      end
      def bindtextdomain(domainname, path = nil, locale = nil, charset = nil)
      end
    end
  end
end

Ruby-GetText-PackageのメンテナでもあるオレにとってはRuby-GetText-Package必須で!と言いたいところだが、Ruby-GNOME2のメンテナであるオレにとってはこうすることで少しでもアプリケーションの依存関係を(必要でないならば)減らしていける工夫は大切だと思ってもいる。

一方、Ruby-GNOME2でL10n化しようとすると、Ruby-GetText-Packageはほぼデファクトスタンダードになっている。

(1) 過去のGNU GetTextとGTK+の関係の延長でRubyでも似たようなインタフェースが慣れてる。

(2) msgmergeなど、メンテナンスを考えるとGetTextはとっても有利。

(3) LibgladeがGetTextの仕組みで動作するので、少なくともLibgladeを使ってL10n化を考えるとGetTextの仕組みが必須。ならばあえて別のL10n化の仕組みを入れるまでもない。

(4) どちらもメンテナがオレ(^^;)

などが理由に挙げられる。ってか(2)(3)が大きなアドバンテージだろうな。

で、次のRuby/GLib(のglib2.rb)に、上記コードをそのまま入れてしまうのはどうだろう、と思うに至った。

であれば、Ruby-GNOME2ベースのアプリケーションは、何も気にせずGetTextの仕組みを用いたコードを書くことができ、それはもちろん、GetTextが無い環境でも動作するわけだ。英語圏の人はわざわざRuby-GetText-Packageなんて入れたくないだろうしね。

デメリットといえば、L10n化の仕組みが完全にRuby-GetText-Packageに依存するようになるってことだと思うけど、現時点では有力な対抗馬もいないことだし、ムリに使わなくても大丈夫だし、まぁ、よしとするかな。

もう一つのデメリットは、このコードの後にrequire 'gettext'すると、-wオプション付きでそのスクリプトを実行したときに"warning: method redefined"というWarningが出ることか...。こっちはちょっとイヤだなぁ。なんか回避策無いかな。

そうそう、このコード、Ruby-GetText-Packageにも含めた方が良いかもね。miscとかいうディレクトリ作ってそこに置けば良いのかな。

本日のツッコミ(全3件) [ツッコミを入れる]
kou (August 01, 2005 09:28)

お疲れさまでした.
夏休みの宿題は...ちょっと...無理かも...です...X<

"warning: method redefined"ってどういう時にでるんですか?
コードの後にrequire 'gettext'を付け加えたファイルをruby -wしてもでないんですが...
Ruby-GetText-Packageをインストールしてあるから???

たむら (August 01, 2005 16:42)

単に requireしてるかどうかの判断なら
$".include?('gettext.rb') でいけるけど
そういうことじゃない?

むとう (August 01, 2005 22:44)

 あれ?大丈夫かな>Warning
意図としては以下のようなコードを追加するイメージです。

require 'gettext'
module GetText
  module_function
  def _(str); str; end
end

でも、こういう風な場合って通常の使い方としては想定できないかも。

#宿題の件は冗談ですので、念のため(笑)


編集