From 06c3dcb69e695d89433591990c7750d54b487991 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 20 Nov 2012 16:43:42 -0500 Subject: [PATCH] CC-1960: Internationalize Airtime / Support translations -added jquery.i18n library --- airtime_mvc/public/js/i18n/jquery.i18n.js | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 airtime_mvc/public/js/i18n/jquery.i18n.js diff --git a/airtime_mvc/public/js/i18n/jquery.i18n.js b/airtime_mvc/public/js/i18n/jquery.i18n.js new file mode 100644 index 000000000..eff9b0d04 --- /dev/null +++ b/airtime_mvc/public/js/i18n/jquery.i18n.js @@ -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); \ No newline at end of file