This is a multi-part message in MIME format.

--Multipart_Wed__28_Nov_2001_02:15:30_+0900_082e42f8
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

むとうです。

#長文です。しかもまとまってない....

In message "[ruby-ext:02002] Re: syslog module is becoming ready"
        on Mon, 26 Nov 2001 21:21:10 +0900, "Akinori MUSHA" <knu / iDaemons.org> wrote:

>  というわけで 1.7 に syslog モジュールを入れました。
> 
>  Ruby の配布 tarball はまだまだ 1MB にも満たないので、汎用的で
> 完成度の高いものがあればどんどん入れる方向で動きましょう。

> 	- gettext

gettextをあげていただいて個人的には非常にありがたいです。

ただ、gettextのRubyの実装は私の知る限り3つあります。

ruby-intl     HIRATA Naotoさん
ruby-gettext  yashiさん
ruby-gnome    はNeil Conwayさん

roughに入れるとなるとやはりどれかを選択(あるいはマージ)する
ことになると思いますので議論が必要かと思います。
#APIくらいは統一できたらなと思います。

一応、私なりにぞれ特徴をまとめてみました。

(1)ruby-intl - Class
  ・Intlというクラスのメドとして各メドが定義されている
   ・Intlをnewする際にtextdomainをbindする(別メドで再定義可濡息
  ・localeの定数を含み、Intl.new時に内部的にlocaleがセットされる

(2)ruby-gettext - Module + Stringクラスの拡張
   ・GetTextというモジュール関数にbindtextdomain,textdomainが定義されている
   以外の文字列を変換するメドはStringのインスタンスメドとして定義
   ・localeはruby-localeパッケージが別途必要
   ・rgettextというxgettextの代替ツールが付属している

(3)ruby-gnome - Module
   ・I18nというモジュールのモジュール関数として定義されている
   ・localeはもともとruby-gnome内部でセットされる

3つぞれのサンプル(sample1.txt)をつけたのでのある方はご覧ください。

Class, Module + Stringクラスの拡張, Module とぞれ実装が異なっていて深い
のですが、どれがより良い実装なのでしょうか。
#って、これでリプライ誰もくれないとものすごく寂しいのですが....(^^;)

---
ちなみに私はちょっと前までは(^^;)(2)派だったのですが、
点では(3)の実装が良いかなと思っています。
というのは、理由があります。

A. [ruby-ext:01953] Re: [patch]ruby-gettext add dgettext and dcgettextの問題
   ruby-gettextの例は上記スレッドをたどってください。一応、解決策は提示でき
   たとは思いますが、ad hocな感じがしないでもありません。

   ruby-intlだと、

   intl  ntl.new("hoge")
   def intl._(msgid)
     dgettext("hoge", msgid)
   end
   print intl._("Hello World")

   とすれば、intlの範囲内でLibraryと本体側の参照するtextdomainを区別できます。
   というか、もうちょっとrub-intl自体のintl#_(msg)の中でがんばっておけば

   intl  ntl.new("hoge")
   p intl._("Hello World")

   と常に同じインスタンスのintlのtextdomainを限定できると思います。

   ruby-gnome版でも同様に韻泙后
  
   博闕綺塞姥隨砠鈔纔粹轣蜴│蓖艱↑ 鉗讒

   粤澀逑芍筴
     博闕綺塞姥隨粢續纔│蓖艱↑ 逑芍筴
   緕   頏蜴澀斐跛 恟鳰籘遐
   こちらももうちょっとruby-gnome側でがんばれば

   include Gnome::I18n
   bindtextdomain("hoge", nil)
   print _("Hello World\n")

   と韻襪茲Δ砲任ると思います;
   クラス内でincludeする形にすればクラスのインスタンス単位で
   分けることも可と思います。
   ruby-intl版よりもメド名が短くなるのもうれしいです。

B. String#_ について
   ruby-gnome版はruby-gettextのようなこともできます。

   class String
     def _
       Gnome::I18n.dgettext("hoge", self)
     end
   end

   Gnome::I18n.bindtextdomain("hoge", nil)
   print("Hello World\n"._)
    
   #ruby-intlでも似たようなことが韻襪箸六廚い泙垢ちょっえ
  #手間がかかると思います。

-----
Libraryを開発する側としては、上記Bのアプローチを取ってしまうと
ちょっとまずい(Libraryの使用者側によるString#_のオーバーライド等)
のですが、Libraryの使用者が任意にBを使うのはアリかなと思います。


というわけで、

・Moduleベースでかつ
・各メドはruby-gettextをベースにする
・xgettextのruby版をrgettextをベースにし、
  _("..."), "..."._ のどちらでも対応できるようにする

というのが今のところ一番良いのではないかと思っているのですが
いかがでしょうか。

---
場合の懸案事項ですが、
・localeをどうするか?
 ruby-gettextはlocaleを分離しています。これはこれですっきりしている
 とは思うものの、実際使う側としてはgettext内部で呼ばれちゃっても
 良いような気がします。
  #localeもroughに入れていただければ問題ないのかな...。

・モジュール名は?
 gettextを知っている人が多いならruby-gettextが使っている
 GetText というモジュール名はアリだと思うのですがruby-intlのIntl
  や、ruby-gnomeのI18nでもアリなような気もしますし、L10nとかでも
 良いような気がしてます。

・ライセンスは?
  Ruby'sにできれば良いのですが...。たぶん、HIRATA Naotoさんとyashiさんの
 了解が必要かと思います。

----
なんか、頭がぼーっとして来たので今日は錣蠅砲靴泙后L斉も仕事だえ即湎擦臓

ご意見・ご指摘等していただけるとありがたいです。

特にご意見いただけないようでしたら懸案事項はともかく、
この仕様の方向でRuby-GNOMEの実装を先に進めちゃいたいと思います
(らもまだ不完全なので)。

では。

-- 
.:% MUTOH Masao <mutoh / highway.ne.jp>




--Multipart_Wed__28_Nov_2001_02:15:30_+0900_082e42f8
Content-Type: text/plain;
 nameample1.txt"
Content-Disposition: attachment;
 filenameample1.txt"
Content-Transfer-Encoding: base64

KKWzobylyc7jKQoKKDEpcnVieS1pbnRsCiAgIC0tLS0tLSAKICAgcmVxdWlyZSAnaW50bCcKCiAg
IGludGwgPSBJbnRsLm5ldyggImhlbGxvIiApCiAgIHByaW50KGludGwuXygiSGVsbG8gV29ybGQi
KSkgCiAgIC0tLS0tLSAKCigyKXJ1YnktZ2V0dGV4dAogICAtLS0tLS0gCiAgIHJlcXVpcmUgJ2xv
Y2FsZScKICAgcmVxdWlyZSAnZ2V0dGV4dCcKIAogICBMb2NhbGUuc2V0KExvY2FsZTo6QUxMLCBF
TlZbJ0xBTkcnXSkKCiAgIEdldFRleHQuYmluZHRleHRkb21haW4oImhlbGxvIikKICAgR2V0VGV4
dC50ZXh0ZG9tYWluKCJoZWxsbyIpCgogICBwcmludCgiSGVsbG8gV29ybGQiLl8pCiAgIC0tLS0t
LSAgIAoKKDMpcnVieS1nbm9tZQogICAtLS0tLS0gCiAgIHJlcXVpcmUgJ2dub21lJwogICBpbmNs
dWRlIEdub21lOjpJMThuCgogICBiaW5kdGV4dGRvbWFpbigiaGVsbG8iLCBuaWwpCiAgIHRleHRk
b21haW4oImhlbGxvIikKCiAgIHByaW50KF8oIkhlbGxvIFdvcmxkIikpCiAgIC0tLS0tLSAK

--Multipart_Wed__28_Nov_2001_02:15:30_+0900_082e42f8--