// locale loader -> create locales, adds strings to them
// locale -> contains strings and formatting functions
// localize -> localize, execute, interpolate
define(function(){
function trim(string){
return string.replace(/^\s+|\s+$/g, "");
}
function execute_command(command, locale){
var commandItems = trim(command).split(/\s+/);
var commandName = commandItems[0];
if(typeof locale[commandName] === "function")
return locale[commandName].call(locale, commandItems, locale);
}
function lookup(key, locale){
return locale[key];
}
function interpolate(string, locale){
return string.replace(/{([^}]*)}/g, function(match, content){
return ret.localize(trim(content), locale);
});
}
var ret = {
localize: function localize(key, locale){
if(typeof(location) !== 'undefined' && location.search && location.search.indexOf('notranslate=1') > 0) {
// In case you want to see the keys... put notranslate=1 in the queryString
return key;
}
var translation = lookup(key, locale);
if(typeof(translation) !== "undefined")
return interpolate(String(translation), locale);
translation = execute_command(key, locale);
if(translation)
return interpolate(translation, locale);
// Didn't find key!
this.logMissingLocalization(key, locale);
translation = key;
return translation;
},
logMissingLocalization: function logMissingLocalization(key, locale){
if(typeof(console) !== 'undefined' && console.warn) console.warn("No localized string for", key, locale.name);
if(typeof(mpq) !== 'undefined' && mpq.push) mpq.push(['track', 'localizationMissing', {
key: key,
locale: locale.name
}]);
}
};
return ret;
});