多语言解决方案

设计及实现:

主体分为3个方面,一是对多语言内容的处理,整理出哪些业务内容是需要进行国际化处理的,统一放在多语言文件当中。二是如何进行存储,通过简单快捷,低耦合的方式进行日志的存储。三是如何进行翻译,即通过何种方式将于语言不相关的key找到对应的翻译内容。

多语言文件处理:

该项目是基于spring-boot实现的微服务架构方式,根据不同职责分为运营分析模块,系统管理模块和数据接入模块,系统日志的处理专门由服务管理模块负责,因此多语言文件也存储在服务管理模块内部。因为系统日志所要展现的内容有区分不同字段,如下图所示:

100013_sBGK_913484.png

所以需要对不同的字段进行区分,这里采用key的分段命名法来实现方便管理,如下图所示:

100030_y1ZY_913484.png

由于是基于Spring框架,其本身就对多语言有支持,只需按照结构及命名要求将该多语言文件存放至resource目录下即可:

100034_IWR9_913484.png

 

多语言key值存储:

由于多语言的内容是变化的,数据库存储的是不变的key值,通过key值找到对应语言文件内的翻译,各个业务只需要在插入时明确key值即可。而为了降低日志插入功能与各个业务本身功能的耦合性,这里采用的注解的方式来实现,即在业务方法上编写日志注解,同时指定好各个字段所需要的key值,再通过切面的方式统一进行数据库的插入。

首先新建注解类,将各个字段的属性列出:

100043_EFxi_913484.png

然后,在各个业务的调用方法上指定该注解及内部的属性值:

100103_znJz_913484.png

最后编写切面类,对有该注解的方法进行增强编写,内容就是获取到注解中的日志信息,然后将其存储数据库中。

多语言翻译:

当用户请求日志页面时,需要从数据库中读取日志信息并将其翻译成需要的语言内容展示给前端页面显示,这里分为两步,一是获取到用户所需要的语言是什么,在用户登录时系统会存储用户的相关信息到session里,其中就有用户的语言信息,因此可以从这里获取到Locale信息,二是如何翻译,因为翻译文件命名是遵从Spring多语言格式的,因此这里也可以通过调用Spring所提供的方法来方便快捷的得到翻译内容:

100108_Tl1r_913484.png

这里说明一下,有些日志内容是不变化的,整个都是固定文字,而有些日志内容却需要加入一些变量来表示当时日志的一些具体内容,这时就需要在翻译文件中写格式化的内容,如下:

通过占位符的方式,将变量预留好,同时数据库中存储着这些变量值,最终是以params参数的形式来传入,Spring本身就已支持这种方式。

总结

多语言的处理在很多方面其实是大同小异的,比如说通过存储key的方式来记录,本文主要是结合Spring框架所提供的功能更方便的实现,以及对key的规划管理上的一些实践以提高可读性

转载于:https://my.oschina.net/ffse54s/blog/1623988

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值