I18nを使用してモデル属性名をオーバーライドする-これを機能させることはできません

internationalization ruby-on-rails
I18nを使用してモデル属性名をオーバーライドする-これを機能させることはできません

代わりに、ユーザーモデルの「ログイン」属性を「ユーザー名」に記述するために使用される文字列をオーバーライドしようとしています。 これは `vendor / rails / activerecord / lib / active_record / locale / en.yml`に設定されていると思いました。 ここと `config / locales / en.yml`ファイルでそれを変更しようとしましたが、どちらの場合も機能しません(変更するたびにサーバーを再起動します)。

どちらの場合も、次のように行われます。

en:
...
  activerecord:
    attributes:
         user:
           login: User Name

たとえば、新しいユーザーフォームにf.label:loginを入力してテストすると、「ユーザー名」ではなく「ログイン」と表示されます。 このようなものがどのように機能するかについての基本的なエラーの下で苦労していますか、それとも本当に機能していませんか? いずれにせよ、誰でもそれを修正する方法を教えてもらえますか? ありがとう、マックス

  6  2


ベストアンサー

翻訳に問題が発生した場合、次のようにデバッグしました。

まず、https://stackoverflow.com/a/10211540/474597のスクリプトを使用してログを設定します。 サーバーを実行してページをレンダリングすると、翻訳を取得するために使用されるキーがログに表示されます。 その後、使用するキーが正しいかどうかを確認できます。

” ” ‘

落とし穴の1つは、最初のキーが必ずしも使用するキーではないことです。 正しいキーをロードし、翻訳されていない別のキーを検索して、英語の翻訳を行うケースを見てきました。 この2つのキーに翻訳を追加する必要がありました。

例:my Foo has_many Bar、Bar has_many Duu、およびDuuには価格列があります。 その価格列を翻訳するには、機能するために次のものが必要です。

  activerecord:
    attributes:
      'foo/bar/duu':
        price: "price"

ログにはこれがありますが:

:duu
:"activerecord.attributes.duu.text"
:"activerecord.errors.models.duu.attributes.text.blank"
:"activerecord.errors.models.duu.blank"
:"activerecord.errors.messages.blank"
:"errors.attributes.text.blank"
:"errors.messages.blank"
:"activerecord.attributes.foo/bars/duus.text"

2


私は誰かのリクエストに応じてここに答えています…​ 私はこれを修正しましたが、質問を更新しませんでした、ごめんなさい。 私は私の質問で正しい行にいましたが、キーまでの正しい「パス」を持っていませんでした:表示されるフィールドの名前は「ラベル」と呼ばれ、:activerecordの外側に独自のセクションがありますyamlツリーの一部。

それを行う正しい方法は

en:
  user:
    labels:
      login: "User Name"
      email: "Email Address"

ここで、「user」は小文字のモデル名で、ログインとメールはフィールドです。

2


あなたがここで探しているものを見つけることができると思います:http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

1


en.ymlファイルの任意の名前で「ユーザー名」文字列を保存できます。

en:
 user:
   user_name: User Name

そしてあなたの意見では

<%= f.label :login, t('user.user_name') %>

0


タイトルとURLをコピーしました