78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.getInterfaceLanguage = getInterfaceLanguage;
|
|
exports.getBestMatchingLanguage = getBestMatchingLanguage;
|
|
exports.validateTranslationKeys = validateTranslationKeys;
|
|
exports.randomPseudo = randomPseudo;
|
|
/**
|
|
* Return the current interface language
|
|
* If the navigator object is defined it returns the current navigator language
|
|
* otherwise it falls back to 'en-US'
|
|
* Works in browsers
|
|
*/
|
|
function getInterfaceLanguage() {
|
|
var defaultLang = 'en-US';
|
|
if (typeof navigator === 'undefined') {
|
|
return defaultLang;
|
|
}
|
|
var nav = navigator; // eslint-disable-line no-undef
|
|
if (nav) {
|
|
if (nav.language) {
|
|
return nav.language;
|
|
}
|
|
if (!!nav.languages && !!nav.languages[0]) {
|
|
return nav.languages[0];
|
|
}
|
|
if (nav.userLanguage) {
|
|
return nav.userLanguage;
|
|
}
|
|
if (nav.browserLanguage) {
|
|
return nav.browserLanguage;
|
|
}
|
|
}
|
|
return defaultLang;
|
|
}
|
|
|
|
/**
|
|
* Get the best match based on the language passed and the available languages
|
|
* @param {*} language
|
|
* @param {*} props
|
|
*/
|
|
function getBestMatchingLanguage(language, props) {
|
|
// If an object with the passed language key exists return it
|
|
if (props[language]) return language;
|
|
|
|
// if the string is composed try to find a match with only the first language identifiers (en-US --> en)
|
|
var idx = language.indexOf('-');
|
|
var auxLang = idx >= 0 ? language.substring(0, idx) : language;
|
|
return props[auxLang] ? auxLang : Object.keys(props)[0];
|
|
}
|
|
|
|
/**
|
|
* Check that the keys used in the provided strings object don't collide with existing property
|
|
* already defined in the LocalizedStrings object
|
|
* @param {*} translationKeys
|
|
*/
|
|
function validateTranslationKeys(translationKeys) {
|
|
var reservedNames = ['_interfaceLanguage', '_language', '_defaultLanguage', '_defaultLanguageFirstLevelKeys', '_props'];
|
|
translationKeys.forEach(function (key) {
|
|
if (reservedNames.indexOf(key) !== -1) {
|
|
throw new Error(key + ' cannot be used as a key. It is a reserved word.');
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get a random pseudo string back after specified a length
|
|
* @param {Number} len - How many characters to get back
|
|
*/
|
|
function randomPseudo(len) {
|
|
var text = '';
|
|
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
for (var i = 0; i < len; i += 1) {
|
|
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
}return text;
|
|
} |