# 服務 —— 本地化
## 1、簡介
Laravel的本地化特性提供了一個方便的方式從多個語言文件中獲取字符串,從而允許你在應用中輕松支持多種語言。
語言字符串存放在`resources/lang`目錄中,在該目錄中應該包含應用支持的每種語言的子目錄:
~~~
/resources
/lang
/en
messages.php
/es
messages.php
~~~
所有語言文件都返回一個鍵值對數組,例如:
~~~
<?php
return [
'welcome' => 'Welcome to our application'
];
~~~
### 1.1 配置Locale選項
應用默認語言存放在配置文件`config/app.php`中,當然,你可以修改該值來匹配應用需要。你還可以在運行時使用`App`[門面](http://laravelacademy.org/post/97.html)上的`setLocale`方法改變當前語言:
~~~
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
~~~
你還可以配置一個“備用語言”,當當前語言不包含給定語言行時備用語言被返回。和默認語言一樣,備用語言也在配置文件`config/app.php`中配置:
~~~
'fallback_locale' => 'en',
~~~
## 2、基本使用
你可以使用幫助函數`trans`從語言文件中獲取行,該方法接收文件和語言行的鍵作為第一個參數,例如,讓我們在語言文件`resources/lang/messages.php`中獲取語言行`welcome`:
~~~
echo trans('messages.welcome');
~~~
當然如果你使用[Blade模板引擎](http://laravelacademy.org/post/79.html),可以使用{{?}}語法打印語言行:
~~~
{{ trans('messages.welcome') }}
~~~
如果指定的語言行不存在,`trans`函數將返回語言行的鍵,所以,使用上面的例子,如果語言行不存在的話,`trans`函數將返回`messages.welcome`。
**替換語言行中的參數**
如果需要的話,你可以在語言行中定義占位符,所有的占位符都有一個:前綴,例如,你可以用占位符名稱定義一個`welcome`消息:
~~~
'welcome' => 'Welcome, :name',
~~~
要在獲取語言行的時候替換占位符,傳遞一個替換數組作為`trans`函數的第二個參數:
~~~
echo trans('messages.welcome', ['name' => 'Dayle']);
~~~
### 2.1 多元化
多元化是一個復雜的問題,因為不同語言對多元化有不同的規則,通過使用管道字符“|”,你可以區分一個字符串的單數和復數形式:
~~~
'apples' => 'There is one apple|There are many apples',
~~~
然后,你可以使用`trans_choice`函數獲取給定行數的語言行,在本例中,由于行數大于1,將會返回語言行的復數形式:
~~~
echo trans_choice('messages.apples', 10);
~~~
由于Laravel翻譯器由Symfony翻譯組件提供,你可以創建更復雜的多元化規則:
~~~
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
~~~
## 3、覆蓋Vendor包中語言文件
有些包可以處理自己的語言文件。你可以通過將自己的文件放在`resources/lang/vendor/{package}/{locale}`目錄下來覆蓋它們而不是破壞這些包的核心文件來調整這些句子。
所以,舉個例子,如果你需要覆蓋名為`skyrim/hearthfire`的包中的`messages.php`文件里的英文句子,可以創建一個`resources/lang/vendor/hearthfire/en/messages.php`文件。在這個文件中只需要定義你想要覆蓋的句子,你沒有覆蓋的句子仍然從該包原來的語言文件中加載。
- 前言
- 序言
- 序言 ―― 發行版本說明
- 序言 ―― 升級指南
- 序言 ―― 貢獻代碼
- 開始
- 開始 ―― 安裝及配置
- 開始 ―― Laravel Homestead
- 基礎
- 基礎 ―― HTTP路由
- 基礎 ―― HTTP 中間件
- 基礎 ―― HTTP 控制器
- 基礎 ―― HTTP 請求
- 基礎 ―― HTTP 響應
- 基礎 ―― 視圖
- 基礎 ―― Blade模板
- 架構
- 架構 ―― 一次請求的生命周期
- 架構 ―― 應用目錄結構
- 架構 ―― 服務提供者
- 架構 ―― 服務容器
- 架構 ―― 契約
- 架構 ―― 門面
- 數據庫
- 數據庫 ―― 起步
- 數據庫 ―― 查詢構建器
- 數據庫 ―― 遷移
- 數據庫 ―― 填充數據
- Eloquent ORM
- Eloquent ORM ―― 起步
- Eloquent ORM ―― 關聯關系
- Eloquent ORM ―― 集合
- Eloquent ORM ―― 調整器
- Eloquent ORM ―― 序列化
- 服務
- 服務 ―― 用戶認證
- 服務 ―― Artisan 控制臺
- 服務 ―― Laravel Cashier(交易)
- 服務 ―― 緩存
- 服務 ―― 集合
- 服務 ―― Laravel Elixir
- 服務 ―― 加密
- 服務 ―― 錯誤&日志
- 服務 ―― 事件
- 服務 ―― 文件系統/云存儲
- 服務 ―― 哈希
- 服務 ―― 幫助函數
- 服務 ―― 本地化
- 服務 ―― 郵件
- 服務 ―― 包開發
- 服務 ―― 分頁
- 服務 ―― 隊列
- 服務 ―― Redis
- 服務 ―― Session
- 服務 ―― Envoy 任務運行器(SSH任務)
- 服務 ―― 任務調度
- 服務 ―― 測試
- 服務 ―― 驗證