Laravel中的多語言

Laravel自学开发發表於2024-05-23

在 Laravel 中實現一個雙語(中英文)部落格專案,你可以透過以下幾個步驟來實現語言切換功能:

  1. 本地化檔案:首先,你需要為每種語言建立本地化檔案。在 Laravel 中,預設的語言檔案位於 resources/lang 目錄。例如,你可以建立 enzh 目錄來存放英文和中文的翻譯檔案。

  2. 翻譯字串:在這些目錄中,你可以建立各種語言檔案來儲存翻譯字串。例如,resources/lang/en/messages.phpresources/lang/zh/messages.php 可以包含部落格所需的所有翻譯。

  3. 配置應用程式:在 config/app.php 檔案中,設定 locale 為預設語言,fallback_locale 為備用語言(如果沒有找到預設語言的翻譯)。

  4. 語言切換:在你的應用程式中,你可以使用 App::setLocale($lang) 方法動態設定當前語言。通常,你會在中介軟體或控制器的建構函式中根據使用者的選擇來設定語言。

  5. 建立中介軟體:建立一箇中介軟體來檢查每個請求中的語言引數或從使用者的偏好設定中獲取語言,並設定應用程式的本地化。

  6. 路由和控制器:在路由和控制器中,使用 __() 函式或 @lang Blade 指令來輸出翻譯後的字串。

  7. 檢視:在檢視中,使用 {{ __('messages.welcome') }} 語法來顯示翻譯文字。

  8. 語言切換器:在檢視中,建立一個語言切換器,允許使用者選擇語言。這通常是一個下拉選單或連結列表,當使用者選擇一種語言時,它會傳送一個請求到伺服器以更新使用者的語言偏好。

  9. 儲存使用者偏好:你可以選擇將使用者的語言偏好儲存在資料庫、會話或 Cookie 中,以便在使用者的後續訪問中記住其選擇。

下面是一個簡單的中介軟體示例,它根據使用者的選擇設定應用程式的語言:

// app/Http/Middleware/SetLocale.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class SetLocale
{
    public function handle($request, Closure $next)
    {
        if (Session::has('locale')) {
            $locale = Session::get('locale');
            App::setLocale($locale);
        }

        return $next($request);
    }
}

然後,在 app/Http/Kernel.php 檔案的 $middlewareGroups 陣列中註冊這個中介軟體:

protected $middlewareGroups = [
    'web' => [
        // ...
        \App\Http\Middleware\SetLocale::class,
    ],
    // ...
];

現在,你可以在你的檢視中新增一個語言切換器,例如:

<a href="{{ route('language.switch', 'en') }}">English</a>
<a href="{{ route('language.switch', 'zh') }}">中文</a>

web.php 路由檔案中新增路由來處理語言切換請求:

Route::get('language/{lang}', function ($lang) {
    Session::put('locale', $lang);
    return back();
})->name('language.switch');

確保在每次請求時都呼叫中介軟體,這樣就可以根據使用者的語言偏好動態設定語言環境。透過這種方式,你可以構建一個支援中英文切換的雙語部落格專案。

相關文章