本地化
介绍
Laravel 的 Lang
类提供了一种方便的方式来检索各种语言的字符串,使您能够轻松支持应用程序中的多种语言。
语言文件
语言字符串存储在 app/lang
目录中的文件中。在此目录中,应为应用程序支持的每种语言创建一个子目录。
/app
/lang
/en
messages.php
/es
messages.php
示例语言文件
语言文件简单地返回一个键值字符串的数组。例如:
<?php
return array(
'welcome' => '欢迎来到我们的应用程序'
);
在运行时更改默认语言
应用程序的默认语言存储在 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' => '欢迎,:name',
然后,将替换的第二个参数传递给 Lang::get
方法:
echo Lang::get('messages.welcome', array('name' => 'Dayle'));
确定语言文件是否包含某一行
if (Lang::has('messages.welcome'))
{
//
}
复数化
复数化是一个复杂的问题,因为不同语言有各种复杂的复数化规则。您可以在语言文件中轻松管理这一点。通过使用“管道”字符,您可以分隔字符串的单数和复数形式:
'apples' => '有一个苹果|有很多苹果',
然后,您可以使用 Lang::choice
方法来检索该行:
echo Lang::choice('messages.apples', 10);
您还可以提供一个区域设置参数来指定语言。例如,如果您想使用俄语(ru):
echo Lang::choice('товар|товара|товаров', $count, array(), 'ru');
由于 Laravel 翻译器由 Symfony Translation 组件提供支持,您还可以更轻松地创建更明确的复数化规则:
'apples' => '{0} 没有|[1,19] 有一些|[20,Inf] 有很多',
验证
有关验证错误和消息的本地化,请查看 验证文档。
覆盖包语言文件
许多包附带自己的语言行。您可以通过将文件放置在 app/lang/packages/{locale}/{package}
目录中来覆盖它们,而不是修改包的核心文件。例如,如果您需要覆盖 skyrim/hearthfire
包的 messages.php
中的英语语言行,您可以在以下位置放置语言文件:app/lang/packages/en/hearthfire/messages.php
。在此文件中,您只需定义您希望覆盖的语言行。您不覆盖的任何语言行仍将从包的语言文件中加载。