国际化(L10N)全流程使用

游戏需要国际化的情况下,可以使用L10N扩展进行多语言设置。

cocos国际化有两种实现方式,分别成为L18N和L10N,本篇主要讲述L10N的使用,其功能更强大。

开启L10N

cocos creator 版本要求:3.6及以上

扩展-扩展管理器中安装并启用localization-editor

自动收集要翻译文本

打开面板-本地化编辑器

  • 本地开发语言在国内一般是简体中文

收集文本

收集目录一般是场景文件夹和代码文件夹

删除文本

自动搜索出来的结果有时候不一定是我们想要的,基本上它会把场景中的Label加上L10nLabel组件。对于一些国际通用的Label内容,比如数字和字母并不需要翻译,这时候我们就要从要翻译的内容组删除。cocos 本地化编辑器并没有提供删除单条数据功能,需要手动删除。

手动删除需要进行两个操作

  1. 移除L10nLabel,进行删除组件之前需要记录下L10nLabel的key属性值

  1. 删除配置

自动收集图片

将要国际化的图片放到一个或者多个目录下,在搜索时候指定这些目录和图片后缀

点击右下角收集并统计按钮后目录下的图片会进入待翻译列表。

点击翻译查看列表

点击 导入 选择对应的英文版的图片

最后点击保存

手动收集

手动管理适合动态Label值动态变化的情况。使用流程如下

  1. 建一个csv文件来管理要翻译的内容,表头格式如下

  1. 每一行是一个待翻译的内容

  2. 点击导入文件将csv文件导入本地化编辑器

翻译

点击翻译按钮将进行多语言翻译,如果配置了译文服务商,可以自动翻译,否则需要手动翻译

手动设置多语言

对于动态变化的Label,可以通过脚本来设置多语言

const l10nKey = "tool_title"
if(l10n.exists(l10nKey))
{
  titleLabel.string = l10n.t(l10nKey)
}

预览效果

点击各语言的预览按钮,场景中即会展示对应的语言。

游戏内支持多语言

可以根据以下API在游戏适当的位置来切换语言

获取所有可用语言

console.log(l10n.languages)
// ['zh-Hans-CN', 'en-US']

动态切换语言

l10n.changeLanguage('zh-Hans-CN')

注意: 在调用此方法后,会自动重启游戏,请务必做好数据持久化工作。

构建发布多语言

国际化翻译完成后,在构建时即可选择要支持的语言。

注意点(踩坑)

  • 自动搜索会把场景中的label全部加上L10nLabel组件,并且label的值将由L10nLabel接管,而且接管后的这个值是不可变的。
  • 自动搜索的结果不能删除,只能手动删
  • 基于L10nLabel的string不可变,动态变化的label不适合使用自动搜索,需要手动管理多语音
  • 如果游戏项目规模比较大,不建议使用自动搜索,个人觉得更好的方式是在将需要翻译的内容手动添加L10nLabel并设置key值,维护一个doc文件来管理

广告时间

以上经验以用于这些产品中,使用微信扫一扫打开


搜索:《2048合成大球球》


搜索:《你能找到几只熊》

9赞

最喜欢这种分享了,收藏了,用到再看 :partying_face:

问楼主几个问题:
1.本地化的图片可以使用图集吗?是使用自动图集吗?
2.代码如何动态获取某个文本,或者拼接使用?比如按钮上 “点击x次”,x会动态变化的。

  1. 我个人还没有试过图集,原理上应该是可以的,感觉要求图集里的元素尺寸完全一样就行。
  2. 点击x次 个人感觉最简单是方法是分成两个key,单独翻译。比如"点击"hitKey,"次"countKey , 这样的话在其他地方用到点击和次也能复用key, 然后在拼在一起就行了
    label.string = l10n.t(hitKey) + x + l10n.t(countKey)

L10N是本地化的,i18n是国际化的,我看官方文档:

  • 国际化 需要软件里包括多种语言的文本和图片数据,并根据用户所用设备的默认语言或菜单选择进行实时切换。
  • 本地化 是在发布软件时针对某一特定语言的版本定制文本和图片内容。

这个L10N是发布两款不同语言的软件的作用吗?比如一款中文,一款英文软件?
而i18n是只需一款软件,可以根据不同设备语言进行切换语言?
还是说L10N也能根据设备自动切换语言?

这2个一样的,就是用法不同,L10N内置了自动翻译啥的,看着比较高级,但我还是喜欢用i18n :rofl:

1赞

i18n在21年最后一次更新了,已经不维护了,我3.8版本的按官网弄报错,评论都说3.4用不了,咋整

我觉得可以考虑弄两种Label, 一个可支持了l10n, 一个不需要。那么自动搜索就能跳过后者了~~
不然手工删除挺麻烦的。

动态切换语言需要重启,这一点就很不友好啊 :sweat_smile: 老板不会同意的 :rofl:

1赞

新用户进入默认就会识别用户语言,切换语言是个频率很少的操作,重启还是可以接受的,并且稳定性要好很多,并且多语言相关的资源也需要下载的,

这种拼接的方式对于多语言翻译来说不太友好,毕竟有些长语句翻译后,语序会有变化,有没有什么方式能把’点击${x}次’'这种能整体用l10n的方式呢?

l10n.t(key, x)

麻烦可以给个具体的例子么?我试了很久都没解决,万分感谢

https://forum.cocos.org/t/topic/136913/64?u=jare

1赞

感谢感谢!!!

请问构建界面这里的参数,命令行构建时,能否通过命令行传入?
image

你可以在 /localization-editor/src/lib/builder/hooks.ts 的 onAfterInit 打印一下 options 看看

好的。我试试。

不同意?给你老板一个大逼斗。让他看看你的厉害