X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/bb214eebc260382cd6163ad581a7eae37c82bd57..5524765d17f4369be98790b986b5792cec9e79ac:/script/locale/yaml2po?ds=sidebyside diff --git a/script/locale/yaml2po b/script/locale/yaml2po index 1837b068c..ff5a77b26 100755 --- a/script/locale/yaml2po +++ b/script/locale/yaml2po @@ -4,36 +4,63 @@ # Use: # - To create a 'master' .pot # yaml2po > translations.pot -# - To create a language's .po from scratch -# yaml2po > de.po -# - To create a partucular language's .po from existing translations +# - 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 "msgctxt \"#{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