UNPKG

quorum-i18n

Version:

Repo for all the i18n resources for the Quorum's Sales Team

309 lines (239 loc) 10.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getAllAvailableLocales = exports.getJSONLanguageForApplications = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _sk = _interopRequireDefault(require("./../initial-locales/mobile/sk.json")); var _ro = _interopRequireDefault(require("./../initial-locales/mobile/ro.json")); var _it = _interopRequireDefault(require("./../initial-locales/mobile/it.json")); var _fr = _interopRequireDefault(require("./../initial-locales/mobile/fr.json")); var _frMediation = _interopRequireDefault(require("./../initial-locales/mobile/fr-mediation.json")); var _frMediationVp = _interopRequireDefault(require("./../initial-locales/mobile/fr-mediation-vp.json")); var _frMediationPromevil = _interopRequireDefault(require("./../initial-locales/mobile/fr-mediation-promevil.json")); var _frMediationEdf = _interopRequireDefault(require("./../initial-locales/mobile/fr-mediation-edf.json")); var _frElu = _interopRequireDefault(require("./../initial-locales/mobile/fr-elu.json")); var _en = _interopRequireDefault(require("./../initial-locales/mobile/en.json")); var _ar = _interopRequireDefault(require("./../initial-locales/mobile/ar.json")); var _fr2 = _interopRequireDefault(require("./../initial-locales/web/fr.json")); var _frMediation2 = _interopRequireDefault(require("./../initial-locales/web/fr-mediation.json")); var _frMediationVp2 = _interopRequireDefault(require("./../initial-locales/web/fr-mediation-vp.json")); var _frMediationPromevil2 = _interopRequireDefault(require("./../initial-locales/web/fr-mediation-promevil.json")); var _frMediationEdf2 = _interopRequireDefault(require("./../initial-locales/web/fr-mediation-edf.json")); var _frElu2 = _interopRequireDefault(require("./../initial-locales/web/fr-elu.json")); var _en_GB = _interopRequireDefault(require("./../initial-locales/web/en_GB.json")); var _en2 = _interopRequireDefault(require("./../initial-locales/web/en.json")); var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep")); var _merge = _interopRequireDefault(require("lodash/merge")); var _forIn = _interopRequireDefault(require("lodash/forIn")); var MobileTranslates = {}; MobileTranslates["sk"] = _sk["default"]; MobileTranslates["ro"] = _ro["default"]; MobileTranslates["it"] = _it["default"]; MobileTranslates["fr"] = _fr["default"]; MobileTranslates["fr-mediation"] = _frMediation["default"]; MobileTranslates["fr-mediation-vp"] = _frMediationVp["default"]; MobileTranslates["fr-mediation-promevil"] = _frMediationPromevil["default"]; MobileTranslates["fr-mediation-edf"] = _frMediationEdf["default"]; MobileTranslates["fr-elu"] = _frElu["default"]; MobileTranslates["en"] = _en["default"]; MobileTranslates["ar"] = _ar["default"]; var WebTranslates = {}; WebTranslates["fr"] = _fr2["default"]; WebTranslates["fr-mediation"] = _frMediation2["default"]; WebTranslates["fr-mediation-vp"] = _frMediationVp2["default"]; WebTranslates["fr-mediation-promevil"] = _frMediationPromevil2["default"]; WebTranslates["fr-mediation-edf"] = _frMediationEdf2["default"]; WebTranslates["fr-elu"] = _frElu2["default"]; WebTranslates["en_GB"] = _en_GB["default"]; WebTranslates["en"] = _en2["default"]; var constantizeIfTruthy = function constantizeIfTruthy() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return [].concat(args).filter(Boolean).join('-'); }; var defineUserLocales = function defineUserLocales(deviceLocale) { if (deviceLocale) return deviceLocale.replace(/-/gi, '_'); return 'en'; }; var finalAvailableLocale; function tryModuleAndReturnFile() { var locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en'; var localeSpecific = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var platform = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'web'; var wantedFile = constantizeIfTruthy(locale, localeSpecific); finalAvailableLocale = locale; switch (platform) { case 'web': if (WebTranslates[wantedFile]) return WebTranslates[wantedFile]; return false; case 'mobile': if (MobileTranslates[wantedFile]) return MobileTranslates[wantedFile]; return false; default: return false; } } function sanitizeLocale(string) { if (!string) return null; //? I did not found a sanitizer like this online, so I did a custom one return string.trim() // remove space around the string .replace(/\d/g, '') // remove all the digits .replace(/\s/g, '-') // replace any space by a `-` .replace(/[^\w-_]/g, '') // match all BUT [word char + `-` and `-`], aka remove all "symbols" .replace(/[-_]{2,}/, '_'); // dedupe all the `-` and `_` into clean unique `_` } function sanitizeLocaleSpecific(string) { if (!string) return null; return string.trim() // remove space around the string .replace(/\d/g, '') // remove all the digits .replace(/[\s_]/g, '-') // replace any space or `_` by a `-` .replace(/[^\w-]/g, '') // match all BUT [word char + `-`], aka remove all "symbols" .replace(/(\W){2,}/, '$1'); // dedupe all the `-` in case several are folowing each other } function downgradeMyLocaleString(locale) { if (locale === '') return locale; return locale.replace(/[-_]?[a-z]+$/i, ''); } function downgradeMyLocaleSpecific(localeSpecific) { if (localeSpecific === '') return localeSpecific; return localeSpecific.replace(/-?[a-z]+$/i, ''); } /** * @func downgradeAndSearchFilesForLanguage * @reccursive * Downgrade d'abord la locale specific : 'politique-larem' => 'politique' -> '' -> false * Downgrade ensuite la locale : 'fr_FR' -> 'fr' -> '' -> false */ var finalArray = []; function downgradeAndSearchFilesForLanguage(locale, localeSpecific, platform) { var attemptFileFound = tryModuleAndReturnFile(locale, localeSpecific, platform); if (attemptFileFound) { finalArray.unshift(attemptFileFound); if (!localeSpecific) { return finalArray; } } var futureLocaleString = ''; var futureLocaleSpecific = ''; if (locale.match(/[a-z]+/gi).length > 1) { futureLocaleString = downgradeMyLocaleString(locale); futureLocaleSpecific = localeSpecific; } else { if (localeSpecific) { futureLocaleSpecific = downgradeMyLocaleSpecific(localeSpecific); futureLocaleString = locale; } /** * If my locales are empty, I didn't find a solution and return the english */ if (!futureLocaleString && !futureLocaleSpecific) { var myLangFallBack = tryModuleAndReturnFile('en', null, platform); finalArray.unshift(myLangFallBack); return myLangFallBack; } } /** * downgradeAndSearchFilesForLanguage again because we not found the file */ return downgradeAndSearchFilesForLanguage(futureLocaleString, futureLocaleSpecific, platform); } /** * @func setLocaleForTheUser */ function setLocaleForTheUser(detectedLocale, localeSpecific, platform) { finalArray = []; // reset here or the next call to this function will be wrong /** * We want to get the locale formatted with * the defineUserLocales function */ var localeFormatted = sanitizeLocale(defineUserLocales(detectedLocale)); return downgradeAndSearchFilesForLanguage(localeFormatted, sanitizeLocaleSpecific(localeSpecific), platform); } /** * @async * @func getJSONLanguageForApplications * @param {string} deviceLocale * @param {string} localeSpecific * @param {string} platform * @desc This function will try to resolve json availables * for the different platforms to helps front end applications * to have the right language depends on locale pack and platform */ var getJSONLanguageForApplications = function getJSONLanguageForApplications() { var deviceLocale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en'; var localeSpecific = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var platform = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'web'; switch (platform) { case 'web': case 'mobile': { /** * Add a english fallback by default to avoid empty strings on new * basic languages like just few keys for a new lang. * All the languages are now based on english by default to avoid missing * translations on a new language. */ var basicLanguage = setLocaleForTheUser('en', null, platform); setLocaleForTheUser(deviceLocale, localeSpecific, platform); var fallbackedJsons = _merge["default"].apply(void 0, (0, _toConsumableArray2["default"])((0, _cloneDeep["default"])(basicLanguage)).concat((0, _toConsumableArray2["default"])((0, _cloneDeep["default"])(finalArray)))); finalArray = []; // reset here or the next call to this function will be wrong return { content: fallbackedJsons, path: finalAvailableLocale }; } default: throw new Error("The platform '".concat(platform || '', "' is not recognised by quorum-i18n.")); } }; /** * @function getAllAvailableLocales * The purpose of this function is to given tools to know exactly what are the * languages availables in the apps. We can filter it by pack. */ exports.getJSONLanguageForApplications = getJSONLanguageForApplications; var getAllAvailableLocales = function getAllAvailableLocales() { var platform = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'web'; var packageWanted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var allLanguages = []; var packageLanguagesToUse; switch (platform) { case 'web': packageLanguagesToUse = WebTranslates; break; case 'mobile': packageLanguagesToUse = MobileTranslates; break; default: break; } if (packageLanguagesToUse) { if (!packageWanted) { (0, _forIn["default"])(packageLanguagesToUse, function (value, key) { if (!key.includes('-')) { if (value['XXX_TRANSLATION_LANGUAGE_NAME']) { allLanguages.push({ key: key, languageName: value['XXX_TRANSLATION_LANGUAGE_NAME'] }); } } }); } else { (0, _forIn["default"])(packageLanguagesToUse, function (value, key) { if (key.includes(packageWanted)) { if (value['XXX_TRANSLATION_LANGUAGE_NAME']) { allLanguages.push({ key: key, languageName: value['XXX_TRANSLATION_LANGUAGE_NAME'] }); } } }); } } return allLanguages; }; exports.getAllAvailableLocales = getAllAvailableLocales;