64 lines
1.7 KiB
Ruby
Executable file
64 lines
1.7 KiB
Ruby
Executable file
#!/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
|