#!/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 hash[key] ||= {} add_translation(hash[key], keys, value) end hash end def po2hash(f) trs = {} path = [] msgstr = "" f.each_line do |line| line.strip! if line[0..8] == 'msgctxt "' path = line[9..-2].split(":") elsif line[0..7] == 'msgstr "' msgstr = line[8..-2] end next if path.empty? || 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