day4/switch-locale

用于切换语言环境的 Laravel Nova 工具

安装次数: 23,504

依赖者: 1

建议者: 0

安全性: 0

星标: 1

关注者: 1

分支: 15

语言:Vue

0.5.9 2021-07-19 10:08 UTC

This package is auto-updated.

Last update: 2024-09-19 17:03:57 UTC


README

用于 Astrotomic's Laravel Translatable

此工具提供了一个方便的头部下拉菜单,可以快速切换语言环境。语言环境按用户缓存并设置主应用的语言环境。

它还提供了一个 Language 字段,显示特定资源的翻译状态。

注意 如果您使用 Spatie's Laravel Translatable,则使用 Laravel Nova Locale Anywhere Tool

安装

composer require day4/switch-locale

php artisan vendor:publish --tag=public

使用方法

要开始使用此工具,您必须在 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 Day4\SwitchLocale\Language;

    Language::make(__('Translation'))

删除翻译工具栏按钮

该包提供了一个自定义详细工具栏组件,您可以通过配置来切换。可选地,您也可以仅从包中获取 <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 Day4\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();
    }
}


注意 您可能还需要实施其他权限和规则来限制用户,以防止他们给自己访问语言等。

致谢

最初是从 slovenianGooner 分支出来的