2012-11-08 6 views
5

私は最初のRailsアプリケーションを作成しています。これは国際化のサポートを予定しています。Railsでは、ラベル以外のフォーム要素のローカライズされたデータを整理する方法は?

私はすでにi18n guideを読んでおり、非常に優れた情報源です。それも、suggests a file organization非常に良いスタート地点であるローカライズファイル、用:しかし

|-defaults 
|---es.rb 
|---en.rb 
|-models 
|---book 
|-----es.rb 
|-----en.rb 
|-views 
|---defaults 
|-----es.rb 
|-----en.rb 
|---books 
|-----es.rb 
|-----en.rb 
|---users 
|-----es.rb 
|-----en.rb 
|---navigation 
|-----es.rb 
|-----en.rb 

、私は通常のような形で見つかったいくつかの余分な(国際)情報を保持するのに最適な場所であるかわからないんだけど。

    事がある
  • 入力プレースホルダ(それについてのより詳細な情報を入力の横に、)
  • ヘルパーテキストを

:この情報はビューに関連します(モデルではありません)。しかし、モデルごと、属性ごとに頻繁に記述されているため、モデルファイルの中にactiverecordプロパティの下に置く傾向があります。

私の質問:このローカライズされたデータを置くのに最適な場所は何ですか?両方のファイルの整理(どのフォルダ)とファイル内の組織の面で。

+0

使用しているレールのバージョンは? i18nの名前空間戦略は、時間の経過とともにかなり変化しました。 – numbers1311407

+0

私は3.2.8を使用しています – fegemo

答えて

4

私はこの質問に「正しい」回答はないと思います。

個人的に私はガイドによって提案された組織とsomehwatに同意しない傾向があります。 i18nは、本来ビュー・レイヤーのドメイン内にあります。そこに「views」フォルダをドロップするのはちょっと混乱しているかもしれません。そしておそらく、複数の開発者が今あなたが直面している正確な問題を導いているでしょう。

views/bookファイルを投げ捨て、同じファイルにモデルに関するすべての情報を保存することをお勧めします。すべての翻訳は「ビュー」用であり、個々のモデルに関連するすべての翻訳を1つの場所に保持することは、おそらくよりクリーンで、エラーを起こしにくくなります。

# locale/models/model.en (or es, etc) 

# all the activerecord translations 
activerecord: 
    models: 
    # ... 
    attributes: 
    # ... 
    errors: 
    # ... 
# then your form translations. 
helpers: 
    label: 
    # Here you might add overrides for activerecord attribute lookups, but 
    # do so with care (see note below). 

    # then below are your custom view fields 
    placeholders: 
    model: 
     attribute: 'translation' 
    details: 
    model: 
     attribute: 'translation' 

helpers.labelactiverecord.attributes対上の注意:

レール自体currentlyは、ラベルの翻訳のための2つの場所に見えます。最初:

helpers: 
    label: 
    model: 
     attribute: 'translation' 

バックActiveRecordの翻訳へのフォール:

activerecord: 
    attributes: 
    model: 
     attribute: 'translation' 

それはフォームのラベルとActiveRecordのエラー(および他の翻訳)を意味し、これは、幾分トラップでは異なるであろう。たとえば、フォームラベルをもっとプロンプトにする(たとえば、 "body"属性の "body"を入力する)場合は、これは問題ありませんが、helper.labelが明示的に参照していない場合はエラーの原因となることもありますアクティブレコード変換、例えば(属性 "body"の "メッセージを入力")。だから気をつけてオーバーライドする。

+0

すばらしい、すばらしい議論。あなたの経験を共有してくれてありがとう! – fegemo

+0

私の知る限り、あなたの「現在」のリンクは今https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_view/helpers/tags/([こちら]指している必要がありますラベル。rb#L48) - しかし、私はそれがアクティブレコードの翻訳にどのように戻っているのかは分かりません。その鎖がどのようにフォローされるのか覚えていますか? – Gareth

関連する問題