filebrowser/frontend/src/i18n/index.js
Laurynas Gadliauskas 3270624bd2 Merge upstream
2022-01-10 15:56:10 +02:00

114 lines
2.8 KiB
JavaScript

import Vue from "vue";
import VueI18n from "vue-i18n";
import arAR from "./ar_AR.json";
import enGB from "./en_GB.json";
import esAR from "./es_AR.json";
import esCO from "./es_CO.json";
import esES from "./es_ES.json";
import esMX from "./es_MX.json";
import frFR from "./fr_FR.json";
import idID from "./id_ID.json";
import ltLT from "./lt_LT.json";
import ptBR from "./pt_BR.json";
import ptPT from "./pt_BR.json";
import ruRU from "./ru_RU.json";
import trTR from "./tr_TR.json";
import ukUA from "./uk_UA.json";
import zhCN from "./zh_CN.json";
Vue.use(VueI18n);
export function detectLocale() {
let locale = (navigator.language || navigator.browserLanguage).toLowerCase();
switch (true) {
case /^ar.*/i.test(locale):
locale = "ar_AR";
break;
case /^en.*/i.test(locale):
locale = "en_GB";
break;
case /^es-AR.*/i.test(locale):
locale = "es_AR";
break;
case /^es-CO.*/i.test(locale):
locale = "es_CO";
break;
case /^es-MX.*/i.test(locale):
locale = "es_MX";
break;
case /^es.*/i.test(locale):
locale = "es_ES";
break;
case /^fr.*/i.test(locale):
locale = "fr_FR";
break;
case /^id.*/i.test(locale):
locale = "id_ID";
break;
case /^lt.*/i.test(locale):
locale = "lt_LT";
break;
case /^pt-BR.*/i.test(locale):
locale = "pt_BR";
break;
case /^pt.*/i.test(locale):
locale = "pt_PT";
break;
case /^ru.*/i.test(locale):
locale = "ru_RU";
break;
case /^tr.*/i.test(locale):
locale = "tr_TR";
break;
case /^uk.*/i.test(locale):
locale = "uk_UA";
break;
case /^zh.*/i.test(locale):
locale = "zh_CN";
break;
case /^ua.*/i.test(locale):
locale = "ua";
break;
default:
locale = "en_GB";
}
return locale;
}
const removeEmpty = (obj) =>
Object.keys(obj)
.filter((k) => obj[k] !== null && obj[k] !== undefined && obj[k] !== "") // Remove undef. and null and empty.string.
.reduce(
(newObj, k) =>
typeof obj[k] === "object"
? Object.assign(newObj, { [k]: removeEmpty(obj[k]) }) // Recurse.
: Object.assign(newObj, { [k]: obj[k] }), // Copy value.
{}
);
const i18n = new VueI18n({
locale: detectLocale(),
fallbackLocale: "en_GB",
messages: {
ar_AR: removeEmpty(arAR),
en_GB: enGB,
es_AR: removeEmpty(esAR),
es_CO: removeEmpty(esCO),
es_ES: removeEmpty(esES),
es_MX: removeEmpty(esMX),
fr_FR: removeEmpty(frFR),
id_ID: removeEmpty(idID),
lt_LT: removeEmpty(ltLT),
pt_BR: removeEmpty(ptBR),
pt_PT: removeEmpty(ptPT),
ru_RU: removeEmpty(ruRU),
tr_TR: removeEmpty(trTR),
uk_UA: removeEmpty(ukUA),
zh_CN: removeEmpty(zhCN),
},
});
export default i18n;