SlideShare a Scribd company logo
国際化 (I18n) API 編
Rails解説セミナー
http://railsguides.jp/
セミナーを
始める前に
講義中に参照したリンクはコメント欄で (質問もお気軽に)
講師のターミナルは下記 URL から閲覧できます :)
http://screenx.tv/yasulab
Slide is in SlideShare!
http://www.slideshare.net/yasulab/presentations
質問はいつでもお気軽に!
個別相談は休憩や終了後に :)
Sample App で実験 :)
https://github.com/yasslab/sample_app
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?
解説セミナーを
進めていきましょう!
国際化 (I18n) API 編
Rails解説セミナー
http://railsguides.jp/
• 中級者∼上級者向けの大型リファレンス
• 読み進める順番は特になく、機能毎に解説:
• e.g. Active Record の基礎、バリデーション
• e.g. Action View の概要、フォームヘルパー
• e.g. Action Controller の概要、ルーティング
• 例外: Railsをはじめよう → Rails チュートリアル
• ウェブ版は全編無料! http://railsguides.jp/
Railsガイドとは?
今回のテーマ
Rails 国際化 (I18n) API
http://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) API
http://railsguides.jp/i18n.html
お疲れ様でした
• I18n の仕組みと Locale (ロケール)
• 国際化と Localization の違い
• Locale の切り分け方法
• Locale を切り分ける3つの方法
• アプリケーションを国際化してみる
• お題: Signup エラーを日本語化してみよう
• 他、紹介しきれなかった API の紹介
今日やったこと
参考情報
Rails 国際化 (I18n) API
http://railsguides.jp/i18n.html
国際化 (I18n) API 編
Rails解説セミナー
http://railsguides.jp/

More Related Content

PPTX
テスト設計・テストケース作成 グループ
PDF
テスト駆動開発へようこそ
PDF
[DO03] 50 分でわかるテスト駆動開発
PDF
HTML5マークアップの心得と作法
PDF
iOSアプリ UIテスト自動化入門
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PDF
モジュールの凝集度・結合度・インタフェース
PDF
私にとってのテスト
テスト設計・テストケース作成 グループ
テスト駆動開発へようこそ
[DO03] 50 分でわかるテスト駆動開発
HTML5マークアップの心得と作法
iOSアプリ UIテスト自動化入門
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
モジュールの凝集度・結合度・インタフェース
私にとってのテスト

What's hot (20)

PDF
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PDF
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
PDF
serviceクラスをやめようサブクラスを使おう
PPTX
BuildKitによる高速でセキュアなイメージビルド
PDF
Controllerのbefore_actionにおける インスタンス変数セットについて
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
PDF
ユーザーインタビューするときは、どうやらゾンビのおでましさ
PDF
Kotlinアンチパターン
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
クラウドとAWSの説明
PDF
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
PDF
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
PDF
楽しいShaderToy
PDF
[DL輪読会] The Conditional Analogy GAN: Swapping Fashion Articles on People Images
PDF
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
PDF
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
PDF
ドメイン駆動設計 基本を理解する
PyconJP2017 Kivyによるアプリケーション開発のすすめ
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
serviceクラスをやめようサブクラスを使おう
BuildKitによる高速でセキュアなイメージビルド
Controllerのbefore_actionにおける インスタンス変数セットについて
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
ユーザーインタビューするときは、どうやらゾンビのおでましさ
Kotlinアンチパターン
テストとリファクタリングに関する深い方法論 #wewlc_jp
コンテナ未経験新人が学ぶコンテナ技術入門
Cognitive Complexity でコードの複雑さを定量的に計測しよう
クラウドとAWSの説明
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
楽しいShaderToy
[DL輪読会] The Conditional Analogy GAN: Swapping Fashion Articles on People Images
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
ドメイン駆動設計 基本を理解する
Ad

Viewers also liked (18)

PDF
Introduction Rails Tohoku
PDF
How to learn Rails
PDF
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
PDF
Rails add ons derails_devcon
PDF
AIR+Blaze+Ruby
PDF
Rails解説セミナー: リリースノート解説編
PDF
Ruby on Rails の規約
PDF
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
PDF
Rubyの基礎
PDF
Rubyの仕事で食べていくために僕らは!
PDF
Railsチュートリアルの歩き方 (第3版)
PDF
バカでもわかるRails #02
PDF
Ruby on Rails でつくるアタシ好みの愛され Web サービス
PDF
Ruby on Rails 入門
PDF
Rubyによる開発プロジェクトをうまく回すには(2)
PPTX
基礎演習V 河野ゼミ紹介20161025
PDF
Railsチュートリアルの歩き方 (第4版)
PDF
Rubyを楽しくする第一歩!ブロックを理解する!
Introduction Rails Tohoku
How to learn Rails
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
Rails add ons derails_devcon
AIR+Blaze+Ruby
Rails解説セミナー: リリースノート解説編
Ruby on Rails の規約
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
Rubyの基礎
Rubyの仕事で食べていくために僕らは!
Railsチュートリアルの歩き方 (第3版)
バカでもわかるRails #02
Ruby on Rails でつくるアタシ好みの愛され Web サービス
Ruby on Rails 入門
Rubyによる開発プロジェクトをうまく回すには(2)
基礎演習V 河野ゼミ紹介20161025
Railsチュートリアルの歩き方 (第4版)
Rubyを楽しくする第一歩!ブロックを理解する!
Ad

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

PPT
08 translating applicationsusingkeyvaluebackends
PDF
I18nを使ってサイトを多言語化しよう
KEY
Herokuで作るdevise認証サイト
PPTX
I18n for Your Web application
PDF
Rails解説セミナー: Railsアプリケーションのデバッグ
PDF
Rails初心者レッスン lesson2 3edition
PDF
Rails初心者レッスン lesson3 3edition
PDF
Ruby on Rails Tutorial
PDF
WordBench Osaka 春の大翻訳祭り
PDF
Rails Guide 翻訳しようぜ。
PPT
5分でわかるi18n
08 translating applicationsusingkeyvaluebackends
I18nを使ってサイトを多言語化しよう
Herokuで作るdevise認証サイト
I18n for Your Web application
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails初心者レッスン lesson2 3edition
Rails初心者レッスン lesson3 3edition
Ruby on Rails Tutorial
WordBench Osaka 春の大翻訳祭り
Rails Guide 翻訳しようぜ。
5分でわかるi18n

More from Yohei Yasukawa (8)

PDF
Rails解説セミナー: Railsのアップグレード編
PDF
Railsガイドを支える技術 (30分版)
PDF
Rackspace howto
PDF
Work Life Balance in Czech Republic
PDF
GitHub Importを使ったfluxflexへのデプロイ例
PDF
Haribote OS with Memory Filesystem
PDF
Introduction of tango! (en)
PDF
Introduction of tango! (jp)
Rails解説セミナー: Railsのアップグレード編
Railsガイドを支える技術 (30分版)
Rackspace howto
Work Life Balance in Czech Republic
GitHub Importを使ったfluxflexへのデプロイ例
Haribote OS with Memory Filesystem
Introduction of tango! (en)
Introduction of tango! (jp)

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