在地化 (多國語言)

概念

所謂的在地化,就是讓網站中的文字以當地的語言來表示。在 Laravel 中製作多國語言的方法,是在 app/lang 目錄下,建立以各國的名稱命名的目錄,雖然這些目錄的命名並沒有特別規定,但是你可以使用 ISO 639-1[1] 的標準來命名,例如:

app/lang/en
app/lang/tw
app/lang/jp
app/lang/fr

各個語言目錄中會使用 php 檔來儲存相對應的語言文字,這個檔案的只做一件事,回傳陣列型態的語言文字。

當你的多國語言資料都設定好後,Laravel 提供 Lang 類別在程式中取用指定的語言的字串。

建立語系檔

我們先在預設的 app/lang/en 中新增一個 default.php:

<?php

return array(
    'title' => 'My Blog'
);

回傳一個陣列,該陣列只有一筆資料。接著建立第 2 個語言的目錄 app/lang/tw,直接把 en 目錄中的 default.php 複製到 tw 目錄中,編輯:

<?php

return array(
    'title' => '我的部落格'
);

現在我們有兩種語言的文字了,兩個檔案裡的陣列 key 必須是一樣的,value 就換成該語系的內容。

預設語系

每個 Laravel 網站都有一個預設語系,在 app/config/app.php 中可以修改預設的語系:

'locale' => 'en',
'fallback_locale' => 'en',

將 'en' 改成你要的語系,例如 'tw',如此網站就會載入 tw 目錄中的語言文字。

指定語系

你也可以在每個 Controller 中指定目前要顯示哪個語系的內容。假設要指定以 tw 來顯示:

App::setLocale('tw');

這行必須寫在最前面,這樣之後要取語言文字時才知道要取哪一個,所以 HomeController@index 可以改成:

public function index()
{
    App::setLocale('tw');
    $title = Lang::get('default.title');

    $posts = Post::all();

    return View::make('site.home')
            ->with('title', $title)
            ->with('posts', $posts);
}

使用 Lang::get('檔案名稱.key'); 就能取得某一語言檔案內某 key 的值。所以,記得語言檔案在任何語言目錄中都必須是同樣的名稱,key 也必須是同一名稱。

如果要在 View 裡面使用語言文字:

@lang('default.title')

它會依預設語系或在 Controller 中指定的語系來取得文字。

Last updated