lib/bisu.rb in bisu-1.2.3 vs lib/bisu.rb in bisu-1.2.4
- old
+ new
@@ -1,40 +1,47 @@
require 'bisu/logger'
require 'bisu/config'
-require 'bisu/knowledge_base'
-require 'bisu/translator'
+require 'bisu/google_sheet'
+require 'bisu/dictionary'
+require 'bisu/localizer'
require 'bisu/version'
require 'optparse'
module Bisu
extend self
- def run(opts)
- options = command_line_options(opts)
+ def run(options)
+ options = command_line_options(options)
if config = Bisu::Config.parse("translatable.yml")
- kbase = Bisu::GoogleDriveKB.new(config[:sheet_id], config[:keys_column])
- translator = Bisu::Translator.new(kbase, config[:type])
+ google_sheet = Bisu::GoogleSheet.new(config[:sheet_id], config[:keys_column])
+ dictionary = Bisu::Dictionary.new(google_sheet.to_hash)
+ localizer = Bisu::Localizer.new(dictionary, config[:type])
config[:in].each do |in_path|
config[:out].each do |out|
- localize(translator, out[:locale], out[:kb_language], options[:default_language], in_path, out[:path] || config[:out_path])
+ unless dictionary.has_language?(out[:kb_language])
+ Logger.error("Unknown language #{out[:kb_language]}")
+ return false
+ end
+
+ localize_file(localizer, out[:locale], out[:kb_language], options[:default_language], in_path, out[:path] || config[:out_path])
end
end
end
Bisu::Logger.print_summary
end
private
def command_line_options(options)
- options = {}
+ opts_hash = {}
opts_parser = OptionParser.new do |opts|
opts.on("-d LANGUAGE", "--default LANGUAGE", "Language to use when there is no available translation") do |language|
- options[:default_language] = language
+ opts_hash[:default_language] = language
end
opts.on_tail("-h", "--help", "Show this message") do
puts opts
exit
@@ -43,25 +50,50 @@
opts.on_tail("-v", "--version", "Show version") do
puts Bisu::VERSION
exit
end
end
+ opts_parser.parse!(options)
- opts_parser.parse!(ARGV)
- options
+ opts_hash
end
- def localize(translator, locale, language, default_language, in_path, out_path)
+ def localize_file(localizer, locale, language, default_language, in_path, out_path)
in_name = File.basename(in_path)
out_name = in_name.gsub(/\.translatable$/, "")
unless in_name.match /\.translatable$/
Logger.error("Expected .translatable file. Got '#{in_name}'")
return false
end
out_path = out_path % { locale: locale, android_locale: locale.gsub("-", "-r"), out_name: out_name }
- translator.translate(language, locale, in_path, out_path, default_language)
+ return false unless in_file = open_file(in_path, "r", true)
+ return false unless out_file = open_file(out_path, "w", false)
+
+ Logger.info("Translating #{in_path} to #{language} > #{out_path}...")
+
+ in_file.each_line do |line|
+ out_file.write(localizer.localize(line, language, locale, default_language))
+ end
+
+ out_file.flush
+ out_file.close
+ in_file.close
+
+ true
end
+ def open_file(file_name, method, should_exist)
+ if !File.file?(File.expand_path(file_name))
+ if should_exist
+ Logger.error("File #{file_name} not found!")
+ return nil
+ else
+ FileUtils.mkdir_p(File.dirname(file_name))
+ end
+ end
+
+ File.open(File.expand_path(file_name), method)
+ end
end