128
131

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsで日本語サービスを作るときのテンプレート

Last updated at Posted at 2013-10-30

apprication.rbの設定

日本メインで、英語でも読めるようにする設定

config/application.rb
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
    config.i18n.default_locale = :ja
    config.i18n.available_locales = [:ja, :en]
    config.time_zone = 'Tokyo'

ActiveRecordの日本語化用テンプレート

config/locales/01_model/ja.yml
ja:
  activerecord:
    errors:
      template:
        header:
          one:   "%{model}にエラーが発生しました。"
          other: "%{model}に%{count}つのエラーが発生しました。"
        body: "次の項目を確認してください。"
      messages:
        taken: "はすでに存在します。"
        record_invalid: "バリデーションに失敗しました。 %{errors}"
      full_messages:
        format: "[%{attribute}]%{message}"
      models:
        user:
          attributes:
            base:
              restricted:  "制限付きユーザーには許可されていない動作です"
            company_id:
              user_not_working_for: "ユーザが所属していない会社です"
    models:
      user: ユーザー
      company: 会社
    attributes:
      user:
        name: 名前
        age: 年齢
      company:
        name: 会社名
    attribute_values
       #...
    enum
       #...

解説

config.i18n.load_pathの設定でconfig/locales以下のどの階層のディレクトリも読み込ませるようにしておくのがミソ。
こうすることで、ディレクトリを分けることでカテゴリごとにi18nのデータを管理することができる様になる。

各言語用ymlファイルは、01_modelというように数値のprefixをつけたディレクトリに入れ、以下の様な構成にする。

  • config/locales/00_base/ja.yml
  • config/locales/01_model/ja.yml
  • config/locales/02_mailer/ja.yml
  • config/locales/99_adhoc/ja.yml

YAMLは同じキーがあった場合は内容を上書きするので、00などをつけて順番を選べるようにしておくと都合が良い。
辞書順に上から読み込まれて行くので、内容がコンフリクトした場合は数値が大きいほうの設定が使われる様になる。

ちなみに、00_base/ja.ymlはrails-i18nのデータを丸コピーしたものを使う、もしくはgem installする。
( https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml )

enの設定もする際は、完全にja.ymlと1対1対応するようにconfig/locales/01_model/en.ymlを記述しておいたほうが無難。これは(i18n-spec)[https://github.com/tigrish/i18n-spec]でテストを書くことで保証できる。
実際、英語の場合、Localeファイルをちゃんと設定しなくてもモデル名や属性名そのままでいいみたいなことが多いので、特に設定しなくてもあまり困らない。しかし、

  • 後々メンテナンスする時、各言語でキーが同じ順、同じ行数でないとミスが起こりやすくなる。
  • i18n-jsなどを使ってJavascript連携するとき、en.ymlに対応する英語が無いとうまくいかない。

といった理由で、少々手間でも、はじめから全てを書いておくことを推奨する。

128
131
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
128
131

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?