本地化

介绍

Laravel 的 Lang facade 提供方便的方法来取得多种语言的字串,让你简单地在应用进程里支持多种语言。

语言文件

语言字串保存在 resources/lang 文件夹的文档里。在这个文件夹里应该要给每一个应用进程支持的语言一个子文件夹。

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

语言文件例子

语言文件简单地返回键跟字串的数组。例如:

<?php

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

在执行时变换默认语言

应用进程的默认语言被保存在 config/app.php 配置文件。你可以在任何时候用 App::setLocale 方法变换现行语言:

App::setLocale('es');

配置备用语言

你也可以配置「备用语言」,它将会在当现行语言没有给定的语句时被使用。就像默认语言,备用语言也可以在 config/app.php 配置文件配置:

'fallback_locale' => 'en',

基本用法

从语言文件取得句子

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

传递给 get 方法的字串的第一个部分是语言文件的名称,第二个部分是应该被取得的句子的名称。

注意: 如果语句不存在, get 方法将会返回键的名称。

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

echo trans('messages.welcome');

在句子中做替代

你也可以在语句中定义占位符:

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

接着,传递替代用的第二个参数给 Lang::get 方法:

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

判断语言文件是否有指定的句子

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

复数

复数是个复杂的问题,不同语言对于复数有很多种复杂的规则。你可以简单地在你的语言文件里管理它。你可以用「管道」字符区分字串的单数和复数形态:

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

接着你可以用 Lang::choice 方法取得语句:

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

你也可以提供一个地区参数来指定语言。举个例,如果你想要使用俄语 (ru):

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

因为 Laravel 的翻译器由 Symfony 翻译组件提供,你也可以很容易地建立更明确的复数规则:

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

验证

要验证本地化的错误和消息,可以看一下验证的文档.

覆写扩展包的语言文件

许多扩展包附带它们自有的语句。你可以通过放置文档在 resources/lang/packages/{locale}/{package} 文件夹来覆写它们,而不是改变扩展包的核心文档来调整这些句子。所以,举个例子,如果你需要覆写 skyrim/hearthfire 扩展包在 messages.php 的英文语句,你可以放置语言文件在: resources/lang/packages/en/hearthfire/messages.php。你可以只定义你想要覆写的语句在这个文档里,任何你没有覆写的语句将会仍从扩展包的语言文件加载。