多语言解决方案
设计及实现:
主体分为3个方面,一是对多语言内容的处理,整理出哪些业务内容是需要进行国际化处理的,统一放在多语言文件当中。二是如何进行存储,通过简单快捷,低耦合的方式进行日志的存储。三是如何进行翻译,即通过何种方式将于语言不相关的key找到对应的翻译内容。
多语言文件处理:
该项目是基于spring-boot实现的微服务架构方式,根据不同职责分为运营分析模块,系统管理模块和数据接入模块,系统日志的处理专门由服务管理模块负责,因此多语言文件也存储在服务管理模块内部。因为系统日志所要展现的内容有区分不同字段,如下图所示:
所以需要对不同的字段进行区分,这里采用key的分段命名法来实现方便管理,如下图所示:
由于是基于Spring框架,其本身就对多语言有支持,只需按照结构及命名要求将该多语言文件存放至resource目录下即可:
多语言key值存储:
由于多语言的内容是变化的,数据库存储的是不变的key值,通过key值找到对应语言文件内的翻译,各个业务只需要在插入时明确key值即可。而为了降低日志插入功能与各个业务本身功能的耦合性,这里采用的注解的方式来实现,即在业务方法上编写日志注解,同时指定好各个字段所需要的key值,再通过切面的方式统一进行数据库的插入。
首先新建注解类,将各个字段的属性列出:
然后,在各个业务的调用方法上指定该注解及内部的属性值:
最后编写切面类,对有该注解的方法进行增强编写,内容就是获取到注解中的日志信息,然后将其存储数据库中。
多语言翻译:
当用户请求日志页面时,需要从数据库中读取日志信息并将其翻译成需要的语言内容展示给前端页面显示,这里分为两步,一是获取到用户所需要的语言是什么,在用户登录时系统会存储用户的相关信息到session里,其中就有用户的语言信息,因此可以从这里获取到Locale信息,二是如何翻译,因为翻译文件命名是遵从Spring多语言格式的,因此这里也可以通过调用Spring所提供的方法来方便快捷的得到翻译内容:
这里说明一下,有些日志内容是不变化的,整个都是固定文字,而有些日志内容却需要加入一些变量来表示当时日志的一些具体内容,这时就需要在翻译文件中写格式化的内容,如下:
通过占位符的方式,将变量预留好,同时数据库中存储着这些变量值,最终是以params参数的形式来传入,Spring本身就已支持这种方式。
总结
多语言的处理在很多方面其实是大同小异的,比如说通过存储key的方式来记录,本文主要是结合Spring框架所提供的功能更方便的实现,以及对key的规划管理上的一些实践以提高可读性
上一篇: C - 因式分解与求和
下一篇: 命令(连锁运行 8)
推荐阅读
-
了解 margin collapse 和 margin merging 及其解决方案
-
管家婆 crm9.2 sp2 升级问题帮助和解决方案
-
客户关系管理系统(CRM)与巴特勒分销企业资源规划系统(ERP)的集成:无代码开发的互联解决方案
-
Bugzilla 手册和解决方案
-
删除 `cr` eslint(prettier/prettier) 错误的解决方案
-
GreenDao 可兼容升级并保留旧数据,是一个全面的解决方案!
-
史上最高效的 ORM 解决方案--GreenDao 3.0 解读
-
GreenDao 可兼容升级并保留旧数据,是一个全面的解决方案!
-
史上最高效的 ORM 解决方案--GreenDao 3.0 高级用法
-
MySQL 命令行客户端运行闪退问题解决方案,my.ini 文件内容