OSDN Git Service

Adds locales:update task as a replacement for gloc:update.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 21 Feb 2009 15:11:09 +0000 (15:11 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 21 Feb 2009 15:11:09 +0000 (15:11 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2501 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/tasks/locales.rake [new file with mode: 0644]

diff --git a/lib/tasks/locales.rake b/lib/tasks/locales.rake
new file mode 100644 (file)
index 0000000..1ef997f
--- /dev/null
@@ -0,0 +1,31 @@
+namespace :locales do
+  desc 'Updates language files based on en.yml content (only works for new top level keys).'
+  task :update do
+    dir = ENV['DIR'] || './config/locales'
+    
+    en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en']
+    
+    files = Dir.glob(File.join(dir,'fr.{yaml,yml}'))
+    files.each do |file|
+      puts "Updating file #{file}"
+      file_strings = YAML.load(File.read(file))
+      file_strings = file_strings[file_strings.keys.first]
+    
+      missing_keys = en_strings.keys - file_strings.keys
+      next if missing_keys.empty?
+      
+      puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})"
+      lang = File.open(file, 'a')
+      
+      missing_keys.each do |key|
+        {key => en_strings[key]}.to_yaml.each_line do |line|
+          next if line =~ /^---/ || line.empty?
+          puts "  #{line}"
+          lang << "  #{line}"
+        end
+      end
+      
+      lang.close
+    end
+  end
+end