QB PHP 多语言配置

1:  下载QBfast .exe 的文件   

2:  安装的时候 ,一定点击  仅为我 安装 而不是 所有人 

3: 如果提示 更新就 更新  , 安装如2

4:  如果遇到 新增 或者编辑已经 配置的项目时 不起作用  :

 右键 QBfast .exe 文件所属位置  ,然后 上一级  找到data 目录  删除data  下的所有目录 。 

然后在启动 QBfast 的文件   

 然后重新 配置 项目名称 数据库等等  ,点击一键生成  点击   语言包  等待几分钟   然后 在弹出框中选择要保存文件的位置   。

PHP 后端:(参考看云手册 )

在menuService.php 中配置:


修改app/middleware 中间件 ,修改 lang.php  :

lang.php  (多语言配置的时候  中文繁体失效 ):

<?php
// +----------------------------------------------------------------------
// | 多语言设置
// +----------------------------------------------------------------------return [// 默认语言'default_lang'    => env('lang.default_lang', 'zh-TW'),// 允许的语言列表'allow_lang_list' => ['zh-TW','en'],// 多语言自动侦测变量名'detect_var'      => 'lang',// 是否使用Cookie记录'use_cookie'      => true,// 多语言cookie变量'cookie_var'      => 'think_lang',// 多语言header变量'header_var'      => 'Accept-Language',// 扩展语言包'extend_list'     => [],// Accept-Language转义为对应语言包名称'accept_language' => ['zh-TW'=>'zh-TW','zh_TW'=>'zh-TW','zh_CN'=>'zh-cn','zh-hans-cn' => 'zh-cn','en' => 'en',],'db-language'=>['zh-TW'=>'zh_TW','zh-cn'=>'zh_CN','en'=>'en',],// 是否支持语言分组'allow_group'     => false,
];

在Common.php 中设置 :

                

/*** 语言包* @param $msg* @return array|mixed*/
function T($msg)
{$range = \think\facade\Lang::getLangSet();$dbLang = app()->config->get('lang.db-language');if (isset($dbLang[$range])) {$v = app()->dbConfig->get('lang.' . $dbLang[$range] . '.' . $msg);if ($v) {return $v;}}return lang($msg);
}

在API的接口中使用 :

   /*** 删除* @desc (删除)* @route (id,name=删除,pid=work.page.,type=,sort=255)* @param $ids* @return Response* @api (string,ids,ID,1)*/public function del($ids = 0): Response{$model = $this->getModel();$result = $model::destroy(explode(',', (string)$ids));return out($result ? T('删除成功') : T('删除失败'));}

web:

                

