includes/clientside/static/l10n.js
author Dan
Wed, 26 Dec 2007 00:37:26 -0500
changeset 334 c72b545f1304
parent 210 2b283402e4e4
child 335 67bd3121a12e
permissions -rw-r--r--
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.

/*
 * Enano client-side localization library
 */

var Language = function(lang_id)
{
  if ( typeof(enano_lang) != 'object' )
    return false;
  if ( typeof(enano_lang[lang_id]) != 'object' )
    return false;
  this.strings = enano_lang[lang_id];
  
  this.get = function(string_id, subst)
  {
    var catname = string_id.substr(0, string_id.indexOf('_'));
    var string_name = string_id.substr(string_id.indexOf('_') + 1);
    if ( typeof(this.strings[catname]) != 'object' )
      return string_id;
    if ( typeof(this.strings[catname][string_name]) != 'string' )
      return string_id;
    return this.perform_subst(this.strings[catname][string_name], subst) + '**';
  }
  
  this.perform_subst = function(str, subst)
  {
    // var this_regex = /%this\.([a-z0-9_]+)%/;
    // var match;
    // while ( str.match(this_regex) )
    // {
    //   match = str.match(this_regex);
    //   alert(match);
    // }
    // hackish workaround for %config.*%
    str = str.replace(/%config\.([a-z0-9_]+)%/g, '%$1%');
    if ( typeof(subst) == 'object' )
    {
      for ( var i in subst )
      {
        if ( !i.match(/^([a-z0-9_]+)$/) )
          continue;
        var regex = new RegExp('%' + i + '%', 'g');
        str = str.replace(regex, subst[i]);
      }
    }
    return str;
  }
  
}

var $lang;

var language_onload = function()
{
  $lang = new Language(ENANO_LANG_ID);
  // for debugging :-)
  // alert( $lang.get('user_err_invalid_credentials_lockout_captcha', { lockout_fails: '3', lockout_threshold: '5', lockout_duration: '15' }) );
}

addOnloadHook(language_onload);