基本使用

未匹配的标注
本文档最新版为 2.x,旧版本可能放弃维护,推荐阅读最新版!

多语言基本使用

Dcat Admin中使用多语言翻译非常方便,数据表格、数据表单、数据详情和模型树的字段都支持自动读取语言包翻译,具体可参考表格字段翻译表单字段翻译数据详情字段翻译

语言包文件

语言包文件类型大概如下

resources/lang
    ├── ...
    └── en
        ├── admin.php   # 系统内容语言包,包括菜单标题翻译等都在里面
        ├── global.php  # 控制器公共语言包
        ├── {xxx}.php   # 控制器语言包,一个控制器对应一个语言包
        └── ...         

控制器语言包名称需要与控制器名相对应,例如控制器名UserProfileController,则对应的语言包为resources/lang/{当前语言}/user-profile.php(需要转化为小写中划线风格)。

控制器语言包内容格式

控制器语言包(包括global.php)中的内容分为三个类别:

  • fields 数据字段的翻译,这个类别下放置数据字段的翻译
  • labels 自定义内容翻译,这个类别下是对数据字段外的内容翻译,可以是任何自定义内容
  • options 枚举选项翻译

下面是例子:

假设控制器语言包user-profile.php内容如下:

<?php 

return [
    'labels' => [
        'UserProfile' => '用户中心',
        'list'        => '列表',

        'pagination' => [
            'range' => '从 :first 到 :last ,总共 :total 条',
        ],
    ],
    'fields' => [
        'name'      => '名称',
        'published' => '发布',
        'author'    => '作者',
        'status'    => '状态',
    ],
    'options' => [
        'status' => [
            0 => '未激活',
            1 => '已激活',
        ],
    ],
];

则语言包可以这么使用

class UserProfileController extend AdminController
{
    public function title()
    {
        // labels翻译示例,最终翻译成 “用户中心”
        return admin_trans_label('UserProfile');    
    }

    // fields和options翻译示例
    public function grid()
    {
        $grid = new Grid(new UserProfile());

        // 显示调用语言包翻译,这里会把 “name” 字段翻译成 “名称”
        $grid->name(admin_trans_field('name'));

        // 隐式使用语言包翻译,“author” 字段会自动翻译成 “作者”
        $grid->author;

        // 调用options翻译
        $grid->status()->using(admin_trans('user-profile.options.status'));

        return $grid;
    }
}

使用

admin_trans_field

这个函数用于翻译fields类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找global.php中的翻译。

admin_trans_field('name');

admin_trans_label

这个函数用于翻译labels类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找global.php中的翻译。

admin_trans_label('Posts');

admin_trans_label('pagination.range', ['first' => 1, 'last' => 1, 'total' => 0]);

admin_trans_option

这个函数用于翻译options类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找global.php中的翻译。

admin_trans_option(1, 'status');

admin_trans

此方法与Laravel框架自带的trans方法用法没有区别,唯一的区别是:当翻译的内容找不到时,会去global.php中再找一次。

// 先去 user.php 中找 first_name 的翻译,如果找不到会去 global.php 中找
admin_trans('user.first_name');

公共翻译文件

所有常用的翻译都可以放在resources/lang/{当前语言}/global.php中,当控制器翻译文件不存在时会读取公共翻译文件翻译。

<?php

return [
    'fields' => [
        'id'                    => 'ID',
        'name'                  => '名称',
        'username'              => '用户名',
        'email'                 => '邮箱',
        'password'              => '密码',
    ],
    'labels' => [
        'list'   => '列表',
        'edit'   => '编辑',
        'detail' => '详细',
        'create' => '创建',
        'root'   => '顶级',
        'scaffold' => '代码生成器',
    ],
    'options' => [
    ],
];

默认面包屑翻译

例如你的访问路径是/admin/my-users,控制器是MyUserController,那么则可以在控制器对应的翻译文件中加上

return [
 'labels' => [ 'my-users' => '用户',
 ], ...];

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10
发起讨论 只看当前版本


luxiaofeng
dcat admin 详情页如何做成选项卡的展示
4 个点赞 | 15 个回复 | 问答 | 课程版本 2.x
halweg
在form A的編輯页,提交后如和新增一条B的记录?
0 个点赞 | 7 个回复 | 问答 | 课程版本 2.x
luxiaofeng
dcat admin 表格怎么根据当前行数据的值隐藏或显示某个按钮
0 个点赞 | 4 个回复 | 问答 | 课程版本 2.x
蒙挚
Dcat Admin 新建和编辑怎么使用不同的页面和处理逻辑
0 个点赞 | 4 个回复 | 问答 | 课程版本 2.x
maxsky
为什么开发工具菜单在非 admin 用户下也能看见呢?
0 个点赞 | 1 个回复 | 问答 | 课程版本 2.x
Mutoulee
Dcat Admin 模型树depth字段疑问
0 个点赞 | 1 个回复 | 问答 | 课程版本 2.x
lezhl821125
Dcat2版本的代码生成器 在laravel 9的版本报错
0 个点赞 | 1 个回复 | 问答 | 课程版本 2.x
zhuameng
如果 MySQL 8 运行脚本出错,可以试试下面这个:
0 个点赞 | 0 个回复 | 分享 | 课程版本 2.x
esssd
小程序心跳
0 个点赞 | 0 个回复 | 代码速记 | 课程版本 2.x