@extends("base",['title'=>'哎呀,找不著頁面'])
@section('title', '哎呀,找不著頁面')
@section('body')
<h1>{{__('404 error message')}}</h1>
<b>哎呀,找不著頁面</b>
<p>
<ul>
<li><a href="/">點擊我,回到首頁</a></li>
<li><a href="{{route('blog/post.index')}}">我的網誌</a></li>
</ul>
</p>
@endsection
在昨天簡單建立的錯誤頁面中,又再一次偷渡了一個東西。對,就是那個有點怪怪的{{__('404 error message')}}
,實際上這等價於@lang('404 error message')
。透過lang()
函式的方式,也可以在控制器做變換。lang()
會根據給定的字串,以及設定(app/config.php
)中的locale
和faker_locale
轉換為對應的語言。預設會轉換為locale
所設定的,而備用語言可由faker_locale
設定。當兩者都不存在時,會直接輸出字串。還記得我們把app/config.php
部份內容改成這樣嗎?
'locale' => 'zh-TW',
'fallback_locale' => 'en',
不過,不管是locale
還是faker_locale
,都還找不著{{__('404 error message')}}
要轉換成的文字,所以現在會直接生成404 error message
。
現在,建立resources/lang/zh-TW.json
,並加入以下內容。如此就有了zh-TW
的翻譯了:
{
"404 error message":"404錯誤 - 找不著頁面"
}
不過如果每個人都是使用同樣的語言,多語言支援就沒有意義了。所以可以透過App::setLocale('zh-TW');
來改變語言。譬如可以這麼做:
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
});
與許多大網站一樣,在網路路徑中加入語系。或是像下面這樣,提供一個Endpoint來設定語言:
Route::get('/lang/set/{lang}', function ($locale) {
App::setLocale($locale);
});
最後,還有App::getLocale();
、App::isLocale('en')
等等方法。就函式名字上應該不難懂,但還是可以參考文件找範例。
除了使用JSON以外,還可以使用 PHP 去做設定,這麼做的好處是可以在語言檔使用PHP的函式。現在建立resources/lang/zh-TW/error.php
<?php
return [
"404"=>[
"error message" => "404錯誤 - 找不著頁面",
]
];
然後來把{{__('404 error message')}}
改成{{__('error.404.error message')}}
。此外,透過這種方式,還可以巢狀的設定文字。
最後,分享一些公開的翻譯語言檔。以下兩個資源同樣採用 MIT 授權,可商用。有豐富常用的字詞翻譯:
laravel-nova也是Laravel提供的一個後台管理框架。