Laravel-Admin 显示语言改为中文

在Laravel-Admin后台默认是英文,把相应内容改为中文显示。

目录

修改语言和时区

修改后台菜单

发布语言包

修改仪表盘名称

添加菜单配置

清理缓存

修改权限名称

菜单管理列表修改

修改路由

创建菜单控制器

管理员编辑头像

问题原因

添加磁盘配置

清除配置缓存

总结


修改语言和时区

在config/app.php中,寻找以下两个配置改为中文语言和时区

php 复制代码
'timezone' => 'RPC',
'locale' => 'zh-CN',

修改后台菜单

发布语言包

bash 复制代码
php artisan vendor:publish --tag=laravel-admin-lang

修改仪表盘名称

改为使用语言包,而不是硬编码,如下:

添加菜单配置

修改语言包文件resources/lang/zh-CN/admin.php,

添加 menu_titles 数组中菜单翻译配置。

php 复制代码
<?php

return [
    'online'                => '在线',
    'login'                 => '登录',
    'logout'                => '登出',
    'setting'               => '设置',
    'name'                  => '名称',
    'username'              => '用户名',
    'password'              => '密码',
    'password_confirmation' => '确认密码',
    'remember_me'           => '记住我',
    'user_setting'          => '用户设置',
    'avatar'                => '头像',
    'list'                  => '列表',
    'new'                   => '新增',
    'create'                => '创建',
    'delete'                => '删除',
    'remove'                => '移除',
    'edit'                  => '编辑',
    'continue_editing'      => '继续编辑',
    'continue_creating'     => '继续创建',
    'view'                  => '查看',
    'detail'                => '详细',
    'browse'                => '浏览',
    'reset'                 => '重置',
    'export'                => '导出',
    'batch_delete'          => '批量删除',
    'save'                  => '保存',
    'refresh'               => '刷新',
    'order'                 => '排序',
    'expand'                => '展开',
    'collapse'              => '收起',
    'filter'                => '筛选',
    'search'                => '搜索',
    'close'                 => '关闭',
    'show'                  => '显示',
    'entries'               => '条',
    'captcha'               => '验证码',
    'action'                => '操作',
    'title'                 => '标题',
    'description'           => '简介',
    'back'                  => '返回',
    'back_to_list'          => '返回列表',
    'submit'                => '提交',
    'menu'                  => '菜单',
    'input'                 => '输入',
    'succeeded'             => '成功',
    'failed'                => '失败',
    'delete_confirm'        => '确认删除?',
    'delete_succeeded'      => '删除成功 !',
    'delete_failed'         => '删除失败 !',
    'update_succeeded'      => '更新成功 !',
    'save_succeeded'        => '保存成功 !',
    'refresh_succeeded'     => '刷新成功 !',
    'login_successful'      => '登录成功 !',
    'choose'                => '选择',
    'choose_file'           => '选择文件',
    'choose_image'          => '选择图片',
    'more'                  => '更多',
    'deny'                  => '无权访问',
    'administrator'         => '管理员',
    'roles'                 => '角色',
    'permissions'           => '权限',
    'slug'                  => '标识',
    'created_at'            => '创建时间',
    'updated_at'            => '更新时间',
    'alert'                 => '注意',
    'parent_id'             => '父级菜单',
    'icon'                  => '图标',
    'uri'                   => '路径',
    'operation_log'         => '操作日志',
    'parent_select_error'   => '父级选择错误',
    'pagination'            => [
        'range' => '从 :first 到 :last ,总共 :total 条',
    ],
    'role'                  => '角色',
    'permission'            => '权限',
    'route'                 => '路由',
    'confirm'               => '确认',
    'cancel'                => '取消',
    'http'                  => [
        'method' => 'HTTP方法',
        'path'   => 'HTTP路径',
    ],
    'all_methods_if_empty'  => '为空默认为所有方法',
    'all'                   => '全部',
    'current_page'          => '当前页',
    'selected_rows'         => '选择的行',
    'upload'                => '上传',
    'new_folder'            => '新建文件夹',
    'time'                  => '时间',
    'size'                  => '大小',
    'listbox'               => [
        'text_total'         => '总共 {0} 项',
        'text_empty'         => '空列表',
        'filtered'           => '{0} / {1}',
        'filter_clear'       => '显示全部',
        'filter_placeholder' => '过滤',
    ],
    'grid_items_selected'    => '已选择 {n} 项',
    'menu_titles'            => [
        'dashboard' => '仪表盘',
        'users' => '用户管理',
        'roles' => '角色管理',
        'permission' => '权限管理',
        'permissions' => '权限管理',
        'admin' => '系统管理',
        'menu' => '菜单管理',
        'operation_log' => '操作日志',
        'operation log' => '操作日志',
        'examples' => '示例管理',
    ],
    'prev'                   => '上一步',
    'next'                   => '下一步',
    'quick_create'           => '快速创建',
    'Dashboard'              => '仪表盘',
    'Dashboard desc'         => '仪表盘描述',

];

