多语言版本解决方案

背景:项目在开发过程中都完全使用的中文开发环境,在代码、配表、ui里面有非常多的地方都直接使用了中文字符串。项目需要上海外,而且支持多个语言版本,切支持个语言版本之间切换,预计会上六七种语言的版本。

思路:使用脚本提取所有含有中文的字符串,根据字符串内容生成唯一的id,然后生成一份id和内容的映射表,将生成的映射表作为原始文件去翻译,格式如图:

id中文繁体英文俄语阿拉伯语土耳其语
中文生成的id提取的中文翻译的繁体

然后使用生成的id替换掉代码和配置表中的字符串,在显示时在根据id和语言环境去读取对应的字符串。

代码

代码中的不少用+号拼接的字符串,如:"血量 " + 1000,在中文中UI显示为:

血量 1000

但在其他语言的语序可能是不一样的,需要显示成:

1000 血量

所以直接提取"血量"进行翻译语序就不对了;需要处理成格式化字符串的形式:StrUtils.format("血量 %s", 1000),这样给到翻译,翻译可以动态的调整参数的位置,保证语序的正确性。

然后使用 python 脚本或其他工具,提取所有代码文件中的字符串,即单引号和双引号之间的内容,然后将有中文的部分保存,去重,生成上述格式的翻译文件。

通过搜索:+ ", + ', " + 和 ’ + 以快速找出用+好拼接的字符串

配置表

原始配置表不做处理,处理的是由配置表导出到代码中配置文件,比如js或者lua等,这样流程就跟代码一样,直接提取其中的带有中文的字符串即可。

配置表需要注意的是,尽量将配置表中重复的部分,通过参数传入,这样可以减少需要文本的数量,比如描述列:

编号描述其他
10010Lv10大宝剑,增加10点攻击
10020Lv20大宝剑,增加20点攻击
20010Lv10铠甲,增加10点攻击
20020Lv20铠甲,增加20点攻击

直接提取出来就会有4个字符串以下4个字符串需要翻译:

  • Lv10大宝剑,增加10点攻击
  • Lv20大宝剑,增加20点攻击
  • Lv10铠甲,增加10点攻击
  • Lv20铠甲,增加20点攻击

可以抽离成两列, 不同部分通过参数传入:

编号描述描述参数其他
10010Lv%s%s,增加%s点%s10;10
10020Lv%s%s,增加%s点%s20;20
20010Lv%s%s,增加%s点%s10;10
20020Lv%s%s,增加%s点%s20;20

这样就只有一个虽然配表里面有四个字符串 “Lv%s%s,增加%s点%s”,导出的时候可以将其定义为一个变量,在其他导出文件后,就只有一个字符串了。

const s1 = "Lv%s%s,增加%s点%s";
const a1 = [10, 10]
const a2 = [20, 20]

let config = {
    10010: [10010, s1, a1],
    10020: [10020, s1, a2],
    20010: [20010, s1, a1],
    20020: [20020, s1, a2],
};

在其他这个文件的字符串时,就只会有一个 “Lv%s%s,增加%s点%s”, 去掉了很多重复的内容,可以直接减少翻译量,同事语言包和配置表大小也能得到减少,从而包体大小和占用的内存大小。

UI

静态文本-删除

在做ui时,界面中有很多的静态文本,是写在在界面上的,不能根据语言版本,动态切换;需要删除ui中的静态文本,在代码中去设置,后续过重就跟代码中的文本一样处理就可以了。

多文本-改单文本

有一点需要注意的是,界面中有可能有多个文本拼接的文字,如 “血量 100”,可能因为对齐方式,或者字体颜色不一样,使用了两个文本“血量”和“100”,为了保证语序和对齐方式的正确性,需要将两个文本合并到一个文本中,变成“血量 100”,如果需要不同颜色,可以使用富文本。

协议

前后端交互的协议中有很多字符串,需要处理掉。

上行的字符串很少,基本上都是不需要翻译的,如果有,建议前后端约定好一个数字id,用于交互。

下行的字符串应该是很多,这一部分需要后端出来:

  • 对于不含翻译内容的字符串直接下发
  • 如果含有翻译内容,就需要下发对应字符串的 id
  • 如果还有参数,就讲这个字符串参数改为数组

客户端在收到协议之后,针对需要处理的协议,在其响应函数中对参数分别进行处理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值