fix: confirm resetting settings in a dialog and report backup results in toasts instead of alerts

This commit is contained in:
Linus Rath
2026-10-28 03:44:47 +01:00
parent b30c2764f0
commit 714d2b84da
31 changed files with 233 additions and 92 deletions
@@ -0,0 +1,56 @@
import { fireEvent, render, screen, waitFor, within } from '@testing-library/react';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { useSettingsStore } from '@/stores/settings-store';
import { AboutDataSettings } from '../about-data-settings';
// Backup & reset: Reset asks in a ConfirmDialog (no button that turns into
// a red "Yes"), and every result is a toast, never a browser alert().
const toast = vi.hoisted(() => ({ success: vi.fn(), error: vi.fn(), info: vi.fn(), warning: vi.fn() }));
vi.mock('@/stores/toast-store', () => ({ toast }));
vi.mock('../settings-section', async (importOriginal) => ({
...(await importOriginal<typeof import('../settings-section')>()),
SettingsSection: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}));
vi.mock('../debug-settings', () => ({ DebugSettings: () => null }));
const initial = useSettingsStore.getState();
let alertSpy: ReturnType<typeof vi.spyOn>;
beforeEach(() => {
toast.success.mockClear();
toast.error.mockClear();
alertSpy = vi.spyOn(window, 'alert').mockImplementation(() => {});
});
afterEach(() => {
useSettingsStore.setState(initial, true);
alertSpy.mockRestore();
});
describe('Backup & reset', () => {
it('resets only after the dialog is confirmed, then says so in a toast', () => {
const resetToDefaults = vi.fn();
useSettingsStore.setState({ resetToDefaults });
render(<AboutDataSettings />);
fireEvent.click(screen.getByRole('button', { name: 'reset_settings.button' }));
expect(resetToDefaults).not.toHaveBeenCalled();
const dialog = within(screen.getByRole('alertdialog'));
expect(dialog.getByText('reset_settings.confirm_title')).toBeTruthy();
fireEvent.click(dialog.getByRole('button', { name: 'reset_settings.button' }));
expect(resetToDefaults).toHaveBeenCalledTimes(1);
expect(toast.success).toHaveBeenCalledWith('reset_settings.done');
expect(alertSpy).not.toHaveBeenCalled();
});
it('reports an import that fails in an error toast', async () => {
useSettingsStore.setState({ importSettings: vi.fn(() => false) });
const { container } = render(<AboutDataSettings />);
const input = container.querySelector('input[type="file"]') as HTMLInputElement;
const file = new File(['not json'], 'settings.json', { type: 'application/json' });
fireEvent.change(input, { target: { files: [file] } });
await waitFor(() => expect(toast.error).toHaveBeenCalledWith('import_error'));
expect(alertSpy).not.toHaveBeenCalled();
});
});
+30 -32
View File
@@ -13,6 +13,8 @@ import { cn } from '@/lib/utils';
import { getPathPrefix, withBasePath } from '@/lib/browser-navigation';
import { clearCachedData } from '@/lib/clear-cached-data';
import { SpamSiegeGame } from './spam-siege-game';
import { ConfirmDialog } from '@/components/ui/confirm-dialog';
import { toast } from '@/stores/toast-store';
import { DebugSettings } from './debug-settings';
const APP_VERSION = process.env.NEXT_PUBLIC_APP_VERSION || "0.0.0";
@@ -122,7 +124,6 @@ export function AboutFooter() {
*/
export function AboutDataSettings() {
const t = useTranslations('settings.advanced');
const tCommon = useTranslations('common');
const tSettings = useTranslations('settings');
const { settingsSyncDisabled, updateSetting, resetToDefaults, exportSettings, importSettings } =
useSettingsStore();
@@ -157,32 +158,19 @@ export function AboutDataSettings() {
const json = event.target?.result as string;
const success = importSettings(json);
if (success) {
alert(tSettings('import_success'));
toast.success(tSettings('import_success'));
} else {
alert(tSettings('import_error'));
toast.error(tSettings('import_error'));
}
};
reader.readAsText(file);
};
const handleRefreshCache = () => {
if (showRefreshConfirm) {
clearCachedData(); // reloads the page
} else {
setShowRefreshConfirm(true);
setTimeout(() => setShowRefreshConfirm(false), 5000);
}
// The same file can be picked again after fixing it.
e.target.value = '';
};
const handleReset = () => {
if (showResetConfirm) {
resetToDefaults();
setShowResetConfirm(false);
alert(tSettings('save_success'));
} else {
setShowResetConfirm(true);
setTimeout(() => setShowResetConfirm(false), 5000);
}
resetToDefaults();
toast.success(t('reset_settings.done'));
};
return (
@@ -222,26 +210,36 @@ export function AboutDataSettings() {
<SettingsSection id="fix" title={t('sections.fix')} description={t('sections.fix_description')}>
<SettingItem label={t('refresh_cache.label')} description={t('refresh_cache.description')}>
<Button
variant={showRefreshConfirm ? 'default' : 'outline'}
size="sm"
onClick={handleRefreshCache}
>
{showRefreshConfirm ? tCommon('yes') : t('refresh_cache.button')}
<Button variant="outline" size="sm" onClick={() => setShowRefreshConfirm(true)}>
{t('refresh_cache.button')}
</Button>
</SettingItem>
<SettingItem label={t('reset_settings.label')} description={t('reset_settings.description')}>
<Button
variant={showResetConfirm ? 'destructive' : 'outline'}
size="sm"
onClick={handleReset}
>
{showResetConfirm ? tCommon('yes') : t('reset_settings.button')}
<Button variant="outline" size="sm" onClick={() => setShowResetConfirm(true)}>
{t('reset_settings.button')}
</Button>
</SettingItem>
</SettingsSection>
<ConfirmDialog
isOpen={showRefreshConfirm}
onClose={() => setShowRefreshConfirm(false)}
onConfirm={() => clearCachedData() /* reloads the page */}
title={t('refresh_cache.confirm_title')}
message={t('refresh_cache.description')}
confirmText={t('refresh_cache.button')}
/>
<ConfirmDialog
isOpen={showResetConfirm}
onClose={() => setShowResetConfirm(false)}
onConfirm={handleReset}
title={t('reset_settings.confirm_title')}
message={t('reset_settings.description')}
confirmText={t('reset_settings.button')}
variant="destructive"
/>
<DebugSettings />
</div>
);
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "تحديث البيانات المخزنة مؤقتًا",
"description": "إعادة تحميل جهات الاتصال والتقويمات والمجلدات من الخادم. يحافظ على حساباتك وجلساتك — يصلح العرض القديم أو الخاطئ دون تسجيل الخروج.",
"button": "تحديث"
"button": "تحديث",
"confirm_title": "تحديث البيانات المخزنة مؤقتًا؟"
},
"reset_settings": {
"label": "إعادة تعيين الإعدادات",
"description": "استعادة جميع الإعدادات إلى القيم الافتراضية",
"button": "إعادة التعيين للافتراضي"
"button": "إعادة التعيين للافتراضي",
"confirm_title": "إعادة تعيين كل الإعدادات؟",
"done": "تمت إعادة تعيين الإعدادات"
},
"export_settings": {
"label": "تصدير الإعدادات",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Actualitza les dades emmagatzemades",
"description": "Torna a carregar els contactes, els calendaris i les carpetes des del servidor. Manté els comptes i les sessions — soluciona una vista obsoleta o incorrecta sense tancar la sessió.",
"button": "Actualitza"
"button": "Actualitza",
"confirm_title": "Voleu actualitzar les dades de la memòria cau?"
},
"reset_settings": {
"label": "Restableix la configuració",
"description": "Restaura tota la configuració als valors per defecte",
"button": "Restableix als valors per defecte"
"button": "Restableix als valors per defecte",
"confirm_title": "Voleu restablir tots els paràmetres?",
"done": "Paràmetres restablerts"
},
"export_settings": {
"label": "Exporta la configuració",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Obnovit data z mezipaměti",
"description": "Znovu načíst kontakty, kalendáře a složky ze serveru. Účty a přihlášení zůstanou zachovány – opraví zastaralé nebo chybné zobrazení bez odhlášení.",
"button": "Obnovit"
"button": "Obnovit",
"confirm_title": "Obnovit data v mezipaměti?"
},
"reset_settings": {
"label": "Resetovat nastavení",
"description": "Obnovit všechna nastavení na výchozí hodnoty",
"button": "Obnovit výchozí"
"button": "Obnovit výchozí",
"confirm_title": "Obnovit všechna nastavení?",
"done": "Nastavení byla obnovena"
},
"export_settings": {
"label": "Exportovat nastavení",
+5 -2
View File
@@ -2187,12 +2187,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Opdater cachelagrede data?"
},
"reset_settings": {
"label": "Nulstil indstillinger",
"description": "Gendan alle indstillinger til standardværdier",
"button": "Nulstil til standard"
"button": "Nulstil til standard",
"confirm_title": "Nulstil alle indstillinger?",
"done": "Indstillinger nulstillet"
},
"export_settings": {
"label": "Eksportér indstillinger",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Zwischengespeicherte Daten aktualisieren",
"description": "Kontakte, Kalender und Ordner vom Server neu laden. Konten und Sitzungen bleiben erhalten; veraltete oder fehlerhafte Ansichten werden korrigiert, ohne dass Sie sich abmelden müssen.",
"button": "Aktualisieren"
"button": "Aktualisieren",
"confirm_title": "Zwischengespeicherte Daten aktualisieren?"
},
"reset_settings": {
"label": "Einstellungen zurücksetzen",
"description": "Alle Einstellungen auf Standardwerte zurücksetzen",
"button": "Auf Standard zurücksetzen"
"button": "Auf Standard zurücksetzen",
"confirm_title": "Alle Einstellungen zurücksetzen?",
"done": "Einstellungen zurückgesetzt"
},
"export_settings": {
"label": "Einstellungen exportieren",
+7 -4
View File
@@ -1049,8 +1049,8 @@
"title": "Settings",
"back_to_mail": "Back to Mail",
"save_success": "Settings saved successfully",
"import_success": "Settings imported successfully",
"import_error": "Failed to import settings",
"import_success": "Settings imported",
"import_error": "Couldn't import settings",
"reset_confirm": "Are you sure you want to reset all settings to defaults?",
"unsaved_changes": "You have unsaved changes",
"discard_changes": "Discard unsaved changes?",
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Refresh cached data?"
},
"reset_settings": {
"label": "Reset Settings",
"description": "Restore all settings to default values",
"button": "Reset to Defaults"
"button": "Reset to Defaults",
"confirm_title": "Reset all settings?",
"done": "Settings reset"
},
"export_settings": {
"label": "Export Settings",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "¿Actualizar los datos en caché?"
},
"reset_settings": {
"label": "Restablecer Configuración",
"description": "Restaurar toda la configuración a los valores predeterminados",
"button": "Restablecer a Predeterminados"
"button": "Restablecer a Predeterminados",
"confirm_title": "¿Restablecer todos los ajustes?",
"done": "Ajustes restablecidos"
},
"export_settings": {
"label": "Exportar Configuración",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Värskenda vahemällu salvestatud andmeid",
"description": "Laadi kontaktid, kalendrid ja kaustad serverist uuesti. Kontod ja seansid jäävad alles — parandab aegunud või vale kuva ilma välja logimata.",
"button": "Värskenda"
"button": "Värskenda",
"confirm_title": "Värskendada vahemälu andmed?"
},
"reset_settings": {
"label": "Lähtesta seaded",
"description": "Taasta kõik seaded vaikeväärtustele",
"button": "Lähtesta vaikeväärtustele"
"button": "Lähtesta vaikeväärtustele",
"confirm_title": "Lähtestada kõik seaded?",
"done": "Seaded lähtestatud"
},
"export_settings": {
"label": "Ekspordi seaded",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "داده‌های ذخیره‌شده موقت تازه شوند؟"
},
"reset_settings": {
"label": "بازنشانی تنظیمات",
"description": "بازگردانی همه تنظیمات به مقادیر پیش‌فرض",
"button": "بازنشانی به پیش‌فرض"
"button": "بازنشانی به پیش‌فرض",
"confirm_title": "همه تنظیمات بازنشانی شوند؟",
"done": "تنظیمات بازنشانی شد"
},
"export_settings": {
"label": "خروجی تنظیمات",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Actualiser les données en cache",
"description": "Actualiser les contacts, calendriers et dossiers depuis le serveur. Vos comptes et sessions sont conservés. Corrige un affichage obsolète ou incorrect sans vous déconnecter.",
"button": "Actualiser"
"button": "Actualiser",
"confirm_title": "Actualiser les données en cache ?"
},
"reset_settings": {
"label": "Réinitialiser les paramètres",
"description": "Restaurer tous les paramètres par défaut",
"button": "Réinitialiser"
"button": "Réinitialiser",
"confirm_title": "Réinitialiser tous les paramètres ?",
"done": "Paramètres réinitialisés"
},
"export_settings": {
"label": "Exporter les paramètres",
+5 -2
View File
@@ -2146,12 +2146,15 @@
"refresh_cache": {
"label": "רענון נתונים שמורים",
"description": "טעינה מחדש של אנשי קשר, לוחות שנה ותיקיות מהשרת. שומר על החשבונות וההתחברויות שלך — מתקן תצוגה מיושנת או שגויה ללא התנתקות.",
"button": "רענון"
"button": "רענון",
"confirm_title": "לרענן את הנתונים השמורים במטמון?"
},
"reset_settings": {
"label": "אפס את ההגדרות",
"description": "שחזר את כל ההגדרות לערכי ברירת המחדל",
"button": "אפס לברירות מחדל"
"button": "אפס לברירות מחדל",
"confirm_title": "לאפס את כל ההגדרות?",
"done": "ההגדרות אופסו"
},
"export_settings": {
"label": "ייצוא הגדרות",
+5 -2
View File
@@ -2187,12 +2187,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Frissíti a gyorsítótárazott adatokat?"
},
"reset_settings": {
"label": "Beállítások visszaállítása",
"description": "Összes beállítás visszaállítása az alapértelmezett értékekre",
"button": "Visszaállítás alapértelmezettre"
"button": "Visszaállítás alapértelmezettre",
"confirm_title": "Visszaállítja az összes beállítást?",
"done": "Beállítások visszaállítva"
},
"export_settings": {
"label": "Beállítások exportálása",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Aggiornare i dati nella cache?"
},
"reset_settings": {
"label": "Ripristina impostazioni",
"description": "Ripristina tutte le impostazioni ai valori predefiniti",
"button": "Ripristina ai valori predefiniti"
"button": "Ripristina ai valori predefiniti",
"confirm_title": "Ripristinare tutte le impostazioni?",
"done": "Impostazioni ripristinate"
},
"export_settings": {
"label": "Esporta impostazioni",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "キャッシュされたデータを更新しますか?"
},
"reset_settings": {
"label": "設定をリセット",
"description": "すべての設定をデフォルト値に戻す",
"button": "デフォルトにリセット"
"button": "デフォルトにリセット",
"confirm_title": "すべての設定をリセットしますか?",
"done": "設定をリセットしました"
},
"export_settings": {
"label": "設定をエクスポート",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "캐시된 데이터를 새로 고칠까요?"
},
"reset_settings": {
"label": "설정 초기화",
"description": "모든 설정을 기본값으로 되돌려요",
"button": "기본값으로 초기화"
"button": "기본값으로 초기화",
"confirm_title": "모든 설정을 초기화할까요?",
"done": "설정을 초기화했어요"
},
"export_settings": {
"label": "설정 내보내기",
+5 -2
View File
@@ -2165,12 +2165,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Atsvaidzināt kešatmiņas datus?"
},
"reset_settings": {
"label": "Atiestatīt iestatījumus",
"description": "Atjaunot visus iestatījumus uz noklusējuma vērtībām",
"button": "Atiestatīt"
"button": "Atiestatīt",
"confirm_title": "Atiestatīt visus iestatījumus?",
"done": "Iestatījumi atiestatīti"
},
"export_settings": {
"label": "Eksportēt iestatījumus",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Кэш хийсэн өгөгдлийг сэргээх",
"description": "Харилцагч, хуанли, фолдеруудыг серверээс дахин ачаална уу. Таны бүртгэл болон сешнүүдийг хадгална — гаралгүй хуучирсан эсвэл буруу харагдацыг засна.",
"button": "Сэргээх"
"button": "Сэргээх",
"confirm_title": "Кэшлэгдсэн өгөгдлийг шинэчлэх үү?"
},
"reset_settings": {
"label": "Тохиргоог дахин тохируулах",
"description": "Бүх тохиргоог анхдагч утга руу нь сэргээнэ",
"button": "Өгөгдмөл рүү дахин тохируулах"
"button": "Өгөгдмөл рүү дахин тохируулах",
"confirm_title": "Бүх тохиргоог анхны байдалд нь оруулах уу?",
"done": "Тохиргоог анхны байдалд оруулсан"
},
"export_settings": {
"label": "Экспортын тохиргоо",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Oppdater bufrede data",
"description": "Last inn kontakter, kalendere og mapper på nytt fra serveren. Kontoene og øktene beholdes, slik at du kan rette en utdatert eller feil visning uten å logge av.",
"button": "Oppdater"
"button": "Oppdater",
"confirm_title": "Oppdatere bufrede data?"
},
"reset_settings": {
"label": "Tilbakestill innstillinger",
"description": "Gjenopprett standardinnstillingene",
"button": "Tilbakestill til standard"
"button": "Tilbakestill til standard",
"confirm_title": "Tilbakestille alle innstillinger?",
"done": "Innstillinger tilbakestilt"
},
"export_settings": {
"label": "Eksporter innstillinger",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Gegevens in de cache vernieuwen?"
},
"reset_settings": {
"label": "Instellingen resetten",
"description": "Herstel alle instellingen naar standaardwaarden",
"button": "Resetten naar standaard"
"button": "Resetten naar standaard",
"confirm_title": "Alle instellingen herstellen?",
"done": "Instellingen hersteld"
},
"export_settings": {
"label": "Instellingen exporteren",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Odświeżyć dane w pamięci podręcznej?"
},
"reset_settings": {
"label": "Resetuj ustawienia",
"description": "Przywróć wszystkie ustawienia do wartości domyślnych",
"button": "Przywróć domyślne"
"button": "Przywróć domyślne",
"confirm_title": "Zresetować wszystkie ustawienia?",
"done": "Ustawienia zresetowane"
},
"export_settings": {
"label": "Eksportuj ustawienia",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Atualizar dados armazenados em cache",
"description": "Atualize os contatos, calendários e pastas do servidor. Mantém suas contas e sessões — corrige uma visualização desatualizada ou incorreta sem precisar sair da conta.",
"button": "Recarregar"
"button": "Recarregar",
"confirm_title": "Atualizar os dados em cache?"
},
"reset_settings": {
"label": "Redefinir Configurações",
"description": "Restaurar todas as configurações para valores padrão",
"button": "Redefinir para Padrões"
"button": "Redefinir para Padrões",
"confirm_title": "Repor todas as definições?",
"done": "Definições repostas"
},
"export_settings": {
"label": "Exportar Configurações",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Reîmprospătați datele din cache?"
},
"reset_settings": {
"label": "Resetare setări",
"description": "Restabiliți toate setările la valorile implicite",
"button": "Resezare la setările implicite"
"button": "Resezare la setările implicite",
"confirm_title": "Resetați toate setările?",
"done": "Setări resetate"
},
"export_settings": {
"label": "Setări de export",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Обновить кэшированные данные?"
},
"reset_settings": {
"label": "Сбросить настройки",
"description": "Восстановить все настройки до значений по умолчанию",
"button": "Сбросить"
"button": "Сбросить",
"confirm_title": "Сбросить все настройки?",
"done": "Настройки сброшены"
},
"export_settings": {
"label": "Экспортировать настройки",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "Obnoviť uložené údaje",
"description": "Znova načíta kontakty, kalendáre a priečinky zo servera. Zachová vaše účty a prihlásenia — opraví zastarané alebo nesprávne zobrazenie bez odhlásenia.",
"button": "Obnoviť"
"button": "Obnoviť",
"confirm_title": "Obnoviť údaje vo vyrovnávacej pamäti?"
},
"reset_settings": {
"label": "Resetovať nastavenia",
"description": "Obnoviť všetky nastavenia na predvolené hodnoty",
"button": "Obnoviť predvolené"
"button": "Obnoviť predvolené",
"confirm_title": "Obnoviť všetky nastavenia?",
"done": "Nastavenia boli obnovené"
},
"export_settings": {
"label": "Exportovať nastavenia",
+5 -2
View File
@@ -4201,12 +4201,15 @@
"refresh_cache": {
"label": "รีเฟรชข้อมูลในแคช",
"description": "โหลดผู้ติดต่อ ปฏิทิน และโฟลเดอร์จากเซิร์ฟเวอร์ใหม่ โดยยังคงรักษาบัญชีและเซสชันของคุณไว้ — แก้ไขมุมมองที่ไม่อัปเดตหรือไม่ถูกต้องโดยไม่ต้องลงชื่อออก",
"button": "รีเฟรช"
"button": "รีเฟรช",
"confirm_title": "รีเฟรชข้อมูลที่แคชไว้ไหม"
},
"reset_settings": {
"label": "รีเซ็ตการตั้งค่า",
"description": "คืนค่าการตั้งค่าทั้งหมดกลับเป็นค่าเริ่มต้น",
"button": "รีเซ็ตเป็นค่าเริ่มต้น"
"button": "รีเซ็ตเป็นค่าเริ่มต้น",
"confirm_title": "รีเซ็ตการตั้งค่าทั้งหมดไหม",
"done": "รีเซ็ตการตั้งค่าแล้ว"
},
"export_settings": {
"label": "ส่งออกการตั้งค่า",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Önbellekteki veriler yenilensin mi?"
},
"reset_settings": {
"label": "Ayarları Sıfırla",
"description": "Tüm ayarları varsayılan değerlerine geri yükle",
"button": "Varsayılanlara Sıfırla"
"button": "Varsayılanlara Sıfırla",
"confirm_title": "Tüm ayarlar sıfırlansın mı?",
"done": "Ayarlar sıfırlandı"
},
"export_settings": {
"label": "Ayarları Dışa Aktar",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "Оновити кешовані дані?"
},
"reset_settings": {
"label": "Скинути налаштування",
"description": "Відновити всі налаштування до значень за замовчуванням",
"button": "Скинути до значень за замовчуванням"
"button": "Скинути до значень за замовчуванням",
"confirm_title": "Скинути всі налаштування?",
"done": "Налаштування скинуто"
},
"export_settings": {
"label": "Налаштування експорту",
+5 -2
View File
@@ -2191,12 +2191,15 @@
"refresh_cache": {
"label": "重新整理快取資料",
"description": "從伺服器重新載入聯絡人、行事曆與信件匣。保留帳號與工作階段,不需登出即可修正過時或錯誤的畫面。",
"button": "重新整理"
"button": "重新整理",
"confirm_title": "重新整理快取資料?"
},
"reset_settings": {
"label": "重設設定",
"description": "將所有設定還原為預設值",
"button": "重設為預設值"
"button": "重設為預設值",
"confirm_title": "重設所有設定?",
"done": "設定已重設"
},
"export_settings": {
"label": "匯出設定",
+5 -2
View File
@@ -2184,12 +2184,15 @@
"refresh_cache": {
"label": "Refresh cached data",
"description": "Reload contacts, calendars, and folders from the server. Keeps your accounts and sessions — fixes a stale or wrong view without signing out.",
"button": "Refresh"
"button": "Refresh",
"confirm_title": "刷新缓存数据?"
},
"reset_settings": {
"label": "重置设置",
"description": "将所有设置恢复为默认值",
"button": "重置为默认值"
"button": "重置为默认值",
"confirm_title": "重置所有设置?",
"done": "设置已重置"
},
"export_settings": {
"label": "导出设置",