本地化
介绍
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 方法的字符串的第一个部分是语言文件的名称,第二个部分是应检索的行的名称。
NOTE
如果语言行不存在,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。在此文件中,您只需定义要覆盖的语言行。任何未覆盖的语言行仍将从包的语言文件中加载。