youneselbarnoussi / nova-locale-switcher
Nova 的一个简单地区切换器,无需具体本地化实现
Requires
- php: ^8.0
- laravel/nova: ^4.6
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
This package is not auto-updated.
Last update: 2024-09-26 19:31:06 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', ], ];
为了处理地区切换,我们必须将一个 callable
传递给 onSwitchLocale
方法,在此示例中,我们使用从请求对象接收的地区更新当前用户地区字段(这是一个我们添加到模型中的自定义字段)。
现在,为了设置应用程序地区,我们可以在 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 的视图: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)。有关更多信息,请参阅许可证文件。