diff --git a/src/core/utils/i18n.js b/src/core/utils/i18n.js index 9cec7cc48..8611ec0a9 100644 --- a/src/core/utils/i18n.js +++ b/src/core/utils/i18n.js @@ -1,5 +1,8 @@ !(function () { var i18nStore = {}; + + var i18nFormatters = {}; + BI._.extend(BI, { changeI18n: function (i18n) { if (i18n) { @@ -9,6 +12,7 @@ addI18n: function (i18n) { BI.extend(i18nStore, i18n); }, + i18nText: function (key) { var localeText = i18nStore[key] || (BI.i18n && BI.i18n[key]) || ""; if (!localeText) { @@ -16,10 +20,18 @@ } var len = arguments.length; if (len > 1) { - if (localeText.indexOf("{R1}") > -1) { + if (localeText.indexOf("{R1") > -1) { for (var i = 1; i < len; i++) { - var key = "{R" + i + "}"; - localeText = BI.replaceAll(localeText, key, arguments[i] + ""); + var reg = new RegExp(`{R${i},(.*?)}`, "g"); + + var result = reg.exec(localeText); + + if (result) { + var formatName = result[1]; + localeText = BI.replaceAll(localeText, reg, i18nFormatters[formatName](key, arguments[i])); + } else { + localeText = BI.replaceAll(localeText, `{R${i}}`, arguments[i] + ""); + } } } else { var args = Array.prototype.slice.call(arguments); @@ -30,6 +42,10 @@ } } return localeText; + }, + + addI18nFormatter: function (formatName, fn) { + i18nFormatters[formatName] = fn; } }); })();