一、背景
随着经济全球化的深刻,许多中国品牌纷纷开始在海内市场开疆扩土。实现全球化意味着你的产品或者利用须要可能在寰球各地的语言环境应用,咱们在进行海内业务的推动时,须要面对的最大挑战就是多语言问题。实现好多语言零碎的本地化,更方便快捷的批改多语言文案能让你的产品在各个国家地区里有更强的产品竞争力和更好的用户体验以及更低的保护老本。以此为指标,在 vivo 内销我的项目的倒退过程中咱们通过屡次迭代,最终联合公司中间件的能力,实现了一套残缺的多语言解决方案。
二、多语言文案零碎的劣势
2.1 传统的多语言计划基于 Spring
i18n 计划,尽管可能解决根本的多语言问题,然而每次多语言的更新保护都须要发版,我的项目保护老本十分高。vivo 多语言文案零碎的诞生就很好的解决了这个问题,零碎联合公司理论状况,基于公司已有的平台—配置核心,最小化接入老本,优化了我的项目流程,标准化了文案需要的提出,翻译,测试公布等流程,集中式系统化的治理多语言文案极大的进步了公布效率和文案品质。反对传统 web 我的项目和前后端拆散我的项目,因而能够作为根底能力撑持许多零碎的本地化计划。
(图 2 - 1 多语言文案零碎和传统多语言计划比照)
三、多语言文案零碎的整体设计方案
(图 3 -1:零碎整体设计方案)
多语言文案零碎的解决方案整体能够分为 3 个局部:
1)MCMS 管理系统
提供多语言我的项目的创立、语种的创立,各个语种多语言文案的新增,批改,删除和同步等性能,为多语言文案提供了系统化的治理平台。
2)配置核心
联合公司理论状况,基于公司中间件—配置核心(vivo cfg),使得接入老本大大降低。配置核心能够看作是 MCMS 多语言文案管理系统和业务零碎的交互桥梁,在 MCMS 零碎依照肯定的命名规定对多语言文案进行配置后,会将文案同步至配置核心,供后续业务零碎依据本身的我的项目和语种信息进行多语言文案的获取。
3)业务零碎
通过引入多语言文案零碎(MCMS)提供的 jar 包,与配置核心进行交互。接入的业务零碎,在须要应用到多语言的中央,只需用和 MCMS 零碎雷同的命名规定进行多语言 key 的占位,在我的项目运行时依据以后环境的语言码即以从配置核心拉取到对应我的项目 - 语种的多语言文案并且替换我的项目中的多语言 key,从而实现语言的本地化。
四、多语言的具体解决流程
业务零碎接入多语言零碎后,进行多语言适配的整体架构如下图所示,流程如下:
(图 4 -1:零碎整体架构)
1)用户申请业务零碎,携带的信息包含:
- 界面可供选择的国家 / 语言按钮;
- 门路中携带的国家信息;
- cookie 中携带的国家信息。
2)服务器启动后进行信息初始化:
- 配置以后的默认国家 / 语种 / 时区;
- 配置 mcms 零碎所需的默认语言。
3)依据用户申请时携带的信息依据以下流程图逻辑判断出最终反馈给用户的国家和语言信息。
(图 4 -2:多语言解决流程)
4)依据 requestCountry,requestLocale 设置零碎 locale,零碎 locale 会影响时区的设置以及多语言文案的后缀。
5)依据零碎 locale 从配置核心中获取对应语种文案,这样,在根本的多语言解决中,咱们就退出了国家和 locale、时区的对应关系。
通过以上流程一个内销零碎在不同的地区,不同的语言环境在零碎运行时就能够从配置核心拉取到对应地区的多语言配置,用理论的多语言文案来代替代码中的多语言 key,从而实现在不同语言环境下展现不同的多语言文案。
五、多语言文案零碎的应用
5.1 零碎简介
(图 5 -1 MCMS 基本功能简介)
- 项目管理:进行我的项目的创立,在 MCMS 后盾新建一个我的项目须要在配置核心有一个对应的我的项目。
- 语言治理:在对应的我的项目下,进行语言版本的创立。
- 内容治理:在对应的我的项目下,依据具体的语言版本配置多语言信息。
- 用户治理:进行用户权限的治理,不同用户查看不同的我的项目。
5.2.1 应用流程
我的项目的创立
1)登录 MCMS 零碎,新建我的项目
(图 5 -2 新建多语言我的项目)
2)AppKey 和 appSecret 的申请(创立语言版本时应用)
APPKey 和 APPSecret 在配置核心的“凋谢接口”中进行申请。
(图 5 -3:配置核心 - 凋谢接口)
在配置核心的“凋谢接口”中生成 appKey 和 appSecret。
(图 5 -4 AppKey 和 appSecret 的申请)
5.2 语言版本的创立
在多语言文案零碎(mcms)后盾为我的项目新增语言版本,能够单个新增或者批量新增。
1)单个新增
(图 5 -6 语言版本创立形式)
(图 5 -7 新建语言版本)
2)批量新增
(图 5 -8 批量新增语言版本)
5.3 内容治理
在创立完我的项目并在我的项目中新增了若干个语言版本后,在内容治理中进行具体的语言信息的配置。
能够单条新增 / 编辑 / 审核,也能够批量导入;
1)新增配置项
(图 5 -9 新增配置项内容)
2)配置项内容的审核
审核通过 / 审核驳回 –\> 配置项失效 / 有效
(图 5 -10 新增内容审核)
3)内容治理反对查问、新增、导入、审核、批改、导出性能,配置项内容的状态转换如图 5 -11 所示:
(图 5 -11 配置项内容状态转换图)
4)批量导入多语言文案
获取导入模板
(图 5 -12 配置项的批量导入和导出)
填写配置键、配置场景、中文文案、外文翻译
(图 5 -13 导入文件模板)
导入配置文件失效
5.4 用户治理(权限治理)
为我的项目相干人员申请账号并绑定我的项目:
- 管理员 — 最高权限,治理所有我的项目;
- 普通用户 — 保护相干我的项目的多语言内容的权限;
(图 5 -14 新建用户和我的项目权限治理)
六、多语言文案零碎的接入
6.1 引入 jar 包
(图 6 -1:引入 jar 包)
6.2 配置核心和多语言零碎进行关联配置
多语言零碎与配置核心是强关联的,能够通过在配置核心配置不同的语言版本,来达到辨别不同的语种的目标。
在我的项目启动时获取到语言的配置信息。
locale.config
env.list.config
(图 6 -2:语种的配置)
@Configuration
public class WebConfiguration {
@Bean
public VivoPropertyExtendConfigurer vivoPropertyExtendConfigurer(){VivoPropertyExtendConfigurer vivoPropertyExtendConfigurer = new VivoPropertyExtendConfigurer();
vivoPropertyExtendConfigurer.setLocations(new ClassPathResource("config/vivo.properties"));
vivoPropertyExtendConfigurer.setEnvListConfigKey("env.list.config");
return vivoPropertyExtendConfigurer;
}
@Bean
public FilterRegistrationBean mcmsFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new VivoMcmsPropsFilter());
registration.addUrlPatterns("/mcms/props");
registration.setName("vivo-mcms-filter");
registration.setOrder(1);
return registration;
}
}
6.3 配置核心创立多语言版本
在配置核心创立和多语言零碎绝对应的语言版本,在多语言零碎中配置的多语言文案会同步到对应的配置核心语言版本中。
(图 6 -3:以后我的项目的语言版本)
(图 6 -4:从多语言零碎同步到的多语言文案)
6.4 多语言的切换
在多语言文案零碎中创立的多语言都会同步到配置核心,而配置核心与我的项目是强关联的,在我的项目启动时,会从配置中拉取若干配置项。在我的项目创立了语言版本后,我的项目启动时会依据以后的语言环境拉取配置核心对应的多语言文案,依据其 key-value 的数据结构,对我的项目中的 key 进行替换,从而实现在不同的语言环境展现不同的语言。
七、多语言的切换
多语言文案零碎的另一个长处是实现了前台可视化,所见即所得。通过浏览器插件的形式,在前台进行页面调试时,能够实时的对页面以后标签的文案进行多语言的批改,在前端文案展现批改的同时,通过调用 MCMS 零碎提供的接口将批改内容实时的更新到数据库和同步到配置核心,从而实现前端页面批改和后盾服务端数据的一致性。多语言文案的可视化大大提高了零碎的应用体验,晋升了接入方的开发效率。
(图 7 -1 多语言前端可视化)
八、结语
本文次要介绍了 vivo 内销多语言文案零碎的产生背景,方案设计,业务零碎的接入,以及可视化等。凭借接入简略,系统化治理,可视化,即时失效等长处曾经有越来越多的内销我的项目接入了多语言文案零碎。接下来为了适应疾速倒退的内销业务,零碎也会一直的迭代优化,成为更不便,更快捷,更直观的多语言解决平台。
作者:vivo 官网商城开发团队 -Sun Yanwu