連載
» 2014年11月28日 18時00分 公開

開発現場でちゃんと使えるRails 4入門(11):「設定より規約」のRailsで必要なセッティングの基礎知識と国際化/多言語対応 (2/2)

[著:林慶、監修:山根剛司,株式会社アジャイルウェア]
前のページへ 1|2       

ロケールへの変数埋め込み

 YAMLのロケールファイルに変数を埋め込んで使うこともできます。以下に例を示します。

ja:
  books:
    index:
      title: 書籍一覧
    show:
      title: 書籍情報%{titel}

 これにより「app/views/books/show.html.slim」では次のように埋め込み変数をハッシュとして引数に追加して翻訳文を呼び出すことができます。

= t('.title', title: @book.title)

コレクションの翻訳

 また一つのキーで複数の翻訳文を配列として呼び出すこともできます。セレクトボックスなどに使うことができます。

ja:
  genres:
  -
  - Ruby/Rails
  - Design
  - Server
 
I18n.t('genres')
=> [
    [0] nil,
    [1] "Ruby/Rails",
    [2] "Design",
    [3] "Server"
]

 また「t」メソッドに渡すキーが末端でなければ、そのキー以下の構造をハッシュとして出力することもできます。

ja:
  genres:
    ruby_rails: Ruby/Rails
    design: デザイン
    server: サーバー
 
I18n.t('genres')
=> {
    :ruby_rails => "Ruby/Rails",
    :design => "デザイン",
    :server => "サーバー"
}

「t」メソッド

 最後に先ほどから使っている「t」メソッドについて解説します。「t」メソッドはRuby I18nの「translate」メソッドのエイリアスです。第2引数に渡すキーは、「scope」オプションを渡すことでスコープを省略できます。

ja:
  activerecord:
    models:
      book: 書籍
 
I18n.t('book', scope: ['activerecord', 'models'])
=> "書籍"  
# I18n.t('activerecord.models.book')と同様

 また「default」オプションを渡すことで翻訳が見つからなかったときのデフォルト値を設定できます。

I18n.t('undefined.key')
=> "translation missing: ja.undefined.key"
 
I18n.t('undefined.key', default: 'default text')
=> "default text"

「設定より規約」のRailsで必要な「セッティング」

 Railsは「設定より規約(Convention over Configuration)」を設計理念としているため設定を意識する機会が多くありません。しかし、デプロイなど「development」環境以外の環境を考えるときに“設定”が必要になることがあります。そのための設定がまとめられているのが「config」ディレクトリです。

 ここではRailsのセッティングについて「config」ディレクトリを読み解いてみましょう。

application.rb

 アプリケーション全般に関わる設定は「config/application.rb」に記述します。

 具体的には、前述のデフォルトロケールやタイムゾーンの設定を行います。タイムゾーンの設定は次の行をApplicationクラスの定義に含めます。これによりアプリケーション上の時刻の出力が設定したタイムゾーンになります。

config.time_zone = 'Tokyo'

database.yml

 アプリケーションで使うデータベースを環境ごとに設定します。YAML形式で記述しますが、ERBとして以下のように「<%= %>」で値を埋め込むこともできます。ファイルの拡張子は「yml」のままで使えます。

production:
  adapter: postgresql
  encoding: unicode
  pool: 5
  database: book_library_production
  username: book_library
  password: <%= ENV['BOOK_LIBRARY_DATABASE_PASSWORD'] %>

environment.rbとenvironmentsディレクトリ

 環境ごとに異なる設定を行います。デフォルトでは「environments」ディレクトリに「test.rb」「development.rb」「production.rb」の環境設定ファイルが用意されており、それぞれの環境に適した設定がデフォルトでされています。

 ログレベルや特定の機能のエラー発生制御、アセットの結合管理などの設定項目が存在します。

initializersディレクトリ

 アプリケーションの機能ごとの設定ファイルを配置します。gemごとの設定ファイルもここに配置されることがよく見られます。名前の通り、初期化の際に呼び出す設定ファイルを配置し、コンポーネントによらない機能の設置にはルートの「lib」ディレクトリが適切だと考えられます。

boot.rb

 アプリケーション起動時に呼び出されます。特に変更できる設定もなく、そのままにしておく方がいいでしょう。

locales

 前述の通り、各種ロケールファイルを設置します。

routes.rb

 アプリケーションのルーティングを設定します。詳しくは連載第7回の「Rails開発を面白くするアクションコントローラーの5大機能とルーティングの基本」を参照してください。

標準のロケールファイルを翻訳して公開してみよう

 今回はRailsの国際化とセッティングについて解説しました。国際化において、Rails非標準のgemであっても「Ruby I18n」のロケールを持っていることがあります。その日本語訳などがあると重宝されるので機会があれば標準のロケールファイルを翻訳して公開してみるといいでしょう。

 次回はサンプルプロジェクトを元に応用的な実装を紹介していきます。お楽しみに。

著者プロフィール

林 慶(Rails技術者認定シルバー試験問題作成者)

平成2年大阪生まれ。2006年から高専で情報工学を学んでいたが当時は所謂プログラミングができない工学生だった。卒業後、高専の専攻科に上がったもののマンネリ化したキャンパスライフに飽きたため休学して渡豪。そこでプログラミングに対するコンプレックスを克服するためにRuby on Railsなどでアプリケーションを作ることを覚える。

帰国後から現在までは復学し推薦システムに関する研究を行いながら、アジャイルウェアでRuby on Railsアプリケーションの開発業務に従事している。

好きなメソッドはinject。


監修者プロフィール

山根 剛司(Ruby業務開発歴7年)

兵庫県生まれ。1997年からベンチャー系のパッケージベンダーで10年間勤務。当時、使用していた言語はJavaとサーバーサイドJavaScript。

2007年よりITコンサル会社に転職し、Rubyと出会って衝撃を受ける。基幹システムをRuby on Railsで置き換えるプロジェクトに従事。それ以来Ruby一筋で、Ruby on Railsのプラグインやgemも開発。

2013年より、株式会社アジャイルウェアに所属。アジャイルな手法で、Ruby on Railsを使って企業向けシステムを構築する業務に従事。

Ruby関西所属。好きなメソッドはtap。

Twitter:@spring_kuma、Facebook:山根 剛司


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。