概述
国际化的需求是为了适应不同的语言环境,能够提供不同的语言文字,以便更好地服务使用不同语言文字的人群。我们在开发过程中,一般为了快速实现需求,比较容易忽视国际化的需求,直接在代码里 hardcode 了中文方案。在真正有客户反映要切换不同语言时,才将原来 hardcode 的代码转换为字符码,根据 locale 环境做转换。
jeecg 的国际化方案
在 jeecg 的管理后台界面,我们可以看到有一个“国际化语言”的模块,用来管理需要国际化资源。
从功能界面上展示的字段,我们可以猜测出,jeecg 的实现方案是,定义一个 key ,然后为这个 key 提供不同语言对应的内容,然后在客户端请求数据时,根据请求传入的参数来决定选用哪种语言的内容。在录入或编辑的弹出窗,“语言”字段的选项只有“中文”和“English”两种,说明目前系统只支持这两种语言。从界面上无法看出的逻辑是,系统是怎么从请求来判定该用什么语言的?下面我们通过查看代码来查找答案。
国际化语言的服务实现类 MutiLangServiceImpl 提供了 getLang(String langKey) 方法来获得对应的语言内容:
以上便是 jeecg 实现国际化的主要流程,比较简单。如果要扩展到更多语言,则需要增加可配置选项,这时会发现 jeecg 代码里是用枚举类固定了可选的语言,因此要扩展还需要增加枚举项,以及修改相应的代码,这点就不太灵活了。如果要国际化的key都是比较固定的,一般会通过属性文件来配置,文件名的前缀一样,后缀为语言的 locale 字符,这种能用的处理方法也适用于客户端处理国际化。而 jeecg 通过数据库来管理国际化,也适合一些需要在线修改语言内容,动态管理的场景。所以,最终选择什么样的方案,还是要根据业务场景来选择。
领取专属 10元无门槛券
私享最新 技术干货