Skip to content

Instantly share code, notes, and snippets.

@rubytastic
Created January 31, 2013 15:35
Show Gist options
  • Save rubytastic/4683739 to your computer and use it in GitHub Desktop.
Save rubytastic/4683739 to your computer and use it in GitHub Desktop.
module Tolk
module Import
def self.included(base)
base.send :extend, ClassMethods
end
module ClassMethods
def import_secondary_locales
locales = Dir.glob("config/locales/**/*")
locale_block_filter = Proc.new {
|l| ['.', '..'].include?(l) ||
!l.ends_with?('.yml')
}
locales = locales.reject(&locale_block_filter)
locales = locales - [Tolk::Locale.primary_locale.name]
#locales.each { |l| puts "locale file: " + l }
locales.each { |l| import_locale(l) }
end
# load single file to database
def import_locale(locale_name)
locale = Tolk::Locale.find_or_create_by_name(locale_name)
data = locale.read_locale_file
return unless data
phrases = Tolk::Phrase.all
count = 0
data.each do |key, value|
phrase = phrases.detect { |p| p.key == key }
if phrase
translation = locale.translations.new(:text => value, :phrase => phrase)
if translation.save
count = count + 1
elsif translation.errors[:variables].present?
puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
end
else
puts "[ERROR] Key '#{key}' was found in '#{locale_name}.yml' but #{Tolk::Locale.primary_language_name} translation is missing"
end
end
puts "[INFO] Imported #{count} keys from #{locale_name}.yml"
end
end
# Load up every single file for import
def read_locale_file
locale_file = "#{self.name}"
locale =
raise "[ERROR] Locale file #{locale_file} does not exists" unless File.exists?(locale_file)
puts "[INFO] Reading #{locale_file} for locale #{self.name}"
self.class.flat_hash(YAML::load(IO.read(locale_file))[self.name])
rescue
puts "[ERROR] File #{locale_file} expected to declare #{self.name} locale, but it does not. Skipping this file."
nil
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment