Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravelで作るWebアプリケーションの国際化
Search
fortkle
May 29, 2015
Technology
2
2k
Laravelで作るWebアプリケーションの国際化
2015/05/29 Laravel Tokyo LT #1 発表資料
fortkle
May 29, 2015
Tweet
Share
More Decks by fortkle
See All by fortkle
無駄な物をなるべく作らないリプレイス戦略 / replace-strategy-phperkaigi2021
fortkle
1
2.2k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
640
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
4.3k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
530
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
290
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
6.8k
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
0
1.5k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2k
Other Decks in Technology
See All in Technology
PL900試験から学ぶ Power Platform 基礎知識講座
kumikeyy
0
130
Building Products in the LLM Era
ymatsuwitter
10
5.4k
技術的負債解消の取り組みと専門チームのお話 #技術的負債_Findy
bengo4com
1
1.3k
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
17
6.7k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
580
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
270
なぜ私は自分が使わないサービスを作るのか? / Why would I create a service that I would not use?
aiandrox
0
730
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
1.4k
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
130
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.5k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
レビューを増やしつつ 高評価維持するテクニック
tsuzuki817
1
710
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Side Projects
sachag
452
42k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
630
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Gamification - CAS2011
davidbonilla
80
5.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Thoughts on Productivity
jonyablonski
69
4.5k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Visualization
eitanlees
146
15k
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等を使えばオンラインで翻訳もできる
ご静聴ありがとうございました