120 lines
2.7 KiB
JavaScript
120 lines
2.7 KiB
JavaScript
|
/*!
|
||
|
* jQuery i18n plugin
|
||
|
* @requires jQuery v1.1 or later
|
||
|
*
|
||
|
* See https://github.com/recurser/jquery-i18n
|
||
|
*
|
||
|
* Licensed under the MIT license.
|
||
|
*
|
||
|
* Version: <%= pkg.version %> (<%= meta.date %>)
|
||
|
*/
|
||
|
(function($) {
|
||
|
/**
|
||
|
* i18n provides a mechanism for translating strings using a jscript dictionary.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
var __slice = Array.prototype.slice;
|
||
|
|
||
|
/*
|
||
|
* i18n property list
|
||
|
*/
|
||
|
var i18n = {
|
||
|
|
||
|
dict: null,
|
||
|
missingPattern: null,
|
||
|
|
||
|
/**
|
||
|
* load()
|
||
|
*
|
||
|
* Load translations.
|
||
|
*
|
||
|
* @param property_list i18nDict : The dictionary to use for translation.
|
||
|
*/
|
||
|
load: function(i18nDict, missingPattern) {
|
||
|
if (this.dict !== null) {
|
||
|
$.extend(this.dict, i18nDict);
|
||
|
} else {
|
||
|
this.dict = i18nDict;
|
||
|
}
|
||
|
|
||
|
if (missingPattern) {
|
||
|
this.missingPattern = missingPattern;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* unload()
|
||
|
*
|
||
|
* Unloads translations and clears the dictionary.
|
||
|
*/
|
||
|
unload: function() {
|
||
|
this.dict = null;
|
||
|
this.missingPattern = null;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* _()
|
||
|
*
|
||
|
* Looks the given string up in the dictionary and returns the translation if
|
||
|
* one exists. If a translation is not found, returns the original word.
|
||
|
*
|
||
|
* @param string str : The string to translate.
|
||
|
* @param property_list params.. : params for using printf() on the string.
|
||
|
*
|
||
|
* @return string : Translated word.
|
||
|
*/
|
||
|
_: function (str) {
|
||
|
dict = this.dict;
|
||
|
if (dict && dict.hasOwnProperty(str)) {
|
||
|
str = dict[str];
|
||
|
} else if (this.missingPattern !== null) {
|
||
|
return this.printf(this.missingPattern, str);
|
||
|
}
|
||
|
var args = __slice.call(arguments);
|
||
|
args[0] = str;
|
||
|
// Substitute any params.
|
||
|
return this.printf.apply(this, args);
|
||
|
},
|
||
|
|
||
|
/*
|
||
|
* printf()
|
||
|
*
|
||
|
* Substitutes %s with parameters given in list. %%s is used to escape %s.
|
||
|
*
|
||
|
* @param string str : String to perform printf on.
|
||
|
* @param string args : Array of arguments for printf.
|
||
|
*
|
||
|
* @return string result : Substituted string
|
||
|
*/
|
||
|
printf: function(str, args) {
|
||
|
if (arguments.length < 2) return str;
|
||
|
var args = $.isArray(args) ? args : __slice.call(arguments, 1);
|
||
|
return str.replace(/([^%]|^)%(?:(\d+)\$)?s/g, function(p0, p, position) {
|
||
|
if (position) {
|
||
|
return p + args[parseInt(position)-1];
|
||
|
}
|
||
|
return p + args.shift();
|
||
|
}).replace(/%%s/g, '%s');
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* _t()
|
||
|
*
|
||
|
* Allows you to translate a jQuery selector.
|
||
|
*
|
||
|
* eg $('h1')._t('some text')
|
||
|
*
|
||
|
* @param string str : The string to translate .
|
||
|
* @param property_list params : Params for using printf() on the string.
|
||
|
*
|
||
|
* @return element : Chained and translated element(s).
|
||
|
*/
|
||
|
$.fn._t = function(str, params) {
|
||
|
return $(this).html(i18n._.apply(i18n, arguments));
|
||
|
};
|
||
|
|
||
|
$.i18n = i18n;
|
||
|
})(jQuery);
|