diff --git a/i18n/messages/ar.json b/i18n/messages/ar.json index 587ff423..017a3df4 100644 --- a/i18n/messages/ar.json +++ b/i18n/messages/ar.json @@ -27,6 +27,7 @@ "settings_label_locale": "اللغة", "settings_label_timezone": "المنطقة الزمنية", "settings_label_currency": "العملة", + "settings_label_week_start_day": "أول يوم في الأسبوع", "settings_label_unit_distance": "وحدة المسافة", "settings_label_unit_volume": "وحدة الحجم", "settings_label_theme": "المظهر", @@ -38,6 +39,7 @@ "settings_desc_locale": "اختر اللغة للواجهة", "settings_desc_timezone": "اختر منطقتك الزمنية لعرض التاريخ", "settings_desc_currency": "اختر العملة المفضلة لديك", + "settings_desc_week_start_day": "اختر أول يوم يظهر في التقويمات", "settings_desc_unit_distance": "قياس وحدة المسافة", "settings_desc_unit_volume": "قياس وحدة الحجم", "settings_label_mileage_format": "تنسيق عرض استهلاك الوقود", @@ -47,6 +49,8 @@ "settings_desc_theme": "اختر المظهر المفضل لديك", "settings_desc_custom_css": "أنماط CSS لتخصيص الواجهة", "settings_select_language": "اختر اللغة", + "settings_select_week_start_day": "اختر أول يوم", + "settings_week_start_language_default": "افتراضي اللغة", "settings_updated_success": "تم تحديث الإعدادات بنجاح!", "common_example_prefix": "مثال - ", "common_invalid_format": "صيغة غير صحيحة...", @@ -54,6 +58,13 @@ "common_mile": "ميل", "common_litre": "لتر", "common_gallon": "جالون", + "common_sunday": "الأحد", + "common_monday": "الاثنين", + "common_tuesday": "الثلاثاء", + "common_wednesday": "الأربعاء", + "common_thursday": "الخميس", + "common_friday": "الجمعة", + "common_saturday": "السبت", "common_submit": "إرسال", "common_yes": "نعم", "common_no": "لا", diff --git a/i18n/messages/cs.json b/i18n/messages/cs.json index 3802f4b5..78fef1fb 100644 --- a/i18n/messages/cs.json +++ b/i18n/messages/cs.json @@ -37,6 +37,7 @@ "settings_label_locale": "Jazyková verze", "settings_label_timezone": "Časové pásmo", "settings_label_currency": "Měna", + "settings_label_week_start_day": "První den týdne", "settings_label_unit_distance": "Jednotka vzdálenosti", "settings_label_unit_volume": "Jednotka paliva", "settings_label_theme": "Motiv", @@ -50,6 +51,7 @@ "settings_desc_locale": "Vyberte jazyk rozhraní", "settings_desc_timezone": "Vyberte časové pásmo pro zobrazení data", "settings_desc_currency": "Vyberte preferovanou měnu", + "settings_desc_week_start_day": "Vyberte první den zobrazený v kalendářích", "settings_desc_unit_distance": "Jednotka měření vzdálenosti", "settings_desc_unit_volume": "Jednotka měření objemu", "settings_label_mileage_format": "Formát zobrazení spotřeby", @@ -61,6 +63,8 @@ "settings_desc_dark_mode": "Vyberte styl kontrastu použitý v tmavém režimu", "settings_desc_custom_css": "Styly CSS pro úpravu rozhraní", "settings_select_language": "Vyberte jazyk", + "settings_select_week_start_day": "Vyberte první den", + "settings_week_start_language_default": "Výchozí podle jazyka", "settings_updated_success": "Nastavení bylo úspěšně aktualizováno!", "common_example_prefix": "Příklad – ", "common_invalid_format": "Neplatný formát...", @@ -68,6 +72,13 @@ "common_mile": "Míle", "common_litre": "Litr", "common_gallon": "Galon", + "common_sunday": "Neděle", + "common_monday": "Pondělí", + "common_tuesday": "Úterý", + "common_wednesday": "Středa", + "common_thursday": "Čtvrtek", + "common_friday": "Pátek", + "common_saturday": "Sobota", "common_submit": "Odeslat", "common_details": "Podrobnosti", "common_close": "Zavřít", diff --git a/i18n/messages/de.json b/i18n/messages/de.json index d8ad43a6..0037b216 100644 --- a/i18n/messages/de.json +++ b/i18n/messages/de.json @@ -27,6 +27,7 @@ "settings_label_locale": "Sprache", "settings_label_timezone": "Zeitzone", "settings_label_currency": "Währung", + "settings_label_week_start_day": "Erster Wochentag", "settings_label_unit_distance": "Entfernungseinheit", "settings_label_unit_volume": "Volumeneinheit", "settings_label_theme": "Design", @@ -38,6 +39,7 @@ "settings_desc_locale": "Sprache der Oberfläche wählen", "settings_desc_timezone": "Zeitzone für Datumsanzeige wählen", "settings_desc_currency": "Bevorzugte Währung wählen", + "settings_desc_week_start_day": "Wählen Sie den ersten Tag, der in Kalendern angezeigt wird", "settings_desc_unit_distance": "Maßeinheit für Entfernung", "settings_desc_unit_volume": "Maßeinheit für Volumen", "settings_label_mileage_format": "Kraftstoffverbrauch-Anzeigeformat", @@ -47,6 +49,8 @@ "settings_desc_theme": "Bevorzugtes Design wählen", "settings_desc_custom_css": "CSS-Stile zur Anpassung der Oberfläche", "settings_select_language": "Sprache auswählen", + "settings_select_week_start_day": "Ersten Tag auswählen", + "settings_week_start_language_default": "Sprachstandard", "settings_updated_success": "Konfiguration erfolgreich aktualisiert!", "common_example_prefix": "Beispiel - ", "common_invalid_format": "Ungültiges Format...", @@ -54,6 +58,13 @@ "common_mile": "Meilen", "common_litre": "Liter", "common_gallon": "Gallone", + "common_sunday": "Sonntag", + "common_monday": "Montag", + "common_tuesday": "Dienstag", + "common_wednesday": "Mittwoch", + "common_thursday": "Donnerstag", + "common_friday": "Freitag", + "common_saturday": "Samstag", "common_submit": "Senden", "common_yes": "Ja", "common_no": "Nein", diff --git a/i18n/messages/en.json b/i18n/messages/en.json index 888c28ef..a3e1b42f 100644 --- a/i18n/messages/en.json +++ b/i18n/messages/en.json @@ -37,6 +37,7 @@ "settings_label_locale": "Locale", "settings_label_timezone": "Timezone", "settings_label_currency": "Currency", + "settings_label_week_start_day": "First day of week", "settings_label_unit_distance": "Unit of Distance", "settings_label_unit_volume": "Unit of Fuel", "settings_label_theme": "Theme", @@ -50,6 +51,7 @@ "settings_desc_locale": "Choose the language for the interface", "settings_desc_timezone": "Choose your timezone for date display", "settings_desc_currency": "Choose your preferred currency", + "settings_desc_week_start_day": "Choose the first day shown in calendars", "settings_desc_unit_distance": "Measurement of distance unit", "settings_desc_unit_volume": "Measurement of volume unit", "settings_label_mileage_format": "Mileage Display Format", @@ -61,6 +63,8 @@ "settings_desc_dark_mode": "Choose the contrast style used when dark mode is active", "settings_desc_custom_css": "CSS Styles for customizing the interface", "settings_select_language": "Select language", + "settings_select_week_start_day": "Select first day", + "settings_week_start_language_default": "Language default", "settings_updated_success": "Configuration updated successfully!", "common_example_prefix": "Example - ", "common_invalid_format": "Invalid Format...", @@ -68,6 +72,13 @@ "common_mile": "Miles", "common_litre": "Litre", "common_gallon": "Gallon", + "common_sunday": "Sunday", + "common_monday": "Monday", + "common_tuesday": "Tuesday", + "common_wednesday": "Wednesday", + "common_thursday": "Thursday", + "common_friday": "Friday", + "common_saturday": "Saturday", "common_submit": "Submit", "common_details": "Details", "common_close": "Close", diff --git a/i18n/messages/es.json b/i18n/messages/es.json index b00e3877..e1a1364a 100644 --- a/i18n/messages/es.json +++ b/i18n/messages/es.json @@ -27,6 +27,7 @@ "settings_label_locale": "Idioma", "settings_label_timezone": "Zona horaria", "settings_label_currency": "Moneda", + "settings_label_week_start_day": "Primer día de la semana", "settings_label_unit_distance": "Unidad de distancia", "settings_label_unit_volume": "Unidad de volumen", "settings_label_theme": "Tema", @@ -38,6 +39,7 @@ "settings_desc_locale": "Elige el idioma de la interfaz", "settings_desc_timezone": "Elige tu zona horaria para mostrar fechas", "settings_desc_currency": "Elige tu moneda preferida", + "settings_desc_week_start_day": "Elige el primer día que se muestra en los calendarios", "settings_desc_unit_distance": "Unidad de medida de distancia", "settings_desc_unit_volume": "Unidad de medida de volumen", "settings_label_mileage_format": "Formato de visualización de consumo", @@ -47,6 +49,8 @@ "settings_desc_theme": "Elige tu tema preferido", "settings_desc_custom_css": "Estilos CSS para personalizar la interfaz", "settings_select_language": "Selecciona el idioma", + "settings_select_week_start_day": "Selecciona el primer día", + "settings_week_start_language_default": "Predeterminado del idioma", "settings_updated_success": "¡Configuración actualizada con éxito!", "common_example_prefix": "Ejemplo - ", "common_invalid_format": "Formato no válido...", @@ -54,6 +58,13 @@ "common_mile": "Millas", "common_litre": "Litro", "common_gallon": "Galón", + "common_sunday": "Domingo", + "common_monday": "Lunes", + "common_tuesday": "Martes", + "common_wednesday": "Miércoles", + "common_thursday": "Jueves", + "common_friday": "Viernes", + "common_saturday": "Sábado", "common_submit": "Enviar", "common_yes": "Sí", "common_no": "No", diff --git a/i18n/messages/fi.json b/i18n/messages/fi.json index 8b33f634..69aae84b 100644 --- a/i18n/messages/fi.json +++ b/i18n/messages/fi.json @@ -28,6 +28,7 @@ "settings_label_locale": "Kieli", "settings_label_timezone": "Aikavyöhyke", "settings_label_currency": "Valuutta", + "settings_label_week_start_day": "Viikon ensimmäinen päivä", "settings_label_unit_distance": "Etäisyyden yksikkö", "settings_label_unit_volume": "Polttoaineen yksikkö", "settings_label_theme": "Teema", @@ -39,6 +40,7 @@ "settings_desc_locale": "Valitse käyttöliittymän kieli", "settings_desc_timezone": "Valitse aikavyöhyke", "settings_desc_currency": "Valitse valuutta", + "settings_desc_week_start_day": "Valitse kalentereissa näytettävä ensimmäinen päivä", "settings_desc_unit_distance": "Etäisyyden mittayksikkö", "settings_desc_unit_volume": "Tilavuuden yksikkö", "settings_label_mileage_format": "Matkamittarin näyttömuoto", @@ -49,6 +51,8 @@ "settings_desc_theme": "Valitse teema", "settings_desc_custom_css": "CSS-tyylit käyttöliittymän mukauttamiseen", "settings_select_language": "Valitse kieli", + "settings_select_week_start_day": "Valitse ensimmäinen päivä", + "settings_week_start_language_default": "Kielen oletus", "settings_updated_success": "Asetukset päivitetty", "common_example_prefix": "Esimerkiksi - ", "common_invalid_format": "Virheellinen muoto", @@ -56,6 +60,13 @@ "common_mile": "Maili", "common_litre": "Litra", "common_gallon": "Gallona", + "common_sunday": "Sunnuntai", + "common_monday": "Maanantai", + "common_tuesday": "Tiistai", + "common_wednesday": "Keskiviikko", + "common_thursday": "Torstai", + "common_friday": "Perjantai", + "common_saturday": "Lauantai", "common_submit": "Tallenna", "common_yes": "Kyllä", "common_no": "Ei", diff --git a/i18n/messages/fr.json b/i18n/messages/fr.json index 6f7d66c3..491b1a30 100644 --- a/i18n/messages/fr.json +++ b/i18n/messages/fr.json @@ -27,6 +27,7 @@ "settings_label_locale": "Langue", "settings_label_timezone": "Fuseau horaire", "settings_label_currency": "Devise", + "settings_label_week_start_day": "Premier jour de la semaine", "settings_label_unit_distance": "Unité de distance", "settings_label_unit_volume": "Unité de volume", "settings_label_theme": "Thème", @@ -38,6 +39,7 @@ "settings_desc_locale": "Choisissez la langue de l'interface", "settings_desc_timezone": "Choisissez votre fuseau horaire pour l'affichage des dates", "settings_desc_currency": "Choisissez votre devise préférée", + "settings_desc_week_start_day": "Choisissez le premier jour affiché dans les calendriers", "settings_desc_unit_distance": "Unité de mesure de distance", "settings_desc_unit_volume": "Unité de mesure de volume", "settings_label_mileage_format": "Format d'affichage de la consommation", @@ -47,6 +49,8 @@ "settings_desc_theme": "Choisissez votre thème préféré", "settings_desc_custom_css": "Styles CSS pour personnaliser l'interface", "settings_select_language": "Sélectionnez la langue", + "settings_select_week_start_day": "Sélectionnez le premier jour", + "settings_week_start_language_default": "Par défaut selon la langue", "settings_updated_success": "Configuration mise à jour avec succès !", "common_example_prefix": "Exemple - ", "common_invalid_format": "Format invalide...", @@ -54,6 +58,13 @@ "common_mile": "Miles", "common_litre": "Litre", "common_gallon": "Gallon", + "common_sunday": "Dimanche", + "common_monday": "Lundi", + "common_tuesday": "Mardi", + "common_wednesday": "Mercredi", + "common_thursday": "Jeudi", + "common_friday": "Vendredi", + "common_saturday": "Samedi", "common_submit": "Envoyer", "common_yes": "Oui", "common_no": "Non", diff --git a/i18n/messages/hi.json b/i18n/messages/hi.json index 4c43115f..c1dbabe6 100644 --- a/i18n/messages/hi.json +++ b/i18n/messages/hi.json @@ -27,6 +27,7 @@ "settings_label_locale": "भाषा", "settings_label_timezone": "समय क्षेत्र", "settings_label_currency": "मुद्रा", + "settings_label_week_start_day": "सप्ताह का पहला दिन", "settings_label_unit_distance": "दूरी की इकाई", "settings_label_unit_volume": "आयतन की इकाई", "settings_label_theme": "थीम", @@ -38,6 +39,7 @@ "settings_desc_locale": "इंटरफ़ेस की भाषा चुनें", "settings_desc_timezone": "दिनांक प्रदर्शन के लिए अपना समय क्षेत्र चुनें", "settings_desc_currency": "अपनी पसंदीदा मुद्रा चुनें", + "settings_desc_week_start_day": "कैलेंडर में दिखाया जाने वाला पहला दिन चुनें", "settings_desc_unit_distance": "दूरी माप की इकाई", "settings_desc_unit_volume": "आयतन माप की इकाई", "settings_label_mileage_format": "माइलेज प्रदर्शन प्रारूप", @@ -47,6 +49,8 @@ "settings_desc_theme": "अपनी पसंदीदा थीम चुनें", "settings_desc_custom_css": "इंटरफ़ेस को कस्टमाइज़ करने के लिए CSS स्टाइल्स", "settings_select_language": "भाषा चुनें", + "settings_select_week_start_day": "पहला दिन चुनें", + "settings_week_start_language_default": "भाषा डिफ़ॉल्ट", "settings_updated_success": "कॉन्फ़िगरेशन सफलतापूर्वक अपडेट हुआ!", "common_example_prefix": "उदाहरण - ", "common_invalid_format": "अमान्य प्रारूप...", @@ -54,6 +58,13 @@ "common_mile": "मील", "common_litre": "लीटर", "common_gallon": "गैलन", + "common_sunday": "रविवार", + "common_monday": "सोमवार", + "common_tuesday": "मंगलवार", + "common_wednesday": "बुधवार", + "common_thursday": "गुरुवार", + "common_friday": "शुक्रवार", + "common_saturday": "शनिवार", "common_submit": "सबमिट", "common_yes": "हाँ", "common_no": "नहीं", diff --git a/i18n/messages/hu.json b/i18n/messages/hu.json index 71b9df27..26b0f421 100644 --- a/i18n/messages/hu.json +++ b/i18n/messages/hu.json @@ -37,6 +37,7 @@ "settings_label_locale": "Nyelv", "settings_label_timezone": "Időzóna", "settings_label_currency": "Pénznem", + "settings_label_week_start_day": "A hét első napja", "settings_label_unit_distance": "Távolság mértékegysége", "settings_label_unit_volume": "Térfogat mértékegysége", "settings_label_theme": "Téma", @@ -50,6 +51,7 @@ "settings_desc_locale": "Válassza ki a felület nyelvét", "settings_desc_timezone": "Válassza ki az időzónát a dátumok megjelenítéséhez", "settings_desc_currency": "Válassza ki a preferált pénznemet", + "settings_desc_week_start_day": "Válaszd ki a naptárakban megjelenő első napot", "settings_desc_unit_distance": "A távolság mérésére használt egység", "settings_desc_unit_volume": "A térfogat mérésére használt egység", "settings_label_mileage_format": "Fogyasztás megjelenítési formátuma", @@ -61,6 +63,8 @@ "settings_desc_dark_mode": "Válassza ki a kontraszt stílusát aktív sötét mód esetén", "settings_desc_custom_css": "CSS stílusok a felület testreszabásához", "settings_select_language": "Nyelv kiválasztása", + "settings_select_week_start_day": "Első nap kiválasztása", + "settings_week_start_language_default": "Nyelvi alapértelmezés", "settings_updated_success": "Konfiguráció sikeresen frissítve!", "common_example_prefix": "Példa - ", "common_invalid_format": "Érvénytelen formátum...", @@ -68,6 +72,13 @@ "common_mile": "Mérföld", "common_litre": "Liter", "common_gallon": "Gallon", + "common_sunday": "Vasárnap", + "common_monday": "Hétfő", + "common_tuesday": "Kedd", + "common_wednesday": "Szerda", + "common_thursday": "Csütörtök", + "common_friday": "Péntek", + "common_saturday": "Szombat", "common_submit": "Mentés", "common_details": "Részletek", "common_close": "Bezárás", diff --git a/i18n/messages/it.json b/i18n/messages/it.json index 95d097fc..2d4b6607 100644 --- a/i18n/messages/it.json +++ b/i18n/messages/it.json @@ -27,6 +27,7 @@ "settings_label_locale": "Lingua", "settings_label_timezone": "Fuso Orario", "settings_label_currency": "Valuta", + "settings_label_week_start_day": "Primo giorno della settimana", "settings_label_unit_distance": "Unità di Misura Distanza", "settings_label_unit_volume": "Unità di Misura Volume", "settings_label_theme": "Tema", @@ -38,6 +39,7 @@ "settings_desc_locale": "Scegli la lingua per l'interfaccia", "settings_desc_timezone": "Scegli il tuo fuso orario per la visualizzazione della data", "settings_desc_currency": "Scegli la tua valuta preferita", + "settings_desc_week_start_day": "Scegli il primo giorno mostrato nei calendari", "settings_desc_unit_distance": "Unità di misura della distanza", "settings_desc_unit_volume": "Unità di misura del volume", "settings_label_mileage_format": "Formato visualizzazione consumo", @@ -47,6 +49,8 @@ "settings_desc_theme": "Scegli il tuo tema preferito", "settings_desc_custom_css": "Stili CSS per personalizzare l'interfaccia", "settings_select_language": "Seleziona lingua", + "settings_select_week_start_day": "Seleziona primo giorno", + "settings_week_start_language_default": "Predefinito della lingua", "settings_updated_success": "Configurazione aggiornata con successo!", "common_example_prefix": "Esempio - ", "common_invalid_format": "Formato non valido...", @@ -54,6 +58,13 @@ "common_mile": "Miglia", "common_litre": "Litro", "common_gallon": "Gallone", + "common_sunday": "Domenica", + "common_monday": "Lunedì", + "common_tuesday": "Martedì", + "common_wednesday": "Mercoledì", + "common_thursday": "Giovedì", + "common_friday": "Venerdì", + "common_saturday": "Sabato", "common_submit": "Invia", "common_yes": "Sì", "common_no": "No", diff --git a/i18n/messages/pt-PT.json b/i18n/messages/pt-PT.json index 676561a0..b6bb4d7b 100644 --- a/i18n/messages/pt-PT.json +++ b/i18n/messages/pt-PT.json @@ -37,6 +37,7 @@ "settings_label_locale": "Idioma", "settings_label_timezone": "Fuso horário", "settings_label_currency": "Moeda", + "settings_label_week_start_day": "Primeiro dia da semana", "settings_label_unit_distance": "Unidade de distância", "settings_label_unit_volume": "Unidade de combustível", "settings_label_theme": "Tema", @@ -50,6 +51,7 @@ "settings_desc_locale": "Escolha o idioma da interface", "settings_desc_timezone": "Escolha o fuso horário para a apresentação de datas", "settings_desc_currency": "Escolha a moeda da sua preferência", + "settings_desc_week_start_day": "Escolha o primeiro dia apresentado nos calendários", "settings_desc_unit_distance": "Unidade de medida de distância", "settings_desc_unit_volume": "Unidade de medida de volume", "settings_label_mileage_format": "Formato de apresentação do consumo", @@ -61,6 +63,8 @@ "settings_desc_dark_mode": "Escolha o estilo de contraste usado quando o modo escuro está ativo", "settings_desc_custom_css": "Estilos CSS para personalizar a interface", "settings_select_language": "Selecionar idioma", + "settings_select_week_start_day": "Selecionar primeiro dia", + "settings_week_start_language_default": "Predefinição do idioma", "settings_updated_success": "Definições atualizadas com sucesso!", "common_example_prefix": "Exemplo: ", "common_invalid_format": "Formato inválido...", @@ -68,6 +72,13 @@ "common_mile": "Milha", "common_litre": "Litro", "common_gallon": "Galão", + "common_sunday": "Domingo", + "common_monday": "Segunda-feira", + "common_tuesday": "Terça-feira", + "common_wednesday": "Quarta-feira", + "common_thursday": "Quinta-feira", + "common_friday": "Sexta-feira", + "common_saturday": "Sábado", "common_submit": "Submeter", "common_details": "Detalhes", "common_close": "Fechar", diff --git a/i18n/messages/ro.json b/i18n/messages/ro.json index 8b717db2..707a4d18 100644 --- a/i18n/messages/ro.json +++ b/i18n/messages/ro.json @@ -28,6 +28,7 @@ "settings_label_locale": "Limbă / Localizare", "settings_label_timezone": "Fus orar", "settings_label_currency": "Monedă", + "settings_label_week_start_day": "Prima zi a săptămânii", "settings_label_unit_distance": "Unitate de distanță", "settings_label_unit_volume": "Unitate de combustibil", "settings_label_theme": "Temă", @@ -39,6 +40,7 @@ "settings_desc_locale": "Alege limba pentru interfață", "settings_desc_timezone": "Alege fusul orar pentru afișarea datei", "settings_desc_currency": "Alege moneda preferată", + "settings_desc_week_start_day": "Alege prima zi afișată în calendare", "settings_desc_unit_distance": "Unitatea de măsură pentru distanță", "settings_desc_unit_volume": "Unitatea de măsură pentru volum", "settings_label_mileage_format": "Format afișare consum", @@ -49,6 +51,8 @@ "settings_desc_theme": "Alege tema preferată", "settings_desc_custom_css": "Stiluri CSS pentru personalizarea interfeței", "settings_select_language": "Selectează limba", + "settings_select_week_start_day": "Selectează prima zi", + "settings_week_start_language_default": "Implicit pentru limbă", "settings_updated_success": "Configurație actualizată cu succes!", "common_example_prefix": "Exemplu - ", "common_invalid_format": "Format nevalid...", @@ -56,6 +60,13 @@ "common_mile": "Mile", "common_litre": "Litru", "common_gallon": "Galon", + "common_sunday": "Duminică", + "common_monday": "Luni", + "common_tuesday": "Marți", + "common_wednesday": "Miercuri", + "common_thursday": "Joi", + "common_friday": "Vineri", + "common_saturday": "Sâmbătă", "common_submit": "Trimite", "common_yes": "Da", "common_no": "Nu", diff --git a/i18n/messages/ru.json b/i18n/messages/ru.json index 98436267..67c35da6 100644 --- a/i18n/messages/ru.json +++ b/i18n/messages/ru.json @@ -37,6 +37,7 @@ "settings_label_locale": "Язык", "settings_label_timezone": "Часовой пояс", "settings_label_currency": "Валюта", + "settings_label_week_start_day": "Первый день недели", "settings_label_unit_distance": "Единица расстояния", "settings_label_unit_volume": "Единица объёма топлива", "settings_label_theme": "Тема", @@ -50,6 +51,7 @@ "settings_desc_locale": "Выберите язык интерфейса", "settings_desc_timezone": "Выберите часовой пояс для отображения дат", "settings_desc_currency": "Выберите предпочитаемую валюту", + "settings_desc_week_start_day": "Выберите первый день, отображаемый в календарях", "settings_desc_unit_distance": "Единица измерения расстояния", "settings_desc_unit_volume": "Единица измерения объёма", "settings_label_mileage_format": "Формат отображения расхода", @@ -61,6 +63,8 @@ "settings_desc_dark_mode": "Выберите контрастность для тёмной темы", "settings_desc_custom_css": "CSS-стили для настройки интерфейса", "settings_select_language": "Выберите язык", + "settings_select_week_start_day": "Выберите первый день", + "settings_week_start_language_default": "По умолчанию для языка", "settings_updated_success": "Настройки успешно сохранены!", "common_example_prefix": "Пример — ", "common_invalid_format": "Неверный формат…", @@ -68,6 +72,13 @@ "common_mile": "Мили", "common_litre": "Литр", "common_gallon": "Галлон", + "common_sunday": "Воскресенье", + "common_monday": "Понедельник", + "common_tuesday": "Вторник", + "common_wednesday": "Среда", + "common_thursday": "Четверг", + "common_friday": "Пятница", + "common_saturday": "Суббота", "common_submit": "Сохранить", "common_details": "Подробности", "common_close": "Закрыть", diff --git a/src/__tests__/calendar-week-start.test.ts b/src/__tests__/calendar-week-start.test.ts new file mode 100644 index 00000000..18ca0a4b --- /dev/null +++ b/src/__tests__/calendar-week-start.test.ts @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest'; +import { resolveWeekStartsOn } from '$lib/helper/date.helper'; +import { createSettingsConfigSchema } from '$lib/helper/settings-form.helper'; + +const settingsSchema = createSettingsConfigSchema( + () => ({ valid: true }), + () => true, + { + includeNotificationProcessingSchedule: true + } +); + +describe('calendar week start resolver', () => { + it('uses explicit weekday overrides before locale defaults', () => { + expect(resolveWeekStartsOn('0', 'cs')).toBe(0); + expect(resolveWeekStartsOn('1', 'en')).toBe(1); + expect(resolveWeekStartsOn('6', 'de')).toBe(6); + }); + + it('derives Monday-first calendars from supported European locales', () => { + expect(resolveWeekStartsOn('locale', 'cs')).toBe(1); + expect(resolveWeekStartsOn('locale', 'de')).toBe(1); + }); + + it('keeps English language default Sunday-first', () => { + expect(resolveWeekStartsOn('locale', 'en')).toBe(0); + }); + + it('falls back to the locale default for invalid settings', () => { + expect(resolveWeekStartsOn('invalid', 'cs')).toBe(1); + expect(resolveWeekStartsOn(undefined, 'en')).toBe(0); + }); + + it('defaults settings to language-based week start', () => { + const result = settingsSchema.safeParse({ + dateFormat: 'dd/MM/yyyy', + locale: 'en', + timezone: 'UTC', + currency: 'USD', + unitOfDistance: 'kilometer', + unitOfVolume: 'liter', + featureFuelLog: true, + featureMaintenance: true, + featureCompliance: true, + featureReminders: true, + featureOverview: true, + notificationProcessingEnabled: true, + notificationProcessingSchedule: '0 9 * * *' + }); + + expect(result.success).toBe(true); + expect(result.data?.weekStartDay).toBe('locale'); + }); + + it('accepts language default and explicit weekday settings', () => { + for (const weekStartDay of ['locale', '0', '1', '2', '3', '4', '5', '6']) { + expect(settingsSchema.shape.weekStartDay.safeParse(weekStartDay).success).toBe(true); + } + }); + + it('rejects invalid week start settings', () => { + expect(settingsSchema.shape.weekStartDay.safeParse('7').success).toBe(false); + expect(settingsSchema.shape.weekStartDay.safeParse('monday').success).toBe(false); + }); +}); diff --git a/src/lib/components/app/input.svelte b/src/lib/components/app/input.svelte index aac8f3bc..6319d0a8 100644 --- a/src/lib/components/app/input.svelte +++ b/src/lib/components/app/input.svelte @@ -4,8 +4,10 @@ import type { Component } from 'svelte'; import * as Popover from '$ui/popover'; import { Calendar } from '$lib/components/ui/calendar/index.js'; + import { resolveWeekStartsOn } from '$lib/helper/date.helper'; import { formatDateForCalendar } from '$lib/helper/format.helper'; import * as m from '$lib/paraglide/messages'; + import { configStore } from '$stores/config.svelte'; type InputType = Exclude | 'calendar'; @@ -27,6 +29,9 @@ }: Props = $props(); let open = $state(false); + const weekStartsOn = $derived( + resolveWeekStartsOn(configStore.configs.weekStartDay, configStore.configs.locale) + );
@@ -75,6 +80,7 @@ id="date-calendar" type="single" captionLayout="dropdown" + {weekStartsOn} onValueChange={(v) => { if (v) { value = formatDateForCalendar(v); diff --git a/src/lib/components/dashboard/widgets/CalendarWidget.svelte b/src/lib/components/dashboard/widgets/CalendarWidget.svelte index 8a611bdc..f1191e90 100644 --- a/src/lib/components/dashboard/widgets/CalendarWidget.svelte +++ b/src/lib/components/dashboard/widgets/CalendarWidget.svelte @@ -4,7 +4,9 @@ import { today, getLocalTimeZone, type DateValue } from '@internationalized/date'; import { getLocale } from '$lib/paraglide/runtime.js'; import type { DashboardSummary } from '$lib/domain/dashboard'; + import { resolveWeekStartsOn } from '$lib/helper/date.helper'; import { formatDateForCalendar } from '$lib/helper/format.helper'; + import { configStore } from '$stores/config.svelte'; import Fuel from '@lucide/svelte/icons/fuel'; import Wrench from '@lucide/svelte/icons/wrench'; import Bell from '@lucide/svelte/icons/bell'; @@ -63,6 +65,9 @@ let placeholder = $state(today(getLocalTimeZone())); const selectedEvents = $derived(eventsByDate.get(selected.toString()) ?? []); + const weekStartsOn = $derived( + resolveWeekStartsOn(configStore.configs.weekStartDay, configStore.configs.locale) + ); {#if loading && !summary} @@ -81,6 +86,7 @@ weekdayFormat="short" monthFormat="long" yearFormat="numeric" + {weekStartsOn} disableDaysOutsideMonth={false} locale={getLocale()} class="w-full shrink-0 [--cell-size:--spacing(8)]" diff --git a/src/lib/components/feature/reminder/ReminderCalendar.svelte b/src/lib/components/feature/reminder/ReminderCalendar.svelte index b3bf3b0a..f01e53e5 100644 --- a/src/lib/components/feature/reminder/ReminderCalendar.svelte +++ b/src/lib/components/feature/reminder/ReminderCalendar.svelte @@ -4,6 +4,8 @@ import { today, getLocalTimeZone, type DateValue } from '@internationalized/date'; import { getLocale } from '$lib/paraglide/runtime.js'; import type { Reminder } from '$lib/domain/reminder'; + import { resolveWeekStartsOn } from '$lib/helper/date.helper'; + import { configStore } from '$stores/config.svelte'; import * as m from '$lib/paraglide/messages'; let { @@ -45,6 +47,9 @@ let placeholder = $state(today(getLocalTimeZone())); const reminderKey = (r: Reminder) => r.id ?? `${r.vehicleId}-${r.dueDate.getTime()}`; + const weekStartsOn = $derived( + resolveWeekStartsOn(configStore.configs.weekStartDay, configStore.configs.locale) + ); ; currencyOptions: Array; + weekStartDayOptions: Array; getTimezoneOptions: () => Array; isValidFormat: (value: string) => { valid: boolean; ex?: string }; messages: typeof import('$lib/paraglide/messages'); @@ -27,6 +29,7 @@ processing, localeOptions, currencyOptions, + weekStartDayOptions, getTimezoneOptions, isValidFormat, messages: m @@ -98,4 +101,15 @@ + diff --git a/src/lib/helper/date.helper.ts b/src/lib/helper/date.helper.ts index e8a12b81..c52fc003 100644 --- a/src/lib/helper/date.helper.ts +++ b/src/lib/helper/date.helper.ts @@ -15,6 +15,60 @@ export interface FormatConfig { mileageUnitFormat: string; } +export type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6; +export type WeekStartDaySetting = 'locale' | `${WeekStartsOn}`; + +const WEEK_START_VALUES: Record = { + '0': 0, + '1': 1, + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6 +}; + +const LOCALE_WEEK_START_FALLBACKS: Record = { + ar: 6, + cs: 1, + de: 1, + en: 0, + es: 1, + fi: 1, + fr: 1, + hi: 0, + hu: 1, + it: 1, + 'pt-PT': 1, + ro: 1, + ru: 1 +}; + +const getWeekStartFromIntl = (locale: string): WeekStartsOn | undefined => { + try { + type LocaleWithWeekInfo = Intl.Locale & { weekInfo?: { firstDay?: number } }; + const firstDay = (new Intl.Locale(locale) as LocaleWithWeekInfo).weekInfo?.firstDay; + if (typeof firstDay !== 'number') return undefined; + const weekStartsOn = firstDay % 7; + return WEEK_START_VALUES[String(weekStartsOn)]; + } catch (_) { + return undefined; + } +}; + +export const resolveWeekStartsOn = (setting: unknown, locale: string): WeekStartsOn => { + if (typeof setting === 'string' && setting in WEEK_START_VALUES) { + return WEEK_START_VALUES[setting]; + } + + const intlValue = getWeekStartFromIntl(locale); + if (intlValue !== undefined) return intlValue; + + return ( + LOCALE_WEEK_START_FALLBACKS[locale] ?? LOCALE_WEEK_START_FALLBACKS[locale.split('-')[0]] ?? 0 + ); +}; + const getDateFnsLocale = (locale: string) => { switch (locale) { case 'ar': diff --git a/src/lib/helper/settings-form.helper.ts b/src/lib/helper/settings-form.helper.ts index 7c457c39..b6183091 100644 --- a/src/lib/helper/settings-form.helper.ts +++ b/src/lib/helper/settings-form.helper.ts @@ -16,6 +16,7 @@ const settingsConfigSchema = z.object({ mileageUnitFormat: z .enum(['distance-per-fuel', 'fuel-per-distance', 'uk-mpg']) .default('distance-per-fuel'), + weekStartDay: z.enum(['locale', '0', '1', '2', '3', '4', '5', '6']).default('locale'), theme: z.string().default('light'), darkVariant: z.string().default('default'), customCss: z.string().optional(), @@ -127,6 +128,16 @@ export function createSettingsOptions( label: m.settings_mileage_format_uk_mpg() } ], + weekStartDayOptions: [ + { value: 'locale', label: m.settings_week_start_language_default() }, + { value: '0', label: m.common_sunday() }, + { value: '1', label: m.common_monday() }, + { value: '2', label: m.common_tuesday() }, + { value: '3', label: m.common_wednesday() }, + { value: '4', label: m.common_thursday() }, + { value: '5', label: m.common_friday() }, + { value: '6', label: m.common_saturday() } + ], localeOptions: locales.map((code) => ({ value: code, label: localeLabels[code] || code.toUpperCase() diff --git a/src/lib/stores/config.svelte.ts b/src/lib/stores/config.svelte.ts index c9a5a57b..3bb8ff55 100644 --- a/src/lib/stores/config.svelte.ts +++ b/src/lib/stores/config.svelte.ts @@ -13,6 +13,7 @@ const DEFAULT_CONFIGS: Configs = { unitOfLpg: 'liter', unitOfCng: 'kilogram', mileageUnitFormat: 'distance-per-fuel', + weekStartDay: 'locale', locale: 'en', timezone: 'UTC', featureFuelLog: true, diff --git a/src/routes/(app)/settings/+page.svelte b/src/routes/(app)/settings/+page.svelte index 11f47771..a0bf3540 100644 --- a/src/routes/(app)/settings/+page.svelte +++ b/src/routes/(app)/settings/+page.svelte @@ -118,6 +118,7 @@ uovOptions, gasUnitOptions, mileageUnitFormatOptions, + weekStartDayOptions, localeOptions } = createSettingsOptions(m, locales); @@ -309,6 +310,7 @@ {processing} {localeOptions} {currencyOptions} + {weekStartDayOptions} {getTimezoneOptions} {isValidFormat} messages={m}