--- /dev/null
+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
\ No newline at end of file