5

初めての Rails アプリを作成していますが、国際化をサポートする予定です。

私はすでにi18n guideを読みましたが、これは非常に優れた情報源です。ローカリゼーション ファイルのファイル構成も提案されています。これは非常に良い出発点です。

|-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 プロパティの下に配置する傾向があります。

私の質問: このローカライズされたデータを配置するのに最適な場所はどこですか? ファイル構成 (どのフォルダー) の観点からも、ファイル内の組織の観点からも。

4

1 に答える 1

5

この質問に対する「正しい」答えはないと思います。

個人的には、ガイドで提案された組織に同意しない傾向があります。i18n は、本質的に、完全にビュー レイヤーのドメイン内にあります。そこに「ビュー」フォルダーをドロップするのは少し混乱します。おそらく、複数の開発者が現在抱えている正確な問題に直面しています。

ファイルを捨てて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.label対に関する注意activerecord.attributes:

Rails 自体は現在、ラベルの翻訳を 2 か所で検索しています。初め:

helpers:
  label:
    model:
      attribute: 'translation'

activerecord の翻訳に戻る:

activerecord:
  attributes:
    model:
      attribute: 'translation'

これは、フォーム ラベルとアクティブ レコード エラー (およびその他の翻訳) が異なることを意味するため、多少の罠です。これは、たとえば、フォーム ラベルをもっとプロンプトにしたい場合 (たとえば、属性「body」に対して「本文を入力してください」) にhelper.labelは問題ありませんが、明確に参照していない場合はエラーの原因にもなります。アクティブレコードの翻訳、例えば (「本文」属性の「メッセージを入力してください」)。したがって、慎重にオーバーライドしてください。

于 2012-11-08T15:43:10.393 に答える