Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravelで作るWebアプリケーションの国際化

F4d37a67ce86b2f962c79d73a9127d3c?s=47 fortkle
May 29, 2015

 Laravelで作るWebアプリケーションの国際化

2015/05/29 Laravel Tokyo LT #1 発表資料

F4d37a67ce86b2f962c79d73a9127d3c?s=128

fortkle

May 29, 2015
Tweet

Transcript

  1. Laravelで作る Webアプリケーションの国際化 Laravel Tokyo LT #1 @fortkle

  2. 自己紹介 • 高野福晃 – Istyle, inc. – Twitter: @fortkle –

    Github: fortkle
  3. 国際化してますか? 英語 韓国語 中国語 http://us.cosme.net/

  4. ある日突然、 「国際化しろ」って言われたら?

  5. こうならないように少しだけでも 知っておきましょう

  6. 国際化の必要性 • 日本語だけでなく海外をターゲットにしたWeb サービスが増えてきている – 基本は英語。 – ビジネス的には中国語も。 • 最初の段階から国際化を意識しておくと吉

    – 英語に対応するだけでも対象ユーザーがグッと増える – 言語切替ぐらいならそこまで時間はかからない
  7. 国際化の要素 • 一般的な国際化の対象項目 – 文字コード – 文字の方向性(左から右、右から左など) – 文言 –

    書式 • 数値(小数点の文字、桁区切りの文字、区切る桁数など) • 日時(年月日の表記の仕方、イスラム暦/グレゴリオ暦/ユダヤ暦 /和暦など使用する暦の違い、他) – 日時情報の時差 – 通貨情報
  8. 国際化の要素 • 一般的な国際化の対象項目 – 文字コード – 文字の方向性(左から右、右から左など) – 文言 –

    書式 • 数値(小数点の文字、桁区切りの文字、区切る桁数など) • 日時(年月日の表記の仕方、イスラム暦/グレゴリオ暦/ユダヤ暦 /和暦など使用する暦の違い、他) – 日時情報の時差 – 通貨情報 今日はここだけを取り上げます!
  9. 文言を国際化するには? • 色々あるけど、おすすめの方法は以下の2つ – 1. Laravel標準のLangファサードを使った国際化 – 2. Gettextを使った国際化

  10. 1.Langファサードを使った国際化 • 言語ファイル(キーと文字列のただの配列が書かれた phpファイル)を用意すれば準備完了! • 使い方は言語ファイルを用意して App::setLocale("言語") で言語を変更して Lang::get("ファイル名.キー") で文字列を取得!

    • 個人制作、小~中規模のアプリケーションであればこ れで全く問題ない。 マニュアルに載っている情報で十分なぐらいシンプル! http://readouble.com/laravel/5/0/0/ja/localization.html
  11. 翻訳者「.phpと書かれたファイルを 開いて編集すればいいんです ね?」

  12. 非エンジニア(翻訳者)に 依頼するのが辛い

  13. 2.Gettextを使った国際化 • 多言語対応の処理を行うライブラリと、ソースコード からテキストを抽出したりするツール群。 • 良い点 – 多機能 – 関連ツールが豊富

    – 枯れている(採用実績も多く、安定している) • Langファサードに比べ… – 開発者が翻訳環境についての補助ツールを作成する必要がほ とんどない – 翻訳者がシステムに強い必要がない(専用のGUIエディタやそ の他関連ツールが豊富)
  14. 「laravel-gettext」で国際化 • https://github.com/xinax/laravel-gettext • Laravelで作られたアプリケーションに対して国際化対応 のシンプルなサポートを提供してくれるライブラリ • 前述したGettextが簡単に使えるようになる

  15. LaravelでGettextを使う 想定で説明

  16. 今回作りたいもの • 「Hello, World!」を表示するアプリケーション • 日本語と英語の2言語をサポートする • サブドメインでアプリケーションの言語設定を切り替える – ex.)

    日本語:https://ja.hoge.com/ 、英語:https://en.hoge.com/ • 言語リソースの管理はgettextを使う
  17. サンプルはこちら • Githubにアップしてます。参考にどうぞ。 • fortkle/laravel-gettext-sample

  18. 国際化の作業手順 • 作業手順 – 1. 環境準備 – 2. laravel-gettext のインストール

    – 3. 設定の変更 – 4. 翻訳作業の一連の流れ – 5. 確認
  19. 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
  20. 2. laravel-gettext のインストール • パッケージを追加して保存 (composer.json) • アップデート (composer update)

    { "require": { "laravel/framework": "5.0.*", "xinax/laravel-gettext": "2.x" } } $ composer update Loading composer repositories with package …(略)
  21. 2. laravel-gettext のインストール • サービスプロバイダーに追加 (config/app.php) • ミドルウェアに追加 (app/Http/Kernel.php) 'providers'

    => array( 'Xinax¥LaravelGettext¥LaravelGettextServiceProvider', ) protected $middleware = [ 'Xinax¥LaravelGettext¥Middleware¥GettextMiddleware', ]
  22. 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!
  23. 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' ),
  24. 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.
  25. 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!"
  26. 4.翻訳作業の一連の流れ • まず、「Hello,World!」をgettext関数に置き換えま す。Gettext関数は _('メッセージID') です。 この時点で画面にアクセス すると右のようになります。 Route::get('/', function()

    { return _('routes.hello_world'); });
  27. 4.翻訳作業の一連の流れ • 次に文字リソースの変更をpoファイルに反映させます。 (resources/lang/i18n/en_US/LC_MESSAGES/messages. po)をPoeditで開き、「更新する」を押します。 すると、このように文字リソースを検索してくれます。

  28. 4.翻訳作業の一連の流れ • 翻訳を行い、保存ボタンを押します(Poeditで保存す ると自動でpoファイルをコンパイルしたmoファイルを 同じ階層に生成してくれます)。 ※同様に日本語も! ファイルの場所だけ教えれば非エンジニアも翻訳できる!

  29. 5.表示したい言語を選択して確認 • Http/Middleware等でロケールを設定します。 サブドメインでロケールを変更したい場合は、Web サーバーの環境変数などを見て切り替えます。 // $local_gettext = 'en_US'; //

    $local_gettext = 'ja_JP'; LaravelGettext::setLocale($local_gettext);
  30. 5.表示したい言語を選択して確認 • サイトにアクセスして確認できたら成功です!

  31. Gettextあるある • Q. 言語切替がうまくいかないんだけど? • A. キャッシュが効いている可能性が高いです – 1. LaravelのViewのキャッシュ

    • storage/views/ 配下に生成されるGettextのキャッシュを消す – 2. メモリのキャッシュ • ビルドインサーバーであれば再実行 • Webサーバー(Apache等)であれば再起動
  32. Gettextあるある • Q. PoeditというかWeb上から翻訳したい! • A. Pythonで書かれたフリーのオンライン翻訳 ツール「Pootle」などがあります!

  33. まとめ • 大規模な多言語アプリケーションを作る場合は 枯れているけどgettextを使うのがおすすめ • Laravelでgettextを使うなら、 「xinax/laravel-gettext」 • Pootle等を使えばオンラインで翻訳もできる

  34. ご静聴ありがとうございました