清理缓存

bash 复制代码
php artisan config:clear
php artisan cache:clear
php artisan view:clear

最终效果:

修改权限名称

权限名称更新为中文,直接修改数据表admin_permissions,

  • "All permission" → "所有权限"

  • "Dashboard" → "仪表盘"

  • "Login" → "登录"

  • "User setting" → "用户设置"

  • "Auth management" → "权限管理"

效果如下:

菜单管理列表修改

在菜单管理列表中发现显示的权限菜单列表为英文规则,并未显示中文。

修改路由

修改位于 app/Admin/routes.php的文件,

添加了以下路由来覆盖默认的 laravel-admin 菜单路由:

php 复制代码
<?php

use Illuminate\Routing\Router;

Admin::routes();

Route::group([
    'prefix'        => config('admin.route.prefix'),
    'namespace'     => config('admin.route.namespace'),
    'middleware'    => config('admin.route.middleware'),
    'as'            => config('admin.route.prefix') . '.',
], function (Router $router) {

    $router->get('/', 'HomeController@index')->name('home');
    
    // 自定义菜单管理路由(覆盖默认路由)
    $router->get('auth/menu', 'MenuController@index')->name('auth.menu');
    $router->get('auth/menu/{id}', 'MenuController@show')->name('auth.menu.show');
    $router->get('auth/menu/{id}/edit', 'MenuController@edit')->name('auth.menu.edit');
    $router->post('auth/menu', 'MenuController@store');
    $router->put('auth/menu/{id}', 'MenuController@update');
    $router->delete('auth/menu/{id}', 'MenuController@destroy');
    
    // 前端用户管理
    $router->resource('frontend-users', 'FrontendUserController')->names('admin.frontend-users');
    
    // 印章管理 - 生成印章图片路由必须在资源路由之前
    $router->post('seals/generate', 'SealController@generate')->name('seals.generate');
    $router->get('seals/generate', 'SealController@generate');
    
    // 印章管理资源路由
    $router->resource('seals', 'SealController')->names('admin.seals');

});

创建菜单控制器

创建路径位于app/Admin/Controllers/MenuController.php的文件。

主要修改:

  • 添加了 getMenuTitle() 方法来根据菜单 URI 获取翻译后的标题

  • 修改了 treeView() 方法,在渲染菜单树时使用翻译后的标题。

  • 翻译逻辑:将菜单标题转换为语言包键名(如 users ),然后从语言包中获取对应的翻译。

内容如下:

php 复制代码
<?php

namespace App\Admin\Controllers;

use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use Encore\Admin\Tree;
use Encore\Admin\Widgets\Box;
use Encore\Admin\Widgets\Form as WidgetForm;
use Illuminate\Routing\Controller;

class MenuController extends Controller
{
    use HasResourceActions;

    /**
     * Index interface.
     *
     * @param Content $content
     *
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->title(trans('admin.menu'))
            ->description(trans('admin.list'))
            ->row(function (Row $row) {
                $row->column(6, $this->treeView()->render());

                $row->column(6, function (Column $column) {
                    $form = new WidgetForm();
                    $form->action(admin_url('auth/menu'));

                    $menuModel = config('admin.database.menu_model');
                    $permissionModel = config('admin.database.permissions_model');
                    $roleModel = config('admin.database.roles_model');

                    $form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions());
                    $form->text('title', trans('admin.title'))->rules('required');
                    $form->icon('icon', trans('admin.icon'))->default('fa-bars')->rules('required')->help($this->iconHelp());
                    $form->text('uri', trans('admin.uri'));
                    $form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id'));
                    if ((new $menuModel())->withPermission()) {
                        $form->select('permission', trans('admin.permission'))->options($permissionModel::pluck('name', 'slug'));
                    }
                    $form->hidden('_token')->default(csrf_token());

                    $column->append((new Box(trans('admin.new'), $form))->style('success'));
                });
            });
    }

    /**
     * Redirect to edit page.
     *
     * @param int $id
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function show($id)
    {
        return redirect()->route('admin.auth.menu.edit', ['menu' => $id]);
    }

    /**
     * @return \Encore\Admin\Tree
     */
    protected function treeView()
    {
        $menuModel = config('admin.database.menu_model');

        $tree = new Tree(new $menuModel());

        $tree->disableCreate();

        $tree->branch(function ($branch) {
            // 根据 URI 获取翻译后的标题
            $title = $this->getMenuTitle($branch['title']);
            
            $payload = "<i class='fa {$branch['icon']}'></i>&nbsp;<strong>{$title}</strong>";

            if (!isset($branch['children'])) {
                if (url()->isValidUrl($branch['uri'])) {
                    $uri = $branch['uri'];
                } else {
                    $uri = admin_url($branch['uri']);
                }

                $payload .= "&nbsp;&nbsp;&nbsp;<a href=\"$uri\" class=\"dd-nodrag\">$uri</a>";
            }

            return $payload;
        });

        return $tree;
    }

