接著前一天的Helper
主題,我們那時談到了trans()
這個helper
,底下應該會常常在使用它,我們有時候會需要有國際化的需求,需要征服宇宙,所以做一個多語系的網站是有必要的。接下來,讓我們來示範一下Laravel這個全能型框架關於多語系能力的展現吧!
網頁要實現所謂的多語系有兩種方法
建立多個網站(土法煉鋼型):例如我需要有英文和中文的網站,就會英文有一個網站,中文又會有另外一個網站。這兩個網站的樣子可能會有很大的不一樣或者很大的一模一樣,好處是:可以就語系別做出更高的客製化
,然後壞處就是:費工,重複造的輪子肯定很多
使用語系檔將檔案內容作出轉換:以上面的例子來說,可能我會有一個中文的語系檔
和另外一個英文的語系檔
,根據網站的語系選擇
呈現以某個語系檔所轉換過來的文字。好處是:重複造的輪子不多,只要學會翻譯文字就好
,壞處就是無法提供給各語系特別的客製化
。
我大概能想到的優點和缺點就是這樣,如果有大大可以補充歡迎告訴我。
接下來我們將示範說明的會是第二類。使用所謂的語系檔
轉換內容。
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-tw
和welcome/en
就會看到我們這些被轉換的文字呢!
當然拉,這個超級陽春的多語系,其實我們可以利用cookie
和session
存放語系值,藉由前面我們說到的middleware
,加上app()->setLocale($locale)
來做我們語系上的設定喔。
以下是參考的文件:
今天得程式碼不多,要看完整程式碼的可以參考這裡:
https://github.com/r567tw/Make-PHP-Great-Again/commit/9957deac8788ee8bd20ccb3a0cd8ce867e352f0e