devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
83 lines (82 loc) • 3.09 kB
JavaScript
/**
* DevExtreme (esm/localization/message.js)
* Version: 22.1.9
* Build date: Tue Apr 18 2023
*
* Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import dependencyInjector from "../core/utils/dependency_injector";
import {
extend
} from "../core/utils/extend";
import {
format as stringFormat
} from "../core/utils/string";
import {
humanize
} from "../core/utils/inflector";
import coreLocalization from "./core";
import {
defaultMessages
} from "./default_messages";
var baseDictionary = extend(true, {}, defaultMessages);
var getDataByLocale = (localeData, locale) => localeData[locale] || {};
var newMessages = {};
var messageLocalization = dependencyInjector({
engine: function() {
return "base"
},
_dictionary: baseDictionary,
load: function(messages) {
extend(true, this._dictionary, messages)
},
_localizablePrefix: "@",
setup: function(localizablePrefix) {
this._localizablePrefix = localizablePrefix
},
localizeString: function(text) {
var that = this;
var regex = new RegExp("(^|[^a-zA-Z_0-9" + that._localizablePrefix + "-]+)(" + that._localizablePrefix + "{1,2})([a-zA-Z_0-9-]+)", "g");
var escapeString = that._localizablePrefix + that._localizablePrefix;
return text.replace(regex, (str, prefix, escape, localizationKey) => {
var defaultResult = that._localizablePrefix + localizationKey;
var result;
if (escape !== escapeString) {
result = that.format(localizationKey)
}
if (!result) {
newMessages[localizationKey] = humanize(localizationKey)
}
return prefix + (result || defaultResult)
})
},
getMessagesByLocales: function() {
return this._dictionary
},
getDictionary: function(onlyNew) {
if (onlyNew) {
return newMessages
}
return extend({}, newMessages, this.getMessagesByLocales()[coreLocalization.locale()])
},
getFormatter: function(key) {
return this._getFormatterBase(key) || this._getFormatterBase(key, "en")
},
_getFormatterBase: function(key, locale) {
var message = coreLocalization.getValueByClosestLocale(locale => getDataByLocale(this._dictionary, locale)[key]);
if (message) {
return function() {
var args = 1 === arguments.length && Array.isArray(arguments[0]) ? arguments[0].slice(0) : Array.prototype.slice.call(arguments, 0);
args.unshift(message);
return stringFormat.apply(this, args)
}
}
},
format: function(key) {
var formatter = this.getFormatter(key);
var values = Array.prototype.slice.call(arguments, 1);
return formatter && formatter.apply(this, values) || ""
}
});
export default messageLocalization;