網站的基礎功能差不多了,開始可以推廣到世界各地去了(?
不過,每個國家使用的語言並不見得一樣。一般來說,要服務不同國家的用戶的話,一定要做到多國語系的。
今天我們來聊聊 Laravel 怎麼做到多國語系!
設置多國語系之前,首先我們要設置專案的語系。
在 config/app.php
裡面,找到
'locale' => 'en',
這一段,改成網站預設的語系就可以了。
我們目前改成 'locale' => 'zh_tw',
,來繼續後面的製作。
如果部署的網站需要切換語系的話,只要在這裡面改成希望的語系,就可以囉。
設置好了之後,針對不同語系,我們自然要試著產生不同的對應文字。
我們打開 resources/lang
,可以看到裡面已經有一個 en
的資料夾,裡面已經裝著幾個 Laravel 預設的語系檔。
我們建立 resources/lang/zh_tw
資料夾,然後在裡面加上 auth.php
,改寫如下
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => '登入資料不符合',
'throttle' => '嘗試登入太多次,請 :seconds 秒後再嘗試',
];
然後,我們使用 trans()
這個函式,用測試路徑測試一下剛剛的結果
Route::get('/test', function(){
return trans('auth.failed');
});
成功的話,就會看到 登入資料不符合
這串文字囉!
如果希望切換成原本的英文語系,我們可以利用 Illuminate\Support\Facades\App::setLocale()
這個函式來切換語系
我們把程式改寫成
use Illuminate\Support\Facades\App;
Route::get('/test', function(){
App::setLocale('en');
return trans('auth.failed');
});
再重新看一下 http://127.0.0.1/test ,看到的文字應該會變成 These credentials do not match our records.
,不再是預設的 登入資料不符合
這串文字囉!
__()
除了前面說的 trans()
這個函式,另一個可以用的函式是 __()
,這兩個函式做的事情一樣,都是根據語系檔找到翻譯的內容
Route::get('/test', function(){
return __('auth.failed');
});
一樣可以看到 登入資料不符合
。
純說明文字用翻譯當然很簡單,不過如果說明文字還需要加上一些資料,比方說 嘗試登入次數太多次
'throttle' => '嘗試登入太多次,請 :seconds 秒後再嘗試',
裡面的 :seconds
這個部分,我們可以在 trans()
轉換時,透過陣列的方式傳入。我們將測試路徑改寫看看
Route::get('/test', function(){
return trans('auth.throttle', ['seconds' => 5]);
});
連接 http://127.0.0.1/test 就會看到 嘗試登入太多次,請 5 秒後再嘗試
的字樣囉!
小小總結一下今天學到的東西
今天我們學到了怎麼設定網站的語系,怎麼設定不同語系的文字,還學到怎麼在文字內加入資料。
希望今天讀者覺得有學到東西!我們明天見!