CocosCreator使用i18n实现多语种

发布时间 2023-09-15 14:54:34作者: 嗯哦啊哈

实现:

  这是官方给出的i18n插件下载地址:GitHub - cocos-creator-packages/i18n: i18n for Label and Sprites

  解压后可以将一整个文件拖到项目的assets文件夹里,如果嫌文件太多可以只保留i18n和runtime-scripts文件夹,如下:

 

  在目录里,i18n文件里的en和zh文件分别是英文配置和中文配置,而在runtime-scripts夹里的诸多文件,我们真正需要操作也只有LanguageData.js文件,而LocalizedLabel和LocalizedSprite则是用于挂载的组件。

en和zh

         这两个文件是用于配置项目中文本的显示内容,如果还需要有其他语言,可以增加配置。在不同语种配置文件里用同样的key来表明是同一字段,在此处配置文本内容。

 

         在添加文本时按初始的格式就可以添加。

LanguageData

  LanguageData文件需要配置en和zh的路径,将代码修改成:

复制代码
let polyInst = null;
if (!window.i18n) {
    window.i18n = {
        languages: {
            'zh': require('../i18n/ch'),
            'en': require('../i18n/en')
        },
        curLang: ''
    };
}
复制代码

         LanguageData文件中需要删除这段代码,这是为了在项目开始时初始化,但这里会报错。

复制代码
if (CC_EDITOR) {
    Editor.Profile.load('profile://project/i18n.json', (err, profile) => {
        window.i18n.curLang = profile.data['default_language'];
        if (polyInst) {
            let data = loadLanguageData(window.i18n.curLang) || {};
            initPolyglot(data);
        }
    });
}
复制代码

  在原来的位置加上:

复制代码
window.i18n.curLang = cc.sys.language;
initPolyglot(loadLanguageData(window.i18n.curLang) || {});
 
function loadLanguageData (language) {
    return window.i18n.languages[language];
}
复制代码

  这样就能在项目运行时初始化系统语言,这里的cc.sys.langaue是当前系统语言字符串。

初始化语言

//初始化语言
let i18n = require('LanguageData');
i18n.init('en');
i18n.updateLanguageRender();

切换语言

//切换语言
let i18n = require('LanguageData');
i18n.init('en');
i18n.updateLanguageRender();

LocalizedLabel和LocalizedSprite组件

  上面部分仅仅只是切换语言,但文本或图片对象还没绑定,在i18n里可以通过代码或插件自带的组件进行语言的绑定和切换。

组件绑定:

  点击需要绑定的文本节点,添加自定义组件->LocalizedLabel,将文本配置的key写上去即可绑定。

  点击需要绑定的图片节点,添加自定义组件->LocalizedSprite,将对应的图片和语种名名(如en/zh)写上去即可绑定。

代码绑定:

  用i18n的t函数即可获取对应key值的文本内容如下,如果想要实现部分文字或图片语言切换,可以在代码里实现:

let i18n = require('LanguageData');
let hello= i18n.t('label_text.hello');
cc.log(hello);