rails解説セミナー: rails国際化 (i18n) api

50
国際化 (I18n) API Rails解説セミナー http://railsguides.jp/

Upload: yohei-yasukawa

Post on 09-Aug-2015

324 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Rails解説セミナー: Rails国際化 (I18n) API

国際化 (I18n) API 編

Rails解説セミナー

http://railsguides.jp/

Page 2: Rails解説セミナー: Rails国際化 (I18n) API

セミナーを 始める前に

Page 3: Rails解説セミナー: Rails国際化 (I18n) API

講義中に参照したリンクはコメント欄で (質問もお気軽に)

講師のターミナルは下記 URL から閲覧できます :)

http://screenx.tv/yasulab

Page 4: Rails解説セミナー: Rails国際化 (I18n) API

Slide is in SlideShare!

http://www.slideshare.net/yasulab/presentations

Page 5: Rails解説セミナー: Rails国際化 (I18n) API

質問はいつでもお気軽に! 個別相談は休憩や終了後に :)

Page 6: Rails解説セミナー: Rails国際化 (I18n) API

Sample App で実験 :)

https://github.com/yasslab/sample_app

Page 7: Rails解説セミナー: Rails国際化 (I18n) API

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

下準備

Page 8: Rails解説セミナー: Rails国際化 (I18n) API

Ready?

Page 9: Rails解説セミナー: Rails国際化 (I18n) API

解説セミナーを 進めていきましょう!

Page 10: Rails解説セミナー: Rails国際化 (I18n) API

国際化 (I18n) API 編

Rails解説セミナー

http://railsguides.jp/

Page 11: Rails解説セミナー: Rails国際化 (I18n) API

• 中級者~上級者向けの大型リファレンス

• 読み進める順番は特になく、機能毎に解説:

• e.g. Active Record の基礎、バリデーション

• e.g. Action View の概要、フォームヘルパー

• e.g. Action Controller の概要、ルーティング

• 例外: Railsをはじめよう → Rails チュートリアル

• ウェブ版は全編無料! http://railsguides.jp/

Railsガイドとは?

Page 12: Rails解説セミナー: Rails国際化 (I18n) API

今回のテーマ

Page 13: Rails解説セミナー: Rails国際化 (I18n) API

Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html

Page 14: Rails解説セミナー: Rails国際化 (I18n) API

• I18n の仕組みと Locale (ロケール)

• 国際化と Localization の違い

• Locale の切り分け方法

• Locale を切り分ける3つの方法

• アプリケーションを国際化してみる

• お題: Signup エラーを日本語化してみよう

• 他、紹介しきれなかった API の紹介

今日やること

Page 15: Rails解説セミナー: Rails国際化 (I18n) API

• I18n の仕組みと Locale (ロケール)

• 国際化と Localization の違い

• Locale の切り分け方法

• Locale を切り分ける3つの方法

• アプリケーションを国際化してみる

• お題: Signup エラーを日本語化してみよう

• 他、紹介しきれなかった API の紹介

今日やること

Page 16: Rails解説セミナー: Rails国際化 (I18n) API

• Railsアプリケーションを「国際化」する仕組み.国際化と Localization は別モノ.国際化: 使用されるすべての文言や、ロケール固有の要素 (日付や通貨フォーマット等) の抽象化までの作業Localization (日本語化など): 具体的な翻訳方法を提供したり、そのためのフォーマットを提供したりすること

I18n の仕組み

Page 17: Rails解説セミナー: Rails国際化 (I18n) API

• 国際化の流れ: i18nを確実にサポートするLocale 辞書の置き場所をRailsに指示するLocale の設定・保存・切替方法をRailsに指示する

• Localizationの流れ: Railsのデフォルトロケールの追加/差し替えテキストを抽象化し、キーで検索できる辞書にする (flashやerrorメッセージ、固定テキストなどが対象) 作成した辞書を yaml などの拡張子で保存する

I18n の仕組み

Page 18: Rails解説セミナー: Rails国際化 (I18n) API

重大なお知らせ

Page 19: Rails解説セミナー: Rails国際化 (I18n) API

実は国際化は完了済み!

デフォルト文字列 == Locale (ロケール)

Page 20: Rails解説セミナー: Rails国際化 (I18n) API

• デフォルトの Locale を使って出力してみる

• 1. en.yml から ja.yml を作成し、hello を訳文を追加2. static_pages_controller.rb に locale を追加3. ブラウザの URL に ?locale=ja を入力してみよう!

I18n の Locale を使ってみよう

Page 21: Rails解説セミナー: Rails国際化 (I18n) API

色々な Locale が既に完成済み

Active Model の Locale のサンプル https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml

Page 22: Rails解説セミナー: Rails国際化 (I18n) API

Active Support の Locale のサンプル https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml

色々な Locale が既に完成済み

Page 23: Rails解説セミナー: Rails国際化 (I18n) API

あとは日本語の Locale を作成して切り分けていくだけ

Page 24: Rails解説セミナー: Rails国際化 (I18n) API

Locale をどうやって 切り分けていくか?

Page 25: Rails解説セミナー: Rails国際化 (I18n) API

方法1 ドメインで切り分ける

Page 26: Rails解説セミナー: Rails国際化 (I18n) API

• Top Level ドメイン名を使って切り分ける

方法 1. ドメインで切り分ける

Page 27: Rails解説セミナー: Rails国際化 (I18n) API

• サブドメイン名を使って切り分ける

