Files
hassos_config/www/community/Ultra-Vehicle-Card/localize.js
2024-10-13 22:59:09 +02:00

62 lines
1.8 KiB
JavaScript

import { dedupingMixin } from "https://unpkg.com/@polymer/polymer@3.4.1/lib/utils/mixin.js?module";
const LocalizeMixin = dedupingMixin(
(superClass) =>
class extends superClass {
static get properties() {
return {
hass: Object,
localize: Function,
};
}
connectedCallback() {
super.connectedCallback();
this.loadResources(this.hass.language);
}
async loadResources(language) {
let resources;
const languagesToTry = [language, language.split('-')[0], 'en'];
for (const lang of languagesToTry) {
try {
resources = await this.loadTranslationFile(lang);
if (resources) {
break;
}
} catch (e) {
console.error(`Failed to load translations for ${lang}:`, e);
}
}
if (!resources) {
console.warn('No translations could be loaded. Using default strings.');
resources = {};
}
this.localize = (key, ...args) => {
const translatedValue = key.split('.').reduce((o, i) => o && o[i], resources);
if (translatedValue === undefined) return key;
return translatedValue;
};
}
loadTranslationFile(lang) {
const url = `./translations/${lang}.js`;
return import(url)
.then(module => {
if (typeof module.default !== 'object') {
throw new Error('Translation file does not export a default object');
}
return module.default;
})
.catch(error => {
console.error(`Failed to load translations for ${lang}:`, error);
return null;
});
}
}
);
export const localize = LocalizeMixin;