Merge pull request #532 from andrey-git/translations

Make translation utils properly handle null selected language.
This commit is contained in:
Andrey 2017-10-30 19:24:05 +02:00 committed by GitHub
commit 7479aeceee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,7 +6,7 @@ function getActiveTranslation() {
// report languages with specific cases. // report languages with specific cases.
const lookup = {}; const lookup = {};
/* eslint-disable no-undef */ /* eslint-disable no-undef */
Object.keys(window.translationMetadata).forEach(function (tr) { Object.keys(window.translationMetadata).forEach((tr) => {
lookup[tr.toLowerCase()] = tr; lookup[tr.toLowerCase()] = tr;
}); });
@ -14,7 +14,7 @@ function getActiveTranslation() {
function languageGetTranslation(language) { function languageGetTranslation(language) {
const subtags = language.toLowerCase().split('-'); const subtags = language.toLowerCase().split('-');
for (var i = subtags.length; i >= 1; i--) { for (let i = subtags.length; i >= 1; i--) {
const lang = subtags.slice(0, i).join('-'); const lang = subtags.slice(0, i).join('-');
if (lookup[lang]) { if (lookup[lang]) {
@ -24,14 +24,22 @@ function getActiveTranslation() {
return null; return null;
} }
var translation = null; let translation = null;
let selectedLanguage;
if (window.localStorage.selectedLanguage) { if (window.localStorage.selectedLanguage) {
translation = languageGetTranslation(JSON.parse(window.localStorage.selectedLanguage)); try {
selectedLanguage = JSON.parse(window.localStorage.selectedLanguage);
} catch (e) {
// Ignore parsing error.
}
}
if (selectedLanguage) {
translation = languageGetTranslation(selectedLanguage);
if (translation) { if (translation) {
return translation; return translation;
} }
} else if (navigator.languages) { } else if (navigator.languages) {
for (var i = 0; i < navigator.languages.length; i++) { for (let i = 0; i < navigator.languages.length; i++) {
translation = languageGetTranslation(navigator.languages[i]); translation = languageGetTranslation(navigator.languages[i]);
if (translation) { if (translation) {
return translation; return translation;
@ -54,7 +62,14 @@ const translations = {};
window.getTranslation = function (translationInput) { window.getTranslation = function (translationInput) {
const translation = translationInput || getActiveTranslation(); const translation = translationInput || getActiveTranslation();
const translationFingerprint = window.translationMetadata[translation].fingerprint; const metadata = window.translationMetadata[translation];
if (!metadata) {
if (translationInput !== 'en') {
return window.getTranslation('en');
}
return Promise.reject(new Error('Language en not found in metadata'));
}
const translationFingerprint = metadata.fingerprint;
// Create a promise to fetch translation from the server // Create a promise to fetch translation from the server
if (!translations[translationFingerprint]) { if (!translations[translationFingerprint]) {