feat: multi-language blog posts — add blog.es.json, blog.de.json; load by locale with EN fallback

This commit is contained in:
Oliver
2026-03-27 16:40:03 -03:00
parent 3627c2c73d
commit 5bd3c7b398
5 changed files with 106 additions and 27 deletions
+29 -15
View File
@@ -388,19 +388,34 @@
let blogPosts = [];
let blogExpanded = false;
if (blogGrid) {
fetch('blog.json')
.then(response => response.json())
.then(data => {
blogPosts = Array.isArray(data) ? data : [];
renderBlogCards();
})
.catch(error => {
if (blogError) {
blogError.classList.remove('hidden');
blogError.textContent = getTranslation(document.documentElement.lang, 'blog-error', 'Unable to load articles right now.');
}
console.error('blog.json load failed', error);
function loadBlogPosts(lang) {
if (!blogGrid) return;
blogPosts = [];
blogExpanded = false;
if (blogError) blogError.classList.add('hidden');
function onData(data) {
blogPosts = Array.isArray(data) ? data : [];
renderBlogCards();
}
function showError() {
if (blogError) {
blogError.classList.remove('hidden');
blogError.textContent = getTranslation(document.documentElement.lang, 'blog-error', 'Unable to load articles right now.');
}
}
var file = lang === 'en' ? 'blog.json' : 'blog.' + lang + '.json';
fetch(file)
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
.then(onData)
.catch(function () {
if (lang === 'en') { showError(); return; }
fetch('blog.json')
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
.then(onData)
.catch(showError);
});
}
@@ -539,8 +554,7 @@
const value = translations[locale][key] ?? translations.en[key] ?? '';
if (value !== undefined) el.setAttribute('aria-label', value);
});
renderBlogCards();
updateBlogToggleLabel();
loadBlogPosts(locale);
}
document.getElementById('lang-selector').addEventListener('change', (event) => {