rails解説セミナー: rails国際化 (i18n) api
TRANSCRIPT
セミナーを 始める前に
講義中に参照したリンクはコメント欄で (質問もお気軽に)
講師のターミナルは下記 URL から閲覧できます :)
http://screenx.tv/yasulab
Slide is in SlideShare!
http://www.slideshare.net/yasulab/presentations
質問はいつでもお気軽に! 個別相談は休憩や終了後に :)
1. $ git clone \ https://github.com/yasslab/sample_apps.git
2. 対象のディレクトリに移動後: $ git init ; $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare $ bundle exec rake db:populate
3. $ gem install rails --version 4.0.5 4. $ rbenv install 2.2.2 5. $ gem install rails --version 4.2.3
下準備
Ready?
解説セミナーを 進めていきましょう!
• 中級者~上級者向けの大型リファレンス
• 読み進める順番は特になく、機能毎に解説:
• e.g. Active Record の基礎、バリデーション
• e.g. Action View の概要、フォームヘルパー
• e.g. Action Controller の概要、ルーティング
• 例外: Railsをはじめよう → Rails チュートリアル
• ウェブ版は全編無料! http://railsguides.jp/
Railsガイドとは?
今回のテーマ
Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html
• I18n の仕組みと Locale (ロケール)
• 国際化と Localization の違い
• Locale の切り分け方法
• Locale を切り分ける3つの方法
• アプリケーションを国際化してみる
• お題: Signup エラーを日本語化してみよう
• 他、紹介しきれなかった API の紹介
今日やること
• I18n の仕組みと Locale (ロケール)
• 国際化と Localization の違い
• Locale の切り分け方法
• Locale を切り分ける3つの方法
• アプリケーションを国際化してみる
• お題: Signup エラーを日本語化してみよう
• 他、紹介しきれなかった API の紹介
今日やること
• Railsアプリケーションを「国際化」する仕組み.国際化と Localization は別モノ.国際化: 使用されるすべての文言や、ロケール固有の要素 (日付や通貨フォーマット等) の抽象化までの作業Localization (日本語化など): 具体的な翻訳方法を提供したり、そのためのフォーマットを提供したりすること
I18n の仕組み
• 国際化の流れ: i18nを確実にサポートするLocale 辞書の置き場所をRailsに指示するLocale の設定・保存・切替方法をRailsに指示する
• Localizationの流れ: Railsのデフォルトロケールの追加/差し替えテキストを抽象化し、キーで検索できる辞書にする (flashやerrorメッセージ、固定テキストなどが対象) 作成した辞書を yaml などの拡張子で保存する
I18n の仕組み
重大なお知らせ
実は国際化は完了済み!
デフォルト文字列 == Locale (ロケール)
• デフォルトの Locale を使って出力してみる
• 1. en.yml から ja.yml を作成し、hello を訳文を追加2. static_pages_controller.rb に locale を追加3. ブラウザの URL に ?locale=ja を入力してみよう!
I18n の Locale を使ってみよう
色々な Locale が既に完成済み
Active Model の Locale のサンプル https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml
Active Support の Locale のサンプル https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml
色々な Locale が既に完成済み
あとは日本語の Locale を作成して切り分けていくだけ
Locale をどうやって 切り分けていくか?
方法1 ドメインで切り分ける
• Top Level ドメイン名を使って切り分ける
方法 1. ドメインで切り分ける
• サブドメイン名を使って切り分ける
•
• アプリケーション内で Locale を切り替える
ここに http://example.ja などを代入
方法 1. ドメインで切り分ける
• ドメインで切り分けるメリット:1. Locale が URL の一部として明確に示されるため, User はどの言語で表示されているか理解できる.3. Railsでの実装は簡単 (らしい) 4. 検索エンジンはドメイン名同士に関連性がある ものを優先的に扱っている (らしい)
ただドメインを使ったデモは 準備が面倒なので今回は割愛
方法 1. ドメインで切り分ける
方法2 params で切り分ける
• URL の params (“?locale=ja”など) を使って切り分ける# 先ほどの Locale のデモで見せた方法と同じ.例: www.example.com/books?locale=ja
• ただし、link_to books_url(locale: I18n.locale) とそれぞれの View で毎回書くのは面倒そう… orz
方法 2. params で切り分ける
Helper メソッドを上書きしてデフォルト値を設定すると便利 :)
そんなときは
• 「URLの末尾に ?locale=ja はダサい!!」という場合はURL の Pattern から locale を取得することも可能 :) 例1: www.example.com/ja/books 例2: www.example.com/en/books # www.example.com/#{lang}/booksあ # cf. http://yasslab.jp/ja/ vs. http://yasslab.jp/en/
方法 2. params で切り分ける
Routing で scope メソッドを使うとURL内に locale を埋め込める (ただし、Root URL の設計には十分に注意すること)
方法3 クライアントの情報を調べて切り分ける
• Locale の切り分け時に参考になるクライアント情報:1. Accept-Languageあ ブラウザやOSで設定した情報が含まれる2. GeoIPなどの地域情報 ユーザーのIPアドレスから地域情報を割り出す cf. 海外からGoogleにアクセスすると言語が変わる3. ユーザープロファイル Signup 時などにユーザーに言語を選ばせて、 その言語情報をアプリケーション全体で共有する
方法 3. クライアント情報で切り分け
今回はデモが簡単な 方法2: params切り分け を採用して進めます
• I18n の仕組みと Locale (ロケール)
• 国際化と Localization の違い
• Locale の切り分け方法
• Locale を切り分ける3つの方法
• アプリケーションを国際化してみる
• お題: Signup エラーを日本語化してみよう
• 他、紹介しきれなかった API の紹介
今日やること
• 方法2で Locale を切り分けて、helpページで練習!
アプリケーションの国際化
辞書を作成・再起動・管理するのが面倒なので, 今回は en.yml に辞書を追加していきます.
• 自分の好きな辞書を追加してみよう!
アプリケーションの国際化
YAML形式は人間にとって読みやすい! けど、空白スペースや特殊文字だと…?
• I18n.translate (t) メソッドは変数も渡せる
アプリケーションの国際化
greet_username がない辞書 (pirate) で t ‘greet_username’ を実行すると…?
• I18n.locale (l) メソッドで日付・時刻も追加できる
•
• I18n.translate もネストした情報を取得できます
アプリケーションの国際化
• 他にも色々あります! 詳細は rails-18n/rails/locale を参照.
アプリケーションの国際化
GitHub の rails-18n を探してみましょう:) https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale
アプリケーションの国際化
日本語の見本 (ja.yml) もあります!見本を使って日本語化してみましょう :) https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
※ 日本語に変わらない場合は rails server を再起動してみましょう
アプリケーションの国際化• 準備ができたら signup で失敗してみよう!
アプリケーションの国際化• 準備ができたら signup で失敗してみよう!
【今回のお題】 ここのエラーメッセージを 日本語にしてみてください
アプリケーションの国際化• 完成予想図はこんな感じです :)
紹介しきれなかった API の紹介• 最後に、次のセクションを眺めてみましょう.
Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html
お疲れ様でした
• I18n の仕組みと Locale (ロケール)
• 国際化と Localization の違い
• Locale の切り分け方法
• Locale を切り分ける3つの方法
• アプリケーションを国際化してみる
• お題: Signup エラーを日本語化してみよう
• 他、紹介しきれなかった API の紹介
今日やったこと
参考情報
Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html