Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Laravelで作るWebアプリケーションの国際化
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
fortkle
May 29, 2015
Technology
2.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelで作るWebアプリケーションの国際化
2015/05/29 Laravel Tokyo LT #1 発表資料
fortkle
May 29, 2015
More Decks by fortkle
See All by fortkle
無駄な物をなるべく作らないリプレイス戦略 / replace-strategy-phperkaigi2021
fortkle
1
2.7k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
800
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
7k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.6k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
640
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
370
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
7k
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
0
1.6k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2.2k
Other Decks in Technology
See All in Technology
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
280
Goodbye ShellScript, Hello File-based App
shunsock
0
1.2k
Hermes Agentで、AIが調べて記事を書くブログを作った話
blueb
0
110
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
310
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
2026-09-08 そのJavaモダナイゼーション、AIに丸投げで大丈夫?IBM Bobで変わる品質と効率
yutanonaka
1
210
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
130
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
630
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
210
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
180
AI臭い文章とは何なのか
nasuvitz
5
2.4k
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
120
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Design in an AI World
tapps
1
330
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
420
My Coaching Mixtape
mlcsv
0
330
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Between Models and Reality
mayunak
4
470
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
Laravelで作る Webアプリケーションの国際化 Laravel Tokyo LT #1 @fortkle
自己紹介 • 高野福晃 – Istyle, inc. – Twitter: @fortkle –
Github: fortkle
国際化してますか? 英語 韓国語 中国語 http://us.cosme.net/
ある日突然、 「国際化しろ」って言われたら?
こうならないように少しだけでも 知っておきましょう
国際化の必要性 • 日本語だけでなく海外をターゲットにしたWeb サービスが増えてきている – 基本は英語。 – ビジネス的には中国語も。 • 最初の段階から国際化を意識しておくと吉
– 英語に対応するだけでも対象ユーザーがグッと増える – 言語切替ぐらいならそこまで時間はかからない
国際化の要素 • 一般的な国際化の対象項目 – 文字コード – 文字の方向性(左から右、右から左など) – 文言 –
書式 • 数値(小数点の文字、桁区切りの文字、区切る桁数など) • 日時(年月日の表記の仕方、イスラム暦/グレゴリオ暦/ユダヤ暦 /和暦など使用する暦の違い、他) – 日時情報の時差 – 通貨情報
国際化の要素 • 一般的な国際化の対象項目 – 文字コード – 文字の方向性(左から右、右から左など) – 文言 –
書式 • 数値(小数点の文字、桁区切りの文字、区切る桁数など) • 日時(年月日の表記の仕方、イスラム暦/グレゴリオ暦/ユダヤ暦 /和暦など使用する暦の違い、他) – 日時情報の時差 – 通貨情報 今日はここだけを取り上げます!
文言を国際化するには? • 色々あるけど、おすすめの方法は以下の2つ – 1. Laravel標準のLangファサードを使った国際化 – 2. Gettextを使った国際化
1.Langファサードを使った国際化 • 言語ファイル(キーと文字列のただの配列が書かれた phpファイル)を用意すれば準備完了! • 使い方は言語ファイルを用意して App::setLocale("言語") で言語を変更して Lang::get("ファイル名.キー") で文字列を取得!
• 個人制作、小~中規模のアプリケーションであればこ れで全く問題ない。 マニュアルに載っている情報で十分なぐらいシンプル! http://readouble.com/laravel/5/0/0/ja/localization.html
翻訳者「.phpと書かれたファイルを 開いて編集すればいいんです ね?」
非エンジニア(翻訳者)に 依頼するのが辛い
2.Gettextを使った国際化 • 多言語対応の処理を行うライブラリと、ソースコード からテキストを抽出したりするツール群。 • 良い点 – 多機能 – 関連ツールが豊富
– 枯れている(採用実績も多く、安定している) • Langファサードに比べ… – 開発者が翻訳環境についての補助ツールを作成する必要がほ とんどない – 翻訳者がシステムに強い必要がない(専用のGUIエディタやそ の他関連ツールが豊富)
「laravel-gettext」で国際化 • https://github.com/xinax/laravel-gettext • Laravelで作られたアプリケーションに対して国際化対応 のシンプルなサポートを提供してくれるライブラリ • 前述したGettextが簡単に使えるようになる
LaravelでGettextを使う 想定で説明
今回作りたいもの • 「Hello, World!」を表示するアプリケーション • 日本語と英語の2言語をサポートする • サブドメインでアプリケーションの言語設定を切り替える – ex.)
日本語:https://ja.hoge.com/ 、英語:https://en.hoge.com/ • 言語リソースの管理はgettextを使う
サンプルはこちら • Githubにアップしてます。参考にどうぞ。 • fortkle/laravel-gettext-sample
国際化の作業手順 • 作業手順 – 1. 環境準備 – 2. laravel-gettext のインストール
– 3. 設定の変更 – 4. 翻訳作業の一連の流れ – 5. 確認
1.環境準備 • 開発する環境に下記ツールがインストールされている か確認 – Laravel5 … https://github.com/laravel/laravel – GNU
Gettext … http://www.gnu.org/software/gettext/ – php-gettext … – Poedit(Poファイルエディタ)… http://poedit.net/ $ php -i | grep GetText GetText Support => enabled http://php.net/manual/ja/gettext.setup.php
2. laravel-gettext のインストール • パッケージを追加して保存 (composer.json) • アップデート (composer update)
{ "require": { "laravel/framework": "5.0.*", "xinax/laravel-gettext": "2.x" } } $ composer update Loading composer repositories with package …(略)
2. laravel-gettext のインストール • サービスプロバイダーに追加 (config/app.php) • ミドルウェアに追加 (app/Http/Kernel.php) 'providers'
=> array( 'Xinax¥LaravelGettext¥LaravelGettextServiceProvider', ) protected $middleware = [ 'Xinax¥LaravelGettext¥Middleware¥GettextMiddleware', ]
2. laravel-gettext のインストール • 設定ファイルを生成 (php artisan vendor:publish) $ php
artisan vendor:publish Copied File [/vendor/xinax/laravel- gettext/src/config/config.php] To [/config/laravel- gettext.php] Publishing Complete!
3. 設定の変更 • 先ほど生成した設定ファイルをアプリケーションに 合わせて修正 (config/laravel-gettext.php) 'supported-locales' => array( 'en_US',
'ja_JP', // supported-localesに日本語を追加 ), ※Localesに指定できるロケール名はコマンドラインから $locale -a で確認できます。 // 今回はroutesに文字リソースがあるのでroutes.phpも // 文字リソースを検索するように修正 'source-paths' => array( 'Http', '../resources/views', 'Commands' ),
3. 設定の変更 • 最後に .po ファイルを生成 上記コマンドによって、resources/lang/i18n 配下に 言語ファイル(poファイル)が生成されます。 $
php artisan gettext:create Locale directory created (../resources/lang/i18n/en_US) Locale directory created (../resources/lang/i18n/ja_JP) Done! 2 directories were created.
3. 設定の変更 • Poファイルは、原文と翻訳文を対応が書かれています。 日本語のpoファイル (resources/lang/i18n/ja_JP/LC_MESSAGES/message.po) 英語のpoファイル (resources/lang/i18n/en_US/LC_MESSAGES/message.po) (※実際はまだ翻訳文は書かれていません。これから登録します。) #:
Http/routes.php:25 #: ../storage/views/messages//171658b6baec069a518.php:25 msgid "routes.hello_world" msgstr "こんにちは、世界!" #: Http/routes.php:25 #: ../storage/views/messages//171658b6baec069a518.php:25 msgid "routes.hello_world" msgstr "Hello, World!"
4.翻訳作業の一連の流れ • まず、「Hello,World!」をgettext関数に置き換えま す。Gettext関数は _('メッセージID') です。 この時点で画面にアクセス すると右のようになります。 Route::get('/', function()
{ return _('routes.hello_world'); });
4.翻訳作業の一連の流れ • 次に文字リソースの変更をpoファイルに反映させます。 (resources/lang/i18n/en_US/LC_MESSAGES/messages. po)をPoeditで開き、「更新する」を押します。 すると、このように文字リソースを検索してくれます。
4.翻訳作業の一連の流れ • 翻訳を行い、保存ボタンを押します(Poeditで保存す ると自動でpoファイルをコンパイルしたmoファイルを 同じ階層に生成してくれます)。 ※同様に日本語も! ファイルの場所だけ教えれば非エンジニアも翻訳できる!
5.表示したい言語を選択して確認 • Http/Middleware等でロケールを設定します。 サブドメインでロケールを変更したい場合は、Web サーバーの環境変数などを見て切り替えます。 // $local_gettext = 'en_US'; //
$local_gettext = 'ja_JP'; LaravelGettext::setLocale($local_gettext);
5.表示したい言語を選択して確認 • サイトにアクセスして確認できたら成功です!
Gettextあるある • Q. 言語切替がうまくいかないんだけど? • A. キャッシュが効いている可能性が高いです – 1. LaravelのViewのキャッシュ
• storage/views/ 配下に生成されるGettextのキャッシュを消す – 2. メモリのキャッシュ • ビルドインサーバーであれば再実行 • Webサーバー(Apache等)であれば再起動
Gettextあるある • Q. PoeditというかWeb上から翻訳したい! • A. Pythonで書かれたフリーのオンライン翻訳 ツール「Pootle」などがあります!
まとめ • 大規模な多言語アプリケーションを作る場合は 枯れているけどgettextを使うのがおすすめ • Laravelでgettextを使うなら、 「xinax/laravel-gettext」 • Pootle等を使えばオンラインで翻訳もできる
ご静聴ありがとうございました