カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
pot ファイルや po ファイルをインクリメンタルに更新するにはどうすればいいんでしょうか。rgettext コマンドは新規に potファイルを生成することはできても、既存の pot ファイルに差分更新することはできないようですので。理想的には以下のようにできるといいなあと。
開発者≠翻訳者で、リリース済みアプリケーションの mo ファイルを作るのではなく、開発者=翻訳者で、開発途中のためにメッセージリソースが頻繁に更新されるという環境を想定しています。
Rubyは、日本が90年代に生み出した最高傑作のひとつ。
とうとう Webmonkey の記事に rails が。Webmonkey は特異なノリの文章で有名?ですが、相変わらず飛ばしてます。やけに半端なところで「次回に続く」となっていますが、本国版を見るに全 6 ページ構成のようですね。
void GraphicWizardsLair( void ); // 今日の井原 - アフィリエイト収入を目的としたスパムblogが急増してる件 より。
私も数ヶ月前から「○○について」という自動生成ページに、このWeb日記の内容がコピペされまくっています。どうやらGoogleやRSS検索などで引っ掛けたblogのdescriptionやCDATAから抜き出して自動生成アフィリエイトblogを生成している感じです。
仕事柄、スパムブログのブラックリストを作ったりしてますが、「○○について」系のサイトは数十確認しています。Wikipedia からすべて「引用」している辞書系サイトと、seesaa ブログのセットですね。例えば、 anon1.com と igakususume.seesaa.net。筍のように増えていて、かなりうんざりします。
差分更新はどうするのだろう と書いたところ、むとうさんと 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
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
いやいや、その辺の「メンテナンス性」の高さが、GetTextファミリが他を追随させない理由の1つです。<br><br>ちなみに差分更新する場合はmsgmergeというGNU GetTextに含まれるメンテナンスツールを使います。<br><br>これについては確かにtask化しておくと便利かもしれませんね。<br><br>Ruby-GetText-Package-1.0.0のソースに含まれる、Rakefileのupdatepoというタスクが参考になるかもしれません。
なるほど。やはり用意されているんですね。<br>まずは GetText 自体の勉強をしてみます。
GetText::VERSIONの部分はだてさんのアプリにあわせて変えてくださいませ(そこには。<br>それから、makepotですが、これも、すでにpotが存在する場合はmsgmergeにした方が良いかと思います。<br><br>potファイルのヘッダ部分はアプリ開発者が編集しておき、翻訳者に配布します。<br>msgmergeすれば、最初に編集しておいたpotファイルのヘッダにあるライセンス情報等が引き継がれます。