'use strict'; (function() { var log, translations = {}; /*@ Ox.setLocale Sets locale (locale[, url], callback) locale Locale (like 'de' or 'fr') url URL of JSON file with additional translations callback Callback function success If true, locale has been set @*/ Ox.setLocale = function(locale, url, callback) { var isValidLocale = Ox.contains(Object.keys(Ox.LOCALE_NAMES), locale), urls = []; if (arguments.length == 2) { callback = arguments[1]; url = null; } if (locale != Ox.LOCALE && isValidLocale) { Ox.LOCALE = locale; if (locale == 'en') { translations = {}; callback(true); } else { Ox.forEach(Ox.LOCALES, function(locales, module) { if (Ox[module] && Ox.contains(locales, locale)) { urls.push([ Ox.PATH + 'Ox' + (module ? '.' + module : '') + '/json/locale.' + locale + '.json' ]); } }); url && urls.push([url]); Ox.getJSON(urls, function(data) { urls.forEach(function(url) { Ox.extend(translations, data[url]); }); callback(true); }); } } else { callback(isValidLocale); } }; /*@ Ox._ Localizes a string (string[, options]) -> Localized string string English string options Options passed to Ox.formatString @*/ Ox._ = function(value, options) { var translation = translations[value]; log && log(value, translation); translation = translation || value; return Ox.formatString(translation, options, true); }; /*@ Ox._.log Registers a logging function (callback) -> undefined callback Callback function english English string translation Translated string @*/ Ox._.log = function(callback) { log = callback; }; })();