ibakhsh / switch-locale
Laravel Nova 用于切换语言环境的工具
0.4.0
2020-03-21 14:13 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-26 07:30:15 UTC
README
用于 Astrotomic's Laravel Translatable
此工具提供了一个漂亮的下拉菜单,可以快速切换语言环境。语言环境按用户缓存并设置主应用语言环境。
它还提供了一个 Language
字段,可以显示特定资源上翻译的状态。
注意 如果你使用 Spatie's Laravel Translatable,那么请使用 Laravel Nova Locale Anywhere Tool
安装
composer require ibakhsh/switch-locale
使用方法
要开始使用此工具,你必须在 NovaServiceProvider
下的工具中注册此工具。该工具利用 Astrotomic's Laravel Translatable 包。
public function tools()
{
return [
new SwitchLocale([
"locales" => [
"en" => "English",
"de" => "German"
],
"useFallback" => false,
"customDetailToolbar" => false //optional
])
];
}
下拉菜单
该包提供了用于插入 Nova 布局文件的切换语言选项。你可以通过覆盖 layout.blade.php
文件并在用户下拉菜单之后插入它来完成此操作。
…
<dropdown class="ml-auto h-9 flex items-center dropdown-right">
@include('nova::partials.user')
</dropdown>
<switch-locale-dropdown class="ml-6"></switch-locale-dropdown>
…
资源状态字段
然后你可以在资源中定义该字段。
use ibakhsh\SwitchLocale\Language;
Language::make(__('Translation'))
删除翻译工具栏按钮
该包提供了一个 CustomDetailToolbar 组件,你可以通过配置来切换。作为替代,你也可以仅从包中获取 <delete-toolbar-button>
并将其粘贴到自己的自定义详细工具栏中。
语言权限
如果你想允许用户仅访问某些语言,此工具也可以显示他们可以访问哪些语言。
设置
为了使此功能正常工作,用户需要有一个返回具有布尔值的语言对象的语言属性的 locale
属性。
// User table migration
$table->string('locale')->default('{}');
// User Model app/User.php
protected $casts = [
'email_verified_at' => 'datetime',
'locale' => 'array'
];
public function allowedLocale() {
return $this->allowedAllLocale() || $this->locale[app()->getLocale()];
}
public function allowedAllLocale() {
return $this->isAdmin(); // As an example, admin is allowed all locale
}
// User Nova Resource app/Nova/User.php
use Laravel\Nova\Fields\BooleanGroup;
use ibakhsh\SwitchLocale\SwitchLocale;
…
BooleanGroup::make(__('Allowed Locale'), 'locale')->options(SwitchLocale::getLocales()),
示例用法
// PostPolicy
<?php
namespace App\Policies;
use App\Post;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class PostPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any posts.
*/
public function viewAny(User $user)
{
return true;
}
/**
* Determine whether the user can view the post.
*/
public function view(User $user, Post $post)
{
return $post->status == 'published' || ($user && $user->id == $post->author_id);
}
/**
* Determine whether the user can create posts.
*/
public function create(User $user)
{
return $user && $user->allowedLocale();
}
/**
* Determine whether the user can update the post.
*/
public function update(User $user, Post $post)
{
return $user && $user->allowedLocale();
}
/**
* Determine whether the user can update the post.
*/
public function delete(User $user, Post $post)
{
return $user && $user->allowedLocale();
}
}
注意 你可能需要设置一些其他权限和规则来限制用户,防止他们自行获取语言访问权限等。
鸣谢
从 u12206050 分支,最初从 slovenianGooner 分支。