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:
parent
6ba51da46e
commit
283a3e9ba9
42 changed files with 2670 additions and 0 deletions
60
vendor/plugins/globalize2/lib/globalize/backend/static.rb
vendored
Normal file
60
vendor/plugins/globalize2/lib/globalize/backend/static.rb
vendored
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue