---
# System prepended metadata

title: Localized 本地化

---

# Localized 本地化


Laravel的本地化功能提供一個便利的方式來取得各種語系的字串，讓你能夠輕易的讓應用支持多語系。語系字串被存在 resources/lang資料夾內的檔案裡頭。在這個資料夾內應該有各種所要支持語系的子資料夾：

//資料夾結構
/resources
    /lang
        /en
            messages.php
        /es
            messages.php
所有的語言檔案都回傳對應key的字串，例如：

<?php

return [
    'welcome' => 'Welcome to our application'
];
設定語系
可透過app.php檔案來設定語系

//config/app.php

設定預設語系
'locale' => 'zh_TW',   

設定替代語系，作為當預設語系本地化內容不存在時的替代語系
'fallback_locale' => 'en',
如需動態設定，可透過以下程式來加以設定

App::setLocale('zh_TW');

取得與確認語系
取得預設語系
App::getLocale();

確認預設語系是否為某個語系
if(App::isLocale('zh_TW')){
    //確實預設語系為zh_TW
}
定義本地化內容
短字串
副檔名為.php，存放在resources/lang/語系資料夾(如zh_TW)，每個語系可有多個檔案

//resources/lang/zh_TW/generic.php

return [
    "welcome" => "歡迎使用我們的網頁服務";
];
翻譯字串
檔名為 語系.json(如zh_TW.json)，存放在resources/lang，每個語系只有一個檔案

//resources/lang/zh_TW.json

{
    "welcome to our webiste" : "歡迎使用我們的網頁服務"
}
取用本地化內容
取用短字串本地化內容，需要在.符號前說明檔案名稱，取用翻譯字串則不需要

如果找不到本地化內容，將會顯示key值做為內容

透過幫助函式__()
//resources/views/auth/login.blade.php

取用短字串本地化內容
{{ __('generic.username') }}

取用翻譯字串本地化內容
{{ __('Login From Facebook') }}
透過Blade標籤@lang
//resources/views/auth/login.blade.php

取用短字串本地化內容
@lang('generic.username')

取用翻譯字串本地化內容
@lang('Login From Facebook')
帶參數的本地化內容
可建立包含佔位參數的本地化內容，於取用本地化內容時傳入。佔位參數與傳入時的Key只需字母相同，大小寫視為相同

//resources/lang/zh_TW/generic.php

return [
    'remember' => '記得:name'
];

//resources/views/auth/login.blade.php

{{ __('generic.remember',['name' => '我']) }}
佔位參數如取名全大寫，則顯示時的內容將為全大寫，否則一般顯示為首字母大寫。

Pluralization 複數型
複數型是一個比較複雜的問題，因為不同的語言有眾多複雜的複數型規則。透過使用 | 字元，你能夠區別單數和複數的字串：

'apples' => 'There is one apple|There are many apples',
你甚至能夠創造更多更複雜的複數型規則，以支應多種數字範圍的翻譯字串：

'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',
在定義好擁有多個複數選項的翻譯字串，你能夠使用 trans_choice() 來取得所給定count(數量)的翻譯字串。在這個例子中，因為該count(數量)比1大，該翻譯字串的指定複數型會被回傳：

echo trans_choice('messages.apples', 10);
你同樣能夠為複數型翻譯字串定義佔位子字串。這些佔位子字串將會被所傳入的陣列作為 trans_choice() 的第三個參數所取代：

'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago',

echo trans_choice('time.minutes_ago', 5, ['value' => 5]);
假如你也想要將 trans_choice() 所傳入的count數量顯示在翻譯字串內，你可使用 :count 這個預定佔位子字串：

'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',
發表於  HackMD
 123
讚賞 收藏 訂閱