// Converse.js (A browser based XMPP chat client) // https://conversejs.org // // This is the internationalization module. // // Copyright (c) 2013-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define */ import 'moment/locale/af'; import 'moment/locale/ar'; import 'moment/locale/bg'; import 'moment/locale/ca'; import 'moment/locale/cs'; import 'moment/locale/de'; import 'moment/locale/eo'; import 'moment/locale/es'; import 'moment/locale/eu'; import 'moment/locale/fr'; import 'moment/locale/gl'; import 'moment/locale/he'; import 'moment/locale/hi'; import 'moment/locale/hu'; import 'moment/locale/id'; import 'moment/locale/it'; import 'moment/locale/ja'; import 'moment/locale/nb'; import 'moment/locale/nl'; import 'moment/locale/pl'; import 'moment/locale/pt-br'; import 'moment/locale/ro'; import 'moment/locale/ru'; import 'moment/locale/tr'; import 'moment/locale/uk'; import 'moment/locale/zh-cn'; import 'moment/locale/zh-tw'; import Jed from "jed"; import Promise from "es6-promise/dist/es6-promise.auto"; import _ from "./lodash.noconflict"; import moment from "moment"; function detectLocale (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) { locale = isLocaleAvailable(window.navigator.userLanguage, library_check); } if (window.navigator.languages && !locale) { for (i=0; i1) { return t.fetch.apply(t, [].slice.call(arguments, 1)); } else { return t.fetch(); } }, fetchTranslations (locale, supported_locales, locale_url) { /* Fetch the translations for the given local at the given URL. * * Parameters: * (String) locale: The given i18n locale * (Array) supported_locales: List of locales supported * (String) locale_url: The URL from which the translations * should be fetched. */ return new Promise((resolve, reject) => { if (!isConverseLocale(locale, supported_locales) || locale === 'en') { return resolve(); } const xhr = new XMLHttpRequest(); xhr.open('GET', locale_url, true); xhr.setRequestHeader( 'Accept', "application/json, text/javascript" ); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 400) { try { const data = window.JSON.parse(xhr.responseText); jed_instance = new Jed(data); resolve(); } catch (e) { xhr.onerror(e); } } else { xhr.onerror(); } }; xhr.onerror = (e) => { const err_message = e ? ` Error: ${e.message}` : ''; reject(new Error(`Could not fetch translations. Status: ${xhr.statusText}. ${err_message}`)); } xhr.send(); }); } };