eolica/nova-locale-switcher

Nova 的一个简单地区选择器,无需具体本地化实现

1.0.0 2020-10-29 19:11 UTC

This package is auto-updated.

Last update: 2024-09-18 12:24:33 UTC


README

此工具提供了一个简单的头部下拉菜单,可以快速切换地区。此工具没有具体实现,因此当从下拉菜单中选择地区时,具体操作由您决定。

Nova Locale Switcher

安装

composer require eolica/nova-locale-switcher

如果您之前使用的是我们的 tramuntana-studio/nova-locale-switcher 包,请相应地进行修改。

用法

我们将通过一个简单的示例演示如何使用此工具。首先,您必须在 NovaServiceProvider 下的工具中注册该工具。

use Illuminate\Http\Request;

public function tools()
{
    return [
        \Eolica\NovaLocaleSwitcher\LocaleSwitcher::make()
            ->setLocales(config('nova.locales'))
            ->onSwitchLocale(function (Request $request) {
                $locale = $request->post('locale');

                if (array_key_exists($locale, config('nova.locales'))) {
                    $request->user()->update(['locale' => $locale]);
                }
            }),
    ];
}

setLocales 方法期望一个关联数组,键为地区代码,值为地区名称。在此示例中,我们从 nova.php 配置文件设置地区

return [

    // Rest of Nova configuration

    ...

    /*
    |--------------------------------------------------------------------------
    | Nova Locales
    |--------------------------------------------------------------------------
    */

    'locales' => [
        'en' => 'English',
        'de' => 'Deutsch',
        'es' => 'Español',
    ],
];

为了处理地区切换,我们必须向 onSwitchLocale 方法传递一个 callable,在此示例中,我们通过接收来自请求对象的地区更新当前用户地区字段(这是一个我们添加到模型中的自定义字段)。

现在,为了设置应用程序地区,我们可以在 NovaServiceProviderboot 方法中通过使用 Nova::serving() 方法来实现。

use Laravel\Nova\Events\ServingNova;

final class NovaServiceProvider extends NovaApplicationServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        Nova::serving(function (ServingNova $event) {
            $user = $event->request->user();

            if (array_key_exists($user->locale, config('nova.locales'))) {
                app()->setLocale($user->locale);
            }
        });
    }

    ...
}

最后一步是显示语言选择器。为此,我们必须 发布 Nova 的视图,执行以下命令

php artisan nova:publish

现在我们转到文件 /resources/views/vendor/nova/layout.blade.php,在包含用户的部分之后添加 locale-switcher Vue 组件

<!-- Content -->
<div>
    ...

    <dropdown class="ml-auto h-9 flex items-center dropdown-right">
        @include('nova::partials.user')
    </dropdown>

    <!-- HERE! -->
    <locale-switcher></locale-switcher>
</div>

这就完成了!

这是您可以使用的大量解决方案之一,重要的是您可以在不依赖外部包的情况下切换到另一种实现方式。

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

安全

如果您在此包中发现安全漏洞,请发送电子邮件至 dllobellmoya@gmail.com,而不是使用问题跟踪器。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件