フォーチュンサモナーズ
«前の日記(2005-09-06) 最新 次の日記(2005-09-12)» 編集

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|08|09|10|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2005-09-07

_ [Ruby][Rails] Ruby-GetText-Package を使ってみる (2) このエントリーを含むブックマーク

pot ファイルや po ファイルをインクリメンタルに更新するにはどうすればいいんでしょうか。rgettext コマンドは新規に potファイルを生成することはできても、既存の pot ファイルに差分更新することはできないようですので。理想的には以下のようにできるといいなあと。

  • 開発者が rb/rhtml ファイルを更新
  • 開発者が rake タスクを実行する
  • rake タスクが pot ファイルに差分だけ追加
  • rake タスクが po ファイルに差分だけ反映
  • 開発者が po ファイルを更新

開発者≠翻訳者で、リリース済みアプリケーションの mo ファイルを作るのではなく、開発者=翻訳者で、開発途中のためにメッセージリソースが頻繁に更新されるという環境を想定しています。

_ [Rails] 『Ruby on Rails』入門 Hotwired このエントリーを含むブックマーク

Rubyは、日本が90年代に生み出した最高傑作のひとつ。

とうとう Webmonkey の記事に rails が。Webmonkey は特異なノリの文章で有名?ですが、相変わらず飛ばしてます。やけに半端なところで「次回に続く」となっていますが、本国版を見るに全 6 ページ構成のようですね。

_ [Blog] 「○○について」というスパムブログ このエントリーを含むブックマーク

void GraphicWizardsLair( void ); // 今日の井原 - アフィリエイト収入を目的としたスパムblogが急増してる件 より。

私も数ヶ月前から「○○について」という自動生成ページに、このWeb日記の内容がコピペされまくっています。どうやらGoogleやRSS検索などで引っ掛けたblogのdescriptionやCDATAから抜き出して自動生成アフィリエイトblogを生成している感じです。

仕事柄、スパムブログのブラックリストを作ったりしてますが、「○○について」系のサイトは数十確認しています。Wikipedia からすべて「引用」している辞書系サイトと、seesaa ブログのセットですね。例えば、 anon1.com と igakususume.seesaa.net。筍のように増えていて、かなりうんざりします。

_ [Ruby][Rails] Ruby-GetText-Package を使ってみる (3) このエントリーを含むブックマーク

差分更新はどうするのだろう と書いたところ、むとうさんZnZ さんに msgmerge を使えばできると教えていただきました。ありがとうございます。

ということで、Ruby-GetText-Package の Rakefile ほぼそのままですが、po/mo ファイルの差分更新を rake タスクにしてみました。

def msgmerge(name, po_root, tmp_file = "tmp.pot")
  system("msgmerge -U #{po_root}/#{name}.pot #{tmp_file}")
  Dir.glob("#{po_root}/*/#{name}.po") do |f|
    lang = /#{po_root}\/(.*)\//.match(f).to_a[1]
    system("msgmerge -U #{po_root}/#{lang}/#{name}.po #{tmp_file}")
    cont = IO.read(f)
    cont.sub!(/(Project-Id-Version\:.*)(\d\.\d\.\d)/, "\\1#{GetText::VERSION}")
    File.open(f, "w") do |out|
      out.write(cont)
    end
  end
end
 
desc "Update po files"
task :updatepo do
  require 'gettext/rgettext'
  files = Dir.glob('**/*.{rb,rhtml}')
  GetText.rgettext(files, "tmp.pot")
  msgmerge("foo", "po")
  File.delete("tmp.pot")
end
 
desc "Create new pot file for L10n"
task :makepot do
  require 'gettext/rgettext'
  files = Dir.glob('**/*.{rb,rhtml}')
  GetText.rgettext(files, "po/foo.pot")
end
 
desc "Create mo files for L10n"
task :makemo do
  require 'gettext/rmsgfmt'
  GetText.create_mofiles(true, "po", "locale")
end
本日のツッコミ(全3件) [ツッコミを入れる]
_ むとう (2005-09-07 02:26)

いやいや、その辺の「メンテナンス性」の高さが、GetTextファミリが他を追随させない理由の1つです。<br><br>ちなみに差分更新する場合はmsgmergeというGNU GetTextに含まれるメンテナンスツールを使います。<br><br>これについては確かにtask化しておくと便利かもしれませんね。<br><br>Ruby-GetText-Package-1.0.0のソースに含まれる、Rakefileのupdatepoというタスクが参考になるかもしれません。

_ だて (2005-09-07 08:05)

なるほど。やはり用意されているんですね。<br>まずは GetText 自体の勉強をしてみます。

_ むとう (2005-09-09 13:49)

GetText::VERSIONの部分はだてさんのアプリにあわせて変えてくださいませ(そこには。<br>それから、makepotですが、これも、すでにpotが存在する場合はmsgmergeにした方が良いかと思います。<br><br>potファイルのヘッダ部分はアプリ開発者が編集しておき、翻訳者に配布します。<br>msgmergeすれば、最初に編集しておいたpotファイルのヘッダにあるライセンス情報等が引き継がれます。

[]

最近のコメント:

  1. だて (09-17)
  2. トオルスガルモノノ (09-16)
  3. むとう (09-09)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).