W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Laravel的本地化特性提供了一個方便的方式從多個語言文件中獲取字符串,從而允許你在應(yīng)用中輕松支持多種語言。
語言字符串存放在resources/lang
目錄中,在該目錄中應(yīng)該包含應(yīng)用支持的每種語言的子目錄:
/resources
/lang
/en
messages.php
/es
messages.php
所有語言文件都返回一個鍵值對數(shù)組,例如:
<?php
return [
'welcome' => 'Welcome to our application'
];
應(yīng)用默認(rèn)語言存放在配置文件config/app.php
中,當(dāng)然,你可以修改該值來匹配應(yīng)用需要。你還可以在運(yùn)行時使用App
門面上的setLocale
方法改變當(dāng)前語言:
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
你還可以配置一個“備用語言”,當(dāng)當(dāng)前語言不包含給定語言行時備用語言被返回。和默認(rèn)語言一樣,備用語言也在配置文件config/app.php
中配置:
'fallback_locale' => 'en',
你可以使用幫助函數(shù)trans
從語言文件中獲取行,該方法接收文件和語言行的鍵作為第一個參數(shù),例如,讓我們在語言文件resources/lang/messages.php
中獲取語言行welcome
:
echo trans('messages.welcome');
當(dāng)然如果你使用Blade模板引擎,可以使用{{?}}語法打印語言行:
{{ trans('messages.welcome') }}
如果指定的語言行不存在,trans
函數(shù)將返回語言行的鍵,所以,使用上面的例子,如果語言行不存在的話,trans
函數(shù)將返回messages.welcome
。
替換語言行中的參數(shù)
如果需要的話,你可以在語言行中定義占位符,所有的占位符都有一個:前綴,例如,你可以用占位符名稱定義一個welcome
消息:
'welcome' => 'Welcome, :name',
要在獲取語言行的時候替換占位符,傳遞一個替換數(shù)組作為trans
函數(shù)的第二個參數(shù):
echo trans('messages.welcome', ['name' => 'Dayle']);
多元化是一個復(fù)雜的問題,因為不同語言對多元化有不同的規(guī)則,通過使用管道字符“|”,你可以區(qū)分一個字符串的單數(shù)和復(fù)數(shù)形式:
'apples' => 'There is one apple|There are many apples',
然后,你可以使用trans_choice
函數(shù)獲取給定行數(shù)的語言行,在本例中,由于行數(shù)大于1,將會返回語言行的復(fù)數(shù)形式:
echo trans_choice('messages.apples', 10);
由于Laravel翻譯器由Symfony翻譯組件提供,你可以創(chuàng)建更復(fù)雜的多元化規(guī)則:
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
有些包可以處理自己的語言文件。你可以通過將自己的文件放在resources/lang/vendor/{package}/{locale}
目錄下來覆蓋它們而不是破壞這些包的核心文件來調(diào)整這些句子。
所以,舉個例子,如果你需要覆蓋名為skyrim/hearthfire
的包中的messages.php
文件里的英文句子,可以創(chuàng)建一個resources/lang/vendor/hearthfire/en/messages.php
文件。在這個文件中只需要定義你想要覆蓋的句子,你沒有覆蓋的句子仍然從該包原來的語言文件中加載。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: