2

Ruby on Rails 3.2.2 と Paperclip プラグインを使用しています。Paperclip のエラー メッセージを翻訳したいので、次のコードを使用します。

class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes,
    :message   => I18n.t('trl_too_big_file_size', :scope => 'activerecord.errors.messages')
end

私の.ymlファイルは次のとおりです。

# <APP_PATH>/config/locales/en.yml (english language)
activerecord:
  errors:
    messages:
      trl_too_big_file_size: is too big

# <APP_PATH>/config/locales/it.yml (italian language)
activerecord:
  errors:
    messages:
      trl_too_big_file_size: è troppo grande

ApplicationControllerは:

class ApplicationController < ActionController::Base
  before_filter :set_locale

  def set_locale
    # I am using code from http://guides.rubyonrails.org/i18n.html#setting-and-passing-the-locale.
    I18n.locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  end
  # BTW: My `I18n.default_locale` is `:en` (english).
end

ただし、Paperclip 添付ファイルに関連するフォームを送信すると、アプリケーションは翻訳されていないテキストを生成します。つまり、正しく翻訳されていない文字列を生成 (および出力) します。いくつかの調査を行いました (たとえば、12 ) が、モデル ファイル内の Paperclip gem に関連するエラー メッセージを適切に変換する方法がまだわかりません (上記のコードを参照)。Parperclip gem のバグのようです (また、この問題を抱えているのは私だけではないようです)...en.activerecord.errors.messages.trl_too_big_file_sizeI18n.locale:it

どうすれば問題を解決できますか?


PS: この問題は、ApplicationController-Paperclip gem の「ファイル読み込み順序プロセス」に関連していると思いますが、問題の解決方法がわかりません。

4

2 に答える 2

3

メッセージ パラメーターでラムダを使用する代わりに、YAML ファイルで適切なキーを使用することはできませんか? 具体的には、次のようなものではありません。

class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes
end

次のようなイタリア語ロケール YAML ファイルのエントリで

it:
  activerecord:
    errors:
      models:
        article:
          attributes:
            picture:
              less_than: è troppo grande

英語のローカル YAML ファイルに同様のエントリがある

en:
  activerecord:
    errors:
      models:
        article:
          attributes:
            picture:
              less_than: is too big

ロケールが正しく設定され、他の ActiveRecord のローカライズされたメッセージが正しく表示されていると仮定すると、Paperclip のバリデーターが I18n.t メソッドを介して基になる ActiveRecord メッセージ バンドルを使用するため、これが機能することが期待されます。

于 2012-08-15T04:46:57.687 に答える
0

メッセージにラムダを使用する必要があるかもしれませんか?

https://github.com/thoughtbot/paperclip/pull/411を参照してください

class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes,
    :message => lambda { 
      I18n.t('trl_too_big_file_size', :scope => 'activerecord.errors.messages') 
    }
end
于 2012-08-15T02:42:31.457 に答える