//LanguageMgr.js //多语言管理类,主要功能是加载多语言的图片和文字
let LanguageMgr = {
/**
* 初始化
* @param
*/
init() {
//默认语言为简体中文
let kind = "CHS",lan = LOADLOCAL("language");
if (lan) {
kind = lan;
}
this.setKind(kind);
cc.log('语言管理器初始化完成');
},
/**
* 设置语言类型
* @param kind
*/
setKind(kind) {
this.kind = kind;
},
/**
* 获取当前语言类型
* @param kind
*/
getKind() {
return this.kind;
},
/**
* 修改语言,缺乏EventMgr,暂时注释
* @param kind
*/
changeLanguage(kind) {
if (this.kind != kind) {
this.setKind(kind);
SAVELOCAL('language', kind);
cc.director.emit('CHANGE_LANGUAGE');
}
},
/**
* 获取语言包对应的文本
* @param txtIdx
* @param param
*/
getText(txtIdx, param) {
if (CFG.language && CFG.language[txtIdx]) {
let str = CFG.language[txtIdx][this.kind] || "";
if (param) {
if (param["X"] !== undefined){
str = str.replace("X", param["X"].toString());
}
}
cc.log('获取语言包对应的文本txtIdx::',txtIdx,',文本=:',str);
return str;
} else if (txtIdx == "") {
return "";
} else {
console.error("文本 " + txtIdx + " 没有多语言");
return txtIdx;
}
},
/* getSprite(path, cb) {
cc.resources.load('languagesprite/'+spritename, cc.SpriteFrame, (err, spriteFrame: cc.SpriteFrame) => {
if (err) {
return cb(null);
}
cb(spriteFrame);
});
} */
};
//module.exports = LanguageMgr;
window.LanguageMgr = LanguageMgr;
//LanguageLabel.js==直接挂载在相应的Label组件上面再配置相应的key即可
cc.Class({
extends: cc.Component,
properties: {
txtIdx:''
},
onLoad(){
cc.log('LanguageMgr:',LanguageMgr);
},
start() {
cc.director.on('CHANGE_LANGUAGE', this.changeLanguage, this);
this.changeLanguage();
},
/**
* 监听切换语言事件
*/
changeLanguage() {
let label = this.node.getComponent(cc.Label);
if (label) {
label.string = LanguageMgr.getText(this.txtIdx);
} else {
console.log(this.node.name + " 挂载的节点没有label组件!");
}
}
// update (dt) {}
});
//LanguageSprite.js==直接挂载到相应的Sprite组件上,再配置相应的key
cc.Class({
extends: cc.Component,
properties: {
imgIdx:''
},
onLoad(){
},
start() {
cc.director.on('CHANGE_LANGUAGE', this.changeLanguage, this);
this.changeLanguage();
},
/**
* 监听切换语言事件
*/
changeLanguage() {
let sprite = this.node.getComponent(cc.Sprite);
cc.log('sprite::',sprite);
if (sprite) {
cc.resources.load('languagesprite/'+this.imgIdx+LanguageMgr.getKind(),cc.SpriteFrame,(err,Lsprite)=>{
if(err){
cc.log('GETLANGUAGESPRITE,err:',err);
return null;
}
sprite.spriteFrame = Lsprite;
});
} else {
console.log(this.node.name + " 挂载的节点没有sprite组件!");
}
}
// update (dt) {}
});
对于需要动态修改的文本则需要使用 Label.string = LanguageMgr.getText(key); 的形式使用