    /**
     * 获取菜单标题的翻译
     * @param string $defaultTitle
     * @return string
     */
    protected function getMenuTitle($defaultTitle)
    {
        // 如果是空 URI 或外部链接,直接返回原标题
        if (empty($defaultTitle)) return $defaultTitle;

        $title = strtolower($defaultTitle);
        // 尝试从语言包获取翻译
       return trans("admin.menu_titles.{$title}");
    }

    /**
     * Edit interface.
     *
     * @param string  $id
     * @param Content $content
     *
     * @return Content
     */
    public function edit($id, Content $content)
    {
        return $content
            ->title(trans('admin.menu'))
            ->description(trans('admin.edit'))
            ->row($this->form()->edit($id));
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    public function form()
    {
        $menuModel = config('admin.database.menu_model');
        $permissionModel = config('admin.database.permissions_model');
        $roleModel = config('admin.database.roles_model');

        $form = new Form(new $menuModel());

        $form->display('id', 'ID');

        $form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions());
        $form->text('title', trans('admin.title'))->rules('required');
        $form->icon('icon', trans('admin.icon'))->default('fa-bars')->rules('required')->help($this->iconHelp());
        $form->text('uri', trans('admin.uri'));
        $form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id'));
        if ($form->model()->withPermission()) {
            $form->select('permission', trans('admin.permission'))->options($permissionModel::pluck('name', 'slug'));
        }

        $form->display('created_at', trans('admin.created_at'));
        $form->display('updated_at', trans('admin.updated_at'));

        return $form;
    }

    /**
     * Help message for icon field.
     *
     * @return string
     */
    protected function iconHelp()
    {
        return 'For more icons please see <a href="http://fontawesome.io/icons/" target="_blank">http://fontawesome.io/icons/</a>';
    }
}

效果:

管理员编辑头像

在后台管理员管理中修改管理员头像时提示:

bash 复制代码
Config error.
Disk [admin] not configured, please add a disk config in `config/filesystems.php`.

问题原因

laravel-admin 在配置文件中指定使用 admin 磁盘来存储上传的文件( config/admin.php 第 156 行),但是在 config/filesystems.php 中没有配置这个磁盘,导致上传图片时出现 "Config error. Disk [admin] not configured" 错误。

添加磁盘配置

在文件 config/filesystems.php中

php 复制代码
'admin' => [
    'driver' => 'local',
    'root' => public_path('uploads'),
    'visibility' => 'public',
    'url' => env('APP_URL').'/uploads',
],

清除配置缓存

执行 php artisan config:clear 使新配置立即生效。

总结

在Laravel-Admin后台默认是英文,把相应内容改为中文显示,并修改管理员编辑问题。

相关推荐
嵌入式学习菌2 小时前
内网穿透全闭环实操指南
linux·开发语言·php
JSON_L3 小时前
安装 Laravel-Admin
php·laravel
AI帮小忙3 小时前
CTF安全竞赛能力矩阵
开发语言·php
cch891811 小时前
PHP五大后台框架横向对比
开发语言·php
wefly201713 小时前
纯前端架构深度解析:jsontop.cn,JSON 格式化与全栈开发效率平台
java·前端·python·架构·正则表达式·json·php
极创信息18 小时前
信创软件安全加固指南,信创软件的纵深防御体系
java·大数据·数据库·金融·php·mvc·软件工程
诗词在线20 小时前
诗词在线古诗词传播
人工智能·word·php
源码宝20 小时前
使用 PHP(Laravel 8)+ Vue 2 + Element UI + MySQL 5.7开发一套医院不良事件系统的注意事项
vue.js·php·laravel
不会写DN20 小时前
PHP 中处理图像的利器 GD库
开发语言·php