diff --git a/frontend/scripts/check-hardcoded-i18n.js b/frontend/scripts/check-hardcoded-i18n.js
index 02a8077b..6891cb35 100644
--- a/frontend/scripts/check-hardcoded-i18n.js
+++ b/frontend/scripts/check-hardcoded-i18n.js
@@ -7,6 +7,7 @@ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
// This list is an incremental ratchet: once a user-facing screen has been
// migrated, literal English UI copy must not return to it.
const guardedFiles = [
+ 'src/lib/dialogs/PomodoroSettingsModal.svelte',
'src/lib/layout/DashboardCustomizationSidebar.svelte',
'src/lib/pages/Homepage.svelte',
'src/lib/features/workflows/WorkflowBuilder.svelte',
diff --git a/frontend/src/lib/dialogs/PomodoroSettingsModal.svelte b/frontend/src/lib/dialogs/PomodoroSettingsModal.svelte
index a1f532b3..1d956f1f 100644
--- a/frontend/src/lib/dialogs/PomodoroSettingsModal.svelte
+++ b/frontend/src/lib/dialogs/PomodoroSettingsModal.svelte
@@ -39,7 +39,7 @@
let form = $state({ ...defaultForm });
const projectOptions = $derived([
- { value: '', label: 'Select a project...' },
+ { value: '', label: t('time.pomodoro.selectProject') },
...projects
.filter((project) => project.status === 'Active')
.map((project) => ({
@@ -111,7 +111,7 @@
loaded = true;
} catch (err) {
console.warn('[pomodoro-settings] failed to load settings:', err);
- error = `Failed to load settings: ${err?.message || err}`;
+ error = t('time.pomodoro.loadError', { error: err?.message || err });
} finally {
loading = false;
}
@@ -135,10 +135,10 @@
try {
const call = await getInvoke();
await call('save_pomodoro_settings', { settings: toSettings(form) });
- status = 'Settings saved';
+ status = t('time.pomodoro.settingsSaved');
} catch (err) {
console.warn('[pomodoro-settings] failed to save settings:', err);
- error = `Failed to save settings: ${err?.message || err}`;
+ error = t('time.pomodoro.saveError', { error: err?.message || err });
} finally {
saving = false;
}
@@ -171,34 +171,34 @@
>
-
Pomodoro Settings
-
Configure desktop timer behavior and automatic time logging.
+
{t('time.pomodoro.title')}
+
{t('time.pomodoro.subtitle')}
{#if loading}
-
Loading settings...
+
{t('time.pomodoro.loadingSettings')}
{:else}
@@ -219,23 +219,23 @@
-
Logging
+ {t('time.pomodoro.logging')}
-
-
+
+
diff --git a/frontend/src/lib/locales/de/time.js b/frontend/src/lib/locales/de/time.js
index 4ce9f9d8..6206a391 100644
--- a/frontend/src/lib/locales/de/time.js
+++ b/frontend/src/lib/locales/de/time.js
@@ -29,6 +29,37 @@ export default {
end: 'Ende',
duration: 'Dauer',
durationHelperText: 'Geben Sie Startzeit + Dauer (2h) ein, um die Endzeit automatisch zu berechnen, oder geben Sie Start + Ende ein, um die Dauer automatisch zu berechnen. Zeitformate: 1h, 30m, 1h30m, 2h15m, 1d (=8h)',
+ pomodoro: {
+ title: 'Pomodoro-Einstellungen',
+ subtitle: 'Konfigurieren Sie das Verhalten des Desktop-Timers und die automatische Zeiterfassung.',
+ loadingSettings: 'Einstellungen werden geladen...',
+ loadError: 'Einstellungen konnten nicht geladen werden: {error}',
+ settingsSaved: 'Einstellungen gespeichert',
+ saveError: 'Einstellungen konnten nicht gespeichert werden: {error}',
+ timer: 'Timer',
+ workDuration: 'Arbeitsdauer',
+ workDurationHelper: 'Minuten pro Fokus-Sitzung',
+ shortBreak: 'Kurze Pause',
+ shortBreakHelper: 'Minuten zwischen Arbeitssitzungen',
+ longBreak: 'Lange Pause',
+ longBreakHelper: 'Minuten nach einem abgeschlossenen Zyklus',
+ sessionsBeforeLongBreak: 'Sitzungen bis zur langen Pause',
+ sessionsBeforeLongBreakHelper: 'Abgeschlossene Arbeitssitzungen',
+ behavior: 'Verhalten',
+ autoStartBreaks: 'Pausen automatisch starten',
+ autoStartWork: 'Arbeit automatisch starten',
+ logging: 'Zeiterfassung',
+ autoLogCompletedSessions: 'Abgeschlossene Arbeitssitzungen automatisch erfassen',
+ project: 'Projekt',
+ projectHelper: 'Aktive Zeiterfassungsprojekte auf diesem Server',
+ selectProject: 'Projekt auswählen...',
+ loadingProjects: 'Projekte werden geladen...',
+ description: 'Beschreibung',
+ descriptionHelper: 'Wird für neue Zeiteinträge verwendet',
+ sessionPlaceholder: 'Pomodoro-Sitzung',
+ cancel: 'Abbrechen',
+ saveSettings: 'Einstellungen speichern',
+ },
onboarding: {
title: 'Zeiterfassung einrichten',
subtitle: 'Lassen Sie uns Ihre erste Kundenorganisation und Ihr erstes Projekt erstellen',
diff --git a/frontend/src/lib/locales/en/time.js b/frontend/src/lib/locales/en/time.js
index d7d50e68..c00837d9 100644
--- a/frontend/src/lib/locales/en/time.js
+++ b/frontend/src/lib/locales/en/time.js
@@ -32,6 +32,38 @@ export default {
durationHelperText:
'Enter start time + duration (2h) to auto-calculate end time, or enter start + end times to auto-calculate duration. Time formats: 1h, 30m, 1h30m, 2h15m, 1d (=8h)',
+ pomodoro: {
+ title: 'Pomodoro Settings',
+ subtitle: 'Configure desktop timer behavior and automatic time logging.',
+ loadingSettings: 'Loading settings...',
+ loadError: 'Failed to load settings: {error}',
+ settingsSaved: 'Settings saved',
+ saveError: 'Failed to save settings: {error}',
+ timer: 'Timer',
+ workDuration: 'Work duration',
+ workDurationHelper: 'Minutes per focus session',
+ shortBreak: 'Short break',
+ shortBreakHelper: 'Minutes between work sessions',
+ longBreak: 'Long break',
+ longBreakHelper: 'Minutes after a completed cycle',
+ sessionsBeforeLongBreak: 'Sessions before long break',
+ sessionsBeforeLongBreakHelper: 'Completed work sessions',
+ behavior: 'Behavior',
+ autoStartBreaks: 'Auto-start breaks',
+ autoStartWork: 'Auto-start work',
+ logging: 'Logging',
+ autoLogCompletedSessions: 'Automatically log completed work sessions',
+ project: 'Project',
+ projectHelper: 'Active time projects from this workspace server',
+ selectProject: 'Select a project...',
+ loadingProjects: 'Loading projects...',
+ description: 'Description',
+ descriptionHelper: 'Used for new worklog entries',
+ sessionPlaceholder: 'Pomodoro session',
+ cancel: 'Cancel',
+ saveSettings: 'Save Settings',
+ },
+
// Timesheet
timesheet: {
title: 'Timesheet',
diff --git a/frontend/src/lib/locales/ru/time.js b/frontend/src/lib/locales/ru/time.js
index 3b212ce4..bc45e927 100644
--- a/frontend/src/lib/locales/ru/time.js
+++ b/frontend/src/lib/locales/ru/time.js
@@ -31,6 +31,38 @@ export default {
durationHelperText:
'Введите время начала и продолжительность (2h), чтобы рассчитать время окончания, или время начала и окончания, чтобы рассчитать продолжительность. Форматы: 1h, 30m, 1h30m, 2h15m, 1d (=8h)',
+ pomodoro: {
+ title: 'Настройки Pomodoro',
+ subtitle: 'Настройте поведение таймера в настольном приложении и автоматический учёт времени.',
+ loadingSettings: 'Загрузка настроек…',
+ loadError: 'Не удалось загрузить настройки: {error}',
+ settingsSaved: 'Настройки сохранены',
+ saveError: 'Не удалось сохранить настройки: {error}',
+ timer: 'Таймер',
+ workDuration: 'Длительность работы',
+ workDurationHelper: 'Минут на один сеанс концентрации',
+ shortBreak: 'Короткий перерыв',
+ shortBreakHelper: 'Минут между рабочими сеансами',
+ longBreak: 'Длинный перерыв',
+ longBreakHelper: 'Минут после завершённого цикла',
+ sessionsBeforeLongBreak: 'Сеансов до длинного перерыва',
+ sessionsBeforeLongBreakHelper: 'Завершённые рабочие сеансы',
+ behavior: 'Поведение',
+ autoStartBreaks: 'Автоматически запускать перерывы',
+ autoStartWork: 'Автоматически запускать работу',
+ logging: 'Учёт времени',
+ autoLogCompletedSessions: 'Автоматически записывать завершённые рабочие сеансы',
+ project: 'Проект',
+ projectHelper: 'Активные проекты учёта времени на сервере этого рабочего пространства',
+ selectProject: 'Выберите проект…',
+ loadingProjects: 'Загрузка проектов…',
+ description: 'Описание',
+ descriptionHelper: 'Используется для новых записей времени',
+ sessionPlaceholder: 'Сеанс Pomodoro',
+ cancel: 'Отмена',
+ saveSettings: 'Сохранить настройки',
+ },
+
timesheet: {
title: 'Табель',
subtitle: 'Обзор табеля за неделю',