本地化

2018-12-17 10:54 更新

介紹

Laravel 的 Lang facade 提供方便的方法來(lái)取得多種語(yǔ)言的字串,讓你簡(jiǎn)單地在應(yīng)用進(jìn)程里支持多種語(yǔ)言。

           

語(yǔ)言文件

語(yǔ)言字串保存在 resources/lang 文件夾的文檔里。在這個(gè)文件夾里應(yīng)該要給每一個(gè)應(yīng)用進(jìn)程支持的語(yǔ)言一個(gè)子文件夾。

/resources    /lang        /en
            messages.php        /es
            messages.php

           

語(yǔ)言文件例子

語(yǔ)言文件簡(jiǎn)單地返回鍵跟字串的數(shù)組。例如:

<?phpreturn [
    'welcome' => 'Welcome to our application'];

           

在執(zhí)行時(shí)變換默認(rèn)語(yǔ)言

應(yīng)用進(jìn)程的默認(rèn)語(yǔ)言被保存在 config/app.php 配置文件。你可以在任何時(shí)候用 App::setLocale 方法變換現(xiàn)行語(yǔ)言:

App::setLocale('es');

           

配置備用語(yǔ)言

你也可以配置「?jìng)溆谜Z(yǔ)言」,它將會(huì)在當(dāng)現(xiàn)行語(yǔ)言沒(méi)有給定的語(yǔ)句時(shí)被使用。就像默認(rèn)語(yǔ)言,備用語(yǔ)言也可以在 config/app.php 配置文件配置:

'fallback_locale' => 'en',

           

           

基本用法

從語(yǔ)言文件取得句子

echo Lang::get('messages.welcome');

           

傳遞給 get 方法的字串的第一個(gè)部分是語(yǔ)言文件的名稱(chēng),第二個(gè)部分是應(yīng)該被取得的句子的名稱(chēng)。

注意: 如果語(yǔ)句不存在, get 方法將會(huì)返回鍵的名稱(chēng)。

你也可以使用 trans 輔助方法,它是 Lang::get 方法的別名。

echo trans('messages.welcome');

           

在句子中做替代

你也可以在語(yǔ)句中定義占位符:

'welcome' => 'Welcome, :name',

           

接著,傳遞替代用的第二個(gè)參數(shù)給 Lang::get 方法:

echo Lang::get('messages.welcome', ['name' => 'Dayle']);

           

判斷語(yǔ)言文件是否有指定的句子

if (Lang::has('messages.welcome')){
    //}

           

           

復(fù)數(shù)

復(fù)數(shù)是個(gè)復(fù)雜的問(wèn)題,不同語(yǔ)言對(duì)于復(fù)數(shù)有很多種復(fù)雜的規(guī)則。你可以簡(jiǎn)單地在你的語(yǔ)言文件里管理它。你可以用「管道」字符區(qū)分字串的單數(shù)和復(fù)數(shù)形態(tài):

'apples' => 'There is one apple|There are many apples',

           

接著你可以用 Lang::choice 方法取得語(yǔ)句:

echo Lang::choice('messages.apples', 10);

           

你也可以提供一個(gè)地區(qū)參數(shù)來(lái)指定語(yǔ)言。舉個(gè)例,如果你想要使用俄語(yǔ) (ru):

echo Lang::choice('товар|товара|товаров', $count, [], 'ru');

           

因?yàn)?Laravel 的翻譯器由 Symfony 翻譯組件提供,你也可以很容易地建立更明確的復(fù)數(shù)規(guī)則:

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

           

           

驗(yàn)證

要驗(yàn)證本地化的錯(cuò)誤和消息,可以看一下驗(yàn)證的文檔.

           

覆寫(xiě)擴(kuò)展包的語(yǔ)言文件

許多擴(kuò)展包附帶它們自有的語(yǔ)句。你可以通過(guò)放置文檔在 resources/lang/packages/{locale}/{package} 文件夾來(lái)覆寫(xiě)它們,而不是改變擴(kuò)展包的核心文檔來(lái)調(diào)整這些句子。所以,舉個(gè)例子,如果你需要覆寫(xiě) skyrim/hearthfire 擴(kuò)展包在 messages.php 的英文語(yǔ)句,你可以放置語(yǔ)言文件在: resources/lang/packages/en/hearthfire/messages.php。你可以只定義你想要覆寫(xiě)的語(yǔ)句在這個(gè)文檔里,任何你沒(méi)有覆寫(xiě)的語(yǔ)句將會(huì)仍從擴(kuò)展包的語(yǔ)言文件加載。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)