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

March 01, 2009 [長年日記]

[Misc] メールアドレスを変更します

今までのmutoh(at)highway.ne.jpをmutomasa(at)gmail.comに変更します。

まだしばらくhighway.ne.jpも残しますが、もし何かありましたら、mutomasa(at)gmail.comまでご連絡いただければと思います。


March 08, 2009 [長年日記]

[Misc] rubyonrails-talkを退会(unsubscribe)する

gmail.comの方に変更したいので、とりあえず、highwayアカウントは退会したい・・・・。説明がない・・・・。どうすれば退会できるんだ・・・。

結局は、rubyonrails-talkの過去ログに

rubyonrails-talk-unsubscribe@googlegroups.com

にメールするべし!と書いてあったので、送ってみたら、確認メールが来て、その中にリンクをクリックすることで無事に退会できた。

ってか、どっかに説明書いておいてほしいなー(あるのか!?)。


March 11, 2009 [長年日記]

[Misc] gitとgemってなんか似てる

gem commit -a ってやってエラーが出て、小一時間悩んでしまった、そんな小春日和の一日。

[Rails] Ruby-GetText-Pacakge on Ruby on Rails-2.3.0 RC2

ようやくですが、Ruby-GetText-PackageをRails-2.3.0 RC2への対応が一段落しました。(Rails-2.2.xは捨てでいいよね・・。ダメ?)

基本的には今までの使用方法を踏襲しています。かつ、Rails I18n系のローカライゼーションのフレームワーク・他のバックエンドとも協調でき、Rails I18nや他のバックエンドでローカライズされたプラグインやI18n.tメソッド(+YAMLベースのリソースファイル)等も一緒に使うこともできます(となるのが当面の目標です)。

大きな違いとしては、Ruby-GetText-Packageは5つのライブラリに分割されたことですね。

汎用ライブラリである、locale, gettextと、Rails-2.3.x用のlocale_rails, gettext_activerecord, gettext_rails(activerecord以外)の3種類です。ちょっと面倒くさくなったかもしれませんが、使用者はこれらを好みにより使い分けることもできます。例えば、activerecordをRails以外の目的で使用する場合はlocale, gettext, gettext_activerecordのみをインストールすれば良く、locale_rails, gettext_railsは不要です。

まだ、テストが不完全(ってか無いのもあるし(苦笑))なのとローカライズドビューとActionMailerがまだ手つかずなので今すぐリリースってわけにはいかない(少なくともRuby-GetText-Package-1.93.0とほぼ互換にするつもり)ですが、もし、試してもよい、という方がいらっしゃいましたら、ぜひとも試していただいて不具合・御意見等をお聞かせ願えればと思います。

ということで今の段階での試し方です。githubの流儀に馴染めてないので独自の方法で説明します。
とりあえずgitをインストールして、以下のようにしてください。

$ sudo gem uninstall gettext (古いgettextが入ってると誤動作する可能性があります。)
$ git clone git://github.com/mutoh/locale.git 
$ git clone git://github.com/mutoh/locale_rails.git 
$ git clone git://github.com/mutoh/gettext.git 
$ git clone git://github.com/mutoh/gettext_activerecord.git 
$ git clone git://github.com/mutoh/gettext_rails.git 
$ cd locale
$ rake package
$ sudo gem install pkg/locale-x.x.x.gem  (x.x.xはpkg/配下に存在するバージョンを指定してください)
$ cd ../locale_rails
$ rake package
$ sudo gem install pkg/locale_rails-x.x.x.gem
$ cd ../gettext
$ rake makemo
$ rake package
$ sudo gem install pkg/gettext-x.x.x.gem
$ cd ../gettext_activerecord
$ rake makemo
$ rake package
$ sudo gem install pkg/gettext_activerecord-x.x.x.gem
$ cd ../gettext_rails
$ rake makemo
$ rake package
$ sudo gem install pkg/gettext_rails-x.x.x.gem
(サンプルを試す場合)
$ cd sample
$ rake db:create
$ rake db:schema:load
$ ruby script/server

なお、Ruby-GetText-Package-1.93.0からの変更点ですが(リリースする時にはきちんとドキュメント化しないとだな・・・)、

  1. Rakeファイルがrequire 'gettext/utils'から'gettext_rails/tools'に変わった&GetText.update_pofiles, GetText.create_mofilesの引数が若干変わった。
    ただし'gettext/utils'も後方互換性のため残してあります。
  2. config/environment.rbは呼び出すgemが変わっています。以下のように書いてください。
         :
         :
      config.gem "locale_rails"
      config.gem "gettext_activerecord"
      config.gem "gettext_rails"
    end
    

    ざっと駆け足で説明してみました。不明点があれば聞いてください。ぜひともお試しを~。


March 12, 2009 [長年日記]

[Ruby] Ruby-Locale on Ubuntu

UbuntuだとLocale.charsetのテストがこける、とのレポートをいただきました。さっそく試していただいてありがとうございます。

修正しておきましたので、同じような問題に当たって諦めた方がいらっしゃいましたら再度試してみてください。

あと、gettext_railsもコミット(じゃなくてpush)忘れがあったのでそちらも最新をどうぞ。


March 16, 2009 [長年日記]

[Ruby] Ruby-LocaleとTZInfoを使ってデフォルトのTimezoneを取得する

TZInfoはRubyでTimezoneを扱うためのライブラリです。RailsにもTZInfoがあるのですが、どうも完全版じゃないらしいです。ま、ともかく、今回は完全版でのお話。

Timezoneというのは地域ごとに指定されている情報で、例えば、1つの国であってもアメリカであれば複数に分かれています。

