本地化

介绍

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

语言文件

语言字串储存在 app/lang 文件夹的文件里。 在这个文件夹里应该要有子文件夹给每一个应用程序支持的语言。

/app
    /lang
        /en
            messages.php
        /es
            messages.php

语言文件例子

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

<?php

return array(
    'welcome' => 'Welcome to our application'
);

在执行时变换默认语言

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

App::setLocale('es');

设定备用语言

您也可以设定 "备用语言",它将会在当现行语言没有给定的语句时被使用。 就像默认语言,备用语言也可以在 app/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', array('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, array(), 'ru');

因为 Laravel 的翻译器继承了 Symfony 翻译组件,您也可以很容易地建立更明确的复数规则:

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

验证

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

重写扩展包的语言文件

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