if(typeof(ss) == 'undefined') ss = {}; /* * Lightweight clientside i18n implementation. * Caution: Only available after DOM loaded because we need to detect the language * * Based on jQuery i18n plugin: 1.0.0 Feb-10-2008 * @requires jQuery v1.1 or later * * Examples at: http://recurser.com/articles/2008/02/21/jquery-i18n-translation-plugin/ * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Based on 'javascript i18n that almost doesn't suck' by markos * http://markos.gaivo.net/blog/?p=100 */ ss.i18n = { currentLocale: null, defaultLocale: 'en_US', lang: {}, init: function() { this.currentLocale = this.detectLocale(); }, /** * set_locale() * Set locale in long format, e.g. "de_AT" for Austrian German. * @param string locale */ setLocale: function(locale) { this.currentLocale = locale; }, /** * getLocale() * Get locale in long format. Falls back to i18n.defaut_locale. * @return string */ getLocale: function() { return (this.currentLocale) ? this.currentLocale : this.defaultLocale; }, /** * _() * 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 entity * @param string fallbackString * @param int priority (not used) * @param string context Give translators context for the string * @return string : Translated word * */ _t: function (entity, fallbackString, priority, context) { if (this.lang && this.lang[this.getLocale()] && this.lang[this.getLocale()][entity]) { return this.lang[this.getLocale()][entity]; } else if (this.lang && this.lang[this.defaultLocale] && this.lang[this.defaultLocale][entity]) { return this.lang[this.defaultLocale][entity]; } else if(fallbackString) { return fallbackString; } else { return ''; } }, /** * Add entities to a dictionary. If a dictionary doesn't * exist for this locale, its automatically created. * Existing entities are overwritten. * * @param string locale * @param Object dict */ addDictionary: function(locale, dict) { if(!this.lang[locale]) this.lang[locale] = {}; for(entity in dict) { this.lang[locale][entity] = dict[entity]; } }, /** * Get dictionary for a specific locale. * * @param string locale */ getDictionary: function(locale) { return this.lang[locale]; }, /** * 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 tags. * If no match is found, returns this.defaultLocale. * * @todo get by - needs modification of SSViewer * * @return string Locale in mixed lowercase/uppercase format suitable * for usage in ss.i18n.lang arrays (e.g. 'en_US'). */ detectLocale: function() { var rawLocale; var detectedLocale; // get by meta var metas = document.getElementsByTagName('meta'); for(var i=0; i