From 8112fe8fd60c995c431708b581e2ec3af2e7a2be Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 17 Feb 2026 23:35:27 +0200 Subject: [PATCH] feat: add locale and currency settings with searchable dropdowns --- src/views/Settings.vue | 72 +++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/src/views/Settings.vue b/src/views/Settings.vue index f8efa58..12610a5 100644 --- a/src/views/Settings.vue +++ b/src/views/Settings.vue @@ -53,6 +53,44 @@ + +
+
+

Locale

+

Date and number formatting

+
+
+ +
+
+ +
+
+

Currency

+

Currency symbol and formatting

+
+
+ +
+
@@ -112,18 +150,14 @@

Default Hourly Rate

Applied to new projects

-
- $ - -
+ @@ -205,6 +239,9 @@ import { invoke } from '@tauri-apps/api/core' import { Settings as SettingsIcon, Clock, Receipt, Database, Plus, Minus } from 'lucide-vue-next' import { useSettingsStore } from '../stores/settings' import { useToastStore } from '../stores/toast' +import AppNumberInput from '../components/AppNumberInput.vue' +import AppSelect from '../components/AppSelect.vue' +import { LOCALES, getCurrencies } from '../utils/locale' const settingsStore = useSettingsStore() const toastStore = useToastStore() @@ -224,6 +261,9 @@ const hourlyRate = ref(0) const idleDetection = ref(true) const reminderInterval = ref(15) const zoomLevel = ref(100) +const locale = ref('system') +const currency = ref('USD') +const currencyOptions = getCurrencies() // Dialog state const showClearDataDialog = ref(false) @@ -279,6 +319,12 @@ async function saveSettings() { } } +// Save locale/currency settings +async function saveLocaleSettings() { + await settingsStore.updateSetting('locale', locale.value) + await settingsStore.updateSetting('currency', currency.value) +} + // Export all data async function exportData() { try { @@ -318,5 +364,7 @@ onMounted(async () => { idleDetection.value = settingsStore.settings.idle_detection !== 'false' reminderInterval.value = parseInt(settingsStore.settings.reminder_interval) || 15 zoomLevel.value = parseInt(settingsStore.settings.ui_zoom) || 100 + locale.value = settingsStore.settings.locale || 'system' + currency.value = settingsStore.settings.currency || 'USD' })