youneselbarnoussi/nova-locale-switcher

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

dev-master 2023-03-29 14:23 UTC

This package is not auto-updated.

Last update: 2024-09-26 19:31:06 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',
    ],
];

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

现在,为了设置应用程序地区,我们可以在 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 的视图:publish

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)。有关更多信息,请参阅许可证文件