iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
1
Modern Web

Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!系列 第 27

[Day 27] 多國語系的處理!聊 Laravel Localization

  • 分享至 

  • xImage
  •  

網站的基礎功能差不多了,開始可以推廣到世界各地去了(?

不過,每個國家使用的語言並不見得一樣。一般來說,要服務不同國家的用戶的話,一定要做到多國語系的。

今天我們來聊聊 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 秒後再嘗試 的字樣囉!


小小總結一下今天學到的東西

今天我們學到了怎麼設定網站的語系,怎麼設定不同語系的文字,還學到怎麼在文字內加入資料。

希望今天讀者覺得有學到東西!我們明天見!


上一篇
[Day 26] 定期的事件處理,聊 Laravel Schedule
下一篇
[Day 28] Laravel 協助開發的輔助工具!聊 Laravel Helpers
系列文
Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言