请问大家一般怎样解决多语言问题?

用i18n。

判断不同地区语言对应下载不同的包,可以避免包体过大的问题

您的意思是做成几种语言的apk是吗?谷歌商店支持这种机制?
如果支持,那这方法肯定是一种解决方案,就是可能版本升级的时候要维护几个apk包。。。

我们是走的语言配置,然后用一个语言脚本控制,《0.汉语,1日语》,1001 你好 ,空你急哇

我第一个想到的也是程序里面判断语言,然后if语句走不同分支。
不知道cocos里面有api来判断当前语言环境吗?

楼上老哥不是说了i18n

嗯嗯,不好意思,开始没太明白。刚刚搜了下,网上有不少i18n的文章,既然这是成熟的解决方案,那就好办了。

我个人倾向于这种控制方式,楼上有老师说分为几种apk包,肯定也是一种解决方案。不过我的加载资源不是很多,即使都放在一个包里也不是特别大。我反而比较担心版本升级时维护几个包有点麻烦和容易出错(当然,如果产品已经成熟了,不需要总升级的话,倒无所谓)

做一个excel表格,第一列是key,后面每一列就是一个翻译。然后在代码里面凡是需要更新文本的时候都通过一个接口类似 GetLocalizedString(string key),在这个接口内部判断一下系统语言,然后返回不同的翻译值。

这样处理以后,所有代码里面填入的都是key,后续做本地化的时候只需要在excel里面填表翻译就行了。

2赞

嗯嗯,纯文本的话确实可以这样。因为有的是图片格式文本,还有人物音效,所以可能比您说的方案要复杂些,不过大概也是差不多

多语言要考虑的问题

1. 如何更新多语言配置

团队怎么更新多语言?因为不可能一次性提供完整没错的多语言,所以需要经常修改,技术需要考虑的是怎么满足这种修改并且拉下最新的多语言文档下来,我一般建议在在线文档,方便团队协作

2. 如何拆分多语言并合理加载

技术怎么将这些多语言拆分为每一种语言配置,运行时只加载当前使用的语言配置,释放没使用的语言配置。比如:

3. 怎么处理多语言切换后的渲染问题

  1. 怎么处理多语言切换后的文本渲染问题?多语言切换后?能否还可以使用 BMFont?用TTF char模式 BmFont 模式?是否会打断合批?
  2. 怎么处理多语言切换后的图片渲染问题?有些图片,切换不同语言后,也可能需要换图,需要考虑的是,换图之后,你怎么处理合批?

4. 如何在编辑器中满足多语言预览问题

你需要预览切换不同语言之后的效果,比如切换到某个语言之后,该文本是否超长,是否换行了等UI效果。此时你需要一个预览功能:

  1. 运行时预览
  2. 编辑器预览

明显,在编辑器阶段就可以预览,效率肯定比运行时预览高,因此你必须实现在编辑器中预览不同语言的效果

1赞

谢谢谢谢!信息量很大啊,我慢慢消化消化

1赞

cc.sys.language,支持的语种还是挺多的,版本:2.4.3

非常感谢!是不是有了这个cc.sys.language的API,就不需要用i18n了呢?

需要啊,这个只是告诉你当前设备是什么语言环境,但是需要你自己把游戏内的语言切换到对应的环境。后面这块是i18n的工作,我是这么理解的

哦。。。多语言这块我还没太吃透。我的初步理解是如果cc.sys.language能判断出用户的语言环境了,那比如他是英文,需要显示用户提示信息的时候我就显示“hello…”,是中文的话提示信息的时候我就显示“您好。。。。”,这不就解决多语言问题了吗?
那i18n还有什么用呢?是不是我哪里脑子绕住了?

你这下把我也问懵了,我也没用过,结果去搜了一下,好家伙,i18n是表示国际化这个单词的缩写,个人理解也就是做语言切换的逻辑吧?跟你说的这个是差不多的,应该是别人有造好的轮子可以直接用,找不到的话就自己造个这轮子吧,也不难

i18n就是他帮你做好了一套解决方案,思路都是差不多的,无非就是包装了一下可以直接用,当然就也会有限制,你得按照他的要求来。如果自己实现呢,那就自由一些。

嗯嗯,上午一直忙别的,还没具体看i18n这块。目前脑子里的理解就是觉得cc.sys.language似乎就够用了,用户是啥语言,我就提示什么纯文本文字,当然,图片文字,人物音效这块都一样,都是基于cc.sys.language的判断结果,该给用户展示哪种语言就展示哪种语言的。

等稍微有点时间的时候,看看i18n,也许到时候会有新的理解了。

好的好的,等具体研究i18n后,有不懂的地方再请教各位老师,谢谢!

这是我写的一个多语言组件, 支持编辑器预览,开源的,你可以参考一下

Cocos Creator 第二优雅的多语言组件实现 - Creator / 扩展插件 - Cocos中文社区