]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/plugins/globalize2/lib/globalize/backend/static.rb
Add Globalize2 so that we get some nice fall backs to other languages when a translat...
[rails.git] / vendor / plugins / globalize2 / lib / globalize / backend / static.rb
diff --git a/vendor/plugins/globalize2/lib/globalize/backend/static.rb b/vendor/plugins/globalize2/lib/globalize/backend/static.rb
new file mode 100644 (file)
index 0000000..fb9e1fe
--- /dev/null
@@ -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
\ No newline at end of file