CC-1960: Internationalize Airtime / Support translations

-added jquery.i18n library
This commit is contained in:
denise 2012-11-20 16:43:42 -05:00
parent e9b9f63630
commit 06c3dcb69e
1 changed files with 117 additions and 0 deletions

View File

@ -0,0 +1,117 @@
/*
* 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);