class RailsTranslationManager::Importer

Public Class Methods

new(locale, csv_path, import_directory) click to toggle source
# File lib/rails_translation_manager/importer.rb, line 8
def initialize(locale, csv_path, import_directory)
  @csv_path = csv_path
  @locale = locale
  @import_directory = import_directory
end

Public Instance Methods

import() click to toggle source
# File lib/rails_translation_manager/importer.rb, line 14
def import
  csv = CSV.read(@csv_path, headers: true, header_converters: :downcase)
  data = {}
  csv.each do |row|
    key = row["key"]
    key_parts = key.split(".")
    if key_parts.length > 1
      leaf_node = (data[key_parts.first] ||= {})
      key_parts[1..-2].each do |part|
        leaf_node = (leaf_node[part] ||= {})
      end
      leaf_node[key_parts.last] = parse_translation(row["translation"])
    else
      data[key_parts.first] = parse_translation(row["translation"])
    end
  end

  write_yaml(import_yml_path, {@locale.to_s => data})
end

Private Instance Methods

import_yml_path() click to toggle source
# File lib/rails_translation_manager/importer.rb, line 36
def import_yml_path
  File.join(@import_directory, "#{@locale}.yml")
end
parse_translation(translation) click to toggle source
# File lib/rails_translation_manager/importer.rb, line 40
def parse_translation(translation)
  if translation =~ /^\[/
    values = translation.gsub(/^\[/, '').gsub(/\]$/, '').gsub("\"", '').split(/\s*,\s*/)
    values.map { |v| parse_translation(v) }
  elsif translation =~ /^:/
    translation.gsub(/^:/, '').to_sym
  elsif translation =~ /^true$/
    true
  elsif translation =~ /^false$/
    false
  elsif translation =~ /^\d+$/
    translation.to_i
  elsif translation == "nil"
    nil
  else
    translation
  end
end