# Use:
# - To create a 'master' .pot
# yaml2po > translations.pot
-# - To create a partucular language's .po
+# - 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='')
+def iterate(hash, fhash={}, path='', outfile=$stdout)
+ postr = ''
hash.each {|key, val|
- unless fhash.has_key? key
- fhash[key] = {}
- end
+ fhash[key] = {} unless fhash.has_key? key
if val.is_a? Hash
- iterate(val, fhash[key], path+key+':')
+ fhash[key] = {} unless fhash[key].is_a? Hash
+ iterate(val, fhash[key], path+key+':', outfile)
else
- puts "#: #{path}#{key}"
- puts "msgid \"#{val}\""
- puts "msgstr \"#{fhash[key]}\""
+ outfile.puts "msgctxt \"#{path}#{key}\""
+ outfile.puts "msgid \"#{val}\""
+ outfile.puts "msgstr \"#{fhash[key]}\""
end
}
end
-language = ARGV[0]
-oth = {}
-if language
- oth = YAML::load_file(LOCALE_DIR+language+'.yml')
- oth = oth[language]
+def lang2po(lang, outfile=$stdout)
+ puts lang
+ oth = {}
+ infile = LOCALE_DIR+lang+'.yml'
+ if File.exists? infile
+ oth = YAML::load_file(infile)
+ oth = oth[lang]
+ iterate(EN['en'], oth, '', outfile)
+ else
+ iterate(EN['en'], {}, '', outfile)
+ end
end
-en = YAML::load_file(LOCALE_DIR+'en.yml')
-iterate(en['en'], oth)
+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") {|filename|
+ lang = File.basename(filename, '.yml')
+ unless lang == 'en'
+ outfile = File.new(PO_DIR+"#{lang}.po", 'w')
+ lang2po(lang, outfile)
+ outfile.close
+ 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