localized-strings/lib/utils.js
Fredrick Bäcker e4499d749a add psuedo
Add options object to constructor
Add possibility to use psuedo strings
Updated docs
2018-09-25 09:51:05 +02:00

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;
}