7

Rails 3.2.2 アプリで i18n を使用しようとしていますが、何かが正しく機能していません。

実際、「t」メソッドは機能せず、「i18n.t」のみが機能します。

たとえば、次のようになります。

t(:login)
=> login

その代わり:

i18n.t(:login)
=> Provide the necessary login info

私が間違っていることを理解するのを手伝ってもらえますか?

ありがとう、アウグスト

アップデート

pry を使用して t ヘルパーのソースを表示したところ、次のようになりました。

From: /Users/phishman/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.2/lib/action_view/helpers/translation_helper.rb @ 46行目: 行数: 16 所有者: ActionView: :Helpers::TranslationHelper 可視性: public

    def translate(key, options = {})
      options.merge!(:rescue_format => :html) unless options.key?(:rescue_format)
      if html_safe_translation_key?(key)
        html_safe_options = options.dup
        options.except(*I18n::RESERVED_KEYS).each do |name, value|
          unless name == :count && value.is_a?(Numeric)
            html_safe_options[name] = ERB::Util.html_escape(value.to_s)
          end
        end
        translation = I18n.translate(scope_key_by_partial(key), html_safe_options)

        translation.respond_to?(:html_safe) ? translation.html_safe : translation
      else
        I18n.translate(scope_key_by_partial(key), options)
      end
    end

3] pry(main)> show-source helper.t

From: /Users/phishman/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.2/lib/action_view/helpers/translation_helper.rb @ line 46:
Number of lines: 16
Owner: ActionView::Helpers::TranslationHelper
Visibility: public

def translate(key, options = {})
  options.merge!(:rescue_format => :html) unless options.key?(:rescue_format)
  if html_safe_translation_key?(key)
    html_safe_options = options.dup
    options.except(*I18n::RESERVED_KEYS).each do |name, value|
      unless name == :count && value.is_a?(Numeric)
        html_safe_options[name] = ERB::Util.html_escape(value.to_s)
      end
    end
    translation = I18n.translate(scope_key_by_partial(key), html_safe_options)

    translation.respond_to?(:html_safe) ? translation.html_safe : translation
  else
    I18n.translate(scope_key_by_partial(key), options)
  end
end
4

1 に答える 1

28

メソッドはヘルパーであるため、tビューとコントローラーでのみ使用できます。

モデルまたは Rails コンソールから I18n を使用しようとする場合は、次を使用する必要があります。I18n.t

于 2012-07-30T15:48:44.207 に答える