SlideShare a Scribd company logo
Laravel
多言語化対応
第29回社内勉強会20170928
株式会社スタジオ・アルカナ
Kasiwagi ryta
みなさん
グローバル
してますか?
- データ構造
- example.com/jaや/enの実装
- Laravelの多言語化便利機能紹介
もくじ
デモ
データ構造
データ構造
管理者が送信したデータ(ニュース)をどのように保持するべきか?
管理者
こんにちは!
Hello!
こんにちは!
Hello!
テーブル
newsはnews_idを主キーにしている
news_user
id
user_id
news_id
news
news_id
news_lang
id
detail
news_id
language
テーブル
news_userはユーザーごとにニュースを
保持するためuser_idとnews_idを保持する
news_user
id
user_id
news_id
news
news_id
news_lang
id
detail
news_id
language
テーブル
news_langは言語ごとの詳細(ニュース)
を保持する
news_user
id
user_id
news_id
news
news_id
news_lang
id
detail
news_id
language
データ
データを登録すると、このようなデータ状態になる
id user_id news_id
2 4 5
news_user
news_id
5
news
id detail news_id language
6 こんにちは! 5 ja
7 Hello! 5 en
news_lang
データ
仮にもう一言語増やして欲しいとお願いされても・・・
id user_id news_id
2 4 5
news_user
id detail news_id language
6 こんにちは! 5 ja
7 Hello! 5 en
8 你好! 5 ch
news_lang
news_id
5
news
データ
レコードを追加するだけで複数言語に対応することができる
id user_id news_id
2 4 5
news_user
id detail news_id language
6 こんにちは! 5 ja
7 Hello! 5 en
8 你好! 5 ch
:
25 नमस्ते! 5 hi
news_lang
news_id
5
news
まとめ
なるべく柔軟に対応できて、修正が少なくなるといいね
▸ レコードを追加するだけで複数言語対応できそう。
▸ カラムを変更・追加・削除したい場合でも、news_langの修
正だけで済みそう。
▸ 言語別で取得したい時はnews_langに取得条件つければいい
だけだから簡単でいいね。
example.com/jaや/en
の実装
example.com/jaや/enの実装
prefix()を追加するだけ。
RouterServiceProvider.php
protected function mapWebRoutes($request)
{
$locale = $request->segment(1);
$this->app->setLocale($locale);
Route::middleware('web')
->namespace($this->namespace)
->prefix($locale)
->group(base_path('routes/web.php'));
}
example.com/英/page
言語の箇所に不正な値が入る可能性も
あるので・・・
example.com/jaや/enの実装
mddlewareで指定されていない言語をフィルターしよう。
middleware
public function handle($request, Closure $next)
{
$locale = $request->segment(1);
if ( ! array_key_exists($locale, $this->app->config->get('app.locales'))) {
$segments = $request->segments();
$segments[0] = $this->app->config->get('app.fallback_locale');
return $this->redirector->to(implode('/', $segments));
}
$this->app->setLocale($locale);
return $next($request);
}
言語切り替えの
処理について
example.com/jaや/enの実装
リクエストを書き換える。そしてリダイレクト。
LocaleController.php
/* リクエストを書き換えているだけ。
* 例) example.com/en/page -> example.com/ja/page
*/
public function locale(Request $request)
{
$segments = explode('/', redirect()->back()->getTargetUrl());
$segments[3] = $request->lang;
return redirect(implode(‘/',$segments));
}
まとめ
Laravelで/jaや/enの実装は容易にできる
▸ webサーバーでrewriteも試したが、アプリ内で完結する
Laravelで処理した方が断然簡単に実装できそう。
Laravelの多言語化
便利機能紹介
メッセージ&
バリデーション
メッセージ&バリデーション
言語ごとのファイルを置くだけ
画面の文字列
翻訳文字の取得
Bladeテンプレートエンジンを使用している場合
{{ __('messages.welcome') }}
@lang('messages.welcome')
echo __('messages.welcome');
resources/lang/messages.phpからwelcome翻訳文字列を取得する場合
画面の文字列設定
フォールバック言語の設定
指定した翻訳文字がない場合、config/app.phpのfallback_localeが適用される
ロケールの
設定
ロケール
現在のロケール設定や取得や判定
設定
App::setLocale($locale); // $locale = 'en';
取得
$locale = App::getLocale();
判定
if (App::isLocale('en')) {
//
}
まとめ
▸ Laravelは標準で多言語化対応が可能なので、多言語対応に
なりそうなシステムはLaravelで決まりかも。
▸ 多言語化対応するときは要件を把握し、データ構造をしっ
かり考えないと修正、変更が多くなるから注意が必要かも。
祝
グローバル

More Related Content

Similar to Laravel多言語化対応

Cloudianを利用したソリューション (Cloudian Summit 2012)
Cloudianを利用したソリューション (Cloudian Summit 2012)Cloudianを利用したソリューション (Cloudian Summit 2012)
Cloudianを利用したソリューション (Cloudian Summit 2012)
CLOUDIAN KK
 
[de:code 2019 振り返り Night!] Data Platform
[de:code 2019 振り返り Night!] Data Platform[de:code 2019 振り返り Night!] Data Platform
[de:code 2019 振り返り Night!] Data Platform
Naoki (Neo) SATO
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
Insight Technology, Inc.
 
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
Denodo
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Treasure Data, Inc.
 
DRBDを活用したAzure上でのデータ保護
DRBDを活用したAzure上でのデータ保護DRBDを活用したAzure上でのデータ保護
DRBDを活用したAzure上でのデータ保護
Ken Sawada
 
S3をDB利用 ショッピングセンター向けポイントシステム概要
S3をDB利用 ショッピングセンター向けポイントシステム概要S3をDB利用 ショッピングセンター向けポイントシステム概要
S3をDB利用 ショッピングセンター向けポイントシステム概要
一成 田部井
 
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
Kensuke SAEKI
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
 
Hinemosは誤解されている?
Hinemosは誤解されている?Hinemosは誤解されている?
Hinemosは誤解されている?
Hinemos
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
Insight Technology, Inc.
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
 
メタップスでの少人数 グローバルプラットフォーム開発について
メタップスでの少人数 グローバルプラットフォーム開発についてメタップスでの少人数 グローバルプラットフォーム開発について
メタップスでの少人数 グローバルプラットフォーム開発について
株式会社メタップスホールディングス
 
2019年春リリース予定!Hinemos ver.6.2の全体像
2019年春リリース予定!Hinemos ver.6.2の全体像2019年春リリース予定!Hinemos ver.6.2の全体像
2019年春リリース予定!Hinemos ver.6.2の全体像
Hinemos
 
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
Insight Technology, Inc.
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
Insight Technology, Inc.
 
クラウドの破壊力
クラウドの破壊力クラウドの破壊力
クラウドの破壊力
Osaka University
 

Similar to Laravel多言語化対応 (20)

Cloudianを利用したソリューション (Cloudian Summit 2012)
Cloudianを利用したソリューション (Cloudian Summit 2012)Cloudianを利用したソリューション (Cloudian Summit 2012)
Cloudianを利用したソリューション (Cloudian Summit 2012)
 
[de:code 2019 振り返り Night!] Data Platform
[de:code 2019 振り返り Night!] Data Platform[de:code 2019 振り返り Night!] Data Platform
[de:code 2019 振り返り Night!] Data Platform
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
 
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
DRBDを活用したAzure上でのデータ保護
DRBDを活用したAzure上でのデータ保護DRBDを活用したAzure上でのデータ保護
DRBDを活用したAzure上でのデータ保護
 
S3をDB利用 ショッピングセンター向けポイントシステム概要
S3をDB利用 ショッピングセンター向けポイントシステム概要S3をDB利用 ショッピングセンター向けポイントシステム概要
S3をDB利用 ショッピングセンター向けポイントシステム概要
 
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
ビジネスインテリジェンス入門~OSSでBIを始めよう~version2(公開版)
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Hinemosは誤解されている?
Hinemosは誤解されている?Hinemosは誤解されている?
Hinemosは誤解されている?
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
メタップスでの少人数 グローバルプラットフォーム開発について
メタップスでの少人数 グローバルプラットフォーム開発についてメタップスでの少人数 グローバルプラットフォーム開発について
メタップスでの少人数 グローバルプラットフォーム開発について
 
2019年春リリース予定!Hinemos ver.6.2の全体像
2019年春リリース予定!Hinemos ver.6.2の全体像2019年春リリース予定!Hinemos ver.6.2の全体像
2019年春リリース予定!Hinemos ver.6.2の全体像
 
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
[db tech showcase Tokyo 2015] C25:HP NonStop SQLはなぜグローバルに分散DBを構築できるのか、 データの整合...
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
 
クラウドの破壊力
クラウドの破壊力クラウドの破壊力
クラウドの破壊力
 

More from kasikasikasi

キミスカのフロントエンドを Monorepo化しない話
キミスカのフロントエンドを Monorepo化しない話キミスカのフロントエンドを Monorepo化しない話
キミスカのフロントエンドを Monorepo化しない話
kasikasikasi
 
Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.
kasikasikasi
 
Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.
kasikasikasi
 
社内システムのAWSアカウントにIAMのベストプラクティスを導入した
社内システムのAWSアカウントにIAMのベストプラクティスを導入した社内システムのAWSアカウントにIAMのベストプラクティスを導入した
社内システムのAWSアカウントにIAMのベストプラクティスを導入した
kasikasikasi
 
Let's CI/CD
Let's CI/CDLet's CI/CD
Let's CI/CD
kasikasikasi
 
Service Worker を知る
Service Worker を知るService Worker を知る
Service Worker を知る
kasikasikasi
 
This is toast ui calendar presentation
This is toast ui calendar presentationThis is toast ui calendar presentation
This is toast ui calendar presentation
kasikasikasi
 
Copy Smallchat Arcana meetup#43
Copy Smallchat Arcana meetup#43Copy Smallchat Arcana meetup#43
Copy Smallchat Arcana meetup#43
kasikasikasi
 
About Nuxt.js
About Nuxt.jsAbout Nuxt.js
About Nuxt.js
kasikasikasi
 
Favarite appinchina
Favarite appinchinaFavarite appinchina
Favarite appinchina
kasikasikasi
 
How to name variables
How to name variablesHow to name variables
How to name variables
kasikasikasi
 
転職とLaravel
転職とLaravel転職とLaravel
転職とLaravel
kasikasikasi
 

More from kasikasikasi (12)

キミスカのフロントエンドを Monorepo化しない話
キミスカのフロントエンドを Monorepo化しない話キミスカのフロントエンドを Monorepo化しない話
キミスカのフロントエンドを Monorepo化しない話
 
Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.
 
Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.Changing the matching function from two years ago to now.
Changing the matching function from two years ago to now.
 
社内システムのAWSアカウントにIAMのベストプラクティスを導入した
社内システムのAWSアカウントにIAMのベストプラクティスを導入した社内システムのAWSアカウントにIAMのベストプラクティスを導入した
社内システムのAWSアカウントにIAMのベストプラクティスを導入した
 
Let's CI/CD
Let's CI/CDLet's CI/CD
Let's CI/CD
 
Service Worker を知る
Service Worker を知るService Worker を知る
Service Worker を知る
 
This is toast ui calendar presentation
This is toast ui calendar presentationThis is toast ui calendar presentation
This is toast ui calendar presentation
 
Copy Smallchat Arcana meetup#43
Copy Smallchat Arcana meetup#43Copy Smallchat Arcana meetup#43
Copy Smallchat Arcana meetup#43
 
About Nuxt.js
About Nuxt.jsAbout Nuxt.js
About Nuxt.js
 
Favarite appinchina
Favarite appinchinaFavarite appinchina
Favarite appinchina
 
How to name variables
How to name variablesHow to name variables
How to name variables
 
転職とLaravel
転職とLaravel転職とLaravel
転職とLaravel
 

Recently uploaded

CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 

Recently uploaded (6)

CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 

Laravel多言語化対応