diff options
Diffstat (limited to 'library/jquery.i18n/src/jquery.i18n.js')
-rw-r--r-- | library/jquery.i18n/src/jquery.i18n.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/library/jquery.i18n/src/jquery.i18n.js b/library/jquery.i18n/src/jquery.i18n.js new file mode 100644 index 000000000..bbcd92813 --- /dev/null +++ b/library/jquery.i18n/src/jquery.i18n.js @@ -0,0 +1,154 @@ +/* + * 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: @VERSION (@DATE) + */ + (function($) { +/** + * i18n provides a mechanism for translating strings using a jscript dictionary. + * + */ + + +/* + * i18n property list + */ +$.i18n = { + + dict: null, + +/** + * setDictionary() + * Initialise the dictionary and translate nodes + * + * @param property_list i18n_dict : The dictionary to use for translation + */ + setDictionary: function(i18n_dict) { + this.dict = i18n_dict; + }, + +/** + * _() + * The actual translation function. 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 transl = str; + if (this.dict && this.dict[str]) { + transl = this.dict[str]; + } + return this.printf(transl, params); + }, + +/** + * toEntity() + * Change non-ASCII characters to entity representation + * + * @param string str : The string to transform + * @return string result : Original string with non-ASCII content converted to entities + * + */ + toEntity: function (str) { + var result = ''; + for (var i=0;i<str.length; i++) { + if (str.charCodeAt(i) > 128) + result += "&#"+str.charCodeAt(i)+";"; + else + result += str.charAt(i); + } + return result; + }, + +/** + * stripStr() + * + * @param string str : The string to strip + * @return string result : Stripped string + * + */ + stripStr: function(str) { + return str.replace(/^\s*/, "").replace(/\s*$/, ""); + }, + +/** + * stripStrML() + * + * @param string str : The multi-line string to strip + * @return string result : Stripped string + * + */ + stripStrML: function(str) { + // Split because m flag doesn't exist before JS1.5 and we need to + // strip newlines anyway + var parts = str.split('\n'); + for (var i=0; i<parts.length; i++) + parts[i] = stripStr(parts[i]); + + // Don't join with empty strings, because it "concats" words + // And strip again + return stripStr(parts.join(" ")); + }, + +/* + * printf() + * C-printf like function, which substitutes %s with parameters + * given in list. %%s is used to escape %s. + * + * Doesn't work in IE5.0 (splice) + * + * @param string S : string to perform printf on. + * @param string L : Array of arguments for printf() + */ + printf: function(S, L) { + if (!L) return S; + + var nS = ""; + var search = /%(\d+)\$s/g; + // replace %n1$ where n is a number + while (result = search.exec(S)) { + var index = parseInt(result[1], 10) - 1; + S = S.replace('%' + result[1] + '\$s', (L[index])); + L.splice(index, 1); + } + var tS = S.split("%s"); + + if (tS.length > 1) { + for(var i=0; i<L.length; i++) { + if (tS[i].lastIndexOf('%') == tS[i].length-1 && i != L.length-1) + tS[i] += "s"+tS.splice(i+1,1)[0]; + nS += tS[i] + L[i]; + } + } + return nS + tS[tS.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); |