<script lang="tsx">
import { defineComponent, onMounted, ref } from 'vue';
import { MessagePlugin } from 'tdesign-vue-next';
import Card from '@/components/card/index.vue';
import TaoForm from '@/components/tao-form';
import { TaoField } from '@/hooks/useForm';
import request from '@/utils/request';
import { ResDataType } from '@/interface';
import { toFormPramas } from '@/utils';
import TaoTable from '@/components/tao-table';
import ListTable from '@/pages/template/list-table.vue';
import i18n from '@/locales/i18n';const columns: Array<TaoField> = [{label: 'apikey',field: 'ito.apikey',type: 'text',rules: {required: true,},},
];export default defineComponent({name: 'Device',components: {Card,TaoForm,TaoTable,},setup() {const taoForm = ref(null);const tabs = { ito: i18n.global.t('ito相关设置'), file:i18n.global.t('ito列表') };const key = Object.keys(tabs);onMounted(() => {// request//   .post('xx/sss', {//     key,//   })//   .then(({ data }) => {//     if (data) {//       taoForm.value.show(data);//     }//   });});const onSubmit = async ({ form, callback }) => {// config/editrequest.post('xx/sss', { key, data: form }).then(({ msg }: ResDataType) => {callback(msg);}).catch(() => callback(undefined));};const getIto = () => {console.log('get info from getITO ');request.post('device/getDataFromIto', {}).then(({ msg }) => {MessagePlugin.success(msg);// listTable.value.taoTable().show();});};const tabValue = ref('file');return () => (<div><><t-button onClick={() => getIto()}>{i18n.global.t('从IOT平台获取')}</t-button></><div class="qb-bg-white qb-px-5 qb-pb-8"><tao-formref={taoForm}formProps={{ labelWidth: '140px', labelAlign: 'right' }}fields={columns}is-dialog={false}onSubmit={onSubmit}>{{form: ({ list, form, slots }) => {return (<t-tabs v-model={tabValue.value}><t-tab-panel key="ito" value="ito" label={tabs.ito} destroy-on-hide={false}><div class="qb-py-5"><qb-form-item list={list} form={form} v-slots={slots} /></div></t-tab-panel><t-tab-panel key="file" value="file" label={tabs.file} destroy-on-hide={false}><div class="qb-py-5"><ListTable name="Device"></ListTable></div></t-tab-panel></t-tabs>);},icon: ({ item, form }) => {const { modelValue, key } = toFormPramas(item, form);return <qb-icon-picker v-model={modelValue[key]} />;},}}</tao-form></div></div>);},
});
</script><style lang="scss" scoped></style>

i18n.ts :

request.ts:

 setting.ts:

lang.ts:

 .envdevlopment:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05:HAL-----看门狗WDT

目录 一:看门狗 1:WDT 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 D:HAl库的配置 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 D:HAL库配置 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 B:窗…

springboot项目学习-瑞吉外卖(4)

1.任务 这一节主要的任务是解决文件的上传和下载功能 2.文件上传 概念&#xff1a;将本地的图片上传到浏览器上面 点击文件上传&#xff0c;前端就会发送如上的请求&#xff0c;服务端应该根据URL和请求方法来处理请求 CommonController类&#xff1a; RestController Slf4j …

【第二部分--Python之基础】

一、初识 开发语言&#xff1a; 高级语言&#xff1a;Python Java PHP C# Go Ruby C ... > 字节码 低级语言&#xff1a;C 汇编 > 机器码 …

初始Redis关联和非关联

基础篇Redis 3.初始Redis 3.1.2.关联和非关联 传统数据库的表与表之间往往存在关联&#xff0c;例如外键&#xff1a; 而非关系型数据库不存在关联关系&#xff0c;要维护关系要么靠代码中的业务逻辑&#xff0c;要么靠数据之间的耦合&#xff1a; {id: 1,name: "张三…

指针知识大礼包,让你的编程之路更顺畅(一)

1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 正文开始 1. 内存和地址 1.1 内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&a…

自锁电路设计

自锁电路设计 Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位&#xff0c;当需要复位的时候志需要将反向端的二极管拉低一下即可&#xff0c;免去 三极管控制…

springboot 大文件分片上传

springboot 大文件分片上传 constantentityvocontrollerutils大文件分片上传是一种将大文件分割成多个小文件片段,然后分别上传这些小文件片段的方法。这种方法的好处包括: 减少重新上传开销:如果网络传输中断,只需重传未上传的部分,而不是整个文件。 提高灵活性:分片大小…

【Selenium】隐藏元素的定位和操作|隐藏与isDisplay方法

一、selenium 中隐藏元素如何定位&#xff1f; 如果单纯的定位的话&#xff0c;隐藏元素和普通不隐藏元素定位没啥区别&#xff0c;用正常定位方法就行了 但是吧~~~能定位到并不意味着能操作元素&#xff08;如click,clear,send_keys&#xff09; 二、隐藏元素 如下图有个输入框…

Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)

Quick Start Dubbo&#xff01;用更优雅的方式来实现RPC调用吧 - 掘金 dubbozookeeper demo 项目结构&#xff1a; RpcService 仅仅是提供服务的接口&#xff1a; public interface HelloService {String sayHello(String name); }DubboServer pom&#xff1a; <?xm…

EDR下的线程安全

文章目录 前记进程断链回调执行纤程内存属性修改early birdMapping后记reference 前记 触发EDR远程线程扫描关键api&#xff1a;createprocess、createremotethread、void&#xff08;指针&#xff09;、createthread 为了更加的opsec&#xff0c;尽量采取别的方式执行恶意代…

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料&#xff1a;《Flutter实战第二版》 10.3 组合实例&#xff1a;TurnBox 这里尝试实现一个更为复杂的例子&#xff0c;其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件&#xff0c;但是它有两个缺点&#xff1a; 一是只能将其子节点以90度的倍数旋转二是当旋转…

2002-2023年各地级市环境规制强度数据(环保词频统计)

2002-2023年各地级市环境规制强度数据&#xff08;环保词频统计&#xff09; 1、时间&#xff1a;2002-2023年 2、来源&#xff1a;政府工作报告 3、指标&#xff1a; 行政区划代码、年份、城市、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频…

瑞_23种设计模式_职责链模式

文章目录 1 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;★★★1.1 介绍1.2 概述1.3 职责链模式的结构1.4 职责链模式的优缺点1.5 职责链模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;FilterCh…

软件测试 - postman高级使用

断言 概念&#xff1a;让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点&#xff1a; postman断言使用js编写&#xff0c;断言写在postman的tests中 tests脚本在发送请求之后执行&#xff0c;会把断言的结果最终在testresult中进行展示 常用的postman提供的…

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析&#xff0c;可以说把这上面的题练好了面试不虚&#xff0c;最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字&#xff0c;也是积累了很长一段时间的作品&#…

SpringMVC | Spring MVC中的“拦截器”

目录: 一、拦截器 &#xff1a;1. 拦截器的 “概述”2. 拦截器的 “定义” (创建“拦截器”对象)3. 拦截器的 “配置” (让“拦截器”对象生效)4. 拦截器的 “执行流程”“单个拦截器”的执行流程“多个拦截器”的执行流程 二、应用案例一实现用户登录权限验证 作者简介 &#…

ssm006基于java的少儿编程网上报名系统+vue

少儿编程网上报名系统 摘 要 在国家重视教育影响下&#xff0c;教育部门的密确配合下&#xff0c;对教育进行改革、多样性、质量等等的要求&#xff0c;使教育系统的管理和运营比过去十年前更加理性化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上少儿编程网上…

利用PSR,三步实现业务快速加载

01 什么是PSR PSR是通信业界在BSS/OSS域面向产品设计和业务开通过程中提出的一个标准化信息分层解耦和映射的框架&#xff0c;按照国际电信论坛TMF推荐的SID信息框架的标准&#xff0c;主要分为产品域、服务域和资源域等三层&#xff0c;支撑通信业务的快速加载和敏捷开通。 TM…

vscode下c++的boost库安装

Boost Downloadshttps://www.boost.org/users/download/下载最新的库文件。在shell中&#xff0c;使用命令bootstrap.bat gcc生成b2.exe文件。然后是.\b2.exe toolsetgcc生成库文件&#xff0c;在stage\lib文件夹下把stage\lib文件夹中的库文件拷贝到mingw64\x86_64-w64-mingw3…

Spring Boot + MyBatis

一、配置依赖 <!-- MyBatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.5.3</version> </dependency> <!-- junit测试依赖 --&g…