🌍

Laravel9でresources/langディレクトリを移動しないで使えるか検証してみた

2022/02/28に公開約1,400字

Laravel9からresources/langディレクトリrootディレクトリに移動しました。

https://laravel.com/docs/9.x/upgrade#the-lang-directory
resources/lang
↓
resources
lang

そこで、Laravel8からLaravel9にバージョンを上げる際に、resources/langディレクトリを移動しないで使えるか検証してみたいと思います。

環境

  • PHP v8.1.2
  • Laravel v9.1.0

環境はLaravel Sailで作っています。

検証

検証のため、Laravel8以前の状態にしたいので、rootディレクトリにあるlangディレクトリは削除し、
resourcesディレクトリ配下にlaravel8のlangディレクトリの内容[1]を持ってきます。

app
bootstrap
config
database
lang <- 削除する
public
resources
  lang <- Laravel8の内容を持ってくる
routes
...

tinkerを使って、langの内容を取得してみます。

$ php artisan tinker
Psy Shell v0.11.1 (PHP 8.1.2 — cli) by Justin Hileman
>>> __('auth.failed');
=> "These credentials do not match our records."
>>> 
>>> app()->langPath();
=> "/var/www/html/resources/lang"

取得できましたー!
app()->langPath()を使ってpathを取得してもresources/langディレクトリを取得できていますね。

なぜ大丈夫なのか?

答えばGitHubにあります。

https://github.com/laravel/framework/blob/9.x/src/Illuminate/Foundation/Application.php#L323-L329
$this->useLangPath(value(function () {
    if (is_dir($directory = $this->resourcePath('lang'))) {
	return $directory;
    }

    return $this->basePath('lang');
}));

resourcesディレクトリ配下にlangディレクトリの有無を事前に判定していました。
このおかげで、langディレクトリを移動しないで使えるようになっていますね。

結論

移動しなくても大丈夫!!

ただし、今後のバージョンアップでこの判定も消える可能性があるので、
いずれはrootディレクトリに移動した方が良い気はしております。

脚注
  1. https://github.com/laravel/laravel/tree/8.x/resources/lang ↩︎

Discussion

ログインするとコメントできます