117 lines
3.2 KiB
JavaScript
117 lines
3.2 KiB
JavaScript
/*
|
|
* jQuery i18n plugin
|
|
* @requires jQuery v1.1 or later
|
|
*
|
|
* See http://recursive-design.com/projects/jquery-i18n/
|
|
*
|
|
* Licensed under the MIT license:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*
|
|
* Version: 1.0.0 (201210141329)
|
|
*/
|
|
(function($) {
|
|
/**
|
|
* i18n provides a mechanism for translating strings using a jscript dictionary.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* i18n property list
|
|
*/
|
|
$.i18n = {
|
|
|
|
dict: null,
|
|
|
|
/**
|
|
* setDictionary()
|
|
*
|
|
* Initialises the dictionary.
|
|
*
|
|
* @param property_list i18n_dict : The dictionary to use for translation.
|
|
*/
|
|
setDictionary: function(i18n_dict) {
|
|
this.dict = i18n_dict;
|
|
},
|
|
|
|
/**
|
|
* _()
|
|
*
|
|
* 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, params) {
|
|
var result = str;
|
|
if (this.dict && this.dict[str]) {
|
|
result = this.dict[str];
|
|
}
|
|
|
|
// Substitute any params.
|
|
return this.printf(result, params);
|
|
},
|
|
|
|
/*
|
|
* 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 (!args) return str;
|
|
|
|
var result = '';
|
|
var search = /%(\d+)\$s/g;
|
|
|
|
// Replace %n1$ where n is a number.
|
|
var matches = search.exec(str);
|
|
while (matches) {
|
|
var index = parseInt(matches[1], 10) - 1;
|
|
str = str.replace('%' + matches[1] + '\$s', (args[index]));
|
|
matches = search.exec(str);
|
|
}
|
|
var parts = str.split('%s');
|
|
|
|
if (parts.length > 1) {
|
|
for(var i = 0; i < args.length; i++) {
|
|
// If the part ends with a '%' chatacter, we've encountered a literal
|
|
// '%%s', which we should output as a '%s'. To achieve this, add an
|
|
// 's' on the end and merge it with the next part.
|
|
if (parts[i].length > 0 && parts[i].lastIndexOf('%') == (parts[i].length - 1)) {
|
|
parts[i] += 's' + parts.splice(i + 1, 1)[0];
|
|
}
|
|
|
|
// Append the part and the substitution to the result.
|
|
result += parts[i] + args[i];
|
|
}
|
|
}
|
|
|
|
return result + parts[parts.length - 1];
|
|
}
|
|
|
|
};
|
|
|
|
/*
|
|
* _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).text($.i18n._(str, params));
|
|
};
|
|
|
|
})(jQuery); |