Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.4k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
710
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
4.7k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.3k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
590
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
320
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
6.9k
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
0
1.5k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2.1k
Other Decks in Technology
See All in Technology
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.1k
Strands AgentsとNova 2 SonicでS2Sを実践してみた
yama3133
1
1.9k
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
220
Introduce marp-ai-slide-generator
itarutomy
0
130
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
210
ペアーズにおけるAIエージェント 基盤とText to SQLツールの紹介
hisamouna
2
1.7k
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.5k
20251222_サンフランシスコサバイバル術
ponponmikankan
2
140
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
250
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
450
MySQLのSpatial(GIS)機能をもっと充実させたい ~ MyNA望年会2025LT
sakaik
0
130
半年で、AIゼロ知識から AI中心開発組織の変革担当に至るまで
rfdnxbro
0
150
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
0
96
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
680
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Docker and Python
trallard
47
3.7k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
17
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
130
Between Models and Reality
mayunak
0
150
Balancing Empowerment & Direction
lara
5
820
The Cult of Friendly URLs
andyhume
79
6.7k
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等を使えばオンラインで翻訳もできる
ご静聴ありがとうございました