これらをTZInfoを使って取得しようとすると以下のようになります。

require 'rubygems'
require 'tzinfo'
 
country = "JP"
 
tz = TZInfo::Country.get(country)
p tz.zone_identifiers
p tz.zones
p tz.zone_info

このcountryはISO3166のCountryコードですから、Ruby-Localeを使うことができます。
そこでサンプルとしてRuby-Localeでデフォルトのロケールを取得し、そのタイムゾーン(の情報)を取得するスクリプトを書いてみました。

require 'rubygems'
require 'tzinfo'
require 'locale'
 
country = Locale.get.country 
 
tz = TZInfo::Country.get(country)
p tz.zone_identifiers
p tz.zones
p tz.zone_info

セレクションボックス等で、TZInfoのデフォルト値を指定したい場合にRuby-Localeと組み合わせることができる、という例でした(実際は国により候補が複数出てくるので単純にデフォルト値を決めるわけにはいかないのですが(^^;))。
ちなみに、RailsのバージョンではTZInfo::Countryを持っていないみたいなので、今回の連携はできないみたいです。残念。

今後もRuby-Localeを中心に他のL10nライブラリを使う、ということを紹介していければと思います。


March 18, 2009 [長年日記]

[Rails] gettext_rails ActionMailerも動作しました

とりあえず、あとはローカライズド・ビュー(locale_railsの方だけどね)をどうにかすれば、互換性をほぼ維持した形の姿になる予定。そしたらリリースするかな。


March 21, 2009 [長年日記]

[Ruby] Rakefile+rubyforge

RubyForgeへのリリースにはrubyforgeをRakefileに記述して実施している。

desc "Publish the release files to RubyForge."
task :release => [ :package ] do
  require 'rubyforge'
  
  rubyforge = RubyForge.new
  rubyforge.login
  rubyforge.add_release("locale", "locale",
                        PKG_VERSION,
                        "pkg/locale-#{PKG_VERSION}.gem",
                        "pkg/ruby-locale-#{PKG_VERSION}.tar.gz")
end

こんな感じ。これが以下のようなエラーを出すことに気づいた。

rake aborted!
undefined method `[]' for nil:NilClass

ソースを見たところ、@userconfigが読み込めてない>これを読むためにconfigureというメソッドがあるんだけど、これが呼ばれてない、ということに気づいたので、以下のようにしてみた。

desc "Publish the release files to RubyForge."
task :release => [ :package ] do
  require 'rubyforge'
  
  rubyforge = RubyForge.new
  rubyforge.configure
  rubyforge.login
  rubyforge.add_release("locale", "locale",
                        PKG_VERSION,
                        "pkg/locale-#{PKG_VERSION}.gem",
                        "pkg/ruby-locale-#{PKG_VERSION}.tar.gz")
end

一応、これで無事に動いた。って、これで良いのかな?
ドキュメント探してみたけど、これってのが見つからなかったんだよな・・・


March 22, 2009 [長年日記]

[Ruby] Ruby-GetText-Package-2.0.0リリース!

もはや、Ruby-GetText-PackageというよりRuby-GetTextファミリと言った方が適切でしょうか・・・。とまぁそれはともかく、Ruby-GetText-Packageの最新版をリリースしました。

基本的に、Rails-2.1.x/Ruby-GetText-Package-1.93.0までとほとんど同じように使えるようにしています。

とはいえ、若干、変更しないといけないところもあるのですが、それは、こちらにまとめたので参考にしてください。MUSTで対応しないといけないのはconfig.gemを増やすことくらいかな。

RailsでRuby-GetText-Packageを使っている方へ。

今回のリリースはRails-2.3.2のみサポートです。Rails-2.3.1すら動作しないので注意してください。Rails-2.2.xでも動作しません。Rails-2.1.xを使う場合は引き続きgettext-1.93.0を使ってください。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

むとう [すみません、修正しました。 #英語版です。]

nisyu [ありがとうございましたっ]

むとう [いえいえ。こちらこそご指摘ありがとうございました。]


March 24, 2009 [長年日記]

[Rails] locale_rails-2.0.0

locale_railsですが地味にバージョンアップしています。

まずは、I18n.tメソッドで適切なロケールのリソースへのフォールバックができるようになっています。たとえば、en, jaしかサポートしていない環境でfr_FRがきたら、enにフォールバックしますし、ja-JPが来たらjaにフォールバックします。

これをサポートしたのには理由があって、gettextを使ったアプリ部分はローカライズできているのに、I18nベースのプラグインを使った画面の一部分では、Missing Translationなんて表示されたら使えないですもんね。

次に、ローカライズド・テンプレートです。

#と思って意気揚々と説明をはじめようと思ったのですが・・・・。

#なんと2.0.0ではこの機能拡張、コメントアウトされてました・・・。

#コメント外すのなぜか忘れてた・・・orz。

とりあえず、この説明内容を試すにはgithubの最新版が必要なのですが(汗)、ローカライズド・テンプレートとして、gettext-1.93.0と同じ記法が使えます。たとえば、index.html.erbに対して、index_ja_JP.html.erbという感じ。Rails-2.3.2自体が持つindex.ja.html.erbという記法も使用加能ですが、gettextスタイルであれば、I18n.tへの拡張と同様に、フォールバックに対応しています。

受け取るロケールはja_JPでもja-JPでもja-jpでも正規化してindex_ja_JP.html.erb、index_ja.html.erbの順で検索してくれます。Rails-2.3.2の記法の場合、単にRails-2.3.2のオリジナルメソッドを呼び出すだけなのでフォールバックまではできませんので、gettext記法(厳密にはCLDRの記法になります)をおすすめします。