oxjs/source/Ox/js/Locale.js
2013-05-09 15:12:26 +02:00

71 lines
2.1 KiB
JavaScript

'use strict';
(function() {
var log, translations = {};
/*@
Ox.setLocale <f> Sets locale
(locale[, url], callback)
locale <s> Locale (like 'de' or 'fr')
url <s> URL of JSON file with additional translations
callback <f> Callback function
success <b> If true, locale has been set
@*/
Ox.setLocale = function(locale, url, callback) {
var isValidLocale = Ox.contains(Object.keys(Ox.LOCALES), locale);
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.getJSON(
Ox.PATH + 'Ox/json/locale.' + locale + '.json',
function(data) {
translations = data;
if (url) {
Ox.getJSON(url, function(data) {
Ox.extend(translations, data);
callback(true);
});
} else {
callback(true);
}
}
);
}
} else {
callback(isValidLocale);
}
};
/*@
Ox._ <f> Localizes a string
(string[, options]) -> <s> Localized string
string <s> English string
options <o> 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 <f> Registers a logging function
(callback) -> <u> undefined
callback <f> Callback function
english <s> English string
translation <s> Translated string
@*/
Ox._.log = function(callback) {
log = callback;
};
})();