/* eslint-disable no-tabs */ /*! * jQuery Internationalization library - Message Store * * Copyright (C) 2012 Santhosh Thottingal * * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to * choose one license or the other and you don't have to notify anyone which license you are using. * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. * * @licence GNU General Public Licence 2.0 or later * @licence MIT License */ (function ($) { "use strict"; var MessageStore = function () { this.messages = {}; this.sources = {}; }; function jsonMessageLoader(url) { var deferred = $.Deferred(); $.getJSON(url) .done(deferred.resolve) .fail(function (jqxhr, settings, exception) { $.i18n.log("Error in loading messages from " + url + " Exception: " + exception); // Ignore 404 exception, because we are handling fallabacks explicitly deferred.resolve(); }); return deferred.promise(); } /** * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading */ MessageStore.prototype = { /** * General message loading API This can take a URL string for * the json formatted messages. * load('path/to/all_localizations.json'); * * This can also load a localization file for a locale * load( 'path/to/de-messages.json', 'de' ); * * A data object containing message key- message translation mappings * can also be passed Eg: * * load( { 'hello' : 'Hello' }, optionalLocale ); * If the data argument is * null/undefined/false, * all cached messages for the i18n instance will get reset. * * @param {string|Object} source * @param {string} locale Language tag * @return {jQuery.Promise} */ load: function (source, locale) { var key = null, deferreds = [], messageStore = this; if (typeof source === "string") { // This is a URL to the messages file. $.i18n.log("Loading messages from: " + source); return jsonMessageLoader(source) .then(function (localization) { return messageStore.load(localization, locale); }); } if (locale) { // source is an key-value pair of messages for given locale messageStore.set(locale, source); return $.Deferred().resolve(); } else { // source is a key-value pair of locales and their source for (key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { locale = key; // No {locale} given, assume data is a group of languages, // call this function again for each language. deferreds.push(messageStore.load(source[key], locale)); } } return $.when.apply($, deferreds); } }, /** * Set messages to the given locale. * If locale exists, add messages to the locale. * * @param {string} locale * @param {Object} messages */ set: function (locale, messages) { if (!this.messages[locale]) { this.messages[locale] = messages; } else { this.messages[locale] = $.extend(this.messages[locale], messages); } }, /** * * @param {string} locale * @param {string} messageKey * @return {boolean} */ get: function (locale, messageKey) { return this.messages[locale] && this.messages[locale][messageKey]; } }; $.extend($.i18n.messageStore, new MessageStore()); }(jQuery));