📑

Laravelでレッツ多言語対応!

2021/04/12に公開

今回はlaravelでいろんな言語に対応するための「ローカリゼーション」について紹介します。

ロケールの設定

Laravelで開発するときは基本的に適切なロケールを設定して上げる必要があります。
おそらくこの記事を見ているのは日本にいる方が多いと思うので、アプリのロケールを日本に設定してみます。

config/app.phpを編集する

config/app.phpの timezonelocalefallback_localefaker_locale を日本に変更します。

/*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'Asia/Tokyo', // 編集

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    'locale' => 'ja', // 編集

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
    */

    'fallback_locale' => 'ja', // お好きな言語で

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    'faker_locale' => 'ja_JP', // お好きな言語で

fallback_localeとfaker_localeとは

timezoneとlocaleは日本に合わせるのはわかりますが、
fallback_localeとfaker_localeって何のことなのでしょうか。

fallback_localeは、localeで指定した言語の設定が無かった場合に設定する言語のことです。localeで日本!って設定しているのに、システムに日本語の場合の表示方法の設定がなかったらコンピュータも困りますよね。

faker_localeは、Fakerというライブラリの言語設定です。
Laravelをお使いの方なら使ったことがある方も多いと思いますが、Factoryには標準でFakerが使えるようになっています。
例えばfakerで適当な名前を表示したいってなったときに、言語設定がenだとローマ字で外国人っぽい名前が出てきますし、日本だと日本人っぽい名前が漢字で出てきます。

バリデーションを多言語化する

まず resource/lang の配下に言語専用のディレクトリを作成します。

app/resource/lang/ja を作成しましょう。

そして、例えばバリデーションの場合はバリデーションファイルを作成します。(app/resource/lang/ja/validation.php)

このバリデーションファイルの中で、バリデーションエラー時のメッセージや属性(attribute)についていろいろ書き込んでいくと、
実際にバリデーションエラーになったときに日本語でエラー文が表示されるようになります。

全てを丁寧に書いていくと時間がかかるので、すでに誰かが作っている日本語のバリデーションファイルを拝借して書き換えるのが良いと思います!
https://gist.github.com/yukimunet/7d65e2272c70b804f73a4dc68cb5f1c0

↑こちらはLaravel5.5の時のものですが、ダウンロードしてきて、 app/resource/lang/ja/validation.phpにおいて、ご自身で編集していただくことで、きちんと使えるかと思います。

これを英語やフランス語、ドイツ語など様々な言語を設定したい場合は、同じように resource/lang/ の中にそれぞれの言語用のフォルダを作成して、validation.phpを置き、 config/app.php のロケールを変えればその言語を使えるようになります。

bladeで表示する内容を多言語化する

bladeで標準で __('messages.welcome') このような謎の記号が使われていることがあります。
最初見たときに、この記号の意味をどう調べたらいいのか悩みましたが、これこそが多言語対応のための記号です。

__('messages.welcome') の意味は、ロケールを日本語で設定している場合 app/resource/lang/ja/messages.phpwelcome という定数を参照して表示しています

messages.phpの中身の例

<?php

return [
    'welcome' => 'ようこそ!こんにちは!',
];

フランスやドイツ語でwelcomeメッセージを表示したい場合は、それぞれの言語用のディレクトリを作成し、その中にmessages.phpファイルを作り、同じようにwelcomeを設定してあげればOKです。

おわりに

今回はバリデーションを多言語対応する方法について解説してみました。
そもそも config/app/php にある「fallback_locale」や「faker_locale」って何なのか、バリデーションを多言語化する際にどういう手順を踏めば良いのか、 __('messages.welcome') この記号は何なのか?みたいなところを説明しました。

みなさんの学習のお役に立てると幸いです。

Discussion