Class: AnnoTranslate::TranslationsImporter

Inherits:
Object
  • Object
show all
Includes:
Rake::DSL
Defined in:
lib/import_export.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file_prefix, import_from = nil) ⇒ TranslationsImporter



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/import_export.rb', line 143

def initialize(file_prefix, import_from=nil)
  # Format pertinent paths for files
  here = File.expand_path(File.dirname(__FILE__))
  config = File.expand_path(File.join(here, "../../config"))
  @translations_support = File.join(config, "translations")
  @import_folder = import_from ? import_from : File.join(@translations_support, "import")
  @locales_folder = File.join(config, "locales")
  @base_yml_file = File.join(@locales_folder, "en.yml")
  @prefix = file_prefix
  @duplicates_file = File.join(@translations_support, "#{@prefix}_shared_strings.yml")

  @base_locale = YAML.load_file(@base_yml_file)
  load_base_ids
  @cache = YAML.load_file(@duplicates_file)

  @foreign_languages = Dir[File.join(@import_folder, "*#{@prefix}*.csv")].map do |csv|
    m = csv.match(/\.([a-z]{2,2}-?[A-Z]{0,2})\.csv$/)
    raise "Failed parsing language code from #{csv}" if m.nil?
    lang_code = m[1]
    raise "Parsed language code '#{lang_code}' is not supported" if !FOREIGN_LOCALES[lang_code]
    dest_yml = File.join(@locales_folder, "#{lang_code}.yml")
    source_csv = File.join(@import_folder, "#{@prefix}.#{lang_code}.csv")
    untranslated_strings_report = File.join(@import_folder, "#{@prefix}.missing.#{lang_code}.txt")
    {
      code: lang_code,
      name: FOREIGN_LOCALES[lang_code],
      yml: dest_yml,
      csv: source_csv,
      missing_translations: [],
      untranslated_report: untranslated_strings_report,
    }
  end
end

Class Method Details

.import(file_prefix, import_from = nil) ⇒ Object



138
139
140
141
# File 'lib/import_export.rb', line 138

def self.import(file_prefix, import_from=nil)
  importer = self.new(file_prefix, import_from)
  importer.import_translations
end

Instance Method Details

#import_translationsObject



177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/import_export.rb', line 177

def import_translations
  raise "No CSV files to import\nimport folder: #{@import_folder}\n\n" if @foreign_languages.empty?
  missing_translations = 0
  @foreign_languages.each do |lang|
    puts "Importing #{lang[:name]} (#{lang[:code]}) translations"
    puts "  from: #{lang[:csv]}"
    puts "  to:   #{lang[:yml]}"
    csv_to_yml(lang)
    not_translated = lang[:missing_translations].count
    puts "  WARNING: #{not_translated} untranslated strings found!" if not_translated > 0
    missing_translations += not_translated
  end
  puts "\n#{missing_translations} untranslated strings\nImport complete"
end