SpringBoot,或springcloud微服务项目前端Vue和后端java实现国际化

2023-11-08

外包公司接到了一个新加坡绿联国际银行的项目,有一个需求是要求实现国际化,像谷歌浏览器自带翻译那样,点按钮可以切换英文,繁体,中文来回切换这种效果,琢磨过之后找的资料最多的就是说用i18n,用i18n这个思路没问题,也很简单,下载一下i18n的插件,配置一下需要翻译的东西就好了,但是像后端的话就比较麻烦了,毕竟i18n也是要手动加要翻译的内容,而我们不可能每加一条数据就手动到配置文件里面加翻译内容的,先搞前端的翻译,然后再搞后端。

1.在src下面的main.js里面引入i18n

如图所示

注意,还是在同一个main.js里面加上i18n

2.配置我们刚刚在main.js里面要引入的index.js,然后在index.js里面引入i18n和要翻译的文件en_US,zh_CN,zh_TW。

index.js:

import Vue from "vue";
import VueI18n from "vue-i18n";
import enLocale from "./en_US";
import cnLocale from "./zh_CN";
import twLocale from "./zh_TW";
Vue.use(VueI18n);
const i18n = new VueI18n({
  locale: localStorage.lang || "zh_CN",
  messages: {
    en_US: {
      ...enLocale
    },
    zh_CN: {
      ...cnLocale
    },
    zh_TW: {
      ...twLocale
    }
  }
});
export default i18n;

添加要翻译的文件:

中文zh_CN:

繁体zh_TW:

英文en_US:

注意,为了翻译同步,三份文件的内容要一样的意思,避免点击翻译的时候翻译内容对不上 。

然后我们随便到一个页面里看看怎么使用这三个翻译配置文件

这里解释一下,如果不是在分号里面需要加上{{}},如果是在分号里面的话就不需要{{}} ,并且在标签前面加上:

为了方便,我们专门做一个头部页面,添加切换的按钮,如图:

changeLang方法如下图:添加按钮的时候,0代表中文,1代表英文,2代表繁体。

全部配置完成后,先要下载i18n

前端国际化翻译已经完成了,现在分析一下后端怎么做国际化比较方便呢? 

我想到的有三种方案

第一种方案:可以像Vue这边这样干,在配置文件里面写死,但是这样干也是有局限,比如我新加一个功能,所有的配置又得加上我新加功能需要翻译的内容,非常麻烦,不可取。

第二种方案:在配置文件里面写死这个方案不可取,我们试着往数据库那边入手,翻译的内容放在数据库里会不会容易操作点呢,如果我们要翻译的内容在数据库里做好翻译,翻译的时候直接去数据库里查就方便多了,所以第二种方案我们可以在数据库里面设置三份表,一份存中文,一份存英文,一份存繁体,但是这样的话问题又来了,如果我表很多有一两百张表的话搞三份就得五六百张表了,所以这个方案也不太可行。

第三种方案:我们可以在表里选择性的加字段,如果需要在页面里展示要翻译的内容,我就加两个字段,一个存中文,一个存英文这样干就方便多了,代码也不会显得那么臃肿。

这样的时候我们只需要在前端页面那边,需要翻译的字段新增的时候就加上中文,英文,繁体都入库,修改的时候我们也在页面设置三个一起修改,这样又可以保持翻译内容的表达的意思都是一样的,查询的时候就全部查出来,让前端那边判断点切换的时候是哪种语言就让他展示哪个字段,所以第三种方案相比于另外两种更加的灵活。

如图所示,我们只需要在表里添加好字段,然后直接操作SQL就简单多了,下面是新增和查询的展示。

修改时的展示:

