使用 Blade 適合,國際化很容易使用。
首先App::setLocale('zh')
,
再使用@lang('message.hello')
就很容易讓訊息國際化了。
可是在文件中,卻沒有找到後臺可以使用的方法。
而我又在做的是 API 伺服器。又需要這些功能。
1. 發現問題,尋找思路
@lang()
也是一個方法,只不過它是 Blade 的語法,最終會被翻譯成 php 的語法。
那就讓我們來看看它翻譯後是什麼樣子。到底是哪個類呼叫了哪個方法。
-
隨便找一個 blade 檔案,在隨便一個地方寫上
@lang()
,這裡一定要為空,不傳任何引數,讓它報錯,這也我們才能看到錯誤日誌,快速便捷定位它呼叫的是哪個類中的哪個方法。 -
執行這個 blade 檔案,我們會看到如下圖
我可以看到,
@lang()
被解析後,實際上呼叫的是Illuminate\Translation\Translator::getFromJson()
,呼叫方法是app('translator')->getFromJson()
。 -
建立一個測試
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 檔案。
-
大功告成!完結撒花~