mirror of
https://codeberg.org/Kankys/doxa.git
synced 2026-11-11 06:44:36 +01:00
73 lines
2.5 KiB
JavaScript
73 lines
2.5 KiB
JavaScript
// Tento skript by měl být v HTML vložen PŘED hlavním script.js
|
|
|
|
// Globální překladová funkce, kterou bude používat i script.js
|
|
let translations = {};
|
|
window.t = (key, params = {}) => {
|
|
let text = translations[key] || key;
|
|
for (const p in params) {
|
|
text = text.replace(`{${p}}`, params[p]);
|
|
}
|
|
return text;
|
|
};
|
|
|
|
/**
|
|
* Načte překlady pro daný jazyk a aplikuje je na DOM.
|
|
* @param {string} lang - Kód jazyka (např. 'en', 'cs').
|
|
*/
|
|
window.setLanguage = async function(lang) {
|
|
// 1. Uloží preferenci uživatele
|
|
localStorage.setItem('doxa_lang', lang);
|
|
|
|
// Nastaví atribut 'lang' na <html> elementu
|
|
document.documentElement.lang = lang;
|
|
|
|
// 2. Načte a uloží překlady
|
|
try {
|
|
const response = await fetch(`assets/locales/${lang}.json`);
|
|
if (!response.ok) {
|
|
console.error(`Chyba: Nepodařilo se načíst soubor s překlady: ${lang}.json`);
|
|
translations = {};
|
|
} else {
|
|
translations = await response.json();
|
|
}
|
|
} catch (error) {
|
|
console.error(`Chyba při načítání překladů pro jazyk ${lang}:`, error);
|
|
translations = {};
|
|
}
|
|
|
|
// 3. Přeloží všechny statické prvky v DOM
|
|
document.querySelectorAll('[data-i18n-key]').forEach(el => {
|
|
const key = el.getAttribute('data-i18n-key');
|
|
const translation = window.t(key);
|
|
|
|
// Přeloží specifický atribut (např. placeholder, title), pokud je definován
|
|
const attr = el.getAttribute('data-i18n-attr');
|
|
if (attr) {
|
|
el.setAttribute(attr, translation);
|
|
} else {
|
|
// Jinak přeloží obsah elementu
|
|
el.innerHTML = translation;
|
|
}
|
|
});
|
|
|
|
// 4. DŮLEŽITÉ: Znovu inicializuje části aplikace, které používají dynamický text
|
|
if (typeof window.updateDynamicUIText === 'function') {
|
|
window.updateDynamicUIText();
|
|
}
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const userLang = localStorage.getItem('doxa_lang') || navigator.language.split('-')[0];
|
|
const langToLoad = ['en', 'cs'].includes(userLang) ? userLang : 'cs';
|
|
window.setLanguage(langToLoad);
|
|
|
|
const langToggleBtn = document.getElementById('langToggle');
|
|
if (langToggleBtn) {
|
|
langToggleBtn.addEventListener('click', () => {
|
|
const currentLang = localStorage.getItem('doxa_lang') || 'cs';
|
|
const nextLang = currentLang === 'cs' ? 'en' : 'cs';
|
|
window.setLanguage(nextLang);
|
|
});
|
|
}
|
|
});
|