「設定より規約」のRailsで必要なセッティングの基礎知識と国際化/多言語対応:開発現場でちゃんと使えるRails 4入門(11)(2/2 ページ)
エンタープライズ領域での採用も増えてきたRuby on Railsを使ってWebアプリケーションを作るための入門連載。最新版の4に対応しています。今回は、gem「Ruby I18n」で国際化/多言語対応する方法やロケール、Railsの設定がまとめられている「config」ディレクトリなどについて 解説します。
ロケールへの変数埋め込み
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アプリの設計をMVCごとに見直しリファクタリングして連載総まとめ
- 「設定より規約」のRailsで必要なセッティングの基礎知識と国際化/多言語対応
- ActionMailerのSMTP設定、テンプレートで送信&ActiveModelの基本的な使い方とバリデーション
- RailsテストフレームワークRSpecのインストールと基本的な使い方、基礎文法
- RailsのテンプレートエンジンSlimの書き方とActionViewのヘルパーメソッド、レイアウトの使い方
- Rails開発を面白くするアクションコントローラーの5大機能とルーティングの基本
- ActiveRecordにおけるモデルの「関連」とコールバックの使い方
- ActiveRecordの基本機能とマイグレーション、バリデーション
- 現場で使えるか見極めたいRails 4.1の新機能8選
- 特定データに関するscaffoldアクションの実装&基礎的なリファクタリング手法
- scaffoldの中身を理解するためにMVCコンポーネントと7つのアクションを個別で自作する
- 簡単インストールから始める初心者のためのRuby on Railsチュートリアル
著者プロフィール
林 慶(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:山根 剛司
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Ruby on Rails 4.1でDevOps環境を考慮した体系的な知識を付ける
エンタープライズ領域での高速なWebアプリケーション開発にも採用され始めているRuby on Rails。最新版である4.1の実践的な解説書が登場した。DevOps環境を前提としたチュートリアルが掲載されているなど、現代的な内容になっている。 - @IT自分戦略研究所 資格辞典:Rails技術者認定試験(Rails 3 Certified Programmer)
- 資格試験は転職に役立つか:Rails技術認定試験がスタート、合格者に聞いた