国际化(i18n)
国际化(i18n)
面对的问题
文案
静态文案翻译
使用i18n国际化插件匹配字典重新赋值(预估工作量相当大,尽量配合编辑器插件直接进行机翻,后续再给业务人员校准)
动态文案翻译(server端下发的动态数据)
样式
- 不同语言长度不一样造成的样式错乱
根据语言切兼容样式的class
图片替换
时区问题
长文案加变量的翻译问题
切换语言与服务端数据间的更新
兜底解决,直接刷新当前页面
方案
定义国际化配置
定义的方式有多种,多以文件的形式单独保存,如json,js,properties 等,并且将配置信息以键值对的形式保存备用当前采用JSON格式,易于后期远端维护及更新
根据环境读取配置
- hash型:#cn; #en; #us
- saerch型:?lan=cn; ?lan=en; ?lan=us
- url/meta型: 163.com/cn/; 163.com/en
- 缓存型:缓存形式多为cookie,默认cn,用户重新设定后将缓存更新
当前方案采用缓存型,默认根据用户浏览器设置的语言自动选择,兜底语言默认设置为
en
,语言状态会存储再本地storage及cookie中。
具体方案
react-i18next
+ i18next-browser-languagedetector
+ i18next-http-backend
- react-i18next: 作为主核心,提供对语言包切换及字段映射的支持
- i18next-browser-languagedetector: 用来初始化语言环境,针对用户的浏览器进行嗅探,使用对用的语言包,并维护切换后的语言信息(存储在本地localstorage及cookie - 后续后端可直接根据cookie中的该字段进行对应处理)
- i18next-http-backend: 提供了语言包异步加载的能力,后续支持到远端维护语言包的能力
Antd国际化
通过对 react-i18next 中 useTranslation
拿到 i18n 中的 当前的 语言信息,再通过顶层容器 ConfigProvider
动态的切换对应的 Antd 语言包
编辑器配套插件
希望通过插件形式,简化前期开发流程,尽可能减少国际化对研发效率的影响。
VSCode - i18n Ally
VSCode插件直接搜索
i18n Ally
进行安装打开命令工具
Cmd + Shift + P
输入i18n
过滤出i18n Ally
命令,自动设置语言包地址(未能识别可手动选择)终端下方可选择显示自己希望显示的语言
这样就能在文本失焦状态显示对应的语言译本,选中后又能显示源码快速提取文本至本地化文件
选中文本内容 打开命令工具Cmd + Shift + P
选择提取文案到i18n
(建议将此设置为快捷键)
新建路径时可用.
分隔,这样就可以形成嵌套
然后选中你使用的语法
再回头看一下本地化的JSON文件,我们可以发现所有文件都新增了该字段,默认的语言文件也已成功填充该字段,剩下就是翻译未翻译的对应语言。
我们再利用工具直接将未翻译的语言直接通过机翻,待后续业务人员二次校准
点击翻译文案,如果没有意外的话对应的文本就成功翻译并赋值该字段因为此处调用的机翻接口是谷歌,可能会因为ip污染导致调用失败,可以间隔一段时间再尝试调用,插件本身还提供了其它翻译提供商,后续自行研究。
文档地址:lokalise/i18n-ally
WebStorm 待续….
目前看了一下,i18n Ally 没提供 WebStorm 的版本,其它插件使用感觉还是有些欠佳…