4

Rails アプリケーション (Web サービス) をローカライズしようとしています。正常に動作するgem「rails-i18n」をインストールしました。

ただし、ActiveRecord::RecordNotFound メッセージは変換されません。Rails コード: https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/relation/finder_methods.rb

raise RecordNotFound, "Couldn't find #{@klass.name} with #{conditions.to_a.collect {|p| p.join(' = ')}.join(', ')}"

メッセージがハードコーディングされているようです。

Model.find_by_'attribute' を使用しない以外に解決策はありますか?

4

3 に答える 3

4

私の理由では、ユーザーにより有益なメッセージを伝えるのに十分です:

exception.message.match /^Couldn't find (\w+) with (id=([\S]*))?/
msg = t 'activerecord.exceptions.not_found', klass: $1, id: $3

そして、チェコ語の翻訳が欲しかったので:

cs:
  activerecord:
    exceptions:
      not_found: "Nelze nalézt %{klass} s id=%{id}"

..何かがハードコードされている場合、唯一の方法はそれをハードデコードすることです

于 2013-12-30T09:24:02.770 に答える
1

YAML 構成の別の方法:

en:
 activerecord:
   exceptions:
     not_found: "%{model_name} not found"

次のように追加して、モデル名の複数形を設定することもできます。

en:
  activerecord:
    models:
      user:
        one: Dude
        other: Dudes
于 2015-07-27T12:09:56.630 に答える