Files
fc/dev/project/library/imports/4a/4a7b099a-af41-42f2-986b-6cc27641c002.js
2026-05-24 10:21:26 +08:00

219 lines
5.7 KiB
JavaScript

"use strict";
cc._RF.push(module, '4a7b0mar0FC8phrbMJ2QcAC', 'nx.text');
// Scripts/nx/kernel/nx.text.js
"use strict";
/*******************************************************************************
*
* Nx本地化文本服务
*
*
*
* 2021.12.10
******************************************************************************/
var ERR = require("error");
var NxObject = require("nx.object");
var REGEXP_NUM_OR_STR = /(%d)|(%s)/;
var REGEXP_STR = /%s/;
var NxText = cc.Class({
"extends": NxObject,
name: "NxText",
// 初始化
initialize: function initialize(_args) {
// USPER
if (!this._super(_args)) {
return false;
}
this.libs = [];
this.keymap = {};
// 全局服务开启
nx.text = this;
return true;
},
// 销毁
uninitialize: function uninitialize() {
// 全局服务关闭
nx.text = null;
// USPER
return this._super();
},
// 初始化准备
ready: function ready(_cb) {
// 先清空
this.keymap = [];
// 加载base
this.batchLoad(["base"], _cb);
},
// 重建本地化库
rebuild: function rebuild(_base, _cb, _lang) {
var queue = _base ? [_base] : [];
var lst = this.getKey("FileList");
if (nx.dt.strEmpty(lst)) {
nx.error("[文本]base没有库信息FileList参数!");
} else {
queue = queue.concat(lst.split(","));
}
// 批量加载
this.batchLoad(queue, _cb, _lang);
},
// 批量加载
batchLoad: function batchLoad(_queue, _cb, _lang) {
if (nx.dt.arrEmpty(_queue)) {
nx.dt.fnInvoke(_cb, nx.genError(ERR.COM.EmptyQueue), 0, 0);
return;
}
var self = this;
var cnt = 0;
var max = _queue.length;
var queue = nx.dt.objClone(_queue);
var next = function next() {
var key = queue.shift();
var path = cc.path.join("locals", _lang || nx.getLocLanguage(), "texts", key);
cc.loader.loadRes(path, cc.JsonAsset, function (_error, _asset) {
++cnt;
if (_error) {
nx.error("[文本]添加文本库失败: %s", path);
nx.dt.fnInvoke(_cb, _error, cnt, max);
} else {
nx.debug("[文本]添加文本库成功: %s", path);
self.pushKeys(_asset.json);
nx.dt.fnInvoke(_cb, null, cnt, max);
}
if (queue.length > 0) {
next();
}
});
};
next();
},
// 文本添加
pushKeys: function pushKeys(_map) {
for (var k in _map) {
// if( this.keymap[k] ) {
// nx.warn( "[文本]文本键名重复(默认替换):", k );
// }
this.keymap[k] = _map[k];
}
},
// 获取
getKey: function getKey(_key, _empty) {
if (_empty === void 0) {
_empty = false;
}
if (nx.dt.strEmpty(_key)) {
return "";
}
var ret = this.keymap[_key];
// 数字直接返回
if (nx.dt.numGood(ret)) {
return ret;
}
if (ret) {
ret = ret.replace("\\n", "\n");
return ret;
}
return _empty ? "" : _key;
},
// 取值
format: function format() {
var argLen = arguments.length;
if (0 === argLen) {
return "";
}
var t = arguments[0];
if (nx.dt.strEmpty(t)) {
return t;
}
var msg = this.getKey(t);
if (typeof msg != "string") {
cc.warn("[文本]取文本失败,没有找到:" + t);
return t;
}
if (1 === argLen) {
return "" + msg;
}
var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg);
if (hasSubstitution) {
for (var i = 1; i < argLen; ++i) {
var arg = arguments[i];
var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR;
regExpToTest.test(msg) ? msg = msg.replace(regExpToTest, arg) : msg += " " + arg;
}
}
// **未格式化参数不再追加在传出字符串后
// else {
// for( var _i = 1; _i < argLen; ++_i ) {
// msg += " " + arguments[ _i ];
// }
// }
return msg;
},
// 直接格式化
formatS: function formatS() {
var argLen = arguments.length;
if (0 === argLen) {
return "";
}
var msg = arguments[0];
if (typeof msg != "string" || msg == "") {
// cc.warn( "取文本失败,参数无效:" + msg );
return "";
}
if (1 === argLen) {
return "" + msg;
}
var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg);
if (hasSubstitution) {
for (var i = 1; i < argLen; ++i) {
var arg = arguments[i];
var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR;
regExpToTest.test(msg) ? msg = msg.replace(regExpToTest, arg) : msg += " " + arg;
}
}
// **未格式化参数不再追加在传出字符串后
// else {
// for( var _i = 1; _i < argLen; ++_i ) {
// msg += " " + arguments[ _i ];
// }
// }
return msg;
},
// 格式化错误码
formatError: function formatError() {
var argLen = arguments.length;
if (0 === argLen) {
return this.format("ErrBadArguments");
}
var msg = this.getKey("ErrServer" + arguments[0], true);
if (nx.dt.strEmpty(msg)) {
return this.format("ErrServerUnknown", arguments[0]);
}
if (1 === argLen) {
return "" + msg;
}
var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg);
if (hasSubstitution) {
for (var i = 1; i < argLen; ++i) {
var arg = arguments[i];
var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR;
regExpToTest.test(msg) ? msg = msg.replace(regExpToTest, arg) : msg += " " + arg;
}
} else {
for (var _i = 1; _i < argLen; ++_i) {
msg += " " + arguments[_i];
}
}
return msg;
}
});
module.exports = NxText;
cc._RF.pop();