到这里,后端的国际化翻译也结束了,其实都不是很难,只要理清思路自己要干什么,然后想办法一步一步实现就好了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot,或springcloud微服务项目前端Vue和后端java实现国际化 的相关文章

  • 如何将log4j日志文件更改为utf8

    我收到了一个使用 log4j 作为记录器应用程序的代码 如何为其生成 UTF8 日志文件 log4j 创建的日志文件目前为 ASCII 格式 我已经尝试过以下操作 按照以下说明设置日志文件的文件编码 vi current set bomb
  • 如果我在 JSP 中有 html 元素,那么执行顺序是什么?

    什么将执行第一个 body 元素或 head 元素 Head Body scriplet 如果我明白您的要求 JSP 文件中的每个元素都会按照代码从上到下出现的顺序进行处理
  • Gradle 同步失败:配置项目“:lib”时出现问题

    我正在尝试在 android studio 中构建一个项目 但它总是失败 并出现名为 org gradle api ProjectConfigurationException A problem occurred configuring p
  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • Java程序验证signtool签名的数字签名

    我已经使用 SignTool 对文件 exe 或 dll 不是 jar 文件 进行了数字签名 Signtool还可以验证数字签名 但我的要求是使用java程序检查由signtool签名的文件的数字签名 我在互联网上搜索但没有找到任何信息 您
  • 无法获取未知属性“运行时”Gradle 7.0

    我最近切换到 gradle 7 0 现在无法构建我的项目 jar 并出现错误 无法获取 org gradle api internal artifacts configurations DefaultConfigurationContain
  • 使用Keycloak保护Tomcat应用程序时出现HTTP 403禁止错误

    我为这个错误苦苦挣扎了一整天 我一遍又一遍地检查我在tomcat中Keycloak和APP的配置 没有发现错误 下图为测试场景 APP配置 1 Keycloak json是从Keycloak控制台复制的 2 context xml 也正确
  • GWT 代码服务器在使用 Maven 原型的新生成的项目中找不到模块

    我已经使用 GWT 和 eclipse 一段时间了 我想玩一下 Maven 和 GWT 插件 gwt maven plugin 在此输入链接描述 http mojo codehaus org gwt maven plugin 我尝试在 Ec
  • Android Studio 中没有参考文档

    昨天刚刚出现了一个新问题 当我将鼠标悬停在方法上或按 Ctrl Q 时 我通常会获取该特定方法的文档信息 但现在我只是得到 按 Ctrl QSharedPreferences getLong Following external urls
  • Hazelcast Jet 变更数据捕获

    我在我的应用程序中使用 Hazelcast 更改数据捕获 CDC 我使用 CDC 的原因是 如果使用 jdbc 或其他替代功能将数据加载到缓存中 会花费大量时间 所以CDC将在数据库和 Hazelcast Jet 之间进行数据同步 Stre
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • 使用java将文件从GCS存储桶传输到SFTP服务器

    我能够从 GCS 存储桶读取文件 但所有库都喜欢jsch将文件传输到 SFTP 服务器时会查找文件路径 而不是内存中的文件 我不想将从GCS读取的文件写入磁盘 如何将内存中的文件传输到SFTP 我假设您想上传内存中的数据 JSch 实际上有
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • spring-hibernate 花费更多时间的任何原因?

    目前 我正在春季和冬眠期间从事一个项目 我来到这里 获取记录并在 JSP 中显示这些记录需要更多时间 我在各处都保留了时间戳 以查看哪里花费了更多时间 Time HomeController start 2014 07 09 18 58 5
  • 嵌套异常是java.lang.NoClassDefFoundError:无法初始化类org.springframework.jdbc.support.SQLErrorCodesFactory

    我正在使用 spring 和 jdbctemplate 编写一个应用程序 但是我遇到了以下错误 org springframework web util NestedServletException Handler processing f
  • 我们可以将请求分派到 servlet 内的 HTML

    这可能吗 RequestDispatcher rd request getRequestDispatcher index html rd forward request response 是的 您可以将请求分派到 HTML 页面
  • 当列表中不存在 X 时,从列表中查找大于 X 的值

    我试图从列表中查找大于特定值 在我的情况下已知 的值 Example Given list 1 2 5 10 15 list is sorted 查找大于的值X 7在这种情况下 期望的结果 返回一个包含值的列表 10 15 我尝试使用jav
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p

