# 服务 —— 本地化
## 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任务)
- 服务 ―― 任务调度
- 服务 ―― 测试
- 服务 ―― 验证