diff --git a/components/settings/appearance-settings.tsx b/components/settings/appearance-settings.tsx index 344574152..f8f2e448b 100644 --- a/components/settings/appearance-settings.tsx +++ b/components/settings/appearance-settings.tsx @@ -4,6 +4,8 @@ import { useTranslations } from 'next-intl'; import { useThemeStore } from '@/stores/theme-store'; import { useSettingsStore, type Density } from '@/stores/settings-store'; import { SettingsSection, SettingItem, RadioGroup, ToggleSwitch } from './settings-section'; +import { ThemesSettings } from './themes-settings'; +import { LayoutSection, SidebarSection, MultipleAccountsSection, ExperimentalSection } from './layout-settings'; import { cn } from '@/lib/utils'; import { useTour } from '@/components/tour/tour-provider'; import { Button } from '@/components/ui/button'; @@ -66,6 +68,11 @@ function DensityPreview({ density }: { density: Density }) { ); } +/** + * The Appearance page: theme, text and motion, layout, sidebar, how several + * accounts show together, and the experimental Pro interface. The former + * Layout and Themes tabs live here as sections. + */ export function AppearanceSettings() { const t = useTranslations('settings.appearance'); const tAdvanced = useTranslations('settings.advanced'); @@ -74,108 +81,121 @@ export function AppearanceSettings() { const { fontSize, density, animationsEnabled, senderFavicons, showAvatarsInJunk, showOnboardingOnNewDevices, updateSetting } = useSettingsStore(); const { startTour, resetTourCompletion } = useTour(); const refreshFavicons = useFaviconRefreshStore((s) => s.refresh); - const { isSettingLocked, isSettingHidden, getColorModePolicy } = usePolicyStore(); + const { isSettingLocked, isSettingHidden, getColorModePolicy, isFeatureEnabled } = usePolicyStore(); return ( - - - setTheme(value as 'light' | 'dark' | 'system')} - options={[ - { value: 'light', label: t('theme.light') }, - { value: 'dark', label: t('theme.dark') }, - { value: 'system', label: t('theme.system') }, - ]} - /> - - - {!isSettingHidden('fontSize') && ( - - updateSetting('fontSize', value as 'small' | 'medium' | 'large')} - options={[ - { value: 'small', label: t('font_size.small') }, - { value: 'medium', label: t('font_size.medium') }, - { value: 'large', label: t('font_size.large') }, - ]} - /> - - )} - - {!isSettingHidden('density') && ( - - - updateSetting('density', value as Density) - } - options={[ - { value: 'extra-compact', label: t('list_density.extra_compact') }, - { value: 'compact', label: t('list_density.compact') }, - { value: 'regular', label: t('list_density.regular') }, - { value: 'comfortable', label: t('list_density.comfortable') }, - ]} - /> - - - )} - - - - {!isSettingHidden('animationsEnabled') && ( - - updateSetting('animationsEnabled', checked)} - /> - - )} - - {/* Sender favicons come from the /api/favicon proxy, absent in the static Lite build (components/ui/avatar.tsx). */} - {!IS_LITE && ( - - updateSetting('senderFavicons', checked)} /> +
+ + + setTheme(value as 'light' | 'dark' | 'system')} + options={[ + { value: 'light', label: t('theme.light') }, + { value: 'dark', label: t('theme.dark') }, + { value: 'system', label: t('theme.system') }, + ]} + /> - )} + {isFeatureEnabled('themesEnabled') && } + - {!IS_LITE && senderFavicons && ( - + + {!isSettingHidden('fontSize') && ( + + updateSetting('fontSize', value as 'small' | 'medium' | 'large')} + options={[ + { value: 'small', label: t('font_size.small') }, + { value: 'medium', label: t('font_size.medium') }, + { value: 'large', label: t('font_size.large') }, + ]} + /> + + )} + + {!isSettingHidden('density') && ( + + + updateSetting('density', value as Density) + } + options={[ + { value: 'extra-compact', label: t('list_density.extra_compact') }, + { value: 'compact', label: t('list_density.compact') }, + { value: 'regular', label: t('list_density.regular') }, + { value: 'comfortable', label: t('list_density.comfortable') }, + ]} + /> + + + )} + + {!isSettingHidden('animationsEnabled') && ( + + updateSetting('animationsEnabled', checked)} + /> + + )} + + + + {/* Sender favicons come from the /api/favicon proxy, absent in the static Lite build (components/ui/avatar.tsx). */} + {!IS_LITE && ( + + updateSetting('senderFavicons', checked)} /> + + )} + + {!IS_LITE && senderFavicons && ( + + + + )} + + + updateSetting('showAvatarsInJunk', checked)} /> + + + + + + + + + - )} - - updateSetting('showAvatarsInJunk', checked)} /> - + + updateSetting('showOnboardingOnNewDevices', checked)} + /> + + - - - - - - updateSetting('showOnboardingOnNewDevices', checked)} - /> - - + +
); } diff --git a/components/settings/layout-settings.tsx b/components/settings/layout-settings.tsx index 6290b97e2..2cf9c72dc 100644 --- a/components/settings/layout-settings.tsx +++ b/components/settings/layout-settings.tsx @@ -116,73 +116,21 @@ function MailLayoutPreview({ ); } -export function LayoutSettings() { +/** + * The Appearance page's Layout section: where the interface, the reading + * pane and the toolbars sit. + */ +export function LayoutSection() { const t = useTranslations('settings.appearance'); const tEmail = useTranslations('settings.email_behavior'); - const { toolbarPosition, showToolbarLabels, hideAccountSwitcher, showRailAccountList, enableUnifiedMailbox, includeGroupInUnified, unifiedCrossAccount, allMailFolderIds, enableCrossUnreadView, enableCrossStarredView, enableCrossAllView, colorfulSidebarIcons, tintListRowsByTag, tintListRowsByAccount, showAccountDot, showFolderTotalCount, faviconUnreadBadge, mailLayout, listColumns, proInterface, interfaceLayout, updateSetting } = useSettingsStore(); - const { isSettingLocked, isSettingHidden, isFeatureEnabled } = usePolicyStore(); - const accounts = useAccountStore(s => s.accounts); - const activeAccountId = useAccountStore(s => s.activeAccountId); - const mailboxes = useEmailStore(s => s.mailboxes); - const hasGroupInboxes = useMemo(() => mailboxes.some(m => m.isShared), [mailboxes]); - const showSharedMailAccounts = useSettingsStore(s => s.showSharedMailAccounts); - const hiddenSharedMailAccounts = useSettingsStore(s => s.hiddenSharedMailAccounts); - const hiddenSharedIds = hiddenSharedMailIds(hiddenSharedMailAccounts, activeAccountId); - const sharedMailAccounts = useMemo(() => { - const byId = new Map(); - for (const m of mailboxes) { - if (m.isShared && m.accountId && !byId.has(m.accountId)) byId.set(m.accountId, m.accountName || m.accountId); - } - return Array.from(byId, ([id, name]) => ({ id, name })); - }, [mailboxes]); - const connectedAccountCount = useMemo(() => accounts.filter(a => a.isConnected).length, [accounts]); - const unifiedCrossAccountAllowed = isFeatureEnabled('unifiedCrossAccountEnabled'); - // Unified Mailbox entries (All mail / Unread / Starred), each gated independently - // by the admin. Scope (single account vs. cross-account) is governed by - // `unifiedCrossAccount`; the folder picker below narrows which own folders feed them. - const crossViews = [ - { setting: 'enableCrossUnreadView', value: enableCrossUnreadView, allowed: isFeatureEnabled('crossUnreadViewEnabled'), labelKey: 'cross_unread.label', descKey: 'cross_unread.description' }, - { setting: 'enableCrossStarredView', value: enableCrossStarredView, allowed: isFeatureEnabled('crossStarredViewEnabled'), labelKey: 'cross_starred.label', descKey: 'cross_starred.description' }, - { setting: 'enableCrossAllView', value: enableCrossAllView, allowed: isFeatureEnabled('crossAllViewEnabled'), labelKey: 'cross_all.label', descKey: 'cross_all.description' }, - ] as const; - // The folder picker narrows the own folders included in the entries above; show - // it once the user has enabled at least one of them. - const anyCrossEnabled = enableCrossUnreadView || enableCrossStarredView || enableCrossAllView; - const anyCrossAllowed = crossViews.some(c => c.allowed); - - // Own (non-shared) folders and the active account's All Mail selection. The - // selection is per account: a missing entry = never configured, which - // defaults to all no-role folders; an explicit [] = no folders. - const ownMailboxes = useMemo(() => mailboxes.filter(m => !m.isShared), [mailboxes]); - const currentAllMailEntry = activeAccountId ? allMailFolderIds[activeAccountId] : undefined; - const allMailSelected = new Set( - currentAllMailEntry === undefined - ? ownMailboxes.filter(m => !m.role).map(m => m.id) - : currentAllMailEntry - ); - const toggleAllMailFolder = (id: string) => { - if (!activeAccountId) return; - const next = new Set(allMailSelected); - if (next.has(id)) next.delete(id); - else next.add(id); - updateSetting('allMailFolderIds', { - ...allMailFolderIds, - [activeAccountId]: ownMailboxes.filter(m => next.has(m.id)).map(m => m.id), - }); - }; - // Name the account the selection applies to, but only when more than one is - // logged in (otherwise it's unambiguous). - const activeAccount = accounts.find(a => a.id === activeAccountId); - const allMailAccountHint = accounts.length > 1 && activeAccount - ? t('all_mail.account_hint', { account: activeAccount.displayName || activeAccount.email }) - : null; - + const { toolbarPosition, showToolbarLabels, mailLayout, listColumns, interfaceLayout, updateSetting } = useSettingsStore(); + const { isSettingLocked, isSettingHidden } = usePolicyStore(); const mountainView = interfaceLayout === 'mountain-view'; return ( - + {/* The interface layout decides where search, navigation and toolbars - go - a layout choice, so it leads the Layout tab. */} + go - a layout choice, so it leads the section. */} {!isSettingHidden('interfaceLayout') && ( )} + + ); +} - - updateSetting('hideAccountSwitcher', checked)} - /> - - - - updateSetting('showRailAccountList', checked)} - /> - +/** The Appearance page's Sidebar section: what the folder sidebar and rail show. */ +export function SidebarSection() { + const t = useTranslations('settings.appearance'); + const { hideAccountSwitcher, showRailAccountList, colorfulSidebarIcons, showFolderTotalCount, faviconUnreadBadge, updateSetting } = useSettingsStore(); + const accounts = useAccountStore(s => s.accounts); + const multiAccount = accounts.length > 1; + return ( + - - updateSetting('tintListRowsByTag', checked)} - /> - - - - updateSetting('showAccountDot', checked)} - /> - - - - updateSetting('tintListRowsByAccount', checked)} - /> - - + {/* The account switcher and the rail avatars only mean something with + a second account; a single-account user never sees either. */} + {multiAccount && ( + + updateSetting('hideAccountSwitcher', checked)} + /> + + )} + + {multiAccount && ( + + updateSetting('showRailAccountList', checked)} + /> + + )} + updateSetting('faviconUnreadBadge', checked)} /> + + ); +} - {sharedMailAccounts.length > 0 && !isSettingHidden('showSharedMailAccounts') && ( - - updateSetting('showSharedMailAccounts', v)} - /> - - )} +/** + * How several accounts and shared mailboxes appear together: the unified + * mailbox and its entries, shared mailboxes, and how rows tell accounts + * apart. Only rendered once there is something to combine. + */ +export function MultipleAccountsSection() { + const t = useTranslations('settings.appearance'); + const { enableUnifiedMailbox, includeGroupInUnified, unifiedCrossAccount, allMailFolderIds, enableCrossUnreadView, enableCrossStarredView, enableCrossAllView, tintListRowsByAccount, showAccountDot, updateSetting } = useSettingsStore(); + const { isSettingLocked, isSettingHidden, isFeatureEnabled } = usePolicyStore(); + const accounts = useAccountStore(s => s.accounts); + const activeAccountId = useAccountStore(s => s.activeAccountId); + const mailboxes = useEmailStore(s => s.mailboxes); + const hasGroupInboxes = useMemo(() => mailboxes.some(m => m.isShared), [mailboxes]); + const showSharedMailAccounts = useSettingsStore(s => s.showSharedMailAccounts); + const hiddenSharedMailAccounts = useSettingsStore(s => s.hiddenSharedMailAccounts); + const hiddenSharedIds = hiddenSharedMailIds(hiddenSharedMailAccounts, activeAccountId); + const sharedMailAccounts = useMemo(() => { + const byId = new Map(); + for (const m of mailboxes) { + if (m.isShared && m.accountId && !byId.has(m.accountId)) byId.set(m.accountId, m.accountName || m.accountId); + } + return Array.from(byId, ([id, name]) => ({ id, name })); + }, [mailboxes]); + const connectedAccountCount = useMemo(() => accounts.filter(a => a.isConnected).length, [accounts]); + const unifiedCrossAccountAllowed = isFeatureEnabled('unifiedCrossAccountEnabled'); + // Unified Mailbox entries (All mail / Unread / Starred), each gated independently + // by the admin. Scope (single account vs. cross-account) is governed by + // unifiedCrossAccount; the folder picker below narrows which own folders feed them. + const crossViews = [ + { setting: 'enableCrossUnreadView', value: enableCrossUnreadView, allowed: isFeatureEnabled('crossUnreadViewEnabled'), labelKey: 'cross_unread.label', descKey: 'cross_unread.description' }, + { setting: 'enableCrossStarredView', value: enableCrossStarredView, allowed: isFeatureEnabled('crossStarredViewEnabled'), labelKey: 'cross_starred.label', descKey: 'cross_starred.description' }, + { setting: 'enableCrossAllView', value: enableCrossAllView, allowed: isFeatureEnabled('crossAllViewEnabled'), labelKey: 'cross_all.label', descKey: 'cross_all.description' }, + ] as const; + // The folder picker narrows the own folders included in the entries above; show + // it once the user has enabled at least one of them. + const anyCrossEnabled = enableCrossUnreadView || enableCrossStarredView || enableCrossAllView; + const anyCrossAllowed = crossViews.some(c => c.allowed); - {sharedMailAccounts.length > 0 && showSharedMailAccounts && activeAccountId && !isSettingHidden('showSharedMailAccounts') && ( -
- {sharedMailAccounts.map(({ id, name }) => ( - - updateSetting( - 'hiddenSharedMailAccounts', - setSharedMailAccountHidden(hiddenSharedMailAccounts, activeAccountId, id, !v), - )} - /> - - ))} -
- )} + // Own (non-shared) folders and the active account's All Mail selection. The + // selection is per account: a missing entry = never configured, which + // defaults to all no-role folders; an explicit [] = no folders. + const ownMailboxes = useMemo(() => mailboxes.filter(m => !m.isShared), [mailboxes]); + const currentAllMailEntry = activeAccountId ? allMailFolderIds[activeAccountId] : undefined; + const allMailSelected = new Set( + currentAllMailEntry === undefined + ? ownMailboxes.filter(m => !m.role).map(m => m.id) + : currentAllMailEntry + ); + const toggleAllMailFolder = (id: string) => { + if (!activeAccountId) return; + const next = new Set(allMailSelected); + if (next.has(id)) next.delete(id); + else next.add(id); + updateSetting('allMailFolderIds', { + ...allMailFolderIds, + [activeAccountId]: ownMailboxes.filter(m => next.has(m.id)).map(m => m.id), + }); + }; + // Name the account the selection applies to, but only when more than one is + // logged in (otherwise it's unambiguous). + const activeAccount = accounts.find(a => a.id === activeAccountId); + const allMailAccountHint = accounts.length > 1 && activeAccount + ? t('all_mail.account_hint', { account: activeAccount.displayName || activeAccount.email }) + : null; + // Nothing to combine: one account, no shared mailboxes, no group inboxes. + if (connectedAccountCount < 2 && sharedMailAccounts.length === 0 && !hasGroupInboxes) return null; + + return ( + {!isSettingHidden('enableUnifiedMailbox') && ( 1 && unifiedCrossAccountAllowed && !isSettingHidden('unifiedCrossAccount') && ( -
- - updateSetting('unifiedCrossAccount', v)} - /> - -
+ + updateSetting('unifiedCrossAccount', v)} + /> + )} {enableUnifiedMailbox && hasGroupInboxes && !isSettingHidden('includeGroupInUnified') && ( -
+ + updateSetting('includeGroupInUnified', v)} + /> + + )} + + {enableUnifiedMailbox && anyCrossAllowed && crossViews.map(({ setting, value, allowed, labelKey, descKey }) => ( + allowed && !isSettingHidden(setting) && ( updateSetting('includeGroupInUnified', v)} + checked={value} + onChange={(v) => updateSetting(setting, v)} /> -
- )} - - {enableUnifiedMailbox && anyCrossAllowed && ( -
- - {crossViews.map(({ setting, value, allowed, labelKey, descKey }) => ( - allowed && !isSettingHidden(setting) && ( - - updateSetting(setting, v)} - /> - - ) - ))} -
- )} + ) + ))} {enableUnifiedMailbox && anyCrossAllowed && anyCrossEnabled && ( -
- +
{t('all_mail.folders_label')}
{t('all_mail.folders_description')}
@@ -434,7 +416,65 @@ export function LayoutSettings() {
)} - + {/* In unified views a row needs to say which account it came from: + a coloured dot, or the whole row tinted. One choice, not two + toggles that override each other. */} + {connectedAccountCount > 1 && ( + + { + updateSetting('tintListRowsByAccount', value === 'tint'); + updateSetting('showAccountDot', value === 'dot'); + }} + options={[ + { value: 'dot', label: t('account_marker.dot') }, + { value: 'tint', label: t('account_marker.tint') }, + { value: 'none', label: t('account_marker.none') }, + ]} + /> + + )} + + {sharedMailAccounts.length > 0 && !isSettingHidden('showSharedMailAccounts') && ( + + updateSetting('showSharedMailAccounts', v)} + /> + + )} + + {sharedMailAccounts.length > 0 && showSharedMailAccounts && activeAccountId && !isSettingHidden('showSharedMailAccounts') && ( +
+ {sharedMailAccounts.map(({ id, name }) => ( + + updateSetting( + 'hiddenSharedMailAccounts', + setSharedMailAccountHidden(hiddenSharedMailAccounts, activeAccountId, id, !v), + )} + /> + + ))} +
+ )} + + ); +} + +/** Experimental: the Pro interface. Advanced, since it swaps the whole shell. */ +export function ExperimentalSection() { + const t = useTranslations('settings.appearance'); + const { proInterface, updateSetting } = useSettingsStore(); + return ( + + updateSetting('proInterface', v)} diff --git a/components/settings/settings-app.tsx b/components/settings/settings-app.tsx index b3ebcda2b..90d8367df 100644 --- a/components/settings/settings-app.tsx +++ b/components/settings/settings-app.tsx @@ -24,7 +24,6 @@ import { PanelLeftClose, Bell, Puzzle, - LayoutGrid, Link as LinkIcon, BookOpen, PenLine, @@ -32,7 +31,6 @@ import { Languages, Info, Bug, - SwatchBook, Download, X, type AppIcon, @@ -41,7 +39,6 @@ import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { AppearanceSettings } from '@/components/settings/appearance-settings'; import { AppTopBannerSlot } from '@/components/plugins/app-top-banner-slot'; -import { LayoutSettings } from '@/components/settings/layout-settings'; import { LanguageSettings } from '@/components/settings/language-settings'; import { ReadingSettings } from '@/components/settings/reading-settings'; import { ComposingSettings } from '@/components/settings/composing-settings'; @@ -64,7 +61,6 @@ import { DownloadsSettings } from '@/components/settings/downloads-settings'; import { ContactsSettings } from '@/components/settings/contacts-settings'; import { SidebarAppsSettings } from '@/components/settings/sidebar-apps-settings'; import { NotificationSettings } from '@/components/settings/notification-settings'; -import { ThemesSettings } from '@/components/settings/themes-settings'; import { PluginsSettings } from '@/components/settings/plugins-settings'; import { PluginIframeSlot } from '@/components/plugins/plugin-iframe-slot'; import { offersForSlot as pluginOffersForSlot, subscribe as pluginRegistrySubscribe, get as getActivePlugin } from '@/lib/plugin-sandbox/registry'; @@ -134,7 +130,6 @@ const tabIcons: Record = { language: Languages, notifications: Bell, appearance: Palette, - layout: LayoutGrid, reading: BookOpen, composing: PenLine, downloads: Download, @@ -152,17 +147,20 @@ const tabIcons: Record = { protocol_handlers: LinkIcon, sidebar_apps: PanelLeftClose, about_data: Info, - themes: SwatchBook, plugins: Puzzle, debug: Bug, }; const tabGroupOrder: TabGroup[] = ['general', 'appearance', 'mail', 'privacy', 'apps', 'plugins', 'advanced']; -// Map legacy tab IDs to current ones; runs once on read of localStorage. -const LEGACY_TAB_MAP: Record = { +// Map legacy tab IDs to current ones; runs once on read of localStorage and +// for every deep link, so old bookmarks, connector links and sidebar gears +// land on the page that now holds the setting. +export const LEGACY_TAB_MAP: Record = { email: 'reading', advanced: 'about_data', + layout: 'appearance', + themes: 'appearance', }; function readPersistedTab(): SettingsTabId { @@ -350,11 +348,12 @@ export function SettingsApp({ linkSegments: routeSegments }: SettingsAppProps = }); subs.plugins = [...(subs.plugins ?? []), ...pluginSubs]; } + // Themes are a section of Appearance now, so installed themes match there. if (installedThemes.length) { const text = installedThemes.map((th) => `${th.name} ${th.description} ${th.author}`).join(' '); - haystacks.themes = `${haystacks.themes ?? ''} ${text}`.toLowerCase(); - subs.themes = [ - ...(subs.themes ?? []), + haystacks.appearance = `${haystacks.appearance ?? ''} ${text}`.toLowerCase(); + subs.appearance = [ + ...(subs.appearance ?? []), ...installedThemes.map((th) => ({ label: th.name, description: th.description })), ]; } @@ -565,8 +564,6 @@ export function SettingsApp({ linkSegments: routeSegments }: SettingsAppProps = // Appearance { id: 'appearance', label: t('tabs.appearance'), icon: tabIcons.appearance, group: 'appearance' }, - { id: 'layout', label: t('tabs.layout'), icon: tabIcons.layout, group: 'appearance' }, - ...(isFeatureEnabled('themesEnabled') ? [{ id: 'themes' as Tab, label: t('tabs.themes'), icon: tabIcons.themes, group: 'appearance' as TabGroup }] : []), // Mail { id: 'reading', label: t('tabs.reading'), icon: tabIcons.reading, group: 'mail' }, @@ -713,7 +710,6 @@ export function SettingsApp({ linkSegments: routeSegments }: SettingsAppProps = {effectiveActiveTab === 'language' && } {effectiveActiveTab === 'notifications' && } {effectiveActiveTab === 'appearance' && } - {effectiveActiveTab === 'layout' && } {effectiveActiveTab === 'reading' && } {effectiveActiveTab === 'composing' && } {effectiveActiveTab === 'downloads' && } @@ -739,7 +735,6 @@ export function SettingsApp({ linkSegments: routeSegments }: SettingsAppProps = {effectiveActiveTab === 'protocol_handlers' && } {effectiveActiveTab === 'sidebar_apps' && } {effectiveActiveTab === 'about_data' && } - {effectiveActiveTab === 'themes' && } {effectiveActiveTab === 'plugins' && } {effectiveActiveTab === 'debug' && } {effectiveActiveTab.startsWith('plugin:') && ( diff --git a/components/settings/themes-settings.tsx b/components/settings/themes-settings.tsx index 7336ad8a9..4f5802d64 100644 --- a/components/settings/themes-settings.tsx +++ b/components/settings/themes-settings.tsx @@ -9,7 +9,12 @@ import { Check, Lock } from '@/components/icons'; import { toast } from '@/stores/toast-store'; import { usePolicyStore } from '@/stores/policy-store'; -export function ThemesSettings() { +/** + * The theme gallery. On its own it is a section; `embedded` draws only the + * grid (with its lock notice) inside the Appearance page's Theme section, + * right under the light/dark choice. + */ +export function ThemesSettings({ embedded }: { embedded?: boolean } = {}) { const t = useTranslations('settings.themes'); const { installedThemes, activeThemeId, activateTheme } = useThemeStore(); const { isThemeDisabled, getThemePolicy, getForcedThemeId, isThemeForceEnabled } = usePolicyStore(); @@ -63,9 +68,8 @@ export function ThemesSettings() { toast.success(id ? t('activated') : t('default_restored')); }; - return ( - - + const grid = ( + <> {forcedThemeId && (
{t('locked')} @@ -110,6 +114,22 @@ export function ThemesSettings() { ); })}
+ + ); + + if (embedded) { + return ( +
+
{t('title')}
+

{t('description')}

+ {grid} +
+ ); + } + + return ( + + {grid} ); } diff --git a/integration/tests/helpers/app.ts b/integration/tests/helpers/app.ts index fcb466a96..ca04c285d 100644 --- a/integration/tests/helpers/app.ts +++ b/integration/tests/helpers/app.ts @@ -462,7 +462,11 @@ export async function calendarRows( */ export async function enableProInterface(page: Page): Promise { await page.locator('a[href$="/settings"]').first().click(); - await page.locator('[data-testid="settings-tab-layout"]').first().click(); + await page.locator('[data-testid="settings-tab-appearance"]').first().click(); + // The Pro interface is an advanced setting, hidden until the switch is on. + const advanced = page.locator('[data-testid="settings-advanced-switch"]').first(); + await advanced.waitFor({ state: 'visible', timeout: 30000 }); + if ((await advanced.getAttribute('aria-checked')) !== 'true') await advanced.click(); const toggle = page.locator('[data-testid="setting-pro-interface"]').first(); await toggle.waitFor({ state: 'visible', timeout: 30000 }); if ((await toggle.getAttribute('aria-checked')) !== 'true') { diff --git a/lib/__tests__/settings-search.test.ts b/lib/__tests__/settings-search.test.ts index 223660ad6..b8d96c8dd 100644 --- a/lib/__tests__/settings-search.test.ts +++ b/lib/__tests__/settings-search.test.ts @@ -90,7 +90,9 @@ describe('settings search index (English messages)', () => { expect(labelsFor('composing')).toContain('Undo send / send delay'); expect(labelsFor('composing')).toContain('Request read receipts by default'); expect(labelsFor('appearance')).toContain('Message list order'); - expect(labelsFor('layout')).toContain('Pro Interface (Experimental)'); + expect(labelsFor('appearance')).toContain('Pro Interface (Experimental)'); + expect(labelsFor('appearance')).toContain('Tell accounts apart'); + expect(labelsFor('appearance')).toContain('Themes'); expect(labelsFor('language')).toContain('Time zone'); }); diff --git a/lib/connector/registry.ts b/lib/connector/registry.ts index 6fbdb1156..de220e284 100644 --- a/lib/connector/registry.ts +++ b/lib/connector/registry.ts @@ -32,13 +32,20 @@ import type { SettingsSearchTab } from '@/lib/settings-search'; import { buildSettingsPath, buildFilesPath } from '@/lib/deep-links'; import { RELEASE_VERSION } from '@/lib/release-version'; -/** Mirrors `SettingsSearchTab`. Listed so an unknown tab is refused here. */ -const SETTINGS_TABS: readonly SettingsSearchTab[] = [ - 'account', 'language', 'notifications', 'appearance', 'layout', 'reading', +/** + * Mirrors `SettingsSearchTab`, plus the ids of tabs that have since been + * folded into another page: a connector link made for an old tab still + * opens the page that holds the setting now (the settings page migrates + * the id). Listed so an unknown tab is refused here. + */ +const LEGACY_SETTINGS_TABS = ['layout', 'themes'] as const; +const SETTINGS_TABS: readonly (SettingsSearchTab | typeof LEGACY_SETTINGS_TABS[number])[] = [ + 'account', 'language', 'notifications', 'appearance', 'reading', 'composing', 'downloads', 'identities', 'vacation', 'filters', 'templates', 'folders', 'keywords', 'security', 'content_senders', 'calendar', 'contacts', - 'files', 'protocol_handlers', 'sidebar_apps', 'about_data', 'themes', + 'files', 'protocol_handlers', 'sidebar_apps', 'about_data', 'plugins', 'debug', + ...LEGACY_SETTINGS_TABS, ]; const CALENDAR_VIEWS = ['month', 'week', 'day', 'agenda', 'tasks'] as const; diff --git a/lib/settings-search.ts b/lib/settings-search.ts index ee2f9b56c..88a750004 100644 --- a/lib/settings-search.ts +++ b/lib/settings-search.ts @@ -7,7 +7,6 @@ export type SettingsSearchTab = | 'language' | 'notifications' | 'appearance' - | 'layout' | 'reading' | 'composing' | 'downloads' @@ -25,7 +24,6 @@ export type SettingsSearchTab = | 'protocol_handlers' | 'sidebar_apps' | 'about_data' - | 'themes' | 'plugins' | 'debug'; @@ -50,31 +48,33 @@ export const tabSearchPaths: Record = { notifications: ['settings.notifications'], appearance: [ 'settings.appearance.theme', + 'settings.themes', 'settings.appearance.font_size', 'settings.appearance.list_density', 'settings.appearance.animations', 'settings.appearance.message_list_order', 'settings.advanced.sender_favicons', 'settings.advanced.show_avatars_in_junk', - ], - layout: [ + 'settings.appearance.interface_layout', + 'settings.email_behavior.mail_layout', + 'settings.email_behavior.list_columns', 'settings.appearance.toolbar_position', 'settings.appearance.toolbar_labels', + 'settings.appearance.colorful_sidebar_icons', + 'settings.appearance.show_folder_total_count', 'settings.appearance.hide_account_switcher', 'settings.appearance.show_rail_account_list', + 'settings.appearance.favicon_unread_badge', 'settings.appearance.unified_mailbox', 'settings.appearance.cross_unread', 'settings.appearance.cross_starred', 'settings.appearance.cross_all', 'settings.appearance.all_mail', - 'settings.appearance.colorful_sidebar_icons', - 'settings.appearance.tint_list_rows', - 'settings.appearance.show_folder_total_count', - 'settings.appearance.favicon_unread_badge', + 'settings.appearance.account_marker', 'settings.appearance.show_shared_mail_accounts', + 'tour.restart_title', + 'tour.show_on_new_devices_title', 'settings.appearance.pro_interface', - 'settings.email_behavior.mail_layout', - 'settings.email_behavior.list_columns', ], reading: [ 'settings.email_behavior.mark_read', @@ -131,7 +131,6 @@ export const tabSearchPaths: Record = { protocol_handlers: ['protocol_handlers'], sidebar_apps: ['settings.sidebar_apps', 'sidebar_apps'], about_data: ['settings.advanced'], - themes: ['settings.themes'], plugins: [], debug: ['settings.advanced'], }; @@ -145,8 +144,7 @@ export const tabKeywords: Record = { account: 'profile email password user signin signout reorder rearrange drag dropdown switcher multi-account', language: 'locale region timezone date time format', notifications: 'sound alert push badge', - appearance: 'theme dark light font size accent color animation density', - layout: 'toolbar sidebar account switcher unified mailbox icons rail', + appearance: 'theme dark light font size accent color animation density custom theme css skin toolbar sidebar account switcher unified mailbox icons rail layout reading pane tour', reading: 'mark read preview thread conversation archive delete attachment open monospace mono font plain text', composing: 'editor signature plain text reply forward draft compose', downloads: 'download filename template eml attachment save export', @@ -164,7 +162,6 @@ export const tabKeywords: Record = { protocol_handlers: 'mailto webcal links default app protocol handler', sidebar_apps: 'apps webview iframe', about_data: 'export import storage quota privacy backup', - themes: 'custom theme css skin appearance', plugins: 'extensions addons', debug: 'logs developer console diagnostic', }; diff --git a/locales/ar/common.json b/locales/ar/common.json index d300aa76c..545142664 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "كل البريد", "description": "إظهار عنصر \"كل البريد\" في صندوق البريد الموحّد يسرد كل البريد عبر المجلدات المحددة." + }, + "sections": { + "text": "النص والحركة", + "layout": "التخطيط", + "sidebar": "الشريط الجانبي", + "accounts": "حسابات متعددة", + "accounts_description": "كيف تظهر حساباتك وصناديق البريد المشتركة معًا.", + "experimental": "تجريبي" + }, + "account_marker": { + "label": "تمييز الحسابات", + "description": "في العروض الموحدة، وسم كل رسالة بلون الحساب الذي جاءت منه.", + "dot": "نقطة ملونة", + "tint": "صف ملون", + "none": "لا شيء" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "معاينة" } + }, + "advanced_switch": { + "label": "إظهار الإعدادات المتقدمة", + "show": "إظهار الإعدادات المتقدمة", + "badge": "متقدم", + "hidden_count": "{count, plural, zero {لا توجد إعدادات متقدمة مخفية في هذه الصفحة.} one {إعداد متقدم واحد مخفي في هذه الصفحة.} two {إعدادان متقدمان مخفيان في هذه الصفحة.} few {# إعدادات متقدمة مخفية في هذه الصفحة.} many {# إعدادًا متقدمًا مخفيًا في هذه الصفحة.} other {# إعداد متقدم مخفي في هذه الصفحة.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "أدوات التحكم التجريبية", "demo_banner_desc": "أنت في الوضع التجريبي - يبقى كل شيء في متصفحك. اضغط \"إعادة تعيين التجربة\" في أي وقت للبدء من جديد ببيانات نموذجية نظيفة.", "quota_title": "استخدام التخزين", - "quota_desc": "تتبّع حجم صندوق بريدك هنا. تمتلئ الدائرة كلما استخدمت مساحة أكبر." + "quota_desc": "تتبّع حجم صندوق بريدك هنا. تمتلئ الدائرة كلما استخدمت مساحة أكبر.", + "settings_section": "البداية" }, "unified_mailbox": { "search_unavailable": "البحث غير متاح في العرض الموحّد" diff --git a/locales/ca/common.json b/locales/ca/common.json index c20ba9e63..7610c4178 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Tot el correu", "description": "Mostra una entrada de Tot el correu a la bústia unificada amb tot el correu de les carpetes seleccionades." + }, + "sections": { + "text": "Text i moviment", + "layout": "Disposició", + "sidebar": "Barra lateral", + "accounts": "Diversos comptes", + "accounts_description": "Com es mostren junts els vostres comptes i bústies compartides.", + "experimental": "Experimental" + }, + "account_marker": { + "label": "Distingir els comptes", + "description": "A les vistes unificades, marca cada missatge amb el color del compte d'on prové.", + "dot": "Punt de color", + "tint": "Fila tenyida", + "none": "Res" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Previsualització" } + }, + "advanced_switch": { + "label": "Mostra la configuració avançada", + "show": "Mostra la configuració avançada", + "badge": "Avançat", + "hidden_count": "{count, plural, one {1 configuració avançada està amagada en aquesta pàgina.} other {# configuracions avançades estan amagades en aquesta pàgina.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Controls de la demo", "demo_banner_desc": "Esteu en mode de demostració: tot es queda al navegador. Premeu «Reinicia la demo» en qualsevol moment per començar de nou amb dades d'exemple netes.", "quota_title": "Ús de l'emmagatzematge", - "quota_desc": "Feu un seguiment de la mida de la bústia aquí. El cercle s'omple a mesura que utilitzeu més espai." + "quota_desc": "Feu un seguiment de la mida de la bústia aquí. El cercle s'omple a mesura que utilitzeu més espai.", + "settings_section": "Primers passos" }, "unified_mailbox": { "search_unavailable": "La cerca no està disponible a la vista unificada" diff --git a/locales/cs/common.json b/locales/cs/common.json index 4dfa844fd..7f26dd5e3 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Všechny účty: Veškerá pošta", "description": "Zobrazí v sekci Všechny účty položku s veškerou poštou ze všech účtů, napříč všemi složkami kromě spamu, odeslané, archivu, koše a konceptů." + }, + "sections": { + "text": "Text a animace", + "layout": "Rozvržení", + "sidebar": "Postranní panel", + "accounts": "Více účtů", + "accounts_description": "Jak se vaše účty a sdílené schránky zobrazují společně.", + "experimental": "Experimentální" + }, + "account_marker": { + "label": "Rozlišení účtů", + "description": "Ve sjednocených zobrazeních označit každou zprávu barvou účtu, ze kterého pochází.", + "dot": "Barevná tečka", + "tint": "Podbarvený řádek", + "none": "Nic" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Zpět na můj účet", "managing": "Správa: {name}" + }, + "advanced_switch": { + "label": "Zobrazit pokročilá nastavení", + "show": "Zobrazit pokročilá nastavení", + "badge": "Pokročilé", + "hidden_count": "{count, plural, one {1 pokročilé nastavení je na této stránce skryté.} few {# pokročilá nastavení jsou na této stránce skrytá.} many {# pokročilého nastavení je na této stránce skrytého.} other {# pokročilých nastavení je na této stránce skrytých.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Ovládání demoverze", "demo_banner_desc": "Nacházíte se v demo režimu - vše zůstává ve vašem prohlížeči. Kdykoli klikněte na „Resetovat“, abyste začali znovu s čistými ukázkovými daty.", "quota_title": "Využití úložiště", - "quota_desc": "Zde můžete sledovat velikost své poštovní schránky. Kruh se plní podle využití kapacity." + "quota_desc": "Zde můžete sledovat velikost své poštovní schránky. Kruh se plní podle využití kapacity.", + "settings_section": "Začínáme" }, "unified_mailbox": { "search_unavailable": "Vyhledávání není ve sjednoceném zobrazení k dispozici" diff --git a/locales/da/common.json b/locales/da/common.json index 395e8d5ce..1d41ccdb0 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Alle konti: Al post", "description": "Viser en post i sektionen Alle konti med al post fra alle konti, på tværs af alle mapper undtagen spam, sendt, arkiv, papirkurv og kladder." + }, + "sections": { + "text": "Tekst og animation", + "layout": "Layout", + "sidebar": "Sidepanel", + "accounts": "Flere konti", + "accounts_description": "Hvordan dine konti og delte postkasser vises sammen.", + "experimental": "Eksperimentelt" + }, + "account_marker": { + "label": "Skeln mellem konti", + "description": "Markér hver besked i de samlede visninger med farven på den konto, den kom fra.", + "dot": "Farvet prik", + "tint": "Farvet række", + "none": "Intet" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Tilbage til min konto", "managing": "Administrerer: {name}" + }, + "advanced_switch": { + "label": "Vis avancerede indstillinger", + "show": "Vis avancerede indstillinger", + "badge": "Avanceret", + "hidden_count": "{count, plural, one {1 avanceret indstilling er skjult på denne side.} other {# avancerede indstillinger er skjult på denne side.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Demo-kontroller", "demo_banner_desc": "Du er i demo-tilstand - alt forbliver i din browser. Tryk 'Nulstil demo' når som helst for at starte forfra med rent eksempeldata.", "quota_title": "Lagerforbrug", - "quota_desc": "Spor din postkassestørrelse her. Cirklen fyldes op, efterhånden som du bruger mere plads." + "quota_desc": "Spor din postkassestørrelse her. Cirklen fyldes op, efterhånden som du bruger mere plads.", + "settings_section": "Kom godt i gang" }, "unified_mailbox": { "search_unavailable": "Søgning er ikke tilgængelig i den samlede visning" diff --git a/locales/de/common.json b/locales/de/common.json index fce851cd1..c11084431 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Alle Konten: Alle Mails", "description": "Zeigt in der Sektion „All accounts“ einen Eintrag mit allen Mails über alle Konten, über alle Ordner außer Junk, Gesendet, Archiv, Papierkorb und Entwürfe." + }, + "sections": { + "text": "Text & Animation", + "layout": "Layout", + "sidebar": "Seitenleiste", + "accounts": "Mehrere Konten", + "accounts_description": "Wie Ihre Konten und freigegebenen Postfächer gemeinsam erscheinen.", + "experimental": "Experimentell" + }, + "account_marker": { + "label": "Konten unterscheiden", + "description": "In den vereinten Ansichten jede Nachricht mit der Farbe ihres Kontos kennzeichnen.", + "dot": "Farbpunkt", + "tint": "Eingefärbte Zeile", + "none": "Nichts" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Zurück zu meinem Konto", "managing": "Verwaltung: {name}" + }, + "advanced_switch": { + "label": "Erweiterte Einstellungen anzeigen", + "show": "Erweiterte Einstellungen anzeigen", + "badge": "Erweitert", + "hidden_count": "{count, plural, one {1 erweiterte Einstellung ist auf dieser Seite ausgeblendet.} other {# erweiterte Einstellungen sind auf dieser Seite ausgeblendet.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Demo-Steuerung", "demo_banner_desc": "Sie sind im Demo-Modus - alles bleibt in Ihrem Browser. Klicken Sie jederzeit auf 'Demo zurücksetzen'.", "quota_title": "Speichernutzung", - "quota_desc": "Verfolgen Sie Ihre Postfachgröße hier. Der Kreis füllt sich mit zunehmendem Verbrauch." + "quota_desc": "Verfolgen Sie Ihre Postfachgröße hier. Der Kreis füllt sich mit zunehmendem Verbrauch.", + "settings_section": "Erste Schritte" }, "unified_mailbox": { "search_unavailable": "Die Suche ist in der vereinheitlichten Ansicht nicht verfügbar" diff --git a/locales/en/common.json b/locales/en/common.json index 2cddb793b..4bce8dfd6 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "All mail", "description": "Show an All mail entry in the Unified Mailbox listing all mail across the selected folders." + }, + "sections": { + "text": "Text & motion", + "layout": "Layout", + "sidebar": "Sidebar", + "accounts": "Multiple accounts", + "accounts_description": "How your accounts and shared mailboxes appear together.", + "experimental": "Experimental" + }, + "account_marker": { + "label": "Tell accounts apart", + "description": "In the unified views, mark each message with the color of the account it came from.", + "dot": "Colored dot", + "tint": "Tinted row", + "none": "Nothing" } }, "keywords": { @@ -4052,7 +4067,8 @@ "demo_banner_title": "Demo controls", "demo_banner_desc": "You're in demo mode - everything stays in your browser. Hit 'Reset Demo' anytime to start fresh with clean sample data.", "quota_title": "Storage usage", - "quota_desc": "Track your mailbox size here. The circle fills up as you use more space." + "quota_desc": "Track your mailbox size here. The circle fills up as you use more space.", + "settings_section": "Getting started" }, "unified_mailbox": { "search_unavailable": "Search is not available in the unified view" diff --git a/locales/es/common.json b/locales/es/common.json index e609f9002..8b1dc2c9d 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Todas las cuentas: Todo el correo", "description": "Muestra una entrada en la sección Todas las cuentas con todo el correo de todas las cuentas, abarcando todas las carpetas excepto spam, enviados, archivo, papelera y borradores." + }, + "sections": { + "text": "Texto y animaciones", + "layout": "Diseño", + "sidebar": "Barra lateral", + "accounts": "Varias cuentas", + "accounts_description": "Cómo se muestran juntos sus cuentas y buzones compartidos.", + "experimental": "Experimental" + }, + "account_marker": { + "label": "Distinguir las cuentas", + "description": "En las vistas unificadas, marcar cada mensaje con el color de la cuenta de la que procede.", + "dot": "Punto de color", + "tint": "Fila coloreada", + "none": "Nada" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Volver a mi cuenta", "managing": "Gestionando: {name}" + }, + "advanced_switch": { + "label": "Mostrar ajustes avanzados", + "show": "Mostrar ajustes avanzados", + "badge": "Avanzado", + "hidden_count": "{count, plural, one {1 ajuste avanzado está oculto en esta página.} other {# ajustes avanzados están ocultos en esta página.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Controles de demo", "demo_banner_desc": "Estás en modo demo - todo permanece en tu navegador. Haz clic en 'Restablecer demo' en cualquier momento.", "quota_title": "Uso de almacenamiento", - "quota_desc": "Controla el tamaño de tu buzón aquí. El círculo se llena a medida que usas más espacio." + "quota_desc": "Controla el tamaño de tu buzón aquí. El círculo se llena a medida que usas más espacio.", + "settings_section": "Primeros pasos" }, "unified_mailbox": { "search_unavailable": "La búsqueda no está disponible en la vista unificada" diff --git a/locales/et/common.json b/locales/et/common.json index 527d286f0..9f85af74c 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Kõik kirjad", "description": "Kuva ühendatud postkastis kirje Kõik kirjad, mis loetleb kõik valitud kaustade kirjad." + }, + "sections": { + "text": "Tekst ja liikumine", + "layout": "Paigutus", + "sidebar": "Külgriba", + "accounts": "Mitu kontot", + "accounts_description": "Kuidas sinu kontod ja jagatud postkastid koos kuvatakse.", + "experimental": "Katseline" + }, + "account_marker": { + "label": "Kontode eristamine", + "description": "Ühendatud vaadetes märgi iga kiri selle konto värviga, kust see tuli.", + "dot": "Värviline täpp", + "tint": "Toonitud rida", + "none": "Mitte midagi" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Eelvaade" } + }, + "advanced_switch": { + "label": "Kuva täpsemad seaded", + "show": "Kuva täpsemad seaded", + "badge": "Täpsem", + "hidden_count": "{count, plural, one {Sellel lehel on peidetud 1 täpsem seade.} other {Sellel lehel on peidetud # täpsemat seadet.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Demorežiimi juhtnupud", "demo_banner_desc": "Oled demorežiimis - kõik jääb sinu brauserisse. Vajuta igal ajal 'Lähtesta demo', et alustada puhta näidisandmestikuga otsast peale.", "quota_title": "Mahu kasutus", - "quota_desc": "Jälgi siin oma postkasti suurust. Ring täitub, mida rohkem ruumi kasutad." + "quota_desc": "Jälgi siin oma postkasti suurust. Ring täitub, mida rohkem ruumi kasutad.", + "settings_section": "Alustamine" }, "unified_mailbox": { "search_unavailable": "Otsing pole ühendatud vaates saadaval" diff --git a/locales/fa/common.json b/locales/fa/common.json index 189db08cb..cd0c7b025 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -1245,6 +1245,21 @@ "cross_unread": { "label": "همه حساب‌ها: خوانده‌نشده", "description": "نمایش یک مورد در بخش همه حساب‌ها که ایمیل‌های خوانده‌نشده همه حساب‌ها را فهرست می‌کند، شامل همه پوشه‌ها به جز هرزنامه، ارسال‌شده، بایگانی، زباله‌دان و پیش‌نویس‌ها." + }, + "sections": { + "text": "متن و پویانمایی", + "layout": "چیدمان", + "sidebar": "نوار کناری", + "accounts": "چند حساب", + "accounts_description": "نحوه نمایش حساب‌ها و صندوق‌های مشترک در کنار هم.", + "experimental": "آزمایشی" + }, + "account_marker": { + "label": "تشخیص حساب‌ها", + "description": "در نماهای یکپارچه، هر پیام را با رنگ حسابی که از آن آمده علامت‌گذاری کنید.", + "dot": "نقطه رنگی", + "tint": "ردیف رنگی", + "none": "هیچ" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "پیش‌نمایش" } + }, + "advanced_switch": { + "label": "نمایش تنظیمات پیشرفته", + "show": "نمایش تنظیمات پیشرفته", + "badge": "پیشرفته", + "hidden_count": "{count, plural, one {۱ تنظیم پیشرفته در این صفحه پنهان است.} other {# تنظیم پیشرفته در این صفحه پنهان است.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "کنترل‌های نسخه آزمایشی", "demo_banner_desc": "شما در حالت آزمایشی هستید. هر زمان \"بازنشانی نسخه آزمایشی\" را بزنید.", "quota_title": "مصرف فضا", - "quota_desc": "مصرف صندوق پستی خود را اینجا پیگیری کنید." + "quota_desc": "مصرف صندوق پستی خود را اینجا پیگیری کنید.", + "settings_section": "شروع کار" }, "unified_mailbox": { "search_unavailable": "جستجو در نمای یکپارچه در دسترس نیست" diff --git a/locales/fr/common.json b/locales/fr/common.json index b672cd3a4..a78b0b0ed 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Tous les comptes : Tout le courrier", "description": "Affiche une entrée dans la section Tous les comptes répertoriant tout le courrier de tous les comptes, couvrant tous les dossiers sauf indésirables, envoyés, archives, corbeille et brouillons." + }, + "sections": { + "text": "Texte et animations", + "layout": "Disposition", + "sidebar": "Barre latérale", + "accounts": "Plusieurs comptes", + "accounts_description": "Comment vos comptes et boîtes partagées apparaissent ensemble.", + "experimental": "Expérimental" + }, + "account_marker": { + "label": "Distinguer les comptes", + "description": "Dans les vues unifiées, marquer chaque message avec la couleur du compte dont il provient.", + "dot": "Point coloré", + "tint": "Ligne teintée", + "none": "Rien" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Retour à mon compte", "managing": "Gestion : {name}" + }, + "advanced_switch": { + "label": "Afficher les paramètres avancés", + "show": "Afficher les paramètres avancés", + "badge": "Avancé", + "hidden_count": "{count, plural, one {1 paramètre avancé est masqué sur cette page.} other {# paramètres avancés sont masqués sur cette page.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Contrôles de démo", "demo_banner_desc": "Vous êtes en mode démo - tout reste dans votre navigateur. Cliquez sur 'Réinitialiser la démo' à tout moment pour repartir avec des données fraîches.", "quota_title": "Utilisation du stockage", - "quota_desc": "Suivez la taille de votre boîte mail ici. Le cercle se remplit au fur et à mesure que vous utilisez plus d'espace." + "quota_desc": "Suivez la taille de votre boîte mail ici. Le cercle se remplit au fur et à mesure que vous utilisez plus d'espace.", + "settings_section": "Premiers pas" }, "unified_mailbox": { "search_unavailable": "La recherche n'est pas disponible dans la vue unifiée" diff --git a/locales/he/common.json b/locales/he/common.json index 96a7e3a29..d0dabf81a 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -1207,6 +1207,21 @@ "cross_all": { "label": "כל החשבונות: כל הדוא״ל", "description": "הצג ערך בסעיף כל החשבונות המפרט את כל הדוא״ל בכל חשבון, המשתרע על כל התיקיות למעט זבל, נשלח, ארכיון, אשפה וטיוטות." + }, + "sections": { + "text": "טקסט ותנועה", + "layout": "פריסה", + "sidebar": "סרגל צד", + "accounts": "כמה חשבונות", + "accounts_description": "איך החשבונות ותיבות הדואר המשותפות שלך מוצגים יחד.", + "experimental": "ניסיוני" + }, + "account_marker": { + "label": "הבחנה בין חשבונות", + "description": "בתצוגות המאוחדות, לסמן כל הודעה בצבע החשבון שממנו הגיעה.", + "dot": "נקודה צבעונית", + "tint": "שורה צבועה", + "none": "ללא" } }, "keywords": { @@ -2498,6 +2513,12 @@ "archive": "העבר לארכיון", "trash": "העבר לאשפה" } + }, + "advanced_switch": { + "label": "הצגת הגדרות מתקדמות", + "show": "הצגת הגדרות מתקדמות", + "badge": "מתקדם", + "hidden_count": "{count, plural, one {הגדרה מתקדמת אחת מוסתרת בדף זה.} two {שתי הגדרות מתקדמות מוסתרות בדף זה.} other {# הגדרות מתקדמות מוסתרות בדף זה.}}" } }, "errors": { @@ -3922,7 +3943,8 @@ "quota_title": "שימוש באחסון", "quota_desc": "עקוב אחר גודל תיבת הדואר שלך כאן. העיגול מתמלא ככל שאתה מנצל יותר מקום.", "show_on_new_devices_title": "הצג בהתקנים חדשים", - "show_on_new_devices_desc": "הפעל מחדש את בר הברכה ושיוך את הסיור בפעם הראשונה שאתה נכנס בהתקן חדש, גם אם כבר השלמת אותו במקום אחר" + "show_on_new_devices_desc": "הפעל מחדש את בר הברכה ושיוך את הסיור בפעם הראשונה שאתה נכנס בהתקן חדש, גם אם כבר השלמת אותו במקום אחר", + "settings_section": "צעדים ראשונים" }, "meta_description": "לקוח webmail מינימליסטי באמצעות פרוטוקול JMAP", "protocol_handlers": { diff --git a/locales/hu/common.json b/locales/hu/common.json index 29fd5076a..c480970d5 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Összes fiók: Összes levél", "description": "Megjelenít egy bejegyzést az Összes fiók szakaszban, amely az összes fiók összes levelét listázza, a levélszemét, elküldött, archívum, kuka és piszkozatok mappák kivételével minden mappára kiterjedően." + }, + "sections": { + "text": "Szöveg és animáció", + "layout": "Elrendezés", + "sidebar": "Oldalsáv", + "accounts": "Több fiók", + "accounts_description": "Hogyan jelennek meg együtt a fiókjai és a megosztott postaládák.", + "experimental": "Kísérleti" + }, + "account_marker": { + "label": "Fiókok megkülönböztetése", + "description": "Az egyesített nézetekben minden üzenetet jelöljön annak a fióknak a színével, amelyből érkezett.", + "dot": "Színes pont", + "tint": "Színezett sor", + "none": "Semmi" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Vissza a saját fiókomhoz", "managing": "Kezelés: {name}" + }, + "advanced_switch": { + "label": "Speciális beállítások megjelenítése", + "show": "Speciális beállítások megjelenítése", + "badge": "Speciális", + "hidden_count": "{count, plural, one {1 speciális beállítás rejtve van ezen az oldalon.} other {# speciális beállítás rejtve van ezen az oldalon.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Demó vezérlők", "demo_banner_desc": "Demó módban vagy - minden a böngésződben marad. Nyomd meg a 'Demó visszaállítása' gombot bármikor a tiszta mintaadatokkal való újrakezdéshez.", "quota_title": "Tárhely használat", - "quota_desc": "Kövesd nyomon a postafiókod méretét itt. A kör kitöltődik, ahogy egyre több helyet használsz." + "quota_desc": "Kövesd nyomon a postafiókod méretét itt. A kör kitöltődik, ahogy egyre több helyet használsz.", + "settings_section": "Első lépések" }, "unified_mailbox": { "search_unavailable": "A keresés nem érhető el az egységes nézetben" diff --git a/locales/it/common.json b/locales/it/common.json index 487e54f6b..3ad472671 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Tutti gli account: Tutta la posta", "description": "Mostra una voce nella sezione Tutti gli account che elenca tutta la posta di tutti gli account, in tutte le cartelle tranne posta indesiderata, inviata, archivio, cestino e bozze." + }, + "sections": { + "text": "Testo e animazioni", + "layout": "Layout", + "sidebar": "Barra laterale", + "accounts": "Più account", + "accounts_description": "Come appaiono insieme i tuoi account e le caselle condivise.", + "experimental": "Sperimentale" + }, + "account_marker": { + "label": "Distinguere gli account", + "description": "Nelle viste unificate, contrassegna ogni messaggio con il colore dell'account da cui proviene.", + "dot": "Punto colorato", + "tint": "Riga colorata", + "none": "Niente" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Torna al mio account", "managing": "Gestione: {name}" + }, + "advanced_switch": { + "label": "Mostra impostazioni avanzate", + "show": "Mostra impostazioni avanzate", + "badge": "Avanzato", + "hidden_count": "{count, plural, one {1 impostazione avanzata è nascosta in questa pagina.} other {# impostazioni avanzate sono nascoste in questa pagina.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Controlli demo", "demo_banner_desc": "Sei in modalità demo - tutto rimane nel tuo browser. Premi 'Reimposta Demo' in qualsiasi momento per ricominciare con dati puliti.", "quota_title": "Utilizzo dello spazio", - "quota_desc": "Monitora le dimensioni della tua casella qui. Il cerchio si riempie man mano che utilizzi più spazio." + "quota_desc": "Monitora le dimensioni della tua casella qui. Il cerchio si riempie man mano che utilizzi più spazio.", + "settings_section": "Per iniziare" }, "unified_mailbox": { "search_unavailable": "La ricerca non è disponibile nella vista unificata" diff --git a/locales/ja/common.json b/locales/ja/common.json index 7a4f2a30f..c09bfc498 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "すべてのアカウント: すべてのメール", "description": "「すべてのアカウント」セクションに、すべてのアカウントのすべてのメールを一覧表示する項目を表示します。迷惑メール、送信済み、アーカイブ、ゴミ箱、下書きを除くすべてのフォルダーが対象です。" + }, + "sections": { + "text": "文字とアニメーション", + "layout": "レイアウト", + "sidebar": "サイドバー", + "accounts": "複数のアカウント", + "accounts_description": "複数のアカウントと共有メールボックスをまとめて表示する方法。", + "experimental": "実験的な機能" + }, + "account_marker": { + "label": "アカウントの見分け方", + "description": "統合ビューで、各メッセージを送信元アカウントの色で示します。", + "dot": "色付きの点", + "tint": "行に色を付ける", + "none": "なし" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "自分のアカウントに戻る", "managing": "管理中: {name}" + }, + "advanced_switch": { + "label": "詳細設定を表示", + "show": "詳細設定を表示", + "badge": "詳細", + "hidden_count": "{count, plural, other {このページでは # 件の詳細設定が非表示です。}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "デモコントロール", "demo_banner_desc": "デモモードです。すべてブラウザ内に保存されます。「デモをリセット」をクリックすると、いつでもクリーンなサンプルデータで再開できます。", "quota_title": "ストレージ使用量", - "quota_desc": "メールボックスのサイズをここで確認できます。使用量が増えるとサークルが満たされます。" + "quota_desc": "メールボックスのサイズをここで確認できます。使用量が増えるとサークルが満たされます。", + "settings_section": "はじめに" }, "unified_mailbox": { "search_unavailable": "統合ビューでは検索を利用できません" diff --git a/locales/ko/common.json b/locales/ko/common.json index b5db2cbbe..20fc963c6 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "모든 계정: 모든 메일", "description": "모든 계정 섹션에 모든 계정의 모든 메일을 나열하는 항목을 표시합니다. 스팸, 보낸편지함, 보관함, 휴지통, 임시보관함을 제외한 모든 폴더가 대상입니다." + }, + "sections": { + "text": "텍스트 및 애니메이션", + "layout": "레이아웃", + "sidebar": "사이드바", + "accounts": "여러 계정", + "accounts_description": "계정과 공유 사서함을 함께 표시하는 방식입니다.", + "experimental": "실험적 기능" + }, + "account_marker": { + "label": "계정 구분", + "description": "통합 보기에서 각 메시지를 해당 계정의 색상으로 표시합니다.", + "dot": "색상 점", + "tint": "행 색조", + "none": "없음" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "내 계정으로 돌아가기", "managing": "관리 중: {name}" + }, + "advanced_switch": { + "label": "고급 설정 표시", + "show": "고급 설정 표시", + "badge": "고급", + "hidden_count": "{count, plural, other {이 페이지에서 고급 설정 #개가 숨겨져 있습니다.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "데모 컨트롤러", "demo_banner_desc": "현재 데모 모드예요. 모든 작업은 브라우저 안에서만 이뤄집니다. 언제든 '초기화'를 누르면 처음의 깨끗한 샘플 데이터로 돌아가요.", "quota_title": "저장 공간 사용량", - "quota_desc": "편지함 용량을 여기서 확인하세요. 공간을 많이 쓸수록 원이 점점 채워질 거예요." + "quota_desc": "편지함 용량을 여기서 확인하세요. 공간을 많이 쓸수록 원이 점점 채워질 거예요.", + "settings_section": "시작하기" }, "unified_mailbox": { "search_unavailable": "통합 보기에서는 검색을 사용할 수 없습니다" diff --git a/locales/lv/common.json b/locales/lv/common.json index 82e05f544..b55f32bb6 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Visi konti: Visas vēstules", "description": "Rāda ierakstu sadaļā “Visi konti”, kas uzskaita visas vēstules no visiem kontiem, aptverot visas mapes, izņemot mēstules, nosūtītās, arhīvu, miskasti un melnrakstus." + }, + "sections": { + "text": "Teksts un animācija", + "layout": "Izkārtojums", + "sidebar": "Sānjosla", + "accounts": "Vairāki konti", + "accounts_description": "Kā jūsu konti un koplietotās pastkastes tiek rādītas kopā.", + "experimental": "Eksperimentāli" + }, + "account_marker": { + "label": "Kontu atšķiršana", + "description": "Apvienotajos skatos atzīmēt katru ziņu ar tā konta krāsu, no kura tā nākusi.", + "dot": "Krāsains punkts", + "tint": "Tonēta rinda", + "none": "Nekas" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Atpakaļ uz manu kontu", "managing": "Pārvalda: {name}" + }, + "advanced_switch": { + "label": "Rādīt papildu iestatījumus", + "show": "Rādīt papildu iestatījumus", + "badge": "Papildu", + "hidden_count": "{count, plural, zero {Šajā lapā nav paslēptu papildu iestatījumu.} one {Šajā lapā ir paslēpts # papildu iestatījums.} other {Šajā lapā ir paslēpti # papildu iestatījumi.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Demo vadība", "demo_banner_desc": "Jūs esat demo režīmā - visi dati paliek jūsu pārlūkā. Nospiediet «Atiestatīt demo», lai sāktu no jauna.", "quota_title": "Krātuves izmantošana", - "quota_desc": "Sekojiet līdzi savas pastkastes aizpildījumam šeit." + "quota_desc": "Sekojiet līdzi savas pastkastes aizpildījumam šeit.", + "settings_section": "Darba sākšana" }, "unified_mailbox": { "search_unavailable": "Meklēšana nav pieejama apvienotajā skatā" diff --git a/locales/mn/common.json b/locales/mn/common.json index 7bf1f9cbc..3b943672e 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Бүх шуудан", "description": "Нэгдсэн шуудангийн хайрцганд сонгогдсон фолдер дээрх бүх имэйлийг жагсаасан Бүх имэйлийн оруулгыг харуул." + }, + "sections": { + "text": "Текст ба хөдөлгөөн", + "layout": "Байрлал", + "sidebar": "Хажуугийн самбар", + "accounts": "Олон бүртгэл", + "accounts_description": "Таны бүртгэл болон хуваалцсан шуудангийн хайрцгууд хэрхэн хамт харагдах.", + "experimental": "Туршилтын" + }, + "account_marker": { + "label": "Бүртгэлүүдийг ялгах", + "description": "Нэгдсэн харагдацад мессеж бүрийг ирсэн бүртгэлийн өнгөөр тэмдэглэнэ.", + "dot": "Өнгөт цэг", + "tint": "Өнгөт мөр", + "none": "Юу ч үгүй" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Урьдчилан харах" } + }, + "advanced_switch": { + "label": "Нарийвчилсан тохиргоог харуулах", + "show": "Нарийвчилсан тохиргоог харуулах", + "badge": "Нарийвчилсан", + "hidden_count": "{count, plural, one {Энэ хуудсанд 1 нарийвчилсан тохиргоо нуугдсан байна.} other {Энэ хуудсанд # нарийвчилсан тохиргоо нуугдсан байна.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Демо удирдлага", "demo_banner_desc": "Та демо горимд байна. Бүх өгөгдөл зөвхөн таны хөтөч дээр хадгалагдана. Хүссэн үедээ Reset Demo дарж дахин эхлүүлж болно.", "quota_title": "Хадгалалтын ашиглалт", - "quota_desc": "Энд таны шуудангийн хайрцгийн ашиглаж буй хэмжээг харуулна. Илүү их зай ашиглах тусам тойрог дүүрнэ." + "quota_desc": "Энд таны шуудангийн хайрцгийн ашиглаж буй хэмжээг харуулна. Илүү их зай ашиглах тусам тойрог дүүрнэ.", + "settings_section": "Эхлэх" }, "unified_mailbox": { "search_unavailable": "Нэгдсэн харагдац дээр хайлт ашиглах боломжгүй" diff --git a/locales/nb/common.json b/locales/nb/common.json index 309a84853..1d8cf7f0f 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "All e-post", "description": "Vis All e-post i den samlede postkassen, med all e-post fra de valgte mappene." + }, + "sections": { + "text": "Tekst og animasjon", + "layout": "Oppsett", + "sidebar": "Sidepanel", + "accounts": "Flere kontoer", + "accounts_description": "Hvordan kontoene og de delte postkassene dine vises sammen.", + "experimental": "Eksperimentelt" + }, + "account_marker": { + "label": "Skill kontoene fra hverandre", + "description": "Marker hver melding i de samlede visningene med fargen til kontoen den kom fra.", + "dot": "Farget prikk", + "tint": "Farget rad", + "none": "Ingenting" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Forhåndsvisning" } + }, + "advanced_switch": { + "label": "Vis avanserte innstillinger", + "show": "Vis avanserte innstillinger", + "badge": "Avansert", + "hidden_count": "{count, plural, one {1 avansert innstilling er skjult på denne siden.} other {# avanserte innstillinger er skjult på denne siden.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Demokontroller", "demo_banner_desc": "Du er i demomodus – alt forblir i nettleseren. Trykk på «Tilbakestill demo» når som helst for å begynne på nytt med nye eksempeldata.", "quota_title": "Lagringsbruk", - "quota_desc": "Følg med på størrelsen på postkassen her. Sirkelen fylles opp etter hvert som du bruker mer plass." + "quota_desc": "Følg med på størrelsen på postkassen her. Sirkelen fylles opp etter hvert som du bruker mer plass.", + "settings_section": "Kom i gang" }, "unified_mailbox": { "search_unavailable": "Søk er ikke tilgjengelig i den samlede visningen" diff --git a/locales/nl/common.json b/locales/nl/common.json index b2c6c434c..dc406d941 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Alle accounts: Alle e-mail", "description": "Toont een item in de sectie Alle accounts met alle e-mail van alle accounts, in alle mappen behalve ongewenst, verzonden, archief, prullenbak en concepten." + }, + "sections": { + "text": "Tekst en animatie", + "layout": "Indeling", + "sidebar": "Zijbalk", + "accounts": "Meerdere accounts", + "accounts_description": "Hoe uw accounts en gedeelde postvakken samen worden getoond.", + "experimental": "Experimenteel" + }, + "account_marker": { + "label": "Accounts onderscheiden", + "description": "Markeer in de gecombineerde weergaven elk bericht met de kleur van het account waar het vandaan komt.", + "dot": "Gekleurde stip", + "tint": "Gekleurde rij", + "none": "Niets" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Terug naar mijn account", "managing": "Beheren: {name}" + }, + "advanced_switch": { + "label": "Geavanceerde instellingen tonen", + "show": "Geavanceerde instellingen tonen", + "badge": "Geavanceerd", + "hidden_count": "{count, plural, one {1 geavanceerde instelling is verborgen op deze pagina.} other {# geavanceerde instellingen zijn verborgen op deze pagina.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Demo-bediening", "demo_banner_desc": "U bent in demomodus - alles blijft in uw browser. Klik op 'Demo resetten' om opnieuw te beginnen met schone voorbeeldgegevens.", "quota_title": "Opslaggebruik", - "quota_desc": "Volg de grootte van uw mailbox hier. De cirkel vult zich naarmate u meer ruimte gebruikt." + "quota_desc": "Volg de grootte van uw mailbox hier. De cirkel vult zich naarmate u meer ruimte gebruikt.", + "settings_section": "Aan de slag" }, "unified_mailbox": { "search_unavailable": "Zoeken is niet beschikbaar in de gecombineerde weergave" diff --git a/locales/pl/common.json b/locales/pl/common.json index dcca65706..a87d5bc63 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Wszystkie konta: Cała poczta", "description": "Pokazuje pozycję w sekcji Wszystkie konta z całą pocztą ze wszystkich kont, obejmującą wszystkie foldery oprócz spamu, wysłanych, archiwum, kosza i roboczych." + }, + "sections": { + "text": "Tekst i animacje", + "layout": "Układ", + "sidebar": "Pasek boczny", + "accounts": "Wiele kont", + "accounts_description": "Jak Twoje konta i udostępnione skrzynki są wyświetlane razem.", + "experimental": "Eksperymentalne" + }, + "account_marker": { + "label": "Rozróżnianie kont", + "description": "W widokach połączonych oznaczaj każdą wiadomość kolorem konta, z którego pochodzi.", + "dot": "Kolorowa kropka", + "tint": "Podbarwiony wiersz", + "none": "Nic" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Powrót do mojego konta", "managing": "Zarządzanie: {name}" + }, + "advanced_switch": { + "label": "Pokaż ustawienia zaawansowane", + "show": "Pokaż ustawienia zaawansowane", + "badge": "Zaawansowane", + "hidden_count": "{count, plural, one {1 ustawienie zaawansowane jest ukryte na tej stronie.} few {# ustawienia zaawansowane są ukryte na tej stronie.} many {# ustawień zaawansowanych jest ukrytych na tej stronie.} other {# ustawienia zaawansowanego jest ukryte na tej stronie.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Sterowanie wersją demo", "demo_banner_desc": "Jesteś w trybie demo - wszystko pozostaje w Twojej przeglądarce. W każdej chwili kliknij „Reset Demo”, aby zacząć od nowa z czystymi danymi przykładowymi.", "quota_title": "Wykorzystanie miejsca", - "quota_desc": "Tutaj możesz śledzić rozmiar swojej skrzynki pocztowej. Okrąg wypełnia się wraz ze wzrostem użycia przestrzeni." + "quota_desc": "Tutaj możesz śledzić rozmiar swojej skrzynki pocztowej. Okrąg wypełnia się wraz ze wzrostem użycia przestrzeni.", + "settings_section": "Pierwsze kroki" }, "unified_mailbox": { "search_unavailable": "Wyszukiwanie jest niedostępne w widoku ujednoliconym" diff --git a/locales/pt/common.json b/locales/pt/common.json index 0289a36df..ca524e668 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Todas as contas: Todo o correio", "description": "Mostra uma entrada na seção Todas as contas listando todo o correio de todas as contas, abrangendo todas as pastas exceto spam, enviados, arquivo, lixeira e rascunhos." + }, + "sections": { + "text": "Texto e animações", + "layout": "Disposição", + "sidebar": "Barra lateral", + "accounts": "Várias contas", + "accounts_description": "Como as suas contas e caixas partilhadas aparecem em conjunto.", + "experimental": "Experimental" + }, + "account_marker": { + "label": "Distinguir as contas", + "description": "Nas vistas unificadas, marcar cada mensagem com a cor da conta de onde veio.", + "dot": "Ponto colorido", + "tint": "Linha colorida", + "none": "Nada" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Voltar para minha conta", "managing": "Gerenciando: {name}" + }, + "advanced_switch": { + "label": "Mostrar definições avançadas", + "show": "Mostrar definições avançadas", + "badge": "Avançado", + "hidden_count": "{count, plural, one {1 definição avançada está oculta nesta página.} other {# definições avançadas estão ocultas nesta página.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Controles de demonstração", "demo_banner_desc": "Está no modo de demonstração - tudo permanece no seu navegador. Clique em 'Repor Demonstração' a qualquer momento para recomeçar com dados limpos.", "quota_title": "Utilização do armazenamento", - "quota_desc": "Acompanhe o tamanho da sua caixa de correio aqui. O círculo preenche-se à medida que utiliza mais espaço." + "quota_desc": "Acompanhe o tamanho da sua caixa de correio aqui. O círculo preenche-se à medida que utiliza mais espaço.", + "settings_section": "Primeiros passos" }, "unified_mailbox": { "search_unavailable": "A pesquisa não está disponível na vista unificada" diff --git a/locales/ro/common.json b/locales/ro/common.json index 3fed4915d..eb0f5f7bb 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Toate conturile: Toată poșta", "description": "Afișează în secțiunea Toate conturile o intrare cu toată poșta din toate conturile, în toate folderele cu excepția spam, trimise, arhivă, coș și ciorne." + }, + "sections": { + "text": "Text și animații", + "layout": "Aspect", + "sidebar": "Bară laterală", + "accounts": "Mai multe conturi", + "accounts_description": "Cum apar împreună conturile și căsuțele partajate.", + "experimental": "Experimental" + }, + "account_marker": { + "label": "Deosebirea conturilor", + "description": "În vizualizările unificate, marchează fiecare mesaj cu culoarea contului din care provine.", + "dot": "Punct colorat", + "tint": "Rând colorat", + "none": "Nimic" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Previzualizare" } + }, + "advanced_switch": { + "label": "Afișează setările avansate", + "show": "Afișează setările avansate", + "badge": "Avansat", + "hidden_count": "{count, plural, one {1 setare avansată este ascunsă pe această pagină.} few {# setări avansate sunt ascunse pe această pagină.} other {# de setări avansate sunt ascunse pe această pagină.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Controale demo", "demo_banner_desc": "Vă aflați în modul demo – totul rămâne în browserul dvs. Apăsați „Resetare demo” oricând pentru a începe de la zero cu date de exemplu curate.", "quota_title": "Utilizarea spațiului de stocare", - "quota_desc": "Urmăriți aici dimensiunea căsuței dvs. de e-mail. Cercul se umple pe măsură ce utilizați mai mult spațiu." + "quota_desc": "Urmăriți aici dimensiunea căsuței dvs. de e-mail. Cercul se umple pe măsură ce utilizați mai mult spațiu.", + "settings_section": "Primii pași" }, "unified_mailbox": { "search_unavailable": "Funcția de căutare nu este disponibilă în vizualizarea unificată" diff --git a/locales/ru/common.json b/locales/ru/common.json index 60e741cac..17241d76c 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Все аккаунты: Вся почта", "description": "Показывает в разделе «Все аккаунты» запись со всеми письмами из всех аккаунтов, по всем папкам, кроме спама, отправленных, архива, корзины и черновиков." + }, + "sections": { + "text": "Текст и анимация", + "layout": "Расположение", + "sidebar": "Боковая панель", + "accounts": "Несколько учётных записей", + "accounts_description": "Как ваши учётные записи и общие ящики отображаются вместе.", + "experimental": "Экспериментальное" + }, + "account_marker": { + "label": "Различать учётные записи", + "description": "В объединённых представлениях отмечать каждое письмо цветом учётной записи, из которой оно пришло.", + "dot": "Цветная точка", + "tint": "Подкрашенная строка", + "none": "Ничего" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Назад к моей учётной записи", "managing": "Управление: {name}" + }, + "advanced_switch": { + "label": "Показывать расширенные настройки", + "show": "Показать расширенные настройки", + "badge": "Расширенное", + "hidden_count": "{count, plural, one {# расширенная настройка скрыта на этой странице.} few {# расширенные настройки скрыты на этой странице.} many {# расширенных настроек скрыто на этой странице.} other {# расширенной настройки скрыто на этой странице.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Элементы управления демо", "demo_banner_desc": "Вы в демо-режиме - всё остаётся в вашем браузере. Нажмите «Сбросить демо» в любое время, чтобы начать заново с чистыми данными.", "quota_title": "Использование хранилища", - "quota_desc": "Отслеживайте размер вашего почтового ящика здесь. Круг заполняется по мере использования пространства." + "quota_desc": "Отслеживайте размер вашего почтового ящика здесь. Круг заполняется по мере использования пространства.", + "settings_section": "Начало работы" }, "unified_mailbox": { "search_unavailable": "Поиск недоступен в объединённом представлении" diff --git a/locales/sk/common.json b/locales/sk/common.json index 0de128b4a..151ebbe97 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "Všetky účty: Všetka pošta", "description": "Zobraziť položku v sekcii Všetky účty so všetkou poštou zo všetkých účtov." + }, + "sections": { + "text": "Text a animácie", + "layout": "Rozloženie", + "sidebar": "Bočný panel", + "accounts": "Viac účtov", + "accounts_description": "Ako sa vaše účty a zdieľané schránky zobrazujú spolu.", + "experimental": "Experimentálne" + }, + "account_marker": { + "label": "Rozlíšenie účtov", + "description": "V zjednotených zobrazeniach označiť každú správu farbou účtu, z ktorého pochádza.", + "dot": "Farebná bodka", + "tint": "Podfarbený riadok", + "none": "Nič" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "Náhľad" } + }, + "advanced_switch": { + "label": "Zobraziť rozšírené nastavenia", + "show": "Zobraziť rozšírené nastavenia", + "badge": "Rozšírené", + "hidden_count": "{count, plural, one {1 rozšírené nastavenie je na tejto stránke skryté.} few {# rozšírené nastavenia sú na tejto stránke skryté.} many {# rozšíreného nastavenia je na tejto stránke skrytého.} other {# rozšírených nastavení je na tejto stránke skrytých.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Ovládanie dema", "demo_banner_desc": "Nachádzate sa v demo režime – všetko zostáva vo vašom prehliadači.", "quota_title": "Využitie úložiska", - "quota_desc": "Tu môžete sledovať veľkosť svojej poštovej schránky." + "quota_desc": "Tu môžete sledovať veľkosť svojej poštovej schránky.", + "settings_section": "Začíname" }, "unified_mailbox": { "search_unavailable": "Vyhľadávanie nie je v zjednotenom zobrazení k dispozícii" diff --git a/locales/tr/common.json b/locales/tr/common.json index 48de33e02..5e7d51367 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Tüm hesaplar: Tüm postalar", "description": "Tüm hesaplar bölümünde, tüm hesaplardaki tüm postaları listeleyen bir giriş gösterir; önemsiz, gönderilmiş, arşiv, çöp ve taslaklar dışındaki tüm klasörleri kapsar." + }, + "sections": { + "text": "Metin ve hareket", + "layout": "Düzen", + "sidebar": "Kenar çubuğu", + "accounts": "Birden çok hesap", + "accounts_description": "Hesaplarınızın ve paylaşılan posta kutularının birlikte nasıl göründüğü.", + "experimental": "Deneysel" + }, + "account_marker": { + "label": "Hesapları ayırt etme", + "description": "Birleşik görünümlerde her iletiyi geldiği hesabın rengiyle işaretle.", + "dot": "Renkli nokta", + "tint": "Renkli satır", + "none": "Hiçbiri" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Hesabıma geri dön", "managing": "Yönetiliyor: {name}" + }, + "advanced_switch": { + "label": "Gelişmiş ayarları göster", + "show": "Gelişmiş ayarları göster", + "badge": "Gelişmiş", + "hidden_count": "{count, plural, one {Bu sayfada 1 gelişmiş ayar gizli.} other {Bu sayfada # gelişmiş ayar gizli.}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "Demo kontrolleri", "demo_banner_desc": "Demo modundasınız - her şey tarayıcınızda kalır. Temiz örnek verilerle yeniden başlamak için istediğiniz zaman 'Demoyu Sıfırla'ya basın.", "quota_title": "Depolama kullanımı", - "quota_desc": "Posta kutusu boyutunuzu buradan takip edin. Daha fazla alan kullandıkça daire dolmaya başlar." + "quota_desc": "Posta kutusu boyutunuzu buradan takip edin. Daha fazla alan kullandıkça daire dolmaya başlar.", + "settings_section": "Başlarken" }, "unified_mailbox": { "search_unavailable": "Birleşik görünümde arama kullanılamaz" diff --git a/locales/uk/common.json b/locales/uk/common.json index 2eef54e29..e20c6d5f2 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "Усі облікові записи: Уся пошта", "description": "Показує у розділі «Усі облікові записи» запис з усіма листами з усіх облікових записів, по всіх теках, окрім спаму, надісланих, архіву, кошика та чернеток." + }, + "sections": { + "text": "Текст і анімація", + "layout": "Розташування", + "sidebar": "Бічна панель", + "accounts": "Кілька облікових записів", + "accounts_description": "Як ваші облікові записи та спільні скриньки відображаються разом.", + "experimental": "Експериментальне" + }, + "account_marker": { + "label": "Розрізняти облікові записи", + "description": "В об'єднаних поданнях позначати кожен лист кольором облікового запису, з якого він надійшов.", + "dot": "Кольорова крапка", + "tint": "Підфарбований рядок", + "none": "Нічого" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "Назад до мого облікового запису", "managing": "Керування: {name}" + }, + "advanced_switch": { + "label": "Показувати розширені налаштування", + "show": "Показати розширені налаштування", + "badge": "Розширене", + "hidden_count": "{count, plural, one {# розширене налаштування приховано на цій сторінці.} few {# розширені налаштування приховано на цій сторінці.} many {# розширених налаштувань приховано на цій сторінці.} other {# розширеного налаштування приховано на цій сторінці.}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "Демонстраційні елементи керування", "demo_banner_desc": "Ви в демонстраційному режимі - все залишається у вашому браузері. Будь-коли натисніть «Скинути демонстрацію», щоб почати заново з чистими зразками даних.", "quota_title": "Використання сховища", - "quota_desc": "Відстежуйте розмір своєї поштової скриньки тут. Коло заповнюється, коли ви використовуєте більше місця." + "quota_desc": "Відстежуйте розмір своєї поштової скриньки тут. Коло заповнюється, коли ви використовуєте більше місця.", + "settings_section": "Початок роботи" }, "unified_mailbox": { "search_unavailable": "Пошук недоступний в об'єднаному перегляді" diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 9b283a042..34c0bfab2 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -1245,6 +1245,21 @@ "cross_all": { "label": "所有郵件", "description": "在整合信箱顯示「所有郵件」項目,列出所選信件匣中的所有郵件。" + }, + "sections": { + "text": "文字與動畫", + "layout": "版面配置", + "sidebar": "側邊欄", + "accounts": "多個帳號", + "accounts_description": "您的帳號與共用信箱如何一起顯示。", + "experimental": "實驗性" + }, + "account_marker": { + "label": "區分帳號", + "description": "在統一檢視中,以來源帳號的顏色標記每封郵件。", + "dot": "彩色圓點", + "tint": "列著色", + "none": "無" } }, "keywords": { @@ -2532,6 +2547,12 @@ "preview": { "label": "預覽" } + }, + "advanced_switch": { + "label": "顯示進階設定", + "show": "顯示進階設定", + "badge": "進階", + "hidden_count": "{count, plural, other {此頁面隱藏了 # 項進階設定。}}" } }, "errors": { @@ -4046,7 +4067,8 @@ "demo_banner_title": "示範控制", "demo_banner_desc": "目前處於示範模式,所有資料都保留在瀏覽器中。隨時點擊「重設示範」即可用全新的範例資料重新開始。", "quota_title": "儲存使用情況", - "quota_desc": "在這裡查看信箱的儲存空間使用量。使用的空間越多,圓形指示器就會填得越滿。" + "quota_desc": "在這裡查看信箱的儲存空間使用量。使用的空間越多,圓形指示器就會填得越滿。", + "settings_section": "新手入門" }, "unified_mailbox": { "search_unavailable": "整合檢視中無法使用搜尋" diff --git a/locales/zh/common.json b/locales/zh/common.json index a462f90ed..e48516f07 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -1242,6 +1242,21 @@ "cross_all": { "label": "所有账户:全部邮件", "description": "在“所有账户”部分显示一个条目,列出所有账户的全部邮件,涵盖除垃圾邮件、已发送、归档、废纸篓和草稿之外的所有文件夹。" + }, + "sections": { + "text": "文字与动画", + "layout": "布局", + "sidebar": "侧边栏", + "accounts": "多个账户", + "accounts_description": "您的账户和共享邮箱如何一起显示。", + "experimental": "实验性" + }, + "account_marker": { + "label": "区分账户", + "description": "在统一视图中,用来源账户的颜色标记每封邮件。", + "dot": "彩色圆点", + "tint": "行着色", + "none": "无" } }, "keywords": { @@ -2532,6 +2547,12 @@ "scoped": { "back": "返回我的账户", "managing": "管理:{name}" + }, + "advanced_switch": { + "label": "显示高级设置", + "show": "显示高级设置", + "badge": "高级", + "hidden_count": "{count, plural, other {此页面隐藏了 # 项高级设置。}}" } }, "errors": { @@ -4004,7 +4025,8 @@ "demo_banner_title": "演示控制", "demo_banner_desc": "当前为演示模式,所有数据仅保存在浏览器中。随时点击\"重置演示\"即可恢复初始示例数据。", "quota_title": "存储使用情况", - "quota_desc": "在这里查看邮箱的存储使用情况。随着空间使用增加,进度圆环会逐渐填满。" + "quota_desc": "在这里查看邮箱的存储使用情况。随着空间使用增加,进度圆环会逐渐填满。", + "settings_section": "新手入门" }, "unified_mailbox": { "search_unavailable": "统一视图中无法使用搜索"