eolica / nova-locale-switcher
Nova 的一个简单地区选择器,无需具体本地化实现
Requires
- php: >=7.2
- laravel/nova: ^3.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
This package is auto-updated.
Last update: 2024-09-18 12:24:33 UTC
README
此工具提供了一个简单的头部下拉菜单,可以快速切换地区。此工具没有具体实现,因此当从下拉菜单中选择地区时,具体操作由您决定。
安装
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
,在此示例中,我们通过接收来自请求对象的地区更新当前用户地区字段(这是一个我们添加到模型中的自定义字段)。
现在,为了设置应用程序地区,我们可以在 NovaServiceProvider
的 boot
方法中通过使用 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)。有关更多信息,请参阅 许可证文件。