require 'erb' require 'yaml' require 'optparse' require 'fileutils' def to_h(a) Hash[a] end def symbolize_keys(val) if val.is_a?(Hash) to_h(val.map{|k,v| [k.to_sym, symbolize_keys(v)] }) elsif val.is_a?(Array) val = val.map{|v| symbolize_keys(v)} else val end end def load_locales(dir) locales = {} Dir.entries(dir).each do |ent| if ent =~ /\.yml$/ lang = File.basename(ent, ".yml") yml = YAML.load_file(File.join(dir, ent)) if yml locales[lang.to_sym] = symbolize_keys(yml) else locales[lang.to_sym] = {} end end end locales end def copy(indir, outdir) files = Dir.entries(indir).to_a.map{|ent| File.join(indir, ent) }.select{|ent| File.file?(ent) } FileUtils.copy(files, outdir, preserve: true) end DIR = File.dirname(__FILE__) DEFAULT_LANG = :en LANG_DIR = File.join(DIR, "locales") OUTPUT_DIR = File.join(DIR, "..", "assets") DONT_MAKE_CHANGE = "This file was automatically generated by webgen/gen.rb. Do not make changes to this file manually." locales = load_locales(LANG_DIR) template = File.read(File.join(DIR, "templates", "index.html.erb")) erb = ERB.new(template) locales.each do |lang, locale| output_path = File.join(OUTPUT_DIR, lang == DEFAULT_LANG ? "index.html" : "index.#{lang}.html") t = locales[DEFAULT_LANG].merge(locale) t[:dont_make_change] = DONT_MAKE_CHANGE t[:lang] = lang.to_s File.write(output_path, erb.result(binding)) end copy(File.join(DIR, "assets"), OUTPUT_DIR)