鍍金池/ 教程/ PHP/ 本地化
門面
Laravel Homestead
安裝及配置
測(cè)試
HTTP 中間件
加密
升級(jí)指南
幫助函數(shù)
應(yīng)用目錄結(jié)構(gòu)
集合
新手入門指南-簡(jiǎn)單任務(wù)管理系統(tǒng)
任務(wù)調(diào)度
查詢構(gòu)建器
視圖
驗(yàn)證
Laravel Cashier(訂購(gòu)&支付&發(fā)票)
本地化
隊(duì)列
調(diào)整器
分頁(yè)
文件系統(tǒng)/云存儲(chǔ)
貢獻(xiàn)代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請(qǐng)求
Laravel Elixir
發(fā)行版本說明
Envoy 任務(wù)運(yùn)行器(SSH任務(wù))
序列化
Session
起步
帶用戶功能的任務(wù)管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務(wù)提供者
Blade 模板引擎
包開發(fā)
用戶認(rèn)證
Artisan 控制臺(tái)
HTTP 響應(yīng)
集合
服務(wù)容器
關(guān)聯(lián)關(guān)系
一次請(qǐng)求的生命周期
契約
Redis
錯(cuò)誤&日志

本地化

1、簡(jiǎn)介

Laravel 的本地化特性提供了一個(gè)方便的方式從多個(gè)語(yǔ)言文件中獲取字符串,從而允許你在應(yīng)用中輕松支持多種語(yǔ)言。

語(yǔ)言字符串存放在 resources/lang 目錄中,在該目錄中應(yīng)該包含應(yīng)用支持的每種語(yǔ)言的子目錄:

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

所有語(yǔ)言文件都返回一個(gè)鍵值對(duì)數(shù)組,例如:

<?php

return [
    'welcome' => 'Welcome to our application'
];

1.1 配置 Locale 選項(xiàng)

應(yīng)用默認(rèn)語(yǔ)言存放在配置文件 config/app.php 中,當(dāng)然,你可以修改該值來匹配應(yīng)用需要。你還可以在運(yùn)行時(shí)使用 App 門面上的 setLocale 方法改變當(dāng)前語(yǔ)言:

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

你還可以配置一個(gè)“備用語(yǔ)言”,當(dāng)當(dāng)前語(yǔ)言不包含給定語(yǔ)言行時(shí)備用語(yǔ)言被返回。和默認(rèn)語(yǔ)言一樣,備用語(yǔ)言也在配置文件 config/app.php 中配置:

'fallback_locale' => 'en',

2、基本使用

你可以使用幫助函數(shù) trans 從語(yǔ)言文件中獲取行,該方法接收文件和語(yǔ)言行的鍵作為第一個(gè)參數(shù),例如,讓我們?cè)谡Z(yǔ)言文件 resources/lang/messages.php 中獲取語(yǔ)言行 welcome

echo trans('messages.welcome');

當(dāng)然如果你使用 Blade 模板引擎,可以使用{{ }}語(yǔ)法打印語(yǔ)言行:

{{ trans('messages.welcome') }}

如果指定的語(yǔ)言行不存在,trans 函數(shù)將返回語(yǔ)言行的鍵,所以,使用上面的例子,如果語(yǔ)言行不存在的話,trans 函數(shù)將返回 messages.welcome。

替換語(yǔ)言行中的參數(shù) 如果需要的話,你可以在語(yǔ)言行中定義占位符,所有的占位符都有一個(gè):前綴,例如,你可以用占位符名稱定義一個(gè) welcome 消息:

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

要在獲取語(yǔ)言行的時(shí)候替換占位符,傳遞一個(gè)替換數(shù)組作為 trans 函數(shù)的第二個(gè)參數(shù):

echo trans('messages.welcome', ['name' => 'Dayle']);

2.1 多元化

多元化是一個(gè)復(fù)雜的問題,因?yàn)椴煌Z(yǔ)言對(duì)多元化有不同的規(guī)則,通過使用管道字符“|”,你可以區(qū)分一個(gè)字符串的單數(shù)和復(fù)數(shù)形式:

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

然后,你可以使用 trans_choice 函數(shù)獲取給定行數(shù)的語(yǔ)言行,在本例中,由于行數(shù)大于 1,將會(huì)返回語(yǔ)言行的復(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 包中語(yǔ)言文件

有些包可以處理自己的語(yǔ)言文件。你可以通過將自己的文件放在 resources/lang/vendor/{package}/{locale}目錄下來覆蓋它們而不是破壞這些包的核心文件來調(diào)整這些句子。 所以,舉個(gè)例子,如果你需要覆蓋名為 skyrim/hearthfire 的包中的 messages.php 文件里的英文句子,可以創(chuàng)建一個(gè) resources/lang/vendor/hearthfire/en/messages.php 文件。在這個(gè)文件中只需要定義你想要覆蓋的句子,你沒有覆蓋的句子仍然從該包原來的語(yǔ)言文件中加載。

上一篇:事件下一篇:調(diào)整器