服務(wù) ―― 本地化

2018-02-24 15:38 更新

服務(wù) —— 本地化

1、簡介

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'
];

1.1 配置Locale選項

應(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',

2、基本使用

你可以使用幫助函數(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']);

2.1 多元化

多元化是一個復(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',

3、覆蓋Vendor包中語言文件

有些包可以處理自己的語言文件。你可以通過將自己的文件放在resources/lang/vendor/{package}/{locale}目錄下來覆蓋它們而不是破壞這些包的核心文件來調(diào)整這些句子。

所以,舉個例子,如果你需要覆蓋名為skyrim/hearthfire的包中的messages.php文件里的英文句子,可以創(chuàng)建一個resources/lang/vendor/hearthfire/en/messages.php文件。在這個文件中只需要定義你想要覆蓋的句子,你沒有覆蓋的句子仍然從該包原來的語言文件中加載。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號