-#!/usr/bin/env ruby
-# yaml2po, for converting RoR translation YAML to the standard gettext
-# for eventual use with a translation site such as Transifex
-# Use:
-# - To create a 'master' .pot
-# yaml2po > translations.pot
-# - To create a language's .po (includes from scratch)
-# yaml2po de > de.po
-# - To create all languages' .pos and a .pot (under /config/locales/po)
-# yaml2po --all
-
-require "yaml"
-require "optparse"
-
-LOCALE_DIR = File.dirname(__FILE__) + "/../../config/locales/"
-EN = YAML.load_file(LOCALE_DIR + "en.yml")
-
-def iterate(hash, fhash = {}, path = "", outfile = $stdout)
- hash.each do |key, val|
- fhash[key] = {} unless fhash.key? key
- if val.is_a? Hash
- fhash[key] = {} unless fhash[key].is_a? Hash
- iterate(val, fhash[key], path + key + ":", outfile)
- else
- outfile.puts "msgctxt \"#{path}#{key}\""
- outfile.puts "msgid \"#{val}\""
- outfile.puts "msgstr \"#{fhash[key]}\""
- end
- end
-end
-
-def lang2po(lang, outfile = $stdout)
- puts lang
- infile = LOCALE_DIR + lang + ".yml"
- if File.exist? infile
- oth = YAML.load_file(infile)
- oth = oth[lang]
- iterate(EN["en"], oth, "", outfile)
- else
- iterate(EN["en"], {}, "", outfile)
- end
-end
-
-opt = ARGV[0]
-if opt == "--all"
- # Produce .po files for all langs, and a .pot template
- PO_DIR = LOCALE_DIR + "po/"
- Dir.mkdir(PO_DIR) unless File.directory?(PO_DIR)
- Dir.glob(LOCALE_DIR + "*.yml") do |filename|
- lang = File.basename(filename, ".yml")
- unless lang == "en"
- outfile = File.new(PO_DIR + "#{lang}.po", "w")
- lang2po(lang, outfile)
- outfile.close
- end
- end
- outfile = File.new(PO_DIR + "rails_port.pot", "w")
- iterate(EN["en"], {}, "", outfile)
- outfile.close
-elsif opt
- lang2po(opt)
-else
- iterate(EN["en"])
-end