--- tags: laravel --- # Localized 本地化 ![](https://i.imgur.com/jEKrzxi.png) 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',