quorum-i18n
Version:
Repo for all the i18n resources for the Quorum's Sales Team
309 lines (239 loc) • 10.9 kB
JavaScript
;
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;