Jimmy's Code

Want to be a better Coder
^

Laravel 多語系網站

2019-10-11

接著前一天的Helper主題,我們那時談到了trans()這個helper,底下應該會常常在使用它,我們有時候會需要有國際化的需求,需要征服宇宙,所以做一個多語系的網站是有必要的。接下來,讓我們來示範一下Laravel這個全能型框架關於多語系能力的展現吧!

網頁要實現所謂的多語系有兩種方法

  1. 建立多個網站(土法煉鋼型):例如我需要有英文和中文的網站,就會英文有一個網站,中文又會有另外一個網站。這兩個網站的樣子可能會有很大的不一樣或者很大的一模一樣,好處是:可以就語系別做出更高的客製化,然後壞處就是:費工,重複造的輪子肯定很多
  2. 使用語系檔將檔案內容作出轉換:以上面的例子來說,可能我會有一個中文的語系檔和另外一個英文的語系檔,根據網站的語系選擇呈現以某個語系檔所轉換過來的文字。好處是:重複造的輪子不多,只要學會翻譯文字就好,壞處就是無法提供給各語系特別的客製化

我大概能想到的優點和缺點就是這樣,如果有大大可以補充歡迎告訴我。
接下來我們將示範說明的會是第二類。使用所謂的語系檔轉換內容。

Laravel 語系檔存放在resources/lang資料夾的檔案裡。在此資料夾內,一個蘿蔔一個坑,一個網站支援的語系對應到一個語系子目錄。像是這樣的結構:

/resources
    /lang
        /en
            messages.php
        /zh-Hans-TW
            messages.php

語系檔裡面放的到底是什麼,其實就是大概這樣而已拉

<?php

return [
    'welcome' => 'Welcome to our application'
];

一般來說,網站的預設語系是在config/app.php這個檔案裡面有一個locale的屬性

   'locale' => 'en',

然而如果我們想要切換語系的話該怎麼辦?其實很簡單,使用App::setLocale($locale);這個方法就可以了,以下讓我們做個簡單的火力展示。

首先是增加個Route規則

Route::get('welcome/{locale}', function ($locale) {
    app()->setLocale($locale);
    return view('welcome');
});

然後分別建立兩個檔案,一個是resources/lang/zh-TW/message.php以及resources/lang/en/message.php,分別在裡面寫這些:

//zh-TW/message.php
<?php

return [
    'welcome' => '歡迎來到我們的應用程式'
];

//en/message.php
<?php

return [
    'welcome' => 'Welcome to our application'
];

之後到welcome.blade.php修改一下,把原本的Laravel那一行替換成

{{ trans('message.welcome') }}

之後到welcome/zh-twwelcome/en就會看到我們這些被轉換的文字呢!

當然拉,這個超級陽春的多語系,其實我們可以利用cookiesession存放語系值,藉由前面我們說到的middleware,加上app()->setLocale($locale)來做我們語系上的設定喔。

以下是參考的文件:

今天得程式碼不多,要看完整程式碼的可以參考這裡:
https://github.com/r567tw/Make-PHP-Great-Again/commit/9957deac8788ee8bd20ccb3a0cd8ce867e352f0e

2018年:python 起手式:談物件導向

r567tw

住在台北的一位台東developer,最喜歡"忠心"這個形容詞。這一生希望完成三件事:寫一本書、站在TED演講並且想要成為福音及各種學科的橋梁,希望自己能從基督教的思考框架出發與各學科傾聽、回應、對話