Новая шапка (sticky, blur, мигающий курсор), нумерованные секции резюме с полным опытом работы и новым разделом «Образование», карточки проектов в стиле drwxr-xr-x, более яркий дождь на фоне. Добавлен i18n-модуль (frontend/js/i18n.js) с переключателем EN/RU: резюме и проекты полностью переведены, в игре переведены статичные подписи интерфейса лобби и боя (данные от сервера остаются на русском).
31 lines
950 B
JavaScript
31 lines
950 B
JavaScript
const KEY = 'cacto-lang';
|
|
|
|
export function getLang() {
|
|
return localStorage.getItem(KEY) === 'en' ? 'en' : 'ru';
|
|
}
|
|
|
|
export function setLang(lang) {
|
|
localStorage.setItem(KEY, lang);
|
|
document.documentElement.lang = lang;
|
|
}
|
|
|
|
// Вешает обработчик на кнопку #lang-toggle в шапке и синхронизирует её
|
|
// подпись (показываем язык, НА который переключит клик, а не текущий).
|
|
export function initLangToggle(onChange) {
|
|
document.documentElement.lang = getLang();
|
|
const btn = document.getElementById('lang-toggle');
|
|
if (!btn) return;
|
|
|
|
const sync = () => {
|
|
btn.textContent = getLang() === 'ru' ? 'EN' : 'RU';
|
|
};
|
|
sync();
|
|
|
|
btn.addEventListener('click', () => {
|
|
setLang(getLang() === 'ru' ? 'en' : 'ru');
|
|
sync();
|
|
window.dispatchEvent(new CustomEvent('cacto:langchange', { detail: getLang() }));
|
|
onChange?.(getLang());
|
|
});
|
|
}
|