"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();