Merged updates from trunk into stable branch
[feedcatcher.git] / vendor / rails / actionpack / lib / action_view / helpers / translation_helper.rb
diff --git a/vendor/rails/actionpack/lib/action_view/helpers/translation_helper.rb b/vendor/rails/actionpack/lib/action_view/helpers/translation_helper.rb
new file mode 100644 (file)
index 0000000..4aed10f
--- /dev/null
@@ -0,0 +1,39 @@
+require 'action_view/helpers/tag_helper'
+
+module ActionView
+  module Helpers
+    module TranslationHelper
+      # Delegates to I18n#translate but also performs two additional functions. First, it'll catch MissingTranslationData exceptions 
+      # and turn them into inline spans that contains the missing key, such that you can see in a view what is missing where.
+      #
+      # Second, it'll scope the key by the current partial if the key starts with a period. So if you call translate(".foo") from the
+      # people/index.html.erb template, you'll actually be calling I18n.translate("people.index.foo"). This makes it less repetitive
+      # to translate many keys within the same partials and gives you a simple framework for scoping them consistently. If you don't
+      # prepend the key with a period, nothing is converted.
+      def translate(key, options = {})
+        options[:raise] = true
+        I18n.translate(scope_key_by_partial(key), options)
+      rescue I18n::MissingTranslationData => e
+        keys = I18n.send(:normalize_translation_keys, e.locale, e.key, e.options[:scope])
+        content_tag('span', keys.join(', '), :class => 'translation_missing')
+      end
+      alias :t :translate
+
+      # Delegates to I18n.localize with no additional functionality.
+      def localize(*args)
+        I18n.localize *args
+      end
+      alias :l :localize
+
+
+      private
+        def scope_key_by_partial(key)
+          if key.to_s.first == "."
+            template.path_without_format_and_extension.gsub(%r{/_?}, ".") + key.to_s
+          else
+            key
+          end
+        end
+    end
+  end
+end
\ No newline at end of file