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

July 31, 2002

[Ruby-GNOME2] だめだ〜やっぱりC言語は苦手だ....

なんか久しぶりにまともにC言語と格闘してる。そして今夜は久しぶりにメモリ領域怪獣と戦う夢を見そうだ....(T_T)。


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 [お疲れさまでした. 夏休みの宿題は...ちょっと...無理かも...です...X< "warning: metho..]

たむら [単に requireしてるかどうかの判断なら $".include?('gettext.rb') でいけるけど そう..]

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


July 31, 2006

[Ruby] 昨日の続き

ふと、リクエスト毎にset_locale_allが呼ばれるのは悪くない気がしてきた。

だとすると以下のようにするのもアリだな。

class ApplicationController < ActionController::Base
  bindtextdomain_to(Foo, "blog")
  init_gettext "blog"
end

実際、リクエスト毎にバインドされたテキストドメインが適切なロケールを返せるのかどうかなんて、bindtextdomainを呼び出すタイミングによって全然違くなっちゃうもんね。

問題なのは、例えばクラス毎にロケールを固定しておきたい場合か。まぁ、でもレアケースだな、きっと。そういう場合はfreezeできるような仕掛けを用意すれば良いか。