diff --git a/CHANGELOG.md b/CHANGELOG.md index 0354173..79db7e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,27 @@ All notable changes per version. Format based on [Keep a Changelog](https://keep --- +### v2.0.0 — 22.03.2026 + +#### New Features + +- **Internationalization (i18n)** — Full DE/EN language support with runtime switching +- Language setting in Settings panel: German, English or Auto-detect (browser language) +- `i18n.js` module with ~220+ string keys, `t(key, vars?)` helper and `data-i18n` HTML attributes +- `_locales/de/` and `_locales/en/` for manifest-level i18n (`__MSG_extName__`, `__MSG_extDesc__`) +- `` attribute updates dynamically when language changes +- All modules migrated: dialog, boards, onboarding, notes, calculator, timer, image-ref, data, bookmark-import, storage, settings, widgets, app + +#### Technical + +- New script load order: `storage → state → i18n → dialog → ...` +- `applyLanguage()` scans DOM for `data-i18n`, `data-i18n-placeholder`, `data-i18n-title` +- Onboarding slides use i18n keys instead of hardcoded text (rendered at display time) +- Clock day/month names via i18n keys instead of hardcoded arrays +- `resolveLang()` helper for DRY language resolution (auto → browser detect) + +--- + ### v1.10.0 — 22.03.2026 #### Themes diff --git a/manifest.firefox.json b/manifest.firefox.json index 2bd4837..1bcae52 100644 --- a/manifest.firefox.json +++ b/manifest.firefox.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "__MSG_extName__", "default_locale": "en", - "version": "1.11.1", + "version": "2.0.0", "description": "__MSG_extDesc__", "author": "Hellion Online Media - Florian Wathling", "homepage_url": "https://hellion-media.de", diff --git a/manifest.json b/manifest.json index d1cb7d8..ed2dfeb 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "__MSG_extName__", "default_locale": "en", - "version": "1.11.1", + "version": "2.0.0", "description": "__MSG_extDesc__", "author": "Hellion Online Media - Florian Wathling", "homepage_url": "https://hellion-media.de", diff --git a/manifest.opera.json b/manifest.opera.json index bcb3884..f0b9cbc 100644 --- a/manifest.opera.json +++ b/manifest.opera.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "__MSG_extName__", "default_locale": "en", - "version": "1.11.1", + "version": "2.0.0", "description": "__MSG_extDesc__", "author": "Hellion Online Media - Florian Wathling", "homepage_url": "https://hellion-media.de", diff --git a/src/js/app.js b/src/js/app.js index df491c6..dd16d25 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -105,7 +105,7 @@ async function checkBackupReminder() { const notesData = (widgetData && Array.isArray(widgetData.notes)) ? widgetData.notes : []; const calcHistory = (widgetData && widgetData.calculator) ? widgetData.calculator.history || [] : []; const timerPresets = (widgetData && widgetData.timer) ? widgetData.timer.presets || [] : []; - const data = { version: '1.11.1', exported: new Date().toISOString(), boards, settings, notes: notesData, calculator: calcHistory, timerPresets }; + const data = { version: '2.0.0', exported: new Date().toISOString(), boards, settings, notes: notesData, calculator: calcHistory, timerPresets }; const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); diff --git a/src/js/data.js b/src/js/data.js index ba8fb03..4ccfb83 100644 --- a/src/js/data.js +++ b/src/js/data.js @@ -13,7 +13,7 @@ function initDataButtons() { btnExport.addEventListener('click', async () => { const widgetData = await Store.get('widgetStates'); const data = { - version: '1.11.1', + version: '2.0.0', exported: new Date().toISOString(), boards, settings,