Laravel 後臺如何返回國際化的訊息

Tricker發表於2019-12-19

使用 Blade 適合,國際化很容易使用。
首先 App::setLocale('zh')
再使用 @lang('message.hello') 就很容易讓訊息國際化了。
可是在文件中,卻沒有找到後臺可以使用的方法。
而我又在做的是 API 伺服器。又需要這些功能。

1. 發現問題,尋找思路

@lang() 也是一個方法,只不過它是 Blade 的語法,最終會被翻譯成 php 的語法。
那就讓我們來看看它翻譯後是什麼樣子。到底是哪個類呼叫了哪個方法。

  1. 隨便找一個 blade 檔案,在隨便一個地方寫上 @lang(),這裡一定要為空,不傳任何引數,讓它報錯,這也我們才能看到錯誤日誌,快速便捷定位它呼叫的是哪個類中的哪個方法。

  2. 執行這個 blade 檔案,我們會看到如下圖

    錯誤日誌_2

    我可以看到,@lang() 被解析後,實際上呼叫的是 Illuminate\Translation\Translator::getFromJson(),呼叫方法是 app('translator')->getFromJson()

  3. 建立一個測試 Controller 並呼叫剛剛的方法試一下。

    <?php
    
    namespace App\Http\Controllers
    
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Translation\Translator;
    
    class TestController extends Controller
    {
        public function __invoke(Request $request)
        {
            $message = app('translator')->getFromJson("messages.welcome");
    
            return view('welcome', $message);
        }
    }

    再執行一個這個 welcome.blade.php 檔案。

  4. 大功告成!完結撒花~

相關文章