From 66ca03ade4c6ab9dfc7ca55b53c0a7f94d2db17d Mon Sep 17 00:00:00 2001 From: Richard Zink Date: Wed, 7 Oct 2026 13:02:29 +0200 Subject: [PATCH] Restructure i18n.js: English is base, keys are English text --- i18n.js | 66 +++++++++++++++++++++++++++--------------------------- index.html | 28 +++++++++++------------ 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/i18n.js b/i18n.js index ce383ab..cd74b66 100644 --- a/i18n.js +++ b/i18n.js @@ -1,51 +1,51 @@ /* Internationalization dictionary * - * Each key maps to an array of translations indexed by language code. - * To add a new language, add an entry with the language code as the key - * and translations for each existing key. + * Each key is the ENGLISH text. To add a new language, just add + * a translation under the language's two-letter code (e.g. de, it, fr). * * Example: - * TRANSLATIONS.title = { de: 'Titel', en: 'Title' }; + * TRANSLATIONS['Sunrise'] = { en: 'Sunrise', de: 'Aufgang', it: 'Alba' }; * * The current language is taken from window.CONFIG.language. + * Fallback order: requested language → 'en' → first available → key. */ window.TRANSLATIONS = { - 'Aufgang': { de: 'Aufgang', en: 'Sunrise' }, - 'Untergang': { de: 'Untergang', en: 'Sunset' }, - 'Zenit Sonne': { de: 'Zenit Sonne', en: 'Sun Zenith' }, - 'Mondphase': { de: 'Mondphase', en: 'Moon Phase' }, - 'Mond auf': { de: 'Mond auf', en: 'Moonrise' }, - 'Mond unter': { de: 'Mond unter', en: 'Moonset' }, + 'Sunrise': { en: 'Sunrise', de: 'Aufgang' }, + 'Sunset': { en: 'Sunset', de: 'Untergang' }, + 'Sun Zenith': { en: 'Sun Zenith', de: 'Zenit Sonne' }, + 'Moon Phase': { en: 'Moon Phase', de: 'Mondphase' }, + 'Moonrise': { en: 'Moonrise', de: 'Mond auf' }, + 'Moonset': { en: 'Moonset', de: 'Mond unter' }, - 'heute': { de: 'heute', en: 'today' }, - 'morgen': { de: 'morgen', en: 'tomorrow' }, + 'today': { en: 'today', de: 'heute' }, + 'tomorrow': { en: 'tomorrow', de: 'morgen' }, - 'Neumond': { de: 'Neumond', en: 'New Moon' }, - 'Zunehm. Sichel': { de: 'Zunehm. Sichel', en: 'Waxing Crescent' }, - 'Erstes Viertel': { de: 'Erstes Viertel', en: 'First Quarter' }, - 'Zunehm. Gibbous': { de: 'Zunehm. Gibbous', en: 'Waxing Gibbous' }, - 'Vollmond': { de: 'Vollmond', en: 'Full Moon' }, - 'Abnehm. Gibbous': { de: 'Abnehm. Gibbous', en: 'Waning Gibbous' }, - 'Letztes Viertel': { de: 'Letztes Viertel', en: 'Last Quarter' }, - 'Abnehm. Sichel': { de: 'Abnehm. Sichel', en: 'Waning Crescent' }, + 'New Moon': { en: 'New Moon', de: 'Neumond' }, + 'Waxing Crescent': { en: 'Waxing Crescent', de: 'Zunehm. Sichel' }, + 'First Quarter': { en: 'First Quarter', de: 'Erstes Viertel' }, + 'Waxing Gibbous': { en: 'Waxing Gibbous', de: 'Zunehm. Gibbous' }, + 'Full Moon': { en: 'Full Moon', de: 'Vollmond' }, + 'Waning Gibbous': { en: 'Waning Gibbous', de: 'Abnehm. Gibbous' }, + 'Last Quarter': { en: 'Last Quarter', de: 'Letztes Viertel' }, + 'Waning Crescent': { en: 'Waning Crescent', de: 'Abnehm. Sichel' }, - 'Mo.': { de: 'Mo.', en: 'Mo.' }, - 'Di.': { de: 'Di.', en: 'Tu.' }, - 'Mi.': { de: 'Mi.', en: 'We.' }, - 'Do.': { de: 'Do.', en: 'Th.' }, - 'Fr.': { de: 'Fr.', en: 'Fr.' }, - 'Sa.': { de: 'Sa.', en: 'Sa.' }, - 'So.': { de: 'So.', en: 'Su.' }, + 'Mo.': { en: 'Mo.', de: 'Mo.' }, + 'Tu.': { en: 'Tu.', de: 'Di.' }, + 'We.': { en: 'We.', de: 'Mi.' }, + 'Th.': { en: 'Th.', de: 'Do.' }, + 'Fr.': { en: 'Fr.', de: 'Fr.' }, + 'Sa.': { en: 'Sa.', de: 'Sa.' }, + 'Su.': { en: 'Su.', de: 'So.' }, - 'Feuchte': { de: 'Feuchte', en: 'Humidity' }, - 'Wind': { de: 'Wind', en: 'Wind' }, + 'Humidity': { en: 'Humidity', de: 'Feuchte' }, + 'Wind': { en: 'Wind', de: 'Wind' }, // 2-letter time-of-day labels - 'Morgen': { de: 'Mo', en: 'Mo' }, - 'Mittag': { de: 'Mi', en: 'No' }, - 'Abend': { de: 'Ab', en: 'Ev' }, - 'Nacht': { de: 'Na', en: 'Ni' } + 'Morning': { en: 'Mo', de: 'Mo' }, + 'Noon': { en: 'No', de: 'Mi' }, + 'Evening': { en: 'Ev', de: 'Ab' }, + 'Night': { en: 'Ni', de: 'Na' } }; window.getTranslation = function(key) { diff --git a/index.html b/index.html index e776962..c0d93af 100644 --- a/index.html +++ b/index.html @@ -412,37 +412,37 @@
-
Aufgang--:--
+
Sunrise--:--
-
Zenit Sonne--:--
+
Sun Zenith--:--
-
Untergang--:--
+
Sunset--:--
-
Mondphase--
+
Moon Phase--
-
Mond auf--:--
+
Moonrise--:--
-
Mond unter--:--
+
Moonset--:--
@@ -834,7 +834,7 @@ var effect = (VANTA.CLOUDS2 || VANTA.CLOUDS)({ var times = type.indexOf('moon') === 0 ? SunCalc.getMoonTimes(nextDate, lat, lon) : SunCalc.getTimes(nextDate, lat, lon); var ev = type === 'moonrise' ? times.rise : type === 'moonset' ? times.set : times[type]; if (ev && !isNaN(ev.getTime())) { - var dayLabel = d === 1 ? t('morgen') : formatDateLong(nextDate); + var dayLabel = d === 1 ? t('tomorrow') : formatDateLong(nextDate); return { date: ev, label: dayLabel }; } } @@ -843,8 +843,8 @@ var effect = (VANTA.CLOUDS2 || VANTA.CLOUDS)({ function getMoonPhaseText(phase) { var p = phase; - var keys = ['Neumond', 'Zunehm. Sichel', 'Erstes Viertel', 'Zunehm. Gibbous', - 'Vollmond', 'Abnehm. Gibbous', 'Letztes Viertel', 'Abnehm. Sichel']; + var keys = ['New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous', + 'Full Moon', 'Waning Gibbous', 'Last Quarter', 'Waning Crescent']; var idx; if (p < 0.0625 || p >= 0.9375) idx = 0; else if (p < 0.1875) idx = 1; @@ -1042,7 +1042,7 @@ var effect = (VANTA.CLOUDS2 || VANTA.CLOUDS)({ // Sun zenith (solar noon) - find next occurrence var sunZenith = sunTimes.solarNoon; - var sunZenithWhen = sunZenith > now ? t('heute') : t('morgen'); + var sunZenithWhen = sunZenith > now ? t('today') : t('tomorrow'); if (sunZenith <= now) { var tomorrow = new Date(now); tomorrow.setDate(tomorrow.getDate() + 1); @@ -1590,16 +1590,16 @@ window.weatherThemes = { var currentHtml = '
' + weatherSVG(current.weather_code) + '
' + '
' + Math.round(current.temperature_2m) + '°C
' + '
' + - t('Feuchte') + ' ' + Math.round(current.relative_humidity_2m) + '% · ' + t('Wind') + ' ' + Math.round(current.wind_speed_10m) + ' km/h
'; + t('Humidity') + ' ' + Math.round(current.relative_humidity_2m) + '% · ' + t('Wind') + ' ' + Math.round(current.wind_speed_10m) + ' km/h'; document.getElementById('weather-current').innerHTML = currentHtml; // Forecast var forecastHtml = ''; for (var d = 0; d < 4; d++) { var dayDate = new Date(daily.time[d]); - var dayLabel = d === 0 ? t('heute') : t('morgen'); + var dayLabel = d === 0 ? t('today') : t('tomorrow'); if (d > 1) { - var weekdayKey = ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'][dayDate.getDay()]; + var weekdayKey = ['Su.', 'Mo.', 'Tu.', 'We.', 'Th.', 'Fr.', 'Sa.'][dayDate.getDay()]; dayLabel = t(weekdayKey) + ' ' + (dayDate.getDate() < 10 ? '0' : '') + dayDate.getDate() + '.' + (dayDate.getMonth() + 1 < 10 ? '0' : '') + (dayDate.getMonth() + 1) + '.'; @@ -1619,7 +1619,7 @@ window.weatherThemes = { var slotIdx = findHourlyIndex(slotDate, hourly.time); var slotCode = hourly.weather_code[slotIdx]; var slotTemp = hourly.temperature_2m[slotIdx]; - var slotLabels = [t('Morgen'), t('Mittag'), t('Abend'), t('Nacht')]; + var slotLabels = [t('Morning'), t('Noon'), t('Evening'), t('Night')]; slotsHtml += '
' + '
' + weatherSVG(slotCode) + '
' + '
' + slotLabels[i] + '
' +