広告

【Laravel9】Langファイルを認識しない場合の対応

Laravel

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

まず、Laravel9に関しては、以前まとめましたので以下の記事をご覧ください。

【Laravel9】概要・新機能・プロジェクト作成など試してみた
Laravel9について、概要をまとめ新機能などを色々と試してみました。

Laravel9をぼちぼち使い始めていますが、今回はLangファイルについてうまく動作しない場合の対応をまとめました。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

使用するバージョンなど
  • Windows 11 or macOS Monterey (M1)
  • Laravel 9

2022/10/02 最新バージョンで確認しました。

広告

【紹介】個人開発

私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。

また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます

是非多くの方に読んでいただき、Laravelの開発に少しでもお役に立てたら幸いです。

Langフォルダについて

Laravel8と9ですが、Langフォルダの場所が変更になっています。

  • Laravel8: resources\lang\
  • Laravel9: lang\

結論からですが、「resources\lang\」フォルダを優先しており、そちらのフォルダが存在する場合、「lang\」フォルダの方が読み込まれません

なお、Laravel10の場合はデフォルトでLangフォルダがありません。
以下のコマンドで作成できます。

php artisan lang:publish

初期状態の確認

まずは、初期状態で動作確認を行います。
以下のコマンドでLaravelプロジェクトを作成します。

$ curl -s https://laravel.build/laravel9-app-sample | bash
$ cd laravel9-app-sample/

「laravel9-app-sample」はプロジェクト名ですので、任意で指定してください。

Laravel Sailを使いプロジェクトを作成していますが、詳しくは以下の記事をご覧ください。

Windows
Laravel Sailで開発環境構築【Vite対応】
今回は、Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。
Mac
【M1 Mac】Laravel Sailで開発環境構築【Vite対応】
Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。

Sailを起動します。

$ sail up -d

以下のURLにアクセスします。

http://localhost

Laravelの起動画面が表示されました。

langフォルダについて、初期状態では以下のファイルが存在しました。

lang\
  en\
    auth.php
    pagination.php
    passwords.php
    validation.php

動作確認するためにルーティングを追加します。

routes\web.php
Route::get('/lang', function () {
    return view('lang');
});

以下のファイルを作成します。
中身はLangファイルのメッセージを表示するようにしています。

resources\views\lang.blade.php
{{ __('validation.accepted') }}

validation.phpの中の「accepted」キーのメッセージを表示します。

http://localhost/lang

画面に以下の文字列が表示されました。
正しくLangファイルを認識しています。

広告

Langフォルダを作成

以下の場所にフォルダを作成します。
これはLaravel8のLangフォルダと同じ場所です。

resources\lang

この状態で先ほどと同じURLにアクセスします。
今度はメッセージではなく、Langのキーがそのまま表示されました。
Langファイルを認識していません

「resources\lang」フォルダを優先しているため、そのフォルダがある場合に「lang\」フォルダを認識しなくなります。

注意が必要なケース

Composerパッケージが対応していない場合

例えば以下のパッケージの導入を考えてみます。
導入や詳しい解説は以下の記事をご覧ください。

【Laravel】AdminLTEを導入
出来合いのテンプレートを使って、サクッとアプリケーションを作成しましょう!オススメは「AdminLTE」です。 Laravel向けに最適化されたLaravel-AdminLTEの導入から実装まで、詳しく解説しています。

この導入時に、コマンドを実行してBladeやLangファイルをコピーします。
現時点では、「resources\lang」フォルダの方へコピーが行われます。
(今後は改善されるかもしれません)

その場合は、「lang\」フォルダの方へ移動し、「resources\lang」を削除すると大丈夫です。

2022/10/01 最新バージョンで試したらLaravel-AdminLTEは改善されていました。

Laravel8から移行した場合

Laravel8のプロジェクトをLaravel9に移行した際も注意しましょう。
どちからのLangフォルダに統一しましょう。

Laravelの処理の確認

実際にLaravelのソースを確認しましょう。

vendor\laravel\framework\src\Illuminate\Foundation\Application.php

以下の関数で判定していました。
18行目で、「resources\lang」フォルダが存在すれば、そちらを優先して返却しているのが分かります。

    /**
     * Bind all of the application paths in the container.
     *
     * @return void
     */
    protected function bindPathsInContainer()
    {
        $this->instance('path', $this->path());
        $this->instance('path.base', $this->basePath());
        $this->instance('path.config', $this->configPath());
        $this->instance('path.public', $this->publicPath());
        $this->instance('path.storage', $this->storagePath());
        $this->instance('path.database', $this->databasePath());
        $this->instance('path.resources', $this->resourcePath());
        $this->instance('path.bootstrap', $this->bootstrapPath());

        $this->useLangPath(value(function () {
            if (is_dir($directory = $this->resourcePath('lang'))) {
                return $directory;
            }

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

さいごに

今回は、Laravel9のLangフォルダの挙動について確認しました。
もしうまく認識しない場合は確認しましょう。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

LaravelMacOSPHPWindowsプログラミング
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

タイトルとURLをコピーしました