よもやま話β版

よもやま話を書きます

config/localesの中身を考える(小分けが好き)

ソースコードが増えていくにあたって、1ファイルがどんどこ伸びていくか、ファイル数ががんがん増えていくかの2択があるが、自分は後者のファイル数を増やす方がいいと考えている。長いファイルの一部を編集するのはインデントとかのミスのリスクが高いと感じる。

えいやでRails開発していて、I18nを利用していると、config/locales 以下にどんどこファイルができる。 次のようにconfigに設定しておけば、ファイル群を階層化しても読み込みしてくれる。

参考: Rails国際化 (I18n) API | Rails ガイド

# config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

中身のYAMLさえ形式に則っていれば、ファイル名はなんでもよいので、あえてルールでしばらないと1ファイルの中身がもりもり増えていく。例えば開発超初期はモデル数が1,2個だったりして、まぁ分けるまでもないかと思ってこうしたとする。

config/locales
└── models
    └── ja.yml
# config/locales/models/ja.yml
ja:
  activerecord:
    models:
      user: ユーザ
      book:attributes:
      user:
        name: 名前
      book:
         title: タイトル
         price: 価格

まだこの時点ではいいかもしれない。では今後開発が進んだらどうなるだろう?
永遠に肥大していく ja.yml とどこかで決別することを迫られることになるはずだ。

config/locales
└── models
    ├── user.ja.yml
    └── book.ja.yml
# config/locales/models/user.ja.yml
ja:
  activerecord:
    models:
      user: ユーザ
    attributes:
      user:
        name: 名前
# config/locales/models/book.ja.yml
ja:
  activerecord:
    models:
      book:attributes:
      book:
         title: タイトル
         price: 価格

小分けにしておいたほうが参照もパッとできて良さそう、と考えている。

ちなみに、Railsガイドの例では config/locales/models/book/es.rbconfig/locales/models/book/en.rb というようにモデル名をディレクトリ名としてその下に言語別のファイルを格納しているが、基本的にいま自分が関わっているプロジェクトがjaしか見ていないので、ディレクトリ化していない。もしenとjaを併用しなければいけないシーンになったらRailsガイドの通りにネストしたほうがよさそうだ。