Gettextの .poファイルから I18N用ローカライズ用ファイルを作るコマンド

現在、既存のRails2.1 で書かれたRailsアプリのRails2.3対応を行っています、Rails2.2で入ったI18n機能を使うのですがActiveRecordのバリデーションエラー表示等で必要なテーブル名、カラム名ローカライズ用ファイルが必要になります。

そこで、従来のGettextの .po ファイルから I18n 用のローカライズファイル(YAML形式)を作るコマンドを書いてみました。


適宜修正して使って下さい :-)

#!/usr/bin/env ruby
require './config/environment'

def sp2us(s)
  s.gsub(' ', '_')
end

po_file = IO.read("po/ja/XXXXX.po")

msgs = []
po_file.scan(/msgid "(.*?)"\nmsgstr "(.*?)"/m) {|s| msgs << s}

puts "ja-JP:
  activerecord:
    models:"
msgs.select {|m| m[0] != "" && m[0] !~ /\|/}.each{|m| puts "      #{sp2us(m[0])}: #{m[1]}"}

puts "    attributes:"
table0 = ""
msgs.select {|m| m[0] != "" && m[0] =~ /\|/}.each {|m|
  table, column = m[0].split("|")
  puts "      #{table.underscore}:"  if (table0 != table)
  table0 = table
  puts "        #{sp2us(column).downcase}: #{m[1]}"
}