FAQ: el selector de idioma tolera localStorage bloqueado

Si el navegador bloquea localStorage (modo privado), el script moría al
iniciar y ningún botón respondía. Ahora el almacenamiento va con try/catch y el
click se delega al contenedor.
This commit is contained in:
webmanager committed 2026-11-07 17:25:17 +00:00
1 parent 726052fa37
commit 79627ec104
1 file changed
+16 -6
+16 -6
View File
@@ -98,8 +98,15 @@ const I18N = {
} }
}; };
function store(key, val) {
try { localStorage.setItem(key, val); } catch (e) { /* private mode / blocked storage */ }
}
function stored(key) {
try { return localStorage.getItem(key); } catch (e) { return null; }
}
const state = { const state = {
lang: (localStorage.getItem('ocaFaqLang') || (navigator.language || 'es').slice(0, 2)) === 'en' ? 'en' : 'es', lang: ((stored('ocaFaqLang') || (navigator.language || 'es').slice(0, 2)) === 'en') ? 'en' : 'es',
items: [], items: [],
}; };
@@ -220,13 +227,16 @@ async function load() {
} }
} }
document.querySelectorAll('.lang button').forEach(b => { const langBox = document.querySelector('.lang');
b.onclick = () => { if (langBox) {
langBox.addEventListener('click', (ev) => {
const b = ev.target.closest('button[data-lang]');
if (!b) return;
state.lang = b.dataset.lang; state.lang = b.dataset.lang;
localStorage.setItem('ocaFaqLang', state.lang); store('ocaFaqLang', state.lang);
applyLang(); applyLang();
}; });
}); }
el('q').addEventListener('input', render); el('q').addEventListener('input', render);
applyLang(); applyLang();