Nova 可以使用 Laravel 的 localization services 进行完全本地化。在安装过程中运行 nova:install 命令后。你的应用程序将包含一个 lang/vendor/nova 翻译目录。
在此目录下,您可以自定义 en.json 文件或为你的语言创建新的 JSON 翻译文件。此外,en 目录还包含一些 Nova 使用的附加验证翻译行。
要快速为你的语言创建一个新的翻译文件,你可以执行 nova:translate Artisan 命令。该命令将简单复制默认的 en.json 翻译文件,让你可以开始将字符串翻译成自己的语言:
php artisan nova:translate esLaravel Nova 前端库,包括浏览器、Numbro.js、Luxon 和其他库,默认情况下都会使用 app()->getLocale() 所提供的本地化值。但是,如果你的应用程序只使用 ISO 639-1 语言代码 (en),你可以考虑将语言迁移到 IETF 语言标记 (en-US、en-GB),以便在 Nova 使用的各种前端库中获得更广泛的支持。
要将你现有的本地化映射到 IETF 语言标记,你可以使用 Nova::userLocale 方法。通常,你应在应用程序的 NovaServiceProvider 的 boot 方法中调用该方法:
use Laravel\Nova\Nova;
Nova::userLocale(function () {
return match (app()->getLocale()) {
'en' => 'en-US',
'de' => 'de-DE',
default => null,
};
});可通过覆盖资源类上的 label 和 singularLabel 方法对资源名称进行本地化:
/**
* 获取资源的可显示标签。
*
* @return string
*/
public static function label()
{
return __('Posts');
}
/**
* 获取资源的可显示单数标签。
*
* @return string
*/
public static function singularLabel()
{
return __('Post');
}要自定义资源的创建和更新按钮的标签,可以覆盖资源上的 createButtonLabel 和 updateButtonLabel 方法:
/**
* 获取创建资源按钮的文本。
*
* @return string|null
*/
public static function createButtonLabel()
{
return __('Publish Post');
}
/**
* 获取更新资源按钮的文本。
*
* @return string|null
*/
public static function updateButtonLabel()
{
return __('Save Changes');
}在将字段附加到资源时,可以对字段名称进行本地化。所有字段的第一个参数都是显示名称,你可以对其进行自定义。例如,你可以这样本地化电子邮件地址字段的标题:
use Laravel\Nova\Fields\Text;
Text::make(__('Email Address'), 'email_address');关联字段名称可以通过本地化传给字段定义的第一个参数来定制。Nova 关联字段的第二和第三个参数分别是关联方法名称和相关 Nova 资源:
use App\Nova\Post;
use Laravel\Nova\Fields\HasMany;
HasMany::make(__('Posts'), 'posts', Post::class);此外,你还应覆盖相关资源上的 label 和 singularLabel 方法:
/**
* 获取资源的可显示标签。
*
* @return string
*/
public static function label()
{
return __('Posts');
}
/**
* 获取资源的可显示单数标签。
*
* @return string
*/
public static function singularLabel()
{
return __('Post');
}过滤器名称可通过覆盖过滤器类上的 name 方法进行本地化:
/**
* 获取过滤器的可显示名称。
*
* @return string
*/
public function name()
{
return __('Admin Users');
}镜头名称可通过覆盖镜头类的 name 方法进行本地化:
/**
* 获取镜头的可显示名称。
*
* @return string
*/
public function name()
{
return __('Most Valuable Users');
}可通过覆盖动作类的 name 方法来本地化动作名称:
/**
* 获取动作的可显示名称。
*
* @return string
*/
public function name()
{
return __('Email Account Profile');
}可通过覆盖指标类上的 name 方法对指标名称进行本地化:
/**
* 获取指标的可显示名称。
*
* @return string
*/
public function name()
{
return __('Total Users');
}要将本地化传播到前端,你应调用 NovaServiceProvider 中的 Nova::translations 方法:
Nova::serving(function () {
Nova::translations($pathToFile);
});你还可以传递一个由 键/值 对组成的数组,代表每个本地化:
Nova::serving(function () {
Nova::translations([
'Total Users' => 'Total Users'
]);
});与 Laravel 一样,你可以在自定义 Vue 组件中使用 __ 助手来访问这些翻译。为此,请在 Inertia 页面组件或 Vue 组件中添加以下混合函数:
<template>
<h2>{{ __('Total Users') }}</h2>
</template>
<script>
import { Localization } from 'laravel-nova'
export default {
mixins: [Localization]
// ...
}
</script>如果你的组件使用 Vue Composition API,你可以使用 useLocalization 可组合来本地化你的组件:
<template>
<h2>{{ __('Total Users') }}</h2>
</template>
<script setup>
import { useLocalization } from 'laravel-nova'
const { __ } = useLocalization()
// ...
</script>