はじめに
多言語対応のアプローチとしてi18nという多言語の仕掛けが存在します。
ざっくり説明すると、予め別言語に翻訳するメッセージをソース上で特定の関数”__()”等を通す形で定義し、gettextというソフトウェアを用いてソース中から多言語化する箇所を抜き出し(poファイル)、それを元に言語変換用のファイル(moファイル)を作成し、システムはこの言語変換ファイルを元に変換をするといった仕掛けです。
laravelには初めからi18nに頼らずとも多言語化の為のツールが備わっています。なので多言語化という部分では不要なのかもしれません。(とはいえど変換対象を一覧化できるという意味では意義がありますが…) 今回i18nのpoファイルを出力したいと思ったのは多言語対応の為ではなく、poファイルからメッセージを拾い上げ一覧化することにより、表現の寄れを精査したいといった目的で作成します。
laravel-gettextについて
PHPソースのみであればyumでインストールできるgettextを用いれば簡単に生成できるのですが、これではビュー(blade)に対応できません。(コンパイル済のテンプレートを参照する方法も考えられますが表示実績がないとできないのでいま一つです)
「laravel×gettext」というキーワードで検索すると
https://github.com/xinax/laravel-gettext
というパッケージがひっかかります。
このパッケージをインストールすると、poファイルを生成するコマンドが利用可能になります。
但しここで生成されるpoファイルはソースの解析までは行われず、解析のための元データのような状態のものです。また、storage/framework/messagesにbladeを展開したファイルが生成されるのでここを参照することでbladeに対応することができるようになります。
自身が利用するバージョンに一致するものがない場合はフォークされたものに該当バージョン向けがないかをチェックします。私はlaravel 5.5.x(2018/3/12)を利用していたのですが、5.5向けが公開されていませんでしたので、フォーク先の下記のパッケージを利用してみます。
https://github.com/Belphemur/laravel-gettext
laravel-gettextの導入
基本的にはパッケージのヘルプ通りです。
1.composer.jsonの書き換え
require-devにlaravel-gettextを追加しておきます。
"require-dev" : { "Belphemur/laravel-gettext" : "^6.1" …… }
eclipseを利用している場合、なぜか保存されないことがありました。エディタで編集するのが無難かもしれません。
2. composerを用いてインストール
ターミナル(コマンドプロンプト)でプロジェクトのディレクトリにいきcomposer updateし、インストールします。
composer update
3.設定ファイルの生成
「php artisan vendor:publish」を実行し設定ファイルなどを生成する。
php artisan vendor:publish Which provider or tag's files would you like to publish?: [0 ] Publish files from all providers and tags listed below [1 ] Provider: Barryvdh\Debugbar\ServiceProvider [2 ] Provider: Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider [3 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider [4 ] Provider: Illuminate\Mail\MailServiceProvider [5 ] Provider: Illuminate\Notifications\NotificationServiceProvider [6 ] Provider: Illuminate\Pagination\PaginationServiceProvider [7 ] Provider: Laravel\Tinker\TinkerServiceProvider [8 ] Provider: Xinax\LaravelGettext\LaravelGettextServiceProvider [9 ] Tag: config [10] Tag: laravel-mail [11] Tag: laravel-notifications [12] Tag: laravel-pagination >8 Publishing complate.
設定ファイル「config/laravel-gettext.php」が生成されるので、ロケールの設定などを適宜更新する。
私は下記のような内容を書き換えました。
各種locale:ja-JP
keywords-list: eを追加
4. poファイルの生成
下記のコマンドを実行しpoファイルを生成します。
resources/lang/i18n以下にディレクトリやファイルが生成されていれば成功です。
php artisan gettext:create
二回目以降はupdateを使用します。
php artisan gettext:update
このコマンドではソースの解析までは実施してくれないようです。
ソースから翻訳する箇所を抜き出す
poファイルを元にgettextを利用できると思いますが、
便利なGUIツールが存在するようです。
https://poedit.net/
このツールを利用しました。
このツールを用いてpoファイルを開きます。
メニューより「カタログ→ソースから更新」を選択するとソースからメッセージを抜き出せます。
これでシステム内のメッセージを洗い出すことが可能になります。
上記のパッケージではこのファイルを使用し実際に翻訳することも可能なようです。