I18n: {{name}} を %{name} に置き換える

古い I18n で構築した Rails アプリを、最近の I18n に合わせようとすると、config/locales 以下の翻訳ファイルについて、{{name}} を %{name} に置き換える必要があります。

私は次のようなタスクを作って一括置換しました。


task :update_locales => :environment do
pattern = File.join(RAILS_ROOT, 'config', 'locales', '**', '*.yml')
FileList[pattern].select do |path|
text = File.open(path).read
if text.gsub!(/\{\{(\w+)\}\}/, '%{\1}')
File.open(path, 'w') do |f|
f.write(text)
end
end
end
end

sed 使いの人は1行で書くのかもしれませんが、私には無理。

また、gsub で後方参照する方法を忘れてしまい、少し時間が掛かってしまったことが悔やまれる。