lib/babelyoda/strings.rb in babelyoda-1.6.0 vs lib/babelyoda/strings.rb in babelyoda-2.0.0

- old
+ new

@@ -1,11 +1,67 @@ -module BabelYoda - class StringsHelper - def self.safe_init_strings_file(path) - unless File.exists? path - empty_strings_file = File.join File.dirname(__FILE__), '..', '..', 'data', 'empty.strings' - FileUtils.mkdir_p File.split(path)[0], :verbose => true - FileUtils.cp empty_strings_file, path, :verbose => true +require 'rchardet19' + +require_relative 'keyset' +require_relative 'strings_lexer' +require_relative 'strings_parser' + +module Babelyoda + class Strings < Keyset + attr_reader :filename + attr_reader :language + + def initialize(filename, language) + super(Babelyoda::Keyset.keyset_name(filename)) + @filename, @language = filename, language + end + + def read! + raise ArgumentError.new("File not found: #{filename}") unless File.exist?(@filename) + read + end + + def read + if File.exist?(@filename) + File.open(@filename, read_mode) do |f| + lexer = StringsLexer.new + parser = StringsParser.new(lexer, @language) + parser.parse(f.read) do |localization_key| + merge_key!(localization_key) + end + end end + self + end + + def save! + FileUtils.mkdir_p(File.dirname(filename)) + File.open(filename, "wb") do |f| + keys.each_pair do |id, key| + next unless key.values[language] + f << "/* #{key.context} */\n" if key.context + f << "\"#{id}\" = \"#{key.values[language].text}\";\n" + f << "\n" + end + end end - end + + def self.save_keyset(keyset, filename, language) + strings = self.new(filename, language) + strings.merge!(keyset) + strings.save! + end + + private + + def read_mode + cd = CharDet.detect(File.read(@filename)) + encoding_str = Encoding.aliases[cd.encoding] || cd.encoding + encoding_str = 'UTF-8' if encoding_str == 'utf-8' + if (encoding_str != "UTF-8") + "rb:#{encoding_str}:UTF-8" + else + "r" + end + end + + end end