purifier-card
Version:
Air Purifier card for Home Assistant Lovelace UI
91 lines (78 loc) • 2.14 kB
text/typescript
// Borrowed from:
// https://github.com/custom-cards/boilerplate-card/blob/master/src/localize/localize.ts
import * as en from './translations/en.json';
import * as uk from './translations/uk.json';
import * as tr from './translations/tr.json';
import * as fr from './translations/fr.json';
import * as nb from './translations/nb.json';
import * as pl from './translations/pl.json';
import * as bg from './translations/bg.json';
import * as zh_Hans from './translations/zh-Hans.json';
import * as zh_Hant from './translations/zh-Hant.json';
import * as de from './translations/de.json';
import * as ca from './translations/ca.json';
import * as ru from './translations/ru.json';
import * as it from './translations/it.json';
import * as cs from './translations/cs.json';
import * as nl from './translations/nl.json';
import * as es from './translations/es.json';
import * as sk from './translations/sk.json';
import * as pt from './translations/pt.json';
type Translations = {
[key: string]: {
[key: string]: string;
};
};
const languages: Record<string, Translations> = {
en,
uk,
fr,
tr,
nb,
pl,
bg,
zh_Hans,
zh_Hant,
de,
ca,
ru,
it,
cs,
nl,
es,
sk,
pt,
};
const DEFAULT_LANG = 'en';
export default function localize(
str: string,
search?: string,
replace?: string,
): string | undefined {
const [section, key] = str.toLowerCase().split('.');
let langStored: string | null = null;
try {
langStored = JSON.parse(localStorage.getItem('selectedLanguage') ?? '');
} catch {
langStored = localStorage.getItem('selectedLanguage');
}
const lang = (langStored || navigator.language.split('-')[0] || DEFAULT_LANG)
.replace(/['"]+/g, '')
.replace('-', '_');
let translated;
try {
translated = languages[lang][section][key];
} catch {
translated = languages[DEFAULT_LANG][section][key];
}
if (translated === undefined) {
translated = languages[DEFAULT_LANG][section][key];
}
if (translated === undefined) {
return;
}
if (search && replace) {
translated = translated?.replace(search, replace);
}
return translated;
}