Laravel localeの取得と設定する方法
はじめに
Laravelでlocaleの設定と取得の方法が色々あったので一覧にしてみた。
環境
- PHP 8.3.8
- laravel/framework 11.10.0
- laravel/laravel 11.1.0
localeの定義している場所
localeはconfig/app.php
のlocale
に定義がある。
つまり、configの値を取得したり、設定したりする箇所が色々あることになる。
設定と取得の方法
ざっくりと分けるとクラス、へルパ関数、もしくは、ファサードの3つの方法がある。
クラス
\Illuminate\Config\Repository::get
condif/app.php
のlocale
の値を取得することができる。
use Illuminate\Config\Repository;
$config = new Illuminate\Config\Repository();
$locale = $config->get('app.locale');
\Illuminate\Config\Repository::set
condif/app.php
のlocale
の値を設定することができる。
use Illuminate\Config\Repository;
$config = new Illuminate\Config\Repository();
$config->set('app.locale', 'ja');
実際に書き換えるわけではなく、\Illuminate\Config\Repository
クラス内の$items
配列の要素を書き換えている。
\Illuminate\Foundation\Application::getLocale
内部的には\Illuminate\Config\Repository
クラスのget
メソッドを実行し、app.locale
の値を取得している。
use Illuminate\Foundation\Application;
$application = new Application();
$locale = $application->getLocale();
\Illuminate\Foundation\Application::currentLocale
内部的には\Illuminate\Foundation\Application
クラスのgetLocale
メソッドを実行している。
use Illuminate\Foundation\Application;
$application = new Application();
$locale = $application->currentLocale();
\Illuminate\Foundation\Application::setLocale
内部的には\Illuminate\Config\Repository
クラスのset
メソッドを実行し、app.locale
の値を書き換えている。
さらに\Illuminate\Translation\Translator
クラスのsetLocale
メソッドを実行している。
use Illuminate\Foundation\Application;
$application = new Application();
$application->setLocale('ja');
\Illuminate\Translation\Translator::getLocale
Illuminate\Translation\Translator
クラスのコンストラクタの第2引数で指定したlocale
を取得することができる。
use Illuminate\Translation\Translator;
$loader = new XXX(); // これは省略
$translator = new Translator($loader, 'ja');
$locale = $translator->getLocale();
サービスプロバイダの実装を確認すると、\Illuminate\Foundation\Application::getLocale
を実行しているので、config/app.php
のlocale
を取得することになる。
\Illuminate\Translation\Translator::locale
内部的には\Illuminate\Translation\Translator
クラスのgetLocale
メソッドを実行している。
use Illuminate\Translation\Translator;
$loader = new XXX(); // これは省略
$translator = new Translator($loader, 'ja');
$locale = $translator->locale();
\Illuminate\Translation\Translator::setLocale
\Illuminate\Translation\Translator
クラスの$locale
プロパティを書き換える。
use Illuminate\Translation\Translator;
$loader = new XXX(); // これは省略
$translator = new Translator($loader, 'ja');
$translator->setLocale('en');
へルパ関数、ファサード
クラスのところに書いたメソッドと使い方は同じです。
appへルパ関数、Appファサード
$locale = app()->getLocale();
$locale = app()->currentLocale();
app()->setLocale('ja');
$locale = App::getLocale();
$locale = App::currentLocale();
App::setLocale('ja');
ドキュメントではAppファサードを使っている。
configへルパ関数、Configファサード
$locale = config()->get('app.locale');
$locale = config(('app.locale');
config()->set('app.locale', 'ja');
config(['app.locale' => 'ja']);
$locale = Config::get('app.locale');
Config::set('app.locale', 'ja');
transへルパ関数、Langファサード
$locale = trans()->getLocale();
$locale = trans()->locale();
trans()->setLocale('ja');
$locale = Lang::getLocale();
$locale = Lang::locale();
Lang::setLocale('ja');
まとめ
書いてみたら色々違いがあった。
現在の言語を取得または設定の場合は\Illuminate\Foundation\Application
のappへルパ関数
、Appファサード
のどちらかを使うのが良さそうな雰囲気を感じる結果になった。
Discussion