diff options
Diffstat (limited to 'resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js')
-rw-r--r-- | resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js b/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js new file mode 100644 index 00000000..759295ce --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js @@ -0,0 +1,125 @@ +/** + * 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 ( $, window, undefined ) { + 'use strict'; + + var MessageStore = function () { + this.messages = {}; + this.sources = {}; + }; + + /** + * 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. + * <code>load('path/to/all_localizations.json');</code> + * + * This can also load a localization file for a locale <code> + * load( 'path/to/de-messages.json', 'de' ); + * </code> + * A data object containing message key- message translation mappings + * can also be passed Eg: + * <code> + * load( { 'hello' : 'Hello' }, optionalLocale ); + * </code> 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, + deferred = null, + deferreds = [], + messageStore = this; + + if ( typeof source === 'string' ) { + // This is a URL to the messages file. + $.i18n.log( 'Loading messages from: ' + source ); + deferred = jsonMessageLoader( source ) + .done( function ( localization ) { + messageStore.set( locale, localization ); + } ); + + return deferred.promise(); + } + + 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 locale + * @param messages + */ + set: function ( locale, messages ) { + if ( !this.messages[locale] ) { + this.messages[locale] = messages; + } else { + this.messages[locale] = $.extend( this.messages[locale], messages ); + } + }, + + /** + * + * @param locale + * @param messageKey + * @returns {Boolean} + */ + get: function ( locale, messageKey ) { + return this.messages[locale] && this.messages[locale][messageKey]; + } + }; + + 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(); + } + + $.extend( $.i18n.messageStore, new MessageStore() ); +}( jQuery, window ) ); |