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