在cocosCreator中,多语言是我们常用到的一个功能。如果仅仅是单纯的文本,我们很好解决,但是我们在项目中经常会遇到要传递参数或者是使用富文本的情况,这个时候就需要进行特殊的处理了。特别是需要传递参数,因为不同语言语法的原因,参数可能在不同的地方,所以我们不能简单的通过%s
的形式进行参数传递,下面介绍我这里用到的方法。
富文本
富文本也是我们常用的一个功能,这里可以用两种方式实现。
- 在翻译文本中直接加上相关的参数,比如颜色,字体大小等。(不推荐)
- 使用正则表达式识别自定义标签并转化为富文本格式。(推荐,也是我这里要介绍的)
步骤
现在有这么一句话:同意我们的使用条款和隐私政策
,我们需要在翻译文本中加上相关的参数,比如颜色。这里我们需要让使用条款
和隐私政策
变成蓝色,并且可以点击,点击不同字样时,可以跳转到对应的页面。
我们可以这样设置我们的翻译文本:
1 | "Terms":{ |
然后再执行下面函数,将返回后的string
赋值给我们要使用的富文本即可。例如:
1 | this.richText.string = this.parseToRichText(Lang.getText("Terms")); |
1 | parseToRichText(text: string): string { |
多语言参数传递
就拿上面的的例子来说,我们希望使用条款
和隐私政策
通过参数传递的。如果,在你所用的多语言中,这两个词在文本中的位置固定。那么可以通过%s
的方式来传递就行了。(这里不使用富文本,单纯的Label)
这时的翻译文本可以这么写:
1 | "Terms":{ |
然后再执行下面函数,将返回后的string
赋值给我们的Label即可。例如:
1 | this.Label.string = Lang.getText("Terms", "使用条款", "隐私政策"); |
有些时候,我们需要传递参数,但是参数的位置在翻译文本中不同,这个时候就需要进行特殊的处理,可以通过使用占位符的方式进行传参。
这时的翻译文本可以这么写:
1 | "Terms":{ |
然后再执行下面函数,将返回后的string
赋值给我们的Label即可。例如:
1 | this.Label.string = Lang.getText("Terms", { |
这里写了一个通用函数,可以兼容上面的两种情况:
1 | public static getText(key: string, ...args: any[]): string { |
仅提供一个示例,实际开发中,需要根据实际情况进行修改。