#!/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.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