著作一覧 |
2006 年 6 月 10 日 (土)、11 日 (日) の二日間です。
task :updatepo do GetText.update_pofiles("blog", Dir.glob("{lib,bin}/**/*.{rb,rhtml}"), "blog 1.0.0") endこの場合、ゼロから作り直すんだと開き直って
task :updatepo do if RUBY_PLATFORM =~ /mswin32/ begin File.delete('po/blog.pot') rescue end end GetText.update_pofiles("blog", Dir.glob("{lib,bin}/**/*.{rb,rhtml}"), "blog 1.0.0") endとしたほうが幸せだと思う。多分。
追記:それほど幸せじゃないか。Gtk+ Windowsを入れたほうがむしろ良い。むとうさんのツッコミも参照
テーブル上には出てこないフィールドはどうすればいいんだろう?
たとえば、テーブル上は1つのカラムになるけど、フォームでの入力は都合上、3個に分かれているとか。
たとえば、テーブル上では社員コードという名前のカラムだけど、フォーム上は、採用年度、採用地域コード、連番 というような3つのテキストボックスに入力させて、モデル内でコード化するというような例がある。
class Item < ActiveRecord::Base validates_numericality_of :hireyear, :allow_nil => false FIELD_HIRE_DATE = N_('Item|Hireyear') def hireyear @hire_year end def hireyear(y) @hire_year = y end ... end(追記:_からN_に修正)
まるでS2Daoの定数アノテーションだ。
でも、もっとうまい方法はないかなぁ(parser/activerecord.rbで=メソッドを見つけたらフィールドと見なすというのをちょっと考えたけど副作用が大きすぎるようにも思うし)。
結局、ruby-listでのむとうさんのお勧めのGlade/Gtk+ for Windowsを入れた。最初、どれか良くわからなくてgtk+-win32-runtime入れたら、さすがにruntime、入ってなかった。で、gtk+-win32-devel入れたら、こっちでOK。ヘッダやライブラリも入ってコンパイルもできるようになったから、ASRにも入れてみようかな?
というのは、前置きで(というか、自分のためのリンク集なのだが)、本題は、CP932で(Windows-31Jはiconv-1.9.1が認識しなかった)ja/foo.po を作っておいたのだが、更新後は、utf-8になってしまってた。potのcontent-typeしか見ないのかな? でも、それは無茶だと思う。jaはCP932、cnはbig5とかって、分かれることがあるはずだから(どうせクライアントへのアウトプットはUTF-8になるのだから、poもUTF-8で作ったほうが良いというのはわかるけど)、potじゃなくて、個々のpo毎に元の文字コードでマージしてくれるべきじゃないかな(ただし、中身が壊れるわけではない。正しくutf-8で出力はされているし、content-typeもutf-8に変わっている)。
ジェズイットを見習え |
「アップデートポ」のところですが、それをやってしまうとヘッダ部分(ライセンス書いたりする部分)を毎回手書きしなければならないので大変だと思います。msgmergeを使えばその辺は引き継がれますので毎度書き直すのはmsgstrのみで済む、という利点があります。<br>この辺のオススメの手順は以下のURLが参考になるかもしれません(英語ですが・・・)。<br>http://www.yotabanana.com/hiki/ruby-gettext-howto-manage.html<br><br>「テーブル上には出てこないフィールド」の件ですが、これは難しいですね。上記の:hireyearはなかなか良い線行ってると思いますが・・・。<br>ただ、上記のhireyearが活躍する場面と、「テーブル上は1つのカラムになるけど、フォームでの入力は都合上、3個に分かれている」の場面はちょっと状況が違うような気がしました。<br>Viewで3つのフィールド、と言うことであれば、それは単にViewのrhtmlに_()でテキストフィールドを記述しますし、validationはカスタムvalidationを用意することになるのではないでしょうか。であれば、あまり問題にはならないと思うのですが・・・。<br>でも、その辺ってローカライズしない場合でも同様の問題があるんじゃないでしょうか。Ruby-GetTextの守備範囲とはちょっと違うような気がしました。<br>#問題の意図を外してたらすみません。<br>"=メソッドを見つけたらフィールドと見なす"というのはちょっとやりすぎでしょうねぇ。そういった意味でも、抽出文字列を明示するという意味でN_()を使うってのは現実的な気がします。<br><br>CP932がUTF-8になってしまったのは私の方でもちょっと確認してみます。<br>ただ、Ruby-GetText側では特に何もしていないので、もしかしたらGNU msgmergeの仕様かもしれません。
確かに、大変でした。>アップデート