]> git.openstreetmap.org Git - rails.git/blobdiff - script/locale/po2yaml
Add the counterpart script, po2yaml, and use strctxt rather than #: for identifying...
[rails.git] / script / locale / po2yaml
diff --git a/script/locale/po2yaml b/script/locale/po2yaml
new file mode 100755 (executable)
index 0000000..f2d2eb9
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env ruby
+# po2yaml, for converting gettext .po to the RoR translation YAML
+# Use:
+#  - To create a language's yaml from a given po file
+#    po2yaml de.po > de.yml
+
+require "yaml"
+
+def add_translation(hash, keys, value)
+  key = keys.shift
+  if keys.empty?
+    hash[key] = value
+  else
+    unless hash.has_key? key
+      hash[key] = {}
+    end
+    add_translation(hash[key], keys, value)
+  end
+  hash
+end
+
+def po2hash(f)
+  trs = {}
+  path = []
+  msgstr = ''
+  f.each_line { |line|
+    line = line.strip
+    if line[0..8] == 'msgctxt "'
+      path = line[9..-2].split(':')
+    elsif line[0..7] == 'msgstr "'
+      msgstr = line[8..-2]
+    end
+    
+    if !path.empty? and !msgstr.empty?
+      add_translation(trs, path, msgstr)
+      path = []
+      msgstr = ''
+    end
+  }
+  trs
+end
+
+filename = ARGV[0]
+pofile = File.open(filename, "r")
+
+langcode = File.basename(filename, '.po')
+
+tr = {langcode => po2hash(pofile)}
+
+print tr.to_yaml