#!/usr/bin/env ruby # -*- encoding : utf-8 -*- require 'yaml' def pseudolocalize(str) n = 0 newstr = "" str.each_char { |c| if c == "{" n += 1 elsif c == "}" n -= 1 end if n < 1 newstr += c.tr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "áƀčďéƒǧĥíʲǩłɱɳóƿƣřšťůνŵхýžÁƁČĎÉƑǦĤÍǰǨŁϺЍÓРƢŘŠŤŮѶŴХÝŽ") else newstr += c end } return "[[ #{newstr} ]]" end def transform(p) if p.kind_of?(Hash) newhash = Hash.new p.each { |key, value| newhash[key] = transform(value) } return newhash elsif p.kind_of?(String) return pseudolocalize(p) else raise "Oops, unknown thing in the YML" end end def replace(hash, hash2, dotted_path) parts = dotted_path.split '.', 2 match = hash[parts[0]] if !parts[1] or match.nil? return match else return dig(match, parts[1]) end end def process_file(basename, locale, &block) strings = YAML.load_file("./config/locales/#{basename}.#{locale}.yml") new_strings = transform(strings) new_strings = Hash["pseudo" => new_strings[locale]] yield new_strings, strings if block_given? File.open("./config/locales/#{basename}.pseudo.yml", 'w+' ) do |f| f.puts new_strings.to_yaml end end process_file("client", "en") process_file("server", "en") { |new,orig| new["pseudo"]["time"] = orig["en"]["time"] }