Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
{
"recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
}
"recommendations": [
"tauri-apps.tauri-vscode",
"rust-lang.rust-analyzer",
"inlang.vs-code-extension"
]
}
22 changes: 22 additions & 0 deletions changes
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
feat:

- Added localization using paraglide.js, languages are English and Italian (AI translation).
- Added language switcher in settings with relevant CSS file (definitely needs to be adjusted).

explanation:

- Static content is translated on page load.
- Dynamic content is handled by the companion DynamicTextUpdater.
- User preferences are persisted across sessions.

- Messages are saved in {locale}.json and accessed using m['parent.child']() function.
- There is a localization manager (utils/localization.js) which ultimately handles the following:

- Locale switching
- Text updates during runtime (after switching language)
- Updates the HTML `lang` tag

- There is also a dynamic text updater (utils/dynamic-text-updater.js) that updates text content when:

- Timer state changes
- DOM elements are added dynamically
224 changes: 224 additions & 0 deletions messages/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",
"app": {
"title": "Presto"
},
"navigation": {
"timer": "Timer",
"calendar": "Calendar",
"team": "Team (Coming Soon)",
"settings": "Settings"
},
"user": {
"avatar": "User Avatar",
"guest": "Guest",
"guestMode": "Guest Mode",
"signIn": "Sign In",
"signOut": "Sign Out"
},
"timer": {
"focus": "Focus",
"chooseTag": "Choose tag",
"newTag": "New tag...",
"smartPause": "Smart Pause: Click to toggle automatic pause when inactive",
"autoStart": "Auto-start: Click to toggle automatic session start",
"continuousSessions": "Continuous Sessions: Click to toggle continuous mode",
"subtract5Minutes": "Subtract 5 minutes",
"add5Minutes": "Add 5 minutes"
},
"calendar": {
"title": "Calendar & Statistics",
"weeklyFocusSummary": "Focus Weekly Summary",
"weeklyFocusTime": "Weekly focus time",
"averageFocusDay": "Average focus/day",
"sessionsThisWeek": "Sessions this week",
"weeklyTotalTime": "Weekly total time",
"thisWeeksSessions": "This Week's Sessions",
"todaysDevelopment": "Today's Development",
"focusSessions": "Focus sessions",
"breakTime": "Break time",
"tagUsageThisWeek": "Tag Usage This Week",
"noDataAvailable": "No data available",
"todaysSessions": "Today's Sessions",
"addSession": "Add Session",
"sessionHistory": "Session History",
"export": "Export",
"exportToExcel": "Export to Excel",
"date": "Date",
"time": "Time",
"duration": "Duration",
"tags": "Tags",
"actions": "Actions",
"days": {
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat",
"sun": "Sun"
}
},
"team": {
"title": "Team Dashboard",
"subtitle": "Monitor your team's focus status in real-time",
"focusing": "Focusing",
"onBreak": "On Break",
"privacyMode": "Privacy Mode",
"offline": "Offline",
"teamsOverview": "Teams Overview"
},
"settings": {
"title": "Settings",
"categories": {
"general": "General",
"shortcuts": "Shortcuts",
"notifications": "Notifications",
"theme": "Theme",
"automation": "Automation",
"goals": "Goals",
"advanced": "Advanced",
"updates": "Updates"
},
"general": {
"title": "General Settings",
"description": "Configure timer durations and basic behavior",
"timerDurations": "Timer Durations",
"focusDuration": "Focus Duration (minutes):",
"focusDurationDesc": "How long should focus sessions last",
"shortBreak": "Short Break (minutes):",
"shortBreakDesc": "Duration for short breaks between focus sessions",
"longBreak": "Long Break (minutes):",
"longBreakDesc": "Duration for long breaks after completing a cycle",
"dailySessions": "Daily Sessions:",
"dailySessionsDesc": "Number of focus sessions to complete each day",
"maxSessionTime": "Max Session Time (minutes):",
"maxSessionTimeDesc": "Maximum time per session before auto-pause (default: 2 hours)"
},
"shortcuts": {
"title": "Global Shortcuts",
"description": "Configure keyboard shortcuts that work even when the app is in the background",
"keyboardShortcuts": "Keyboard Shortcuts",
"startStop": "Start/Stop Timer:",
"startStopDesc": "Toggle timer between start and pause states",
"deleteUndo": "Delete Session / Undo:",
"deleteUndoDesc": "Reset current session or undo during breaks",
"saveSession": "Save Session:",
"saveSessionDesc": "Skip to next phase and save current progress"
},
"notifications": {
"title": "Notifications",
"description": "Control how and when you receive notifications",
"notificationTypes": "Notification Types",
"desktop": "Desktop Notifications",
"desktopDesc": "Show system notifications when timer completes. Browser permission will be requested when enabled.",
"sound": "Sound Notifications",
"soundDesc": "Play a sound when timer phases complete"
},
"theme": {
"title": "Theme",
"description": "Customize the appearance and visual style of the application",
"colorTheme": "Color Theme",
"themeMode": "Theme Mode:",
"auto": "Auto",
"light": "Light",
"dark": "Dark",
"autoTooltip": "Auto (Follow System)",
"lightTooltip": "Light Mode",
"darkTooltip": "Dark Mode",
"themeModeDesc": "Choose your preferred color theme. Auto will automatically switch between light and dark mode based on your system preferences.",
"timerColors": "Timer Colors",
"timerTheme": "Timer Theme:",
"timerThemeDesc": "Choose a color theme for your timer sessions. Some themes work only in light or dark mode."
},
"automation": {
"title": "Automation",
"description": "Configure automatic behaviors and smart features",
"timerAutomation": "Timer Automation",
"autoStartTimer": "Auto-start Timer",
"autoStartTimerDesc": "Automatically start the timer when manually skipping to the next session (using the skip button).",
"allowContinuousSessions": "Allow Continuous Sessions",
"allowContinuousSessionsDesc": "Allow all sessions (focus, breaks, and long breaks) to continue beyond their timer duration. When enabled, you can manually decide when to move to the next phase instead of being automatically transitioned.",
"smartFeatures": "Smart Features",
"smartPause": "Smart Pause (Auto-pause when inactive)",
"smartPauseDesc": "Automatically pause the timer during focus sessions when no mouse or keyboard activity is detected, and resume when activity resumes. Only works during focus periods, not breaks.",
"inactivityTimeout": "Inactivity Timeout:",
"seconds": "seconds",
"inactivityTimeoutDesc": "How long to wait before pausing during inactivity",
"sessionManagement": "Session Management",
"autoSaveSessions": "Auto-save Completed Sessions",
"autoSaveSessionsDesc": "Automatically save session data when timer completes without manual confirmation.",
"preventInterruptions": "Prevent Interruptions",
"preventInterruptionsDesc": "Show confirmation dialog before allowing session resets during active focus periods."
},
"goals": {
"title": "Weekly Goals",
"description": "Set your weekly focus time targets and productivity goals",
"focusGoals": "Focus Goals",
"weeklyGoal": "Weekly Goal (minutes):",
"weeklyGoalDesc": "Target focus time for Monday through Friday (default: 125 minutes = 5 sessions of 25 minutes). Saturday and Sunday are excluded from calculation."
},
"advanced": {
"title": "Advanced Settings",
"description": "Danger zone and advanced configuration options",
"systemIntegration": "System Integration",
"startWithSystem": "Start with System",
"startWithSystemDesc": "Automatically start Presto when your computer boots up. The app will start minimized to the system tray.",
"privacyAnalytics": "Privacy & Analytics",
"enableAnonymousStats": "Enable Anonymous Statistics",
"enableAnonymousStatsDesc": "Help improve Presto by sharing anonymous usage statistics. No personal data is collected.",
"developerTools": "🔧 Developer Tools",
"debugMode": "Debug Mode (3-second timers)",
"debugModeDesc": "Enable debug mode where all timers (focus, break, long break) are set to 3 seconds for rapid testing. Perfect for development and feature testing.",
"dangerZone": "⚠️ Danger Zone",
"dangerZoneDesc": "These actions are irreversible and will permanently delete your data.",
"resetAllData": "🗑️ Reset All Data",
"resetAllDataDesc": "This will permanently delete all your Pomodoro sessions, tasks, statistics, and reset all settings to default. This action cannot be undone."
},
"updates": {
"title": "App Updates",
"description": "Manage application updates and version information",
"currentVersion": "Current Version",
"installedVersion": "Installed Version:",
"checkingForUpdates": "Checking for updates...",
"checkForUpdates": "Check for Updates",
"updateSettings": "Update Settings",
"automaticallyCheckUpdates": "Automatically check for updates",
"automaticallyCheckUpdatesDesc": "Check for new versions automatically when the app starts and every hour. You'll be notified when updates are available.",
"includePrerelease": "Include pre-release versions",
"includePrereleaseDesc": "Also check for beta and pre-release versions. These may contain new features but could be less stable.",
"releaseInformation": "Release Information",
"releaseInfoDesc": "Updates are distributed through GitHub releases.",
"viewAllReleases": "View all releases on GitHub",
"updateSource": "Update Source:",
"githubReleases": "GitHub Releases",
"pleaseWait": "Please wait while we check for the latest version.",
"updateAvailable": "Update Available",
"current": "Current:",
"latest": "Latest:",
"downloadInstall": "Download & Install",
"skipVersion": "Skip This Version"
},
"settingsAutoSave": "✓ Settings are saved automatically",
"resetToDefaults": "Reset to Defaults"
},
"modal": {
"addSession": "Add Session",
"durationMinutes": "Duration (minutes)",
"startTime": "Start Time",
"endTime": "End Time",
"cancel": "Cancel",
"delete": "Delete",
"saveSession": "Save Session"
},
"common": {
"close": "Close",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"export": "Export",
"minutes": "minutes",
"seconds": "seconds",
"hours": "hours"
}
}
Loading