随机推荐

  • picodet 详解

    picodet 详解 backbone ESNet picodet 详解 Neck CSP PAN
  • C++结构体的使用

    一 结构体指针 定义学生结构体 struct Student 成员列表 string name 年龄 int age 分数 int score 1 创建结构体变量 Student s 张三 18 100 2 通过指针指向结构体变量 因为变量
  • DC/DC:闭环控制的降压(Buck)变换电路原理设计及实验仿真

    在各种电力电子装置电源应用中或多或少地存在直流电源变换器 为保证直流输出电压值恒定在负载需要地电压范围内 一般需要设置自动调整单元 以保证在输入电压或者负载发生变换时 其输出电压能快速调整到规定的设定值 降压 Buck 变换电路原理图如图所
  • pandas异常值检测与处理

    关注公众号FF工作室 回复pandas异常值检测与处理 获取数据 1 异常值检测 1 1 标准差法 outlier gt x n 或outlier
  • 如何让移动硬盘在Mac和Windows上通用使用

    刚入手了一块新的移动硬盘 Mac电脑插上却发现一片空白无法使用 这是什么情况呢 原来一般一块新的大容量移动硬盘刚入手时 默认是NTFS格式 这是Windows的一种特有硬盘格式 但是Mac上只能读取不能写入 Mac和Windows上通用的格
  • Python 基础知识8 循环

    循环语句关键知识 while flag True num 0 while flag and num lt 9 print meng num 1 死循环 while True print ling range 函数 for i in rang
  • R语言填坑

    最近在做一个数据挖掘的算法 用到了R语言 对遇到的一些坑 基础知识 做一个简单记录 文件编码问题 脚本写完之后保存可以选择UTF 8或者GB2313 可以解决中文乱码问题 同样 读文件的时候如果出现读不出来的情况 记得加一个 encodin
  • linux查看剩余信息保护,linux系统日常管理----监控系统的状态(一)

    监控系统的状态 1 w查看当前系统的负载 相信所有的linux管理员最常用的命令就是这个 w 了 该命令显示的信息还是蛮丰富的 第一行从左面开始显示的信息依次为 时间 系统运行时间 登录用户数 平均负载 第二行开始以及下面所有的行 告诉我们
  • 西门子S7-1200控制伺服/步进电机方法与接线(全)

    西门子S7 1200控制伺服 步进电机方法与接线 全 伺服 步进电机在非标自动化控制中十分常用 但作者发现在各类开源网站上很少有人做西门子1200PLC控制伺服 步进电机的教程 于是今天想着跟大家分享一下 本文共分为一下几个四个内容 文章目
  • IDEA 如何搭建python环境

    首先打开idea 首先是file gt setting 然后点击Plugins 然后在Marketplace里面搜索python 然后点击Installed 最后再重启一下IDEA
  • 最优化六:牛顿法(牛顿法、拟牛顿法、阻尼牛顿法)

    牛顿法将目标函数近似为二阶函数 沿着牛顿方向进行优化 包含了Hession矩阵与负梯度信息 阻尼牛顿法在更新参数之前进行了一维搜索确定步长 确保沿着下降的方向优化 拟牛顿法用常数矩阵近似替代Hession矩阵或Hession矩阵的逆矩阵 不
  • GprMax的建模in文件编写详细解释

    一 in建模文件示例 gprMax http www gprmax com 是一款模拟电磁波传播的开源软件 它采用时域有限差分 FDTD 方法求解三维麦克斯韦方程组 gprMax是为模拟探地雷达 GPR 而设计的 但也可以用于模拟电磁波传播
  • 设计模式之组合模式

    组合模式 将对象组合成树形结构以表示 部分 整体 的层次结构 组合模式使得用户对单个对象和组合对象的使用具有一致性 class Program static void Main string args Composite root new
  • python 文件读取

    def read file 读取文件 file name test txt 打开文件 f open file name encoding utf 8 with open file name encoding utf 8 as f 读取文件内
  • 将Ubuntu 的文件映射到windows 中

    可以通过Samba服务器将VM 下安装的Ubuntu 的文件映射到windows系统下 从而实现在windows下对虚拟机中的文件进行编辑 1 sudo apt get install samba 安装samba服务器 2 vim etc
  • Scala中的集合(容器)元素

    1 列表List https blog csdn net hzp666 article details 115004788 2 vector 向量 https blog csdn net hzp666 article details 115
  • Java多线程(面试)

    一 程序 进程与线程 程序 Program 程序是一段静态代码 进程 Process 进程是指一种正在运行的程序 有自己的地址空间 特点 动态性 并发性 独立性 并发和并行的区别 并发 多个cpu同时执行多个任务 并行 一个cpu同时执行多
  • TCP/IP网络编程之四书五经

    TCP IP网络编程之四书五经 http blog chinaunix net u 24935 showart 330099 html http book csdn net bookfiles 69 100691972 shtml http
  • python笔记8--命令行解析Argparse

    python笔记8 命令行解析Argparse 1 功能 2 源码案例 2 1 默认功能 2 3 添加说明 2 4 设置参数类型 2 5 设置参数可省略 2 6 同时存在可省略和必须参数 2 7 设置参数的范围 2 8 结束案例 3 说明
  • SpringBoot,或springcloud微服务项目前端Vue和后端java实现国际化

    外包公司接到了一个新加坡绿联国际银行的项目 有一个需求是要求实现国际化 像谷歌浏览器自带翻译那样 点按钮可以切换英文 繁体 中文来回切换这种效果 琢磨过之后找的资料最多的就是说用i18n 用i18n这个思路没问题 也很简单 下载一下i18n