lib/gettext_simple_rails.rb
require "gettext_simple_rails/engine"
require "string-cases"
module GettextSimpleRails
def self.const_missing(name)
require "#{::File.dirname(__FILE__)}/gettext_simple_rails/#{::StringCases.camel_to_snake(name)}"
raise LoadError, "Still not loaded: '#{name}'." unless ::GettextSimpleRails.const_defined?(name)
return ::GettextSimpleRails.const_get(name)
end
def self.translation_dir
return "#{Rails.root}/lib/gettext_simple_rails"
end
def self.write_recursive_translations(fp, translations, pre_path = [], args = {})
if translations.is_a?(Hash)
translations.each do |key, val|
newpath = pre_path + [key]
write_recursive_translations(fp, val, newpath, :comment => "Default value: #{val}")
end
elsif translations.is_a?(Array)
translations.each do |val|
newpath = pre_path + [val]
write_recursive_translations(fp, val, newpath)
end
elsif translations.is_a?(String) || translations.is_a?(Fixnum)
if args[:comment]
args[:comment].to_s.each_line do |line|
fp.puts " #. #{line}"
end
end
fp.puts " _('#{pre_path.join(".")}')"
else
raise "Unknownt class: '#{translations.class.name}'."
end
end
def self.init
require "gettext_simple"
gettext_simple = GettextSimple.new(:i18n => true)
gettext_simple.load_dir("#{Rails.root}/config/locales_gettext")
gettext_simple.register_kernel_methods
injector = GettextSimpleRails::I18nInjector.new
cache_handler = GettextSimpleRails::CacheHandler.new
if cache_handler.cache_file_too_old?
puts "[GettextSimpleRails] Cache file too old - regenerating."
cache_handler.write_static_translation_file
end
injector.inject_from_static_translation_file(:path => cache_handler.static_cache_file_path)
end
class Translators
def self.const_missing(name)
require "#{::File.dirname(__FILE__)}/gettext_simple_rails/translators/#{::StringCases.camel_to_snake(name)}"
raise LoadError, "Still not loaded: '#{name}'." unless ::GettextSimpleRails::Translators.const_defined?(name)
return ::GettextSimpleRails::Translators.const_get(name)
end
def self.load_all
result = []
path = "#{File.dirname(__FILE__)}/gettext_simple_rails/translators"
Dir.foreach(path) do |file|
next unless match = file.match(/^(.+_translator)\.rb$/)
require "#{path}/#{file}"
class_name = StringCases.snake_to_camel(match[1])
clazz = ::GettextSimpleRails::Translators.const_get(class_name)
result << {
:path => path,
:file => file,
:class => clazz
}
end
return result
end
end
end