Add Globalize2 so that we get some nice fall backs to other languages when a translation is missing in the requested language.

This commit is contained in:
Shaun McDonald 2009-05-27 15:39:14 +00:00
parent 6ba51da46e
commit 283a3e9ba9
42 changed files with 2670 additions and 0 deletions

View file

@ -0,0 +1,60 @@
require 'globalize/backend/pluralizing'
require 'globalize/locale/fallbacks'
require 'globalize/translation'
module Globalize
module Backend
class Static < Pluralizing
def initialize(*args)
add(*args) unless args.empty?
end
def translate(locale, key, options = {})
result, default, fallback = nil, options.delete(:default), nil
I18n.fallbacks[locale].each do |fallback|
begin
result = super(fallback, key, options) and break
rescue I18n::MissingTranslationData
end
end
result ||= default locale, default, options
attrs = {:requested_locale => locale, :locale => fallback, :key => key, :options => options}
translation(result, attrs) || raise(I18n::MissingTranslationData.new(locale, key, options))
end
protected
alias :orig_interpolate :interpolate unless method_defined? :orig_interpolate
def interpolate(locale, string, values = {})
result = orig_interpolate(locale, string, values)
translation = translation(string)
translation.nil? ? result : translation.replace(result)
end
def translation(result, meta = nil)
return unless result
case result
when Numeric
result
when String
result = Translation::Static.new(result) unless result.is_a? Translation::Static
result.set_meta meta
result
when Hash
Hash[*result.map do |key, value|
[key, translation(value, meta)]
end.flatten]
when Array
result.map do |value|
translation(value, meta)
end
else
result
# raise "unexpected translation type: #{result.inspect}"
end
end
end
end
end