Phyks (Lucas Verney)
d8a7d4f66a
Full rework of webplayer. Webplayer is back to its previous working state, and ready for further improvements.
71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
/**
|
|
* Collection of helper functions to deal with localization.
|
|
*/
|
|
import { i18nRecord } from "../models/i18n";
|
|
|
|
/**
|
|
* Get the preferred locales from the browser, as an array sorted by preferences.
|
|
*/
|
|
export function getBrowserLocales() {
|
|
let langs = [];
|
|
|
|
if (navigator.languages) {
|
|
// Chrome does not currently set navigator.language correctly
|
|
// https://code.google.com/p/chromium/issues/detail?id=101138
|
|
// but it does set the first element of navigator.languages correctly
|
|
langs = navigator.languages;
|
|
} else if (navigator.userLanguage) {
|
|
// IE only
|
|
langs = [navigator.userLanguage];
|
|
} else {
|
|
// as of this writing the latest version of firefox + safari set this correctly
|
|
langs = [navigator.language];
|
|
}
|
|
|
|
// Some browsers does not return uppercase for second part
|
|
let locales = langs.map(function (lang) {
|
|
let locale = lang.split("-");
|
|
return locale[1] ? `${locale[0]}-${locale[1].toUpperCase()}` : lang;
|
|
});
|
|
|
|
return locales;
|
|
}
|
|
|
|
|
|
/**
|
|
* Convert an array of messagesDescriptors to a map.
|
|
*/
|
|
export function messagesMap(messagesDescriptorsArray) {
|
|
let messagesDescriptorsMap = {};
|
|
|
|
messagesDescriptorsArray.forEach(function (item) {
|
|
messagesDescriptorsMap[item.id] = item;
|
|
});
|
|
|
|
return messagesDescriptorsMap;
|
|
}
|
|
|
|
|
|
/**
|
|
* Format an error message from the state.
|
|
*
|
|
* Error message can be either an i18nRecord, which is to be formatted, or a
|
|
* raw string. This function performs the check and returns the correctly
|
|
* formatted string.
|
|
*
|
|
* @param errorMessage The error message from the state, either plain
|
|
* string or i18nRecord.
|
|
* @param formatMessage react-i18n formatMessage.
|
|
* @param messages List of messages to use for formatting.
|
|
*
|
|
* @return A string for the error.
|
|
*/
|
|
export function handleErrorI18nObject(errorMessage, formatMessage, messages) {
|
|
if (errorMessage instanceof i18nRecord) {
|
|
// If it is an object, format it and return it
|
|
return formatMessage(messages[errorMessage.id], errorMessage.values);
|
|
}
|
|
// Else, it's a string, just return it
|
|
return errorMessage;
|
|
}
|