首页 » Laravel 5.3 中文文档 » 正文

「Laravel 5.3 中文文档」视图 & 模板 – 本地化

简介

Laravel 的本地化功能提供了一种方便的方式来获取各种语言中的字符串,允许你的应用轻松支持多种语言。语言字符串存放在 resources/lang 目录下的文件中。这个目录下需要有支持的每种语言的子目录:

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

所有的语言文件都返回一个有键值的数组,例如:

<?php

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

配置本地化

应用默认的语言存放在 config/app.php 配置文件中。当然,你可以更改这个值来适应你应用的需要。你还可以通过 App facade 的 setLocale 方法在程序运行时更改生效的语言:

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

你还可以配置一个“备用语言”,当生效语言不包含在给定的语言行中时它将会被使用:

'fallback_locale' => 'en',

确定当前本地化

你可以使用 App facade 的 getLocale 和 isLocale 方法查明当前本地化或检查本地化是否是给定的值:

$locale = App::getLocale();

if (App::isLocale('en')) {
    //
}

获取语言行

你可以使用 trans 辅助方法从语言文件获取语言行。trans 方法接收文件和语言行键值作为它的第一个参数。例如,让我们获取 resources/lang/messages.php 语言文件的 welcome 语言行:

echo trans('messages.welcome');

当然,如果你使用 Blade 模板引擎,你可以使用 {{ }} 语法或 @lang 指令输出语言行:

{{ trans('messages.welcome') }}

@lang('messages.welcome')

如果指定的语言行不存在,trans 方法将会返回语言行的键值。所有,当使用上面的例子时,如果语言行不存在,trans 方法将会返回 messages.welcome

替换语言行中的参数

如果你需要,还可以在语言行中定义占位符。所有的占位符都以 : 为前缀。例如,你可以在欢迎信息中定义一个名称占位符:

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

当获取语言行时要替换占位符,传递一个更换的数组作为 trans 方法的第二个参数:

echo trans('messages.welcome', ['name' => 'dayle']);

如果你的占位符包含大写字母,或者只有第一个字符是大写的,翻译值也将相应的转为大写:

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

多元化

多元化是一个复杂的问题,因为不同的语言对于多元化有多种复杂的规则。通过“管道(|)”字符,你可以区分单数与复数形式:

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

当定义一个具有多元化选项的语言行后,你可以通过 trans_choice 函数来获取指定“数量”的行。在这个例子中,由于数量大于一,语言行的复数形式将会被返回:

echo trans_choice('messages.apples', 10);

由于 Laravel 的翻译器是由 Symfony Translation 组件驱动的,你还可以创建更复杂的多元化,它可以为不同的数量范围指定语言行:

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

重新包语言文件

有些包可能会提供它们自己的语言文件。你可以通过把这些文件放置到 resources/lang/vendor/{package}/{locale} 目录重写它们,而不是更改包的核心文件来调整它们。

例如,你想更改 skyrim/hearthfire 包 messages.php 文件的语言行,你需要放置一个 resources/lang/vendor/hearthfire/en/messages.php 语言文件。在这个文件中,你可以只定义你想覆盖的语言行。你没有覆盖的语言行都会从包的原始语言文件中加载。


该篇属于专题:《Laravel 5.3 中文文档

发表评论