diff --git a/converse.js b/converse.js index e9ecfeead..685b80054 100644 --- a/converse.js +++ b/converse.js @@ -240,41 +240,63 @@ var OPENED = 'opened'; var CLOSED = 'closed'; - // Translation machinery - // --------------------- - this.isAvailableLocale = function (locale) { - if (locales[locale]) { - return locales[locale]; + // Detect support for the user's locale + // ------------------------------------ + this.isConverseLocale = function (locale) { return typeof locales[locale] !== "undefined"; }; + this.isMomentLocale = function (locale) { return moment.locale() != moment.locale(locale); }; + + this.isLocaleAvailable = function (locale, available) { + /* Check whether the locale or sub locale (e.g. en-US, en) is supported. + * + * Parameters: + * (Function) available - returns a boolean indicating whether the locale is supported + */ + if (available(locale)) { + return locale; } else { var sublocale = locale.split("-")[0]; - if (sublocale != locale && locales[sublocale]) { - return locales[sublocale]; + if (sublocale != locale && available(sublocale)) { + return sublocale; } } - return null; }; - this.detectLocale = function () { - var ret, i; + this.detectLocale = function (library_check) { + /* Determine which locale is supported by the user's system as well + * as by the relevant library (e.g. converse.js or moment.js). + * + * Parameters: + * (Function) library_check - returns a boolean indicating whether the locale is supported + */ + var locale, i; if (window.navigator.userLanguage) { - return this.isAvailableLocale(window.navigator.userLanguage); - } else if (window.navigator.languages) { - for (i=0; i < window.navigator.languages.length && !ret; i++) { - ret = this.isAvailableLocale(window.navigator.languages[i]); - } - return ret || locales.en; - } else if (window.navigator.browserLanguage) { - return this.isAvailableLocale(window.navigator.browserLanguage); - } else if (window.navigator.language) { - return this.isAvailableLocale(window.navigator.language); - } else if (window.navigator.systemLanguage) { - return this.isAvailableLocale(window.navigator.systemLanguage); - } else { - return locales.en; + locale = this.isLocaleAvailable(window.navigator.userLanguage, library_check); } + if (window.navigator.languages && !locale) { + for (i=0; i - +