• アプリケーション内で Locale を切り替える

ここに http://example.ja などを代入

方法 1. ドメインで切り分ける

Page 28: Rails解説セミナー: Rails国際化 (I18n) API

• ドメインで切り分けるメリット:1. Locale が URL の一部として明確に示されるため, User はどの言語で表示されているか理解できる.3. Railsでの実装は簡単 (らしい) 4. 検索エンジンはドメイン名同士に関連性がある ものを優先的に扱っている (らしい)

ただドメインを使ったデモは 準備が面倒なので今回は割愛

方法 1. ドメインで切り分ける

Page 29: Rails解説セミナー: Rails国際化 (I18n) API

方法2 params で切り分ける

Page 30: Rails解説セミナー: Rails国際化 (I18n) API

• URL の params (“?locale=ja”など) を使って切り分ける# 先ほどの Locale のデモで見せた方法と同じ.例: www.example.com/books?locale=ja

• ただし、link_to books_url(locale: I18n.locale) とそれぞれの View で毎回書くのは面倒そう… orz

方法 2. params で切り分ける

Helper メソッドを上書きしてデフォルト値を設定すると便利 :)

そんなときは

Page 31: Rails解説セミナー: Rails国際化 (I18n) API

• 「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 の設計には十分に注意すること)

Page 32: Rails解説セミナー: Rails国際化 (I18n) API

方法3 クライアントの情報を調べて切り分ける

Page 33: Rails解説セミナー: Rails国際化 (I18n) API

• Locale の切り分け時に参考になるクライアント情報:1. Accept-Languageあ ブラウザやOSで設定した情報が含まれる2. GeoIPなどの地域情報 ユーザーのIPアドレスから地域情報を割り出す cf. 海外からGoogleにアクセスすると言語が変わる3. ユーザープロファイル  Signup 時などにユーザーに言語を選ばせて、 その言語情報をアプリケーション全体で共有する

方法 3. クライアント情報で切り分け

Page 34: Rails解説セミナー: Rails国際化 (I18n) API

今回はデモが簡単な 方法2: params切り分け を採用して進めます

Page 35: Rails解説セミナー: Rails国際化 (I18n) API

• I18n の仕組みと Locale (ロケール)

• 国際化と Localization の違い

• Locale の切り分け方法

• Locale を切り分ける3つの方法

• アプリケーションを国際化してみる

• お題: Signup エラーを日本語化してみよう

• 他、紹介しきれなかった API の紹介

今日やること

Page 36: Rails解説セミナー: Rails国際化 (I18n) API

• 方法2で Locale を切り分けて、helpページで練習!

アプリケーションの国際化

辞書を作成・再起動・管理するのが面倒なので, 今回は en.yml に辞書を追加していきます.

Page 37: Rails解説セミナー: Rails国際化 (I18n) API

• 自分の好きな辞書を追加してみよう!

アプリケーションの国際化

YAML形式は人間にとって読みやすい! けど、空白スペースや特殊文字だと…?

Page 38: Rails解説セミナー: Rails国際化 (I18n) API

• I18n.translate (t) メソッドは変数も渡せる

アプリケーションの国際化

greet_username がない辞書 (pirate) で t ‘greet_username’ を実行すると…?

Page 39: Rails解説セミナー: Rails国際化 (I18n) API

• I18n.locale (l) メソッドで日付・時刻も追加できる

• I18n.translate もネストした情報を取得できます

アプリケーションの国際化

Page 40: Rails解説セミナー: Rails国際化 (I18n) API

• 他にも色々あります! 詳細は rails-18n/rails/locale を参照.

アプリケーションの国際化

GitHub の rails-18n を探してみましょう:) https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale

Page 41: Rails解説セミナー: Rails国際化 (I18n) API

アプリケーションの国際化

日本語の見本 (ja.yml) もあります!見本を使って日本語化してみましょう :) https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml

※ 日本語に変わらない場合は rails server を再起動してみましょう

Page 42: Rails解説セミナー: Rails国際化 (I18n) API

アプリケーションの国際化• 準備ができたら signup で失敗してみよう!

Page 43: Rails解説セミナー: Rails国際化 (I18n) API

アプリケーションの国際化• 準備ができたら signup で失敗してみよう!

【今回のお題】 ここのエラーメッセージを 日本語にしてみてください

Page 44: Rails解説セミナー: Rails国際化 (I18n) API

アプリケーションの国際化• 完成予想図はこんな感じです :)

Page 45: Rails解説セミナー: Rails国際化 (I18n) API

紹介しきれなかった API の紹介• 最後に、次のセクションを眺めてみましょう.

Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html

Page 46: Rails解説セミナー: Rails国際化 (I18n) API

お疲れ様でした

Page 47: Rails解説セミナー: Rails国際化 (I18n) API

• I18n の仕組みと Locale (ロケール)

• 国際化と Localization の違い

• Locale の切り分け方法

• Locale を切り分ける3つの方法

• アプリケーションを国際化してみる

• お題: Signup エラーを日本語化してみよう

• 他、紹介しきれなかった API の紹介

今日やったこと

Page 48: Rails解説セミナー: Rails国際化 (I18n) API

参考情報

Page 49: Rails解説セミナー: Rails国際化 (I18n) API

Rails 国際化 (I18n) APIhttp://railsguides.jp/i18n.html

Page 50: Rails解説セミナー: Rails国際化 (I18n) API

国際化 (I18n) API 編

Rails解説セミナー

http://railsguides.jp/