diff --git a/components/filters/__tests__/filter-rule-modal-plain-choices.test.tsx b/components/filters/__tests__/filter-rule-modal-plain-choices.test.tsx new file mode 100644 index 000000000..08911d853 --- /dev/null +++ b/components/filters/__tests__/filter-rule-modal-plain-choices.test.tsx @@ -0,0 +1,124 @@ +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import React from 'react'; +import type { FilterRule } from '@/lib/jmap/sieve-types'; +import type { Mailbox } from '@/lib/jmap/types'; +import { FilterRuleModal } from '../filter-rule-modal'; + +// settings-13 and settings-9 (usability pass 2026-11-04): one way to stop +// later rules, and a folder picker that names folders as the sidebar does. + +vi.mock('@/stores/toast-store', () => ({ toast: { error: vi.fn(), success: vi.fn(), info: vi.fn() } })); + +function mailbox(id: string, name: string, extra: Partial = {}): Mailbox { + return { + id, name, sortOrder: 0, totalEmails: 0, unreadEmails: 0, totalThreads: 0, unreadThreads: 0, + myRights: {} as Mailbox['myRights'], isSubscribed: true, isShared: false, ...extra, + } as Mailbox; +} + +const mailboxes = [ + mailbox('inbox', 'Inbox', { role: 'inbox' }), + mailbox('drafts', 'Drafts', { role: 'drafts', sortOrder: 1 }), + mailbox('sent', 'Sent Items', { role: 'sent', sortOrder: 2 }), + mailbox('junk', 'Junk Mail', { role: 'junk', sortOrder: 3 }), + mailbox('trash', 'Deleted Items', { role: 'trash', sortOrder: 4 }), + mailbox('sched', 'Scheduled', { role: 'scheduled' as never, sortOrder: 5 }), + mailbox('work', 'Work', { sortOrder: 6 }), + mailbox('acme', 'Acme', { parentId: 'work' }), +]; + +function rule(actions: FilterRule['actions'], stopProcessing = false): FilterRule { + return { + id: 'r1', name: 'Old rule', enabled: true, matchType: 'all', + conditions: [{ field: 'from', comparator: 'contains', value: 'news@example.org' }], + actions, stopProcessing, + }; +} + +function openModal(props: Partial> = {}) { + const onSave = vi.fn(); + render(); + return { onSave, saved: () => onSave.mock.calls[0][0] as FilterRule }; +} + +const actionTypeOptions = () => + [...(screen.getAllByLabelText('actions')[0] as HTMLSelectElement).options].map((o) => o.value); +const folderSelect = () => screen.getByLabelText('move_to_folder') as HTMLSelectElement; +const folderOptions = () => [...folderSelect().options].map((o) => ({ value: o.value, text: o.textContent ?? '' })); +const stopBox = () => screen.getByLabelText('stop_processing') as HTMLInputElement; + +describe('stopping later rules', () => { + it('is no longer offered as an action, only as the checkbox', () => { + openModal(); + expect(actionTypeOptions()).not.toContain('stop'); + expect(stopBox()).toBeInTheDocument(); + }); + + it('folds an old "stop" action into the checkbox and saves it that way', () => { + const { saved } = openModal({ rule: rule([{ type: 'move', value: 'Work', mailboxId: 'work' }, { type: 'stop' }]) }); + expect(stopBox().checked).toBe(true); + expect(actionTypeOptions()).not.toContain('stop'); + fireEvent.click(screen.getByText('save')); + expect(saved().stopProcessing).toBe(true); + expect(saved().actions.map((a) => a.type)).toEqual(['move']); + }); + + it('drops what came after the stop, which never ran', () => { + const { saved } = openModal({ rule: rule([{ type: 'star' }, { type: 'stop' }, { type: 'mark_read' }]) }); + fireEvent.click(screen.getByText('save')); + expect(saved().stopProcessing).toBe(true); + expect(saved().actions.map((a) => a.type)).toEqual(['star']); + }); + + it('keeps the message in the inbox for a rule that only stopped', () => { + const { saved } = openModal({ rule: rule([{ type: 'stop' }]) }); + expect(stopBox().checked).toBe(true); + fireEvent.click(screen.getByText('save')); + expect(saved().stopProcessing).toBe(true); + expect(saved().actions).toEqual([{ type: 'keep' }]); + }); + + it('does not count the folded action as a change', async () => { + const onClose = vi.fn(); + render(); + fireEvent.click(screen.getByText('cancel')); + // No "discard changes?" question: the dialog closes at once. + await waitFor(() => expect(onClose).toHaveBeenCalled()); + }); +}); + +describe('the folder picker of Move to folder', () => { + it('names role folders as the sidebar does and leaves out Drafts, Sent and Scheduled', () => { + openModal({ initialRule: rule([{ type: 'move', value: '' }]) }); + const texts = folderOptions().map((o) => o.text.trim()); + expect(texts).toContain('mailboxes.inbox'); + expect(texts).toContain('mailboxes.spam'); + expect(texts).toContain('mailboxes.trash'); + for (const hidden of ['Sent Items', 'Junk Mail', 'Deleted Items', 'mailboxes.sent', 'mailboxes.drafts', 'Drafts', 'Scheduled']) { + expect(texts).not.toContain(hidden); + } + }); + + it('indents subfolders under their parent', () => { + openModal({ initialRule: rule([{ type: 'move', value: '' }]) }); + const options = folderOptions(); + const work = options.findIndex((o) => o.value === 'work'); + const acme = options.findIndex((o) => o.value === 'acme'); + expect(acme).toBe(work + 1); + expect(options[acme].text.startsWith(' ')).toBe(true); + }); + + it('still shows a hidden folder an existing rule files into', () => { + openModal({ rule: rule([{ type: 'copy', value: 'Sent Items', mailboxId: 'sent' }]) }); + expect(folderSelect().value).toBe('sent'); + expect(folderOptions().map((o) => o.value)).toContain('sent'); + }); + + it('still writes the server path into the rule', () => { + const { saved } = openModal({ initialRule: rule([{ type: 'move', value: '' }]) }); + fireEvent.change(folderSelect(), { target: { value: 'junk' } }); + fireEvent.click(screen.getByText('save')); + expect(saved().actions[0]).toMatchObject({ type: 'move', mailboxId: 'junk', value: 'Junk Mail' }); + }); +}); diff --git a/components/filters/__tests__/filter-rule-modal-regex.test.tsx b/components/filters/__tests__/filter-rule-modal-regex.test.tsx index 5e31d6533..2f534d2eb 100644 --- a/components/filters/__tests__/filter-rule-modal-regex.test.tsx +++ b/components/filters/__tests__/filter-rule-modal-regex.test.tsx @@ -1,8 +1,9 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import { describe, expect, it, vi } from 'vitest'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import React from 'react'; import type { FilterRule } from '@/lib/jmap/sieve-types'; import { FilterRuleModal } from '../filter-rule-modal'; +import { useSettingsStore } from '@/stores/settings-store'; vi.mock('@/stores/toast-store', () => ({ toast: { error: vi.fn(), success: vi.fn(), info: vi.fn() } })); @@ -28,6 +29,15 @@ const comparatorOptions = () => [...comparatorSelect().options].map((o) => o.val const valueInput = () => screen.getByLabelText('condition_value') as HTMLInputElement; describe('the "matches regex" comparator', () => { + // Regular expressions are an advanced choice (settings-13). + beforeEach(() => useSettingsStore.setState({ showAdvancedSettings: true })); + + it('is hidden while the advanced settings are off', () => { + useSettingsStore.setState({ showAdvancedSettings: false }); + openModal({ regexSupported: true }); + expect(comparatorOptions()).not.toContain('regex'); + }); + it('is offered only when the server lists the regex extension', () => { openModal(); expect(comparatorOptions()).not.toContain('regex'); diff --git a/components/filters/filter-rule-modal.tsx b/components/filters/filter-rule-modal.tsx index 71a23aac4..2f30d5a0d 100644 --- a/components/filters/filter-rule-modal.tsx +++ b/components/filters/filter-rule-modal.tsx @@ -27,6 +27,7 @@ import { hasPeriod, isPeriodBoundary } from "@/lib/sieve/period"; import { fromWallClock, getEffectiveTimeZone, getWallClock } from "@/lib/timezone"; import { useSettingsStore } from "@/stores/settings-store"; import { useKeywordFormat } from "@/hooks/use-keyword-format"; +import { localizeMailboxName } from "@/lib/mailbox-label"; interface FilterRuleModalProps { rule?: FilterRule; @@ -90,10 +91,32 @@ function comparatorsFor(field: FilterConditionField, regex: boolean): FilterComp return regex && REGEX_FIELDS.has(field) ? [...base, "regex"] : base; } +// "Stop processing" is not offered as an action: the "Don't apply later +// rules" checkbox does the same, and two ways to say it confused people. const ALL_ACTION_TYPES: FilterActionType[] = [ - "move", "copy", "forward", "mark_read", "star", "add_label", "discard", "reject", "keep", "stop", + "move", "copy", "forward", "mark_read", "star", "add_label", "discard", "reject", "keep", ]; +// Mail never needs filing into these: Drafts and Sent hold what the user +// writes, Scheduled what waits to be sent. +const NON_TARGET_ROLES = new Set(["drafts", "sent", "scheduled"]); + +/** + * A rule saved with the old "Stop processing" action opens with that action + * folded into the checkbox, so it keeps working and can be saved again. What + * came after the stop never ran, so it goes; a rule that did nothing before + * it keeps the message in the inbox, as it did. + */ +export function foldStopAction(actions: FilterAction[], stopProcessing: boolean): { + actions: FilterAction[]; + stopProcessing: boolean; +} { + const stopAt = actions.findIndex((a) => a.type === "stop"); + if (stopAt === -1) return { actions, stopProcessing }; + const before = actions.slice(0, stopAt); + return { actions: before.length > 0 ? before : [{ type: "keep" }], stopProcessing: true }; +} + const ACTIONS_WITH_VALUE = new Set(["move", "copy", "forward", "reject", "add_label"]); const ACTIONS_WITH_MAILBOX = new Set(["move", "copy"]); @@ -184,8 +207,13 @@ export function FilterRuleModal({ onClose, }: FilterRuleModalProps) { const t = useTranslations("settings.filters"); + const tSidebar = useTranslations("sidebar"); const isEdit = !!rule; const emailKeywords = useSettingsStore((state) => state.emailKeywords); + // Regular expressions are for people who asked for the advanced settings; + // a rule that already uses one keeps its comparator either way. + const showAdvanced = useSettingsStore((state) => state.showAdvancedSettings); + const regexOffered = regexSupported && showAdvanced; const { tagName } = useKeywordFormat(); const start = rule ?? initialRule; @@ -194,10 +222,11 @@ export function FilterRuleModal({ const [conditions, setConditions] = useState( start?.conditions.length ? [...start.conditions] : [makeEmptyCondition()] ); + const [folded] = useState(() => foldStopAction(start?.actions ?? [], start?.stopProcessing ?? false)); const [actions, setActions] = useState( - start?.actions.length ? [...start.actions] : [makeEmptyAction()] + folded.actions.length ? [...folded.actions] : [makeEmptyAction()] ); - const [stopProcessing, setStopProcessing] = useState(start?.stopProcessing ?? false); + const [stopProcessing, setStopProcessing] = useState(folded.stopProcessing); const [includeSpam, setIncludeSpam] = useState(start?.includeSpam ?? false); const [usedSuggestions, setUsedSuggestions] = useState>(new Set()); const [applyToExisting, setApplyToExisting] = useState(false); @@ -420,7 +449,7 @@ export function FilterRuleModal({ // with e.g. (field=attachment, comparator=contains) — invalid for the // Sieve generator. Each field has its own valid comparator set. if (updates.field && updates.field !== c.field) { - const allowed = comparatorsFor(updates.field, regexSupported); + const allowed = comparatorsFor(updates.field, regexOffered); if (!allowed.includes(c.comparator)) { updated.comparator = allowed[0]; } @@ -605,7 +634,7 @@ export function FilterRuleModal({ className={selectClass} aria-label={t("comparators.contains")} > - {comparatorsFor(condition.field, regexSupported || condition.comparator === "regex").map((c) => ( + {comparatorsFor(condition.field, regexOffered || condition.comparator === "regex").map((c) => ( @@ -740,11 +769,14 @@ export function FilterRuleModal({ > {missing && } - {hierarchicalMailboxes.map((mb) => ( - - ))} + {hierarchicalMailboxes + .filter((mb) => !NON_TARGET_ROLES.has(mb.role ?? "") || mb.id === selectedId) + .map((mb) => ( + + ))} ); })()} diff --git a/components/layout/__tests__/account-switcher-mountain-view.test.tsx b/components/layout/__tests__/account-switcher-mountain-view.test.tsx index 5a099dc24..72545ccbb 100644 --- a/components/layout/__tests__/account-switcher-mountain-view.test.tsx +++ b/components/layout/__tests__/account-switcher-mountain-view.test.tsx @@ -59,8 +59,9 @@ describe('AccountSwitcher under Mountain View', () => { const row = screen.getByTestId('account-option'); expect(row.getAttribute('style') ?? '').not.toMatch(/border/); - // Tailwind's `hidden`: jsdom has no style sheet to compute visibility from. - expect(within(row).getByText('mail.example.com').closest('.hidden')).not.toBeNull(); + // Not drawn at all now (settings-14): the server line is only for an + // account in trouble or for two accounts with one address. + expect(within(row).queryByText('mail.example.com')).toBeNull(); }); it('keeps the server line for an account in trouble', () => { @@ -119,13 +120,14 @@ describe('AccountSwitcher under Mountain View', () => { expect(screen.queryByTestId('all-inboxes')).toBeNull(); }); - it('leaves the default layout listing every account, unread-free', () => { + it('leaves the default layout listing every account, each with its unread', () => { useSettingsStore.setState({ interfaceLayout: 'default' } as never); render(); openPopover(); expect(screen.getAllByTestId('account-option')).toHaveLength(2); expect(screen.queryByTestId('all-inboxes')).toBeNull(); - expect(screen.queryByText('5')).toBeNull(); + // settings-14: the default layout shows the unread counts too. + expect(screen.getByText('5')).toBeInTheDocument(); }); }); diff --git a/components/layout/__tests__/account-switcher-rows.test.tsx b/components/layout/__tests__/account-switcher-rows.test.tsx new file mode 100644 index 000000000..60cba756c --- /dev/null +++ b/components/layout/__tests__/account-switcher-rows.test.tsx @@ -0,0 +1,103 @@ +import { render, screen, fireEvent, within } from '@testing-library/react'; +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import type { Mailbox } from '@/lib/jmap/types'; + +// settings-14 (usability pass 2026-11-04): each account row says name, +// address and unread count; the server only when it tells two rows apart; +// the default account says what "default" means; "Manage accounts…" leads +// to Settings › Account; the sidebar button keeps its name. + +const push = vi.hoisted(() => vi.fn()); +vi.mock('@/i18n/navigation', () => ({ + useRouter: () => ({ push, back: vi.fn(), replace: vi.fn() }), + usePathname: () => '/en', + Link: ({ children }: { children: React.ReactNode }) => children, +})); + +const { AccountSwitcher } = await import('../account-switcher'); +const { useAccountStore } = await import('@/stores/account-store'); +const { useAuthStore } = await import('@/stores/auth-store'); +const { useEmailStore } = await import('@/stores/email-store'); +const { useSettingsStore } = await import('@/stores/settings-store'); + +const inbox = (unread: number): Mailbox[] => + [{ id: 'inbox', name: 'Inbox', role: 'inbox', totalEmails: 10, unreadEmails: unread }] as unknown as Mailbox[]; + +function account(id: string, overrides: Record = {}) { + return { + id, + label: `${id}@example.com`, + email: `${id}@example.com`, + username: `${id}@example.com`, + displayName: `Person ${id.toUpperCase()}`, + serverUrl: 'https://mail.example.com', + avatarColor: '#336699', + cookieSlot: 0, + isConnected: true, + isDefault: id === 'a', + ...overrides, + }; +} + +const openPopover = () => fireEvent.click(screen.getByTestId('account-switcher')); +const rowFor = (id: string) => screen.getAllByTestId('account-option').find((r) => r.dataset.accountId === id)!; + +describe('the account switcher rows', () => { + beforeEach(() => { + push.mockClear(); + useAccountStore.setState({ accounts: [account('a'), account('b')] } as never); + useAuthStore.setState({ activeAccountId: 'a' } as never); + useEmailStore.setState({ mailboxes: inbox(3), accountMailboxes: { b: inbox(5) } } as never); + useSettingsStore.setState({ interfaceLayout: 'default' } as never); + }); + + it('shows each account with its name, address and unread count', () => { + render(); + openPopover(); + const a = within(rowFor('a')); + expect(a.getByText('Person A')).toBeInTheDocument(); + expect(a.getByText('a@example.com')).toBeInTheDocument(); + expect(a.getByText('3')).toBeInTheDocument(); + expect(within(rowFor('b')).getByText('5')).toBeInTheDocument(); + }); + + it('leaves out the server unless two accounts share an address', () => { + render(); + openPopover(); + expect(screen.queryByText('mail.example.com')).toBeNull(); + }); + + it('names the server when two accounts have the same address', () => { + useAccountStore.setState({ + accounts: [account('a'), account('b', { email: 'a@example.com', username: 'a@example.com', serverUrl: 'https://other.example.net' })], + } as never); + render(); + openPopover(); + expect(within(rowFor('a')).getByText('mail.example.com')).toBeInTheDocument(); + expect(within(rowFor('b')).getByText('other.example.net')).toBeInTheDocument(); + }); + + it('says what the default account is', () => { + render(); + openPopover(); + expect(within(rowFor('a')).getByTitle('default_badge')).toBeInTheDocument(); + expect(within(rowFor('b')).queryByTitle('default_badge')).toBeNull(); + }); + + it('opens Settings › Account from "Manage accounts…"', () => { + render(); + openPopover(); + fireEvent.click(screen.getByTestId('manage-accounts')); + expect(push).toHaveBeenCalledWith('/settings/account/browser'); + }); + + it('keeps the name in the sidebar button when another account has the same one', () => { + useAccountStore.setState({ + accounts: [account('a', { displayName: 'Sam' }), account('b', { displayName: 'Sam' })], + } as never); + render(); + const button = within(screen.getByTestId('account-switcher')); + expect(button.getByText('Sam')).toBeInTheDocument(); + expect(button.getByText('a@example.com')).toBeInTheDocument(); + }); +}); diff --git a/components/layout/__tests__/account-switcher-same-name.test.tsx b/components/layout/__tests__/account-switcher-same-name.test.tsx index 172078bc2..baeb7ab83 100644 --- a/components/layout/__tests__/account-switcher-same-name.test.tsx +++ b/components/layout/__tests__/account-switcher-same-name.test.tsx @@ -54,10 +54,12 @@ describe('account switcher with two accounts of the same name', () => { expect(within(row).getByText('sarah@meridianlabs.example')).toBeInTheDocument(); }); - it('names the open account by its address in the sidebar button', () => { + // settings-14: the button names one account, with its address under it, so + // its name doesn't jump to the address when a second account is added. + it("keeps the open account's name in the sidebar button, with the address under it", () => { render(); const button = screen.getByTestId('account-switcher'); - expect(within(button).getByText('nora@meridianlabs.example').className).toContain('font-medium'); - expect(within(button).queryByText('Nora Lindqvist')).toBeNull(); + expect(within(button).getByText('Nora Lindqvist').className).toContain('font-medium'); + expect(within(button).getByText('nora@meridianlabs.example')).toBeInTheDocument(); }); }); diff --git a/components/layout/account-switcher.tsx b/components/layout/account-switcher.tsx index cbb81ba9f..f86e4efe5 100644 --- a/components/layout/account-switcher.tsx +++ b/components/layout/account-switcher.tsx @@ -24,6 +24,7 @@ import { useConfirmDialog } from "@/hooks/use-confirm-dialog"; import { ConfirmDialog } from "@/components/ui/confirm-dialog"; import { IconButton } from "@/components/ui/icon-button"; import { toUnicodeDomain, toUnicodeEmail } from "@/lib/idn"; +import { buildSettingsPath } from "@/lib/deep-links"; interface AccountSwitcherProps { /** "rail" = small avatar only (NavigationRail), "expanded" = avatar + name + email (Sidebar) */ @@ -74,6 +75,8 @@ export function AccountSwitcher({ allInboxesSelected = false, }: AccountSwitcherProps) { const t = useTranslations("sidebar"); + const tAccounts = useTranslations("settings.account.accounts"); + const tFolders = useTranslations("uxs_folders"); const router = useRouter(); const [open, setOpen] = useState(false); const buttonRef = useRef(null); @@ -209,6 +212,11 @@ export function AccountSwitcher({ router.push(`/login?mode=add-account` as never); }; + const handleManageAccounts = () => { + setOpen(false); + router.push(buildSettingsPath("account", "browser") as never); + }; + const handleRemove = async (e: React.MouseEvent, account: AccountEntry) => { e.stopPropagation(); const label = toUnicodeEmail(account.email || account.username); @@ -282,7 +290,11 @@ export function AccountSwitcher({ // the actually logged-in account (info@linusrath.de). // IDN domains arrive in their ASCII (xn--) form; show them as written (#1100). // A name another account shares gives way to the address (accountRowText). - const activeText = activeAccount ? accountRowText(activeAccount, accounts) : null; + // The rows below lead with the address when two accounts share a name, so + // they differ in their bold line. The button names one account only, with + // its address under it, so its name stays put when another account is + // added (settings-14). + const activeText = activeAccount ? accountRowText(activeAccount, [activeAccount]) : null; const displayName = toUnicodeEmail(activeText?.title || ""); const displaySubtitle = toUnicodeEmail(activeText?.subtitle || ""); const displayEmail = toUnicodeEmail(activeAccount?.email || activeAccount?.username || ""); @@ -297,8 +309,12 @@ export function AccountSwitcher({ const unreadByAccount: Record = activeAccountId ? { ...accountMailboxes, [activeAccountId]: ownMailboxes } : accountMailboxes; - const unreadFor = (account: AccountEntry) => - mvPopover ? inboxUnread(unreadByAccount[account.id]) : undefined; + // Every row carries the unread waiting in its Inbox, as Gmail and Outlook show. + const unreadFor = (account: AccountEntry) => inboxUnread(unreadByAccount[account.id]); + // The server is only worth a line when it is what tells two rows apart. + const addressKey = (account: AccountEntry) => toUnicodeEmail(account.email || account.username).trim().toLowerCase(); + const sharesAddress = (account: AccountEntry) => + accounts.some((other) => other.id !== account.id && addressKey(other) === addressKey(account)); const allInboxesUnread = totalInboxUnread( accounts.filter((account) => account.isConnected).map((account) => account.id), unreadByAccount @@ -467,8 +483,10 @@ export function AccountSwitcher({ {toUnicodeEmail(text.title)} - {account.isDefault && ( - + {account.isDefault && accounts.length > 1 && ( + + + )} @@ -477,21 +495,16 @@ export function AccountSwitcher({ {toUnicodeEmail(text.subtitle)}

)} - {/* Server and connection state: Mountain View keeps the line - only for an account in trouble. */} -
- {account.hasError ? ( - - ) : ( - - )} - - {(() => { try { return toUnicodeDomain(new URL(account.serverUrl).hostname); } catch { return account.serverUrl; } })()} - -
+ {/* The server line: only for an account in trouble, or + when two accounts have the same address. */} + {(account.hasError || sharesAddress(account)) && ( +
+ {account.hasError && } + + {(() => { try { return toUnicodeDomain(new URL(account.serverUrl).hostname); } catch { return account.serverUrl; } })()} + +
+ )} {isDraggable && ( @@ -633,6 +646,20 @@ export function AccountSwitcher({ )} + {!mvPopover && ( +
= getMaxAccounts() && "border-t border-border")}> + +
+ )} + {/* Accessibility and help links the operator set (lib/help-links.ts). */} {!mvPopover && ( ({ + ...(await importOriginal()), + SettingsSection: ({ children }: { children: React.ReactNode }) =>
{children}
, +})); + +const mailbox = (id: string, name: string, role?: string) => + ({ id, name, role, sortOrder: 0, totalEmails: 0, unreadEmails: 0, isShared: false, myRights: {} } as unknown as Mailbox); + +const initial = { + account: useAccountStore.getState(), + email: useEmailStore.getState(), + policy: usePolicyStore.getState(), + settings: useSettingsStore.getState(), +}; + +beforeEach(() => { + useAccountStore.setState({ + accounts: [ + { id: 'a', email: 'a@example.org', displayName: 'A', isConnected: true }, + { id: 'b', email: 'b@example.org', displayName: 'B', isConnected: true }, + ], + activeAccountId: 'a', + } as never); + useEmailStore.setState({ + mailboxes: [mailbox('sent', 'Sent Items', 'sent'), mailbox('junk', 'Junk Mail', 'junk'), mailbox('work', 'Work')], + } as never); + usePolicyStore.setState({ + isSettingLocked: () => false, + isSettingHidden: () => false, + isFeatureEnabled: () => true, + } as never); + useSettingsStore.setState({ enableUnifiedMailbox: true, enableCrossAllView: true, allMailFolderIds: {} }); +}); + +afterEach(() => { + useAccountStore.setState(initial.account, true); + useEmailStore.setState(initial.email, true); + usePolicyStore.setState(initial.policy, true); + useSettingsStore.setState(initial.settings, true); +}); + +describe('the All mail folder list', () => { + it('names role folders as the sidebar does', () => { + render(); + expect(screen.getByText('mailboxes.sent')).toBeInTheDocument(); + expect(screen.getByText('mailboxes.spam')).toBeInTheDocument(); + expect(screen.getByText('Work')).toBeInTheDocument(); + expect(screen.queryByText('Sent Items')).toBeNull(); + expect(screen.queryByText('Junk Mail')).toBeNull(); + }); +}); diff --git a/components/settings/__tests__/filter-settings-apply-existing.test.tsx b/components/settings/__tests__/filter-settings-apply-existing.test.tsx new file mode 100644 index 000000000..86767a787 --- /dev/null +++ b/components/settings/__tests__/filter-settings-apply-existing.test.tsx @@ -0,0 +1,144 @@ +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import React from 'react'; +import type { FilterRule, SieveCapabilities } from '@/lib/jmap/sieve-types'; +import type { Mailbox } from '@/lib/jmap/types'; +import { useAuthStore } from '@/stores/auth-store'; +import { useEmailStore } from '@/stores/email-store'; +import { useFilterStore } from '@/stores/filter-store'; +import { useSettingsStore } from '@/stores/settings-store'; + +// settings-13 (usability pass 2026-11-04): a rule made in Settings only sees +// new mail, so after Save the page offers to apply it to the Inbox; the raw +// Sieve editor is an advanced tool. + +const toast = vi.hoisted(() => ({ error: vi.fn(), success: vi.fn(), info: vi.fn(), progress: vi.fn(), dismiss: vi.fn() })); +vi.mock('@/stores/toast-store', () => ({ toast })); + +const target = vi.hoisted(() => ({ value: null as unknown })); +vi.mock('@/lib/filters/quick-rule-target', async (importOriginal) => ({ + ...(await importOriginal()), + resolveMailboxRuleTarget: () => target.value, +})); + +const { FilterSettings } = await import('../filter-settings'); + +const CAPABILITIES: SieveCapabilities = { + implementation: 'Stalwart', + maxSizeScript: 102400, + sieveExtensions: ['fileinto', 'mailbox', 'mailboxid', 'imap4flags'], + notificationMethods: [], + externalLists: [], + maxNumberRedirects: 1, +}; + +const inbox = { + id: 'inbox', name: 'Inbox', role: 'inbox', sortOrder: 0, totalEmails: 2, unreadEmails: 0, totalThreads: 2, + unreadThreads: 0, myRights: {}, isSubscribed: true, isShared: false, +} as unknown as Mailbox; + +let queryEmailFields: ReturnType; +let client: Record; + +const initial = { + auth: useAuthStore.getState(), + email: useEmailStore.getState(), + filter: useFilterStore.getState(), + settings: useSettingsStore.getState(), +}; + +beforeEach(() => { + Object.values(toast).forEach((fn) => fn.mockClear()); + queryEmailFields = vi.fn(async () => [ + { id: 'e1', mailboxIds: { inbox: true }, keywords: {}, from: [{ email: 'news@example.org' }], 'header:From:asAddresses:all': [[{ email: 'news@example.org' }]] }, + { id: 'e2', mailboxIds: { inbox: true }, keywords: {}, from: [{ email: 'bob@example.net' }], 'header:From:asAddresses:all': [[{ email: 'bob@example.net' }]] }, + ]); + client = { + updateSieveScript: vi.fn(async () => {}), + getSieveAccountId: () => 'primary', + queryEmailFields, + }; + target.value = { + client, clientAccountId: null, key: 'k', accountId: 'primary', sieveAccountId: 'primary', + shared: false, supportsSieve: true, mailboxes: [inbox], + }; + useAuthStore.setState({ client: client as never }); + useEmailStore.setState({ mailboxes: [inbox], fetchMailboxes: vi.fn(async () => {}) as never }); + useSettingsStore.setState({ showAdvancedSettings: false }); +}); + +afterEach(() => { + useAuthStore.setState(initial.auth, true); + useEmailStore.setState(initial.email, true); + useFilterStore.setState(initial.filter, true); + useSettingsStore.setState(initial.settings, true); +}); + +function showSettings(rules: FilterRule[] = [], extra: Record = {}) { + useFilterStore.setState({ + rules, + isSupported: true, + isLoading: false, + isOpaque: false, + activeScriptId: 'script-1', + selectedAccountId: 'primary', + sieveCapabilities: CAPABILITIES, + selectAccount: vi.fn(async () => {}), + ...extra, + }); + render(); +} + +async function createRule(from: string, action: string) { + fireEvent.click(screen.getByText('add_rule')); + fireEvent.change(screen.getByLabelText('rule_name'), { target: { value: 'News' } }); + fireEvent.change(screen.getByLabelText('condition_value'), { target: { value: from } }); + fireEvent.change(screen.getAllByLabelText('actions')[0], { target: { value: action } }); + fireEvent.click(screen.getByText('save')); +} + +describe('a new rule in Settings › Filters', () => { + it('offers to apply it to the messages already in the Inbox', async () => { + showSettings(); + await createRule('news@example.org', 'star'); + await waitFor(() => expect(toast.success).toHaveBeenCalled()); + const [, options] = toast.success.mock.calls.at(-1)!; + expect(options.action.label).toBe('apply_to_existing'); + expect(queryEmailFields).toHaveBeenCalled(); + }); + + it('says nothing more when no message in the Inbox matches', async () => { + showSettings(); + await createRule('nobody@example.com', 'star'); + await waitFor(() => expect(queryEmailFields).toHaveBeenCalled()); + await new Promise((r) => setTimeout(r, 0)); + expect(toast.success).not.toHaveBeenCalled(); + }); + + it('is not offered for a rule that can only act on arriving mail', async () => { + showSettings(); + await createRule('news@example.org', 'discard'); + await waitFor(() => expect(client.updateSieveScript).toHaveBeenCalled()); + await new Promise((r) => setTimeout(r, 0)); + expect(queryEmailFields).not.toHaveBeenCalled(); + expect(toast.success).not.toHaveBeenCalled(); + }); +}); + +describe('the raw Sieve editor button', () => { + it('is hidden while the advanced settings are off', () => { + showSettings(); + expect(screen.queryByText('raw_editor')).toBeNull(); + }); + + it('shows with the advanced settings on', () => { + useSettingsStore.setState({ showAdvancedSettings: true }); + showSettings(); + expect(screen.getByText('raw_editor')).toBeInTheDocument(); + }); + + it('stays for a script only the raw editor can change', () => { + showSettings([], { isOpaque: true, rawScript: 'keep;' }); + expect(screen.getByText('raw_editor')).toBeInTheDocument(); + }); +}); diff --git a/components/settings/__tests__/filter-settings-focus.test.tsx b/components/settings/__tests__/filter-settings-focus.test.tsx index ebe473313..1c8b5fb9d 100644 --- a/components/settings/__tests__/filter-settings-focus.test.tsx +++ b/components/settings/__tests__/filter-settings-focus.test.tsx @@ -5,6 +5,7 @@ import type { SieveCapabilities } from '@/lib/jmap/sieve-types'; import { useAuthStore } from '@/stores/auth-store'; import { useEmailStore } from '@/stores/email-store'; import { useFilterStore } from '@/stores/filter-store'; +import { useSettingsStore } from '@/stores/settings-store'; import { FilterSettings } from '../filter-settings'; // The real settings page and its dialogs, against what happens in the @@ -27,6 +28,7 @@ const initial = { auth: useAuthStore.getState(), email: useEmailStore.getState(), filter: useFilterStore.getState(), + settings: useSettingsStore.getState(), }; beforeEach(() => { @@ -49,6 +51,7 @@ afterEach(() => { useAuthStore.setState(initial.auth, true); useEmailStore.setState(initial.email, true); useFilterStore.setState(initial.filter, true); + useSettingsStore.setState(initial.settings, true); }); function typeNewRule() { @@ -75,6 +78,8 @@ describe('typing in a dialog on the filter page while things happen in the backg }); it('keeps the focus in the Sieve editor through the connection check', () => { + // The raw editor is an advanced tool (settings-13). + useSettingsStore.setState({ showAdvancedSettings: true }); render(); fireEvent.click(screen.getByText('raw_editor')); const script = screen.getByLabelText('script_content'); @@ -92,6 +97,7 @@ describe('typing in a dialog on the filter page while things happen in the backg }); it('keeps the Sieve editor and what was typed through a reload of the filters', () => { + useSettingsStore.setState({ showAdvancedSettings: true }); render(); fireEvent.click(screen.getByText('raw_editor')); fireEvent.change(screen.getByLabelText('script_content'), { target: { value: 'keep;' } }); diff --git a/components/settings/__tests__/folder-settings-bulk-move.test.tsx b/components/settings/__tests__/folder-settings-bulk-move.test.tsx index b90ce5d83..a4a83b401 100644 --- a/components/settings/__tests__/folder-settings-bulk-move.test.tsx +++ b/components/settings/__tests__/folder-settings-bulk-move.test.tsx @@ -84,7 +84,8 @@ describe('FolderSettings bulk move (#1173)', () => { fireEvent.click(checkboxFor('A3'), { shiftKey: true }); expect(['A1', 'A2', 'A3'].map(isTicked)).toEqual([true, true, true]); - expect(['Inbox', 'A4', 'Old mailbox'].map(isTicked)).toEqual([false, false, false]); + // The Inbox row carries the sidebar's name (mailboxes.inbox under the key-echo mock). + expect(['mailboxes.inbox', 'A4', 'Old mailbox'].map(isTicked)).toEqual([false, false, false]); expect(screen.getByText('selected_count')).toBeTruthy(); }); diff --git a/components/settings/__tests__/folder-settings-role-label.test.tsx b/components/settings/__tests__/folder-settings-role-label.test.tsx index 5931912b2..4880cf8c5 100644 --- a/components/settings/__tests__/folder-settings-role-label.test.tsx +++ b/components/settings/__tests__/folder-settings-role-label.test.tsx @@ -5,8 +5,9 @@ import { useEmailStore } from '@/stores/email-store'; import { useAuthStore } from '@/stores/auth-store'; import type { Mailbox } from '@/lib/jmap/types'; -// #495: Stalwart's Scheduled mailbox carries role "scheduled"; the folder list -// renders `role_` and the key must exist (see translations.test.ts). +// Folders with a role are named as in the sidebar (settings-9, 2026-11-04): +// the server's "Sent Items" or "Junk Mail" never shows, and no second chip +// repeats the role next to the name. vi.mock('../settings-section', async (importOriginal) => ({ ...(await importOriginal()), @@ -39,21 +40,51 @@ function makeMailbox(overrides: Partial): Mailbox { } as Mailbox; } -describe('FolderSettings role label for the Scheduled mailbox (#495)', () => { +describe('FolderSettings names role folders as the sidebar does', () => { beforeEach(() => { useAuthStore.setState({ client: null } as never); useEmailStore.setState({ mailboxes: [ makeMailbox({ id: 'inbox', name: 'Inbox', role: 'inbox' }), - makeMailbox({ id: 'sched', name: 'Scheduled', role: 'scheduled' as never }), + makeMailbox({ id: 'sent', name: 'Sent Items', role: 'sent', sortOrder: 1 }), + makeMailbox({ id: 'junk', name: 'Junk Mail', role: 'junk', sortOrder: 2 }), + makeMailbox({ id: 'trash', name: 'Deleted Items', role: 'trash', sortOrder: 3 }), + makeMailbox({ id: 'sched', name: 'Scheduled', role: 'scheduled' as never, sortOrder: 4 }), + makeMailbox({ id: 'work', name: 'Work', sortOrder: 5 }), ], fetchMailboxes: vi.fn(), } as never); }); - it('renders the role badge through the role_scheduled key', () => { + it('shows the sidebar name for role folders, never the server name', () => { render(); - // The test i18n mock echoes the key, so the badge shows the key itself. - expect(screen.getByText('role_scheduled')).toBeInTheDocument(); + // The test i18n mock echoes the key: the sidebar's mailboxes. keys. + const rowName = (text: string) => screen.getAllByText(text).find(el => el.tagName === 'SPAN'); + expect(rowName('mailboxes.sent')).toBeTruthy(); + expect(rowName('mailboxes.spam')).toBeTruthy(); + expect(rowName('mailboxes.trash')).toBeTruthy(); + for (const serverName of ['Sent Items', 'Junk Mail', 'Deleted Items']) { + expect(screen.queryByText(serverName)).toBeNull(); + expect(screen.queryByTitle(serverName)).toBeNull(); + } + // Folders the sidebar has no name for keep their own. + expect(rowName('Work')).toBeTruthy(); + expect(rowName('Scheduled')).toBeTruthy(); + }); + + it('draws no role chip next to the name', () => { + render(); + // role_ is only the label of its row in Standard folder roles. + for (const role of ['inbox', 'sent', 'junk', 'trash']) { + expect(screen.getAllByText(`role_${role}`)).toHaveLength(1); + } + expect(screen.queryByText('role_scheduled')).toBeNull(); + }); + + it('offers the sidebar names in the move-to and role pickers', () => { + render(); + const options = Array.from(document.querySelectorAll('option')).map(o => o.textContent); + expect(options).not.toContain('Sent Items'); + expect(options).not.toContain('Junk Mail'); }); }); diff --git a/components/settings/__tests__/keyword-settings.test.tsx b/components/settings/__tests__/keyword-settings.test.tsx index ccf7be677..a3dc8a6df 100644 --- a/components/settings/__tests__/keyword-settings.test.tsx +++ b/components/settings/__tests__/keyword-settings.test.tsx @@ -23,10 +23,21 @@ describe('KeywordSettings', () => { }); }); - it('shows keyword JMAP id', () => { + // settings-28: the stored keyword is no line of its own; with the advanced + // settings on it is the tag's tooltip. + it('does not show the stored keyword under each tag', () => { render(); - expect(screen.getByText('$label:red')).toBeInTheDocument(); - expect(screen.getByText('$label:blue')).toBeInTheDocument(); + expect(screen.queryByText('$label:red')).toBeNull(); + expect(screen.queryByTitle('$label:red')).toBeNull(); + }); + + it('shows the stored keyword as a tooltip with the advanced settings on', () => { + useSettingsStore.setState({ showAdvancedSettings: true }); + render(); + expect(screen.queryByText('$label:red')).toBeNull(); + expect(screen.getByTitle('$label:red')).toBeInTheDocument(); + expect(screen.getByTitle('$label:blue')).toBeInTheDocument(); + useSettingsStore.setState({ showAdvancedSettings: false }); }); // MO-06: the tag order was drag-only. @@ -180,7 +191,7 @@ describe('KeywordSettings', () => { render(); expect(screen.getByText('Work/Clients')).toBeInTheDocument(); - expect(screen.getByText('$label:work/clients')).toBeInTheDocument(); + expect(screen.queryByText('$label:work/clients')).toBeNull(); }); it('rejects a path that would exceed the 128-byte keyword limit of Stalwart', () => { diff --git a/components/settings/filter-settings.tsx b/components/settings/filter-settings.tsx index c1edb9d78..c862271e4 100644 --- a/components/settings/filter-settings.tsx +++ b/components/settings/filter-settings.tsx @@ -24,6 +24,10 @@ import { supportsRegex } from "@/lib/sieve/regex"; import { formatDateTime } from "@/lib/utils"; import { useVacationStore } from "@/stores/vacation-store"; import { useManagedAccountStore } from "@/stores/managed-account-store"; +import { offerRuleOnFolder } from "@/lib/filters/quick-rule-flow"; +import { resolveMailboxRuleTarget } from "@/lib/filters/quick-rule-target"; +import { retroactiveSupport } from "@/lib/filters/retroactive"; +import { localizeMailboxName } from "@/lib/mailbox-label"; import { Plus, GripVertical, @@ -209,6 +213,12 @@ export function VisualRuleSummary({ rule }: { rule: FilterRule }) { export function FilterSettings() { const t = useTranslations("settings.filters"); const tNotifications = useTranslations("notifications"); + const tMenu = useTranslations("context_menu"); + const tSidebar = useTranslations("sidebar"); + const tFolders = useTranslations("uxs_folders"); + // The raw script editor is for people who asked for the advanced settings, + // unless the script is one only it can edit. + const showAdvanced = useSettingsStore((s) => s.showAdvancedSettings); const { client } = useAuthStore(); const storeMailboxes = useEmailStore((s) => s.mailboxes); const fetchMailboxes = useEmailStore((s) => s.fetchMailboxes); @@ -391,10 +401,27 @@ export function FilterSettings() { } catch { useFilterStore.setState({ rules: previousRules }); toast.error(tNotifications("filters_save_failed")); + return; + } + // A new rule only sees new mail. Offer to sort what is already in the + // Inbox, as Gmail's "Also apply to matching conversations" does. + if (!editingRule && isPrimaryAccount && retroactiveSupport(rule).ok) { + const inbox = storeMailboxes.find((m) => m.role === "inbox" && !m.isShared); + const target = inbox ? resolveMailboxRuleTarget(inbox) : null; + if (inbox && target && target.client === client) { + const folder = localizeMailboxName(inbox.role, inbox.name, (k) => tSidebar(`mailboxes.${k}`)); + void offerRuleOnFolder( + target, + rule, + inbox.id, + { notifications: tNotifications, filters: t, menu: tMenu }, + (count) => tFolders("apply_to_existing", { count, folder }), + ); + } } } }, - [editingRule, updateRule, addRule, rules, client, saveFilters, tNotifications] + [editingRule, updateRule, addRule, rules, client, saveFilters, tNotifications, isPrimaryAccount, storeMailboxes, tSidebar, t, tMenu, tFolders] ); const handleSaveSieve = useCallback( @@ -752,16 +779,20 @@ export function FilterSettings() { {t("add_rule")} )} - - + {(showAdvanced || isOpaque) && ( + <> + + + + )}
diff --git a/components/settings/folder-settings.tsx b/components/settings/folder-settings.tsx index 19aa2a4d5..5ec6b278c 100644 --- a/components/settings/folder-settings.tsx +++ b/components/settings/folder-settings.tsx @@ -40,6 +40,7 @@ import { } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { isFolderCountMode } from '@/lib/folder-counts'; +import { localizeMailboxName } from '@/lib/mailbox-label'; // Must match the per-level indentation used in the row styles below: dragging // a folder this many pixels right/left targets one nesting level deeper/higher. @@ -164,6 +165,11 @@ function SortableFolderRow({ id, title, children }: { id: string; title: string; export function FolderSettings() { const t = useTranslations('settings.folders'); + const tSidebar = useTranslations('sidebar'); + // Folders with a role read as in the sidebar (Sent, Spam, Trash), never + // by the server's name ("Sent Items", "Junk Mail"). + const folderName = (mb: { role?: string | null; name: string }): string => + localizeMailboxName(mb.role, mb.name, (k) => tSidebar(`mailboxes.${k}`)); const { client } = useAuthStore(); const { mailboxes, fetchMailboxes, createMailbox, renameMailbox, deleteMailbox, setMailboxRole, reorderMailboxes, moveMailbox, moveMailboxes } = useEmailStore(); @@ -304,15 +310,15 @@ export function FolderSettings() { }; moveRoots.forEach(blockSubtree); - const getFolderPath = (mb: { parentId?: string; name: string }): string => { - const parts = [mb.name]; + const getFolderPath = (mb: { parentId?: string; name: string; role?: string | null }): string => { + const parts = [folderName(mb)]; const seen = new Set(); let parentId = mb.parentId; while (parentId && !seen.has(parentId)) { seen.add(parentId); const parent = ownMailboxes.find(p => p.id === parentId); if (!parent) break; - parts.unshift(parent.name); + parts.unshift(folderName(parent)); parentId = parent.parentId; } return parts.join(' / '); @@ -515,7 +521,8 @@ export function FolderSettings() { const renderCreateInline = (parentId: string | null, depth: number) => { if (!isCreating || creatingParentId !== parentId) return null; - const parentName = parentId ? ownMailboxes.find(m => m.id === parentId)?.name : null; + const parent = parentId ? ownMailboxes.find(m => m.id === parentId) : undefined; + const parentName = parent ? folderName(parent) : null; return (
{ if (e.shiftKey) e.preventDefault(); }} @@ -658,7 +665,7 @@ export function FolderSettings() { {/* Expand/collapse toggle for folders with children */} {hasChildren ? ( toggleExpanded(mb.id)} className="h-5 w-5 text-muted-foreground flex-shrink-0" @@ -707,12 +714,7 @@ export function FolderSettings() { /> )}
- {mb.name} - {mb.role && ( - - {t(`role_${mb.role}`)} - - )} + {folderName(mb)} {mb.unreadEmails > 0 && ( {mb.unreadEmails} @@ -722,7 +724,7 @@ export function FolderSettings() { {/* Phone: the counter and the row actions don't fit next to the name, so they sit behind a ⋮ (right-click opens it too). */} openContextMenuFrom(e.currentTarget, mb, 'end')} > @@ -732,7 +734,7 @@ export function FolderSettings() { onVisibilityChange(value as KeywordVisibility)} @@ -709,7 +700,6 @@ export function KeywordSettings() { key={keyword.id} keyword={keyword} keywords={emailKeywords} - nestedTags={nestedTags} onEdit={() => { setEditingId(keyword.id); setIsAdding(false); diff --git a/components/settings/layout-settings.tsx b/components/settings/layout-settings.tsx index 30703d018..e18e79c14 100644 --- a/components/settings/layout-settings.tsx +++ b/components/settings/layout-settings.tsx @@ -10,6 +10,7 @@ import { usePolicyStore } from '@/stores/policy-store'; import { useAccountStore } from '@/stores/account-store'; import { useEmailStore } from '@/stores/email-store'; import { hiddenSharedMailIds, setSharedMailAccountHidden } from '@/lib/shared-mail-visibility'; +import { localizeMailboxName } from '@/lib/mailbox-label'; const MAIL_LAYOUT_PREVIEW_ROWS = [ { sender: 'Alice', subject: 'Quarterly roadmap', preview: 'The draft is ready for review.', selected: false }, @@ -238,6 +239,7 @@ export function SidebarSection() { */ export function MultipleAccountsSection() { const t = useTranslations('settings.appearance'); + const tSidebar = useTranslations('sidebar'); const { enableUnifiedMailbox, includeGroupInUnified, unifiedCrossAccount, allMailFolderIds, enableCrossUnreadView, enableCrossStarredView, enableCrossAllView, tintListRowsByAccount, showAccountDot, updateSetting } = useSettingsStore(); const { isSettingLocked, isSettingHidden, isFeatureEnabled } = usePolicyStore(); const accounts = useAccountStore(s => s.accounts); @@ -391,7 +393,9 @@ export function MultipleAccountsSection() { {checked && } - {mb.name} + + {localizeMailboxName(mb.role, mb.name, (k) => tSidebar(`mailboxes.${k}`))} + ); })} diff --git a/lib/filters/quick-rule-flow.ts b/lib/filters/quick-rule-flow.ts index d49a85eba..9628f48b8 100644 --- a/lib/filters/quick-rule-flow.ts +++ b/lib/filters/quick-rule-flow.ts @@ -213,6 +213,30 @@ async function applyAndReport( } } +/** + * After a rule was saved in Settings › Filters: when it would change mail + * already in `mailboxId` (the Inbox), say how much and offer to apply it + * there. Nothing is said when it would change nothing or can't be checked. + */ +export async function offerRuleOnFolder( + target: QuickRuleTarget, + rule: FilterRule, + mailboxId: string, + text: QuickRuleText, + applyLabel: (count: number) => string, +): Promise { + const plan = await planSafely(target, rule, mailboxId); + if (plan.ids.length === 0) return; + toast.success(text.notifications('rule_created'), { + message: rule.name, + duration: SAVED_TOAST_MS, + action: { + label: applyLabel(plan.ids.length), + onClick: () => { void applyAndReport(target, rule, mailboxId, text); }, + }, + }); +} + /** * Run a saved rule over the mail already in a folder, from the folder's * context menu. A progress toast stays up while the server is asked which diff --git a/lib/settings-search.ts b/lib/settings-search.ts index 4ebfbc3ee..ce7423bc1 100644 --- a/lib/settings-search.ts +++ b/lib/settings-search.ts @@ -266,7 +266,7 @@ export const tabSearchEntries: Record = { filters: [ { label: 'settings.filters.title' }, { label: 'settings.filters.add_rule' }, - { label: 'settings.filters.raw_editor' }, + { label: 'settings.filters.raw_editor', advanced: true }, ], organize: [ { label: 'settings.folders.folder_list' }, diff --git a/locales/ar/common.json b/locales/ar/common.json index 9e5f3ec89..1c60cd9cc 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -123,7 +123,7 @@ "sign_out_of": "تسجيل الخروج من {account}", "sign_out_all": "تسجيل الخروج من جميع الحسابات", "add_account": "إضافة حساب", - "set_as_default": "تعيين كافتراضي", + "set_as_default": "فتح هذا الحساب عند البدء", "switch_account": "تبديل الحساب", "contacts": "جهات الاتصال", "calendar": "التقويم", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "وسوم البريد", - "description": "عرّف وسومًا لتنظيم رسائلك بالألوان. تُخزَّن هذه ككلمات مفتاحية JMAP على الخادم.", + "description": "أنشئ وسومًا لترتيب رسائلك. تُحفظ الوسوم مع رسائلك على الخادم.", "add_keyword": "إضافة وسم", "label_field": "الاسم المعروض", "label_placeholder": "مثال: عمل، شخصي، عاجل", @@ -1729,8 +1729,8 @@ "hide": "إخفاء" }, "unrecognized": { - "title": "استعادة الوسوم من الخادم", - "description": "تُخزَّن أسماء الوسوم وألوانها في هذا المتصفح، لكن الوسوم نفسها موجودة على رسائلك ككلمات مفتاحية JMAP. افحص بريدك بحثًا عن كلمات مفتاحية لا يفسّرها أي وسم هنا، ثم أعِد إضافتها.", + "title": "البحث عن وسوم على رسائلك غير موجودة هنا", + "description": "يحفظ هذا المتصفح أسماء وسومك وألوانها. أما الوسوم نفسها فتُحفظ على رسائلك. ابحث في بريدك عن الوسوم المفقودة هنا وأضفها من جديد.", "scan": "البحث عن الوسوم", "rescan": "إعادة الفحص", "scanning": "جارٍ الفحص… {scanned} من {total} رسالة", @@ -2212,8 +2212,8 @@ "title": "الحسابات المسجَّلة", "description": "اسحب لإعادة ترتيب ظهور الحسابات في قائمة الحسابات المنسدلة", "active": "الحساب النشط حاليًا", - "default_badge": "الحساب الافتراضي", - "set_default": "تعيين كافتراضي", + "default_badge": "يُفتح عند البدء", + "set_default": "فتح هذا الحساب عند البدء", "switch_to": "التبديل إلى هذا الحساب", "move_up": "تحريك لأعلى", "move_down": "تحريك لأسفل", @@ -2809,7 +2809,7 @@ "add_action": "إضافة إجراء", "remove_condition": "إزالة الشرط", "remove_action": "إزالة الإجراء", - "stop_processing": "إيقاف معالجة القواعد التالية", + "stop_processing": "عدم تطبيق القواعد التالية", "include_spam": "نقل الرسائل المصنفة كرسائل مزعجة أيضًا", "attachment_type_placeholder": "مثال: pdf, doc, jpg", "value_placeholder_multi": "القيمة (عدة قيم مفصولة بفواصل)", @@ -2851,7 +2851,7 @@ "discard": "التجاهل (حذف صامت)", "reject": "الرفض برسالة", "keep": "الإبقاء في الوارد", - "stop": "إيقاف المعالجة" + "stop": "عدم تطبيق القواعد التالية" }, "move_to_folder": "اختر المجلد", "copy_to_folder": "اختر المجلد", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "لا يزال المجلد \"{name}\" يحتوي على {count, plural, one {رسالة واحدة} other {# رسائل}}. هل تريد حذف المجلد وكل رسائله؟ لا يمكن التراجع عن هذا.", "delete_with_contents_confirm": "حذف المجلد والرسائل" }, + "uxs_folders": { + "manage_accounts": "إدارة الحسابات…", + "apply_to_existing": "{count, plural, one {تطبيق على رسالة موجودة واحدة في {folder}} other {تطبيق على # رسائل موجودة في {folder}}}" + }, "shortcuts": { "title": "اختصارات لوحة المفاتيح", "tip": "اضغط ؟ في أي وقت لإظهار هذه المساعدة", diff --git a/locales/ca/common.json b/locales/ca/common.json index 9799a9869..7d161d6e2 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Tanca la sessió de {account}", "sign_out_all": "Tanca la sessió de tots els comptes", "add_account": "Afegeix un compte", - "set_as_default": "Estableix com a predeterminat", + "set_as_default": "Obre aquest compte en iniciar", "switch_account": "Canvia de compte", "contacts": "Contactes", "calendar": "Calendari", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "Etiquetes de correu", - "description": "Definiu etiquetes per organitzar els correus amb colors. Es desen com a paraules clau JMAP al servidor.", + "description": "Creeu etiquetes per ordenar els missatges. Les etiquetes es desen amb els missatges al servidor.", "add_keyword": "Afegeix una etiqueta", "label_field": "Nom mostrat", "label_placeholder": "p. ex. Feina, Personal, Urgent", @@ -1729,8 +1729,8 @@ "hide": "Amaga" }, "unrecognized": { - "title": "Recupera etiquetes del servidor", - "description": "Els noms i els colors de les etiquetes es desen en aquest navegador, però les etiquetes viuen als vostres correus com a paraules clau JMAP. Analitzeu el correu per trobar paraules clau que cap etiqueta d'aquí no expliqui i torneu-les a afegir.", + "title": "Cerca etiquetes dels missatges que falten aquí", + "description": "Aquest navegador desa els noms i els colors de les etiquetes. Les etiquetes es desen als missatges. Cerqueu al correu les etiquetes que falten aquí i torneu-les a afegir.", "scan": "Cerca etiquetes", "rescan": "Torna a cercar", "scanning": "S'està analitzant… {scanned} de {total} correus", @@ -2212,8 +2212,8 @@ "title": "Comptes amb la sessió iniciada", "description": "Arrossegueu per reordenar com apareixen els comptes al menú desplegable", "active": "Compte actiu actualment", - "default_badge": "Compte predeterminat", - "set_default": "Estableix com a predeterminat", + "default_badge": "S'obre en iniciar", + "set_default": "Obre aquest compte en iniciar", "switch_to": "Canvia a aquest compte", "move_up": "Mou amunt", "move_down": "Mou avall", @@ -2801,15 +2801,15 @@ "not_supported": "El servidor de correu no admet filtres de correu.", "rule_name": "Nom de la regla", "rule_name_placeholder": "p. ex., Ordena els butlletins", - "match_all": "Coincideix amb TOTES les condicions", - "match_any": "Coincideix amb QUALSEVOL condició", + "match_all": "Coincideix amb totes les condicions", + "match_any": "Coincideix amb qualsevol condició", "conditions": "Condicions", "add_condition": "Afegeix una condició", "actions": "Accions", "add_action": "Afegeix una acció", "remove_condition": "Treu la condició", "remove_action": "Treu l'acció", - "stop_processing": "Atura el processament de les regles següents", + "stop_processing": "No apliquis les regles següents", "include_spam": "Mou també els missatges marcats com a correu brossa", "attachment_type_placeholder": "p. ex. pdf, doc, jpg", "value_placeholder_multi": "Valor (múltiples separats per comes)", @@ -2851,7 +2851,7 @@ "discard": "Descarta (suprimeix silenciosament)", "reject": "Rebutja amb un missatge", "keep": "Mantén a la safata d'entrada", - "stop": "Atura el processament" + "stop": "No apliquis les regles següents" }, "move_to_folder": "Selecciona una carpeta", "copy_to_folder": "Selecciona una carpeta", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "La carpeta \"{name}\" encara conté {count, plural, one {1 missatge} other {# missatges}}. Vols suprimir la carpeta i tots els seus missatges? No es pot desfer.", "delete_with_contents_confirm": "Suprimeix la carpeta i els missatges" }, + "uxs_folders": { + "manage_accounts": "Gestiona els comptes…", + "apply_to_existing": "{count, plural, one {Aplica a # missatge existent de {folder}} other {Aplica a # missatges existents de {folder}}}" + }, "shortcuts": { "title": "Dreceres de teclat", "tip": "Premeu ? en qualsevol moment per mostrar aquesta ajuda", diff --git a/locales/cs/common.json b/locales/cs/common.json index 7360b6bce..8b05aaa7d 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Odhlásit se z {account}", "sign_out_all": "Odhlásit se ze všech účtů", "add_account": "Přidat účet", - "set_as_default": "Nastavit jako výchozí", + "set_as_default": "Otevírat tento účet při spuštění", "switch_account": "Přepnout účet", "contacts": "Kontakty", "calendar": "Kalendář", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "E-mailové štítky", - "description": "Definujte štítky pro organizaci e-mailů pomocí barev. Ukládají se jako klíčová slova JMAP na serveru.", + "description": "Vytvořte štítky pro třídění zpráv. Štítky se ukládají se zprávami na serveru.", "add_keyword": "Přidat štítek", "label_field": "Zobrazovaný název", "label_placeholder": "např. Práce, Osobní, Naliehavé", @@ -1726,8 +1726,8 @@ "hide": "Skrýt" }, "unrecognized": { - "title": "Obnovit štítky ze serveru", - "description": "Názvy a barvy štítků jsou uloženy v tomto prohlížeči, ale samotné štítky jsou na vašich zprávách jako klíčová slova JMAP. Prohledejte poštu na klíčová slova, která zde žádný štítek nepokrývá, a přidejte je zpět.", + "title": "Najít štítky na zprávách, které tu chybí", + "description": "Tento prohlížeč ukládá názvy a barvy štítků. Samotné štítky jsou uložené na zprávách. Vyhledejte v poště štítky, které tu chybí, a znovu je přidejte.", "scan": "Vyhledat štítky", "rescan": "Hledat znovu", "scanning": "Prohledávání… {scanned} z {total} zpráv", @@ -2209,8 +2209,8 @@ "title": "Přihlášené účty", "description": "Přetažením změňte pořadí účtů v rozbalovacím seznamu", "active": "Aktuálně aktivní účet", - "default_badge": "Výchozí účet", - "set_default": "Nastavit jako výchozí", + "default_badge": "Otevírá se při spuštění", + "set_default": "Otevírat tento účet při spuštění", "switch_to": "Přepnout na tento účet", "move_up": "Posunout nahoru", "move_down": "Posunout dolů", @@ -2794,15 +2794,15 @@ "not_supported": "Váš poštovní server nepodporuje e-mailové filtry.", "rule_name": "Název pravidla", "rule_name_placeholder": "např. Třídit newslettery", - "match_all": "Splňuje VŠECHNY podmínky", - "match_any": "Splňuje JAKOUKOLI podmínku", + "match_all": "Splňuje všechny podmínky", + "match_any": "Splňuje kteroukoli podmínku", "conditions": "Podmínky", "add_condition": "Přidat podmínku", "actions": "Akce", "add_action": "Přidat akci", "remove_condition": "Odebrat podmínku", "remove_action": "Odebrat akci", - "stop_processing": "Zastavit zpracování dalších pravidel", + "stop_processing": "Další pravidla nepoužívat", "include_spam": "Přesouvat i zprávy označené jako spam", "attachment_type_placeholder": "např. pdf, doc, jpg", "value_placeholder_multi": "Hodnota (více oddělených čárkami)", @@ -2844,7 +2844,7 @@ "discard": "Zahodit (tiše odstranit)", "reject": "Odmítnout se zprávou", "keep": "Ponechat v Doručených", - "stop": "Zastavit zpracování" + "stop": "Další pravidla nepoužívat" }, "move_to_folder": "Vyberte složku", "copy_to_folder": "Vyberte složku", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Složka „{name}“ stále obsahuje {count, plural, one {1 zprávu} few {# zprávy} other {# zpráv}}. Smazat složku i všechny její zprávy? Tuto akci nelze vrátit.", "delete_with_contents_confirm": "Smazat složku i zprávy" }, + "uxs_folders": { + "manage_accounts": "Spravovat účty…", + "apply_to_existing": "{count, plural, one {Použít na # existující zprávu ve složce {folder}} few {Použít na # existující zprávy ve složce {folder}} many {Použít na # existující zprávy ve složce {folder}} other {Použít na # existujících zpráv ve složce {folder}}}" + }, "shortcuts": { "title": "Klávesové zkratky", "tip": "Kdykoli stiskněte ? pro zobrazení této nápovědy", diff --git a/locales/da/common.json b/locales/da/common.json index d05f78db2..1146e3c53 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Log ud af {account}", "sign_out_all": "Log ud af alle konti", "add_account": "Tilføj konto", - "set_as_default": "Angiv som standard", + "set_as_default": "Åbn denne konto ved start", "switch_account": "Skift konto", "contacts": "Kontakter", "calendar": "Kalender", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "E-mail-tags", - "description": "Definér tags til at organisere dine e-mails med farver. Disse gemmes som JMAP-nøgleord på serveren.", + "description": "Lav tags til at sortere dine beskeder. Taggene gemmes sammen med beskederne på serveren.", "add_keyword": "Tilføj tag", "label_field": "Visningsnavn", "label_placeholder": "f.eks. Arbejde, Privat, Vigtigt", @@ -1729,8 +1729,8 @@ "hide": "Skjul" }, "unrecognized": { - "title": "Gendan tags fra serveren", - "description": "Tagnavne og farver gemmes i denne browser, men selve taggene ligger på dine e-mails som JMAP-nøgleord. Scan din post for nøgleord, som intet tag her forklarer, og tilføj dem igen.", + "title": "Find tags på dine beskeder, som mangler her", + "description": "Denne browser gemmer navne og farver på dine tags. Selve taggene er gemt på dine beskeder. Søg i din post efter tags, der mangler her, og tilføj dem igen.", "scan": "Søg efter tags", "rescan": "Scan igen", "scanning": "Scanner… {scanned} af {total} e-mails", @@ -2212,8 +2212,8 @@ "title": "Indloggede konti", "description": "Træk for at ændre rækkefølgen af konti i kontomenuen", "active": "Aktuelt aktiv konto", - "default_badge": "Standardkonto", - "set_default": "Indstil som standard", + "default_badge": "Åbnes ved start", + "set_default": "Åbn denne konto ved start", "switch_to": "Skift til denne konto", "move_up": "Flyt op", "move_down": "Flyt ned", @@ -2797,7 +2797,7 @@ "not_supported": "Din mailserver understøtter ikke e-mail-filtre.", "rule_name": "Regelnavn", "rule_name_placeholder": "f.eks. Sorter nyhedsbreve", - "match_all": "Match ALLE betingelser", + "match_all": "Match alle betingelser", "match_any": "Match en af betingelserne", "conditions": "Betingelser", "add_condition": "Tilføj betingelse", @@ -2805,7 +2805,7 @@ "add_action": "Tilføj handling", "remove_condition": "Fjern betingelse", "remove_action": "Fjern handling", - "stop_processing": "Stop behandling af efterfølgende regler", + "stop_processing": "Anvend ikke senere regler", "include_spam": "Flyt også beskeder, der er markeret som spam", "attachment_type_placeholder": "f.eks. pdf, doc, jpg", "value_placeholder_multi": "Værdi (flere adskilt med komma)", @@ -2847,7 +2847,7 @@ "discard": "Kassér (slet stille)", "reject": "Afvis med besked", "keep": "Behold i indbakke", - "stop": "Stop behandling" + "stop": "Anvend ikke senere regler" }, "move_to_folder": "Vælg mappe", "copy_to_folder": "Vælg mappe", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Mappen \"{name}\" indeholder stadig {count, plural, one {1 besked} other {# beskeder}}. Slet mappen og alle dens beskeder? Dette kan ikke fortrydes.", "delete_with_contents_confirm": "Slet mappe og beskeder" }, + "uxs_folders": { + "manage_accounts": "Administrer konti…", + "apply_to_existing": "{count, plural, one {Anvend på # eksisterende besked i {folder}} other {Anvend på # eksisterende beskeder i {folder}}}" + }, "shortcuts": { "title": "Tastaturgenveje", "tip": "Tryk ? når som helst for at se denne hjælp", diff --git a/locales/de/common.json b/locales/de/common.json index aa647bd67..b925ba57d 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Von {account} abmelden", "sign_out_all": "Von allen Konten abmelden", "add_account": "Konto hinzufügen", - "set_as_default": "Als Standard festlegen", + "set_as_default": "Dieses Konto beim Start öffnen", "switch_account": "Konto wechseln", "contacts": "Kontakte", "calendar": "Kalender", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "E-Mail-Labels", - "description": "Labels definieren, um Ihre E-Mails mit Farben zu organisieren. Diese werden als JMAP-Keywords auf dem Server gespeichert.", + "description": "Erstellen Sie Labels, um Ihre E-Mails zu ordnen. Die Labels werden mit Ihren E-Mails auf dem Server gespeichert.", "add_keyword": "Label hinzufügen", "label_field": "Anzeigename", "label_placeholder": "z.B. Arbeit, Privat, Dringend", @@ -1726,8 +1726,8 @@ "hide": "Ausblenden" }, "unrecognized": { - "title": "Labels vom Server wiederherstellen", - "description": "Labelnamen und -farben werden in diesem Browser gespeichert, die Labels selbst liegen jedoch als JMAP-Keywords auf Ihren E-Mails. Durchsuchen Sie Ihre E-Mails nach Keywords, zu denen es hier kein Label gibt, und fügen Sie diese wieder hinzu.", + "title": "Labels an Ihren E-Mails finden, die hier fehlen", + "description": "Dieser Browser speichert die Namen und Farben Ihrer Labels. Die Labels selbst sind an Ihren E-Mails gespeichert. Suchen Sie in Ihren E-Mails nach Labels, die hier fehlen, und fügen Sie sie wieder hinzu.", "scan": "Nach Labels suchen", "rescan": "Erneut suchen", "scanning": "Suche läuft… {scanned} von {total} E-Mails", @@ -2209,8 +2209,8 @@ "title": "Angemeldete Konten", "description": "Ziehen Sie zum Sortieren, wie Konten im Kontomenü erscheinen", "active": "Aktuell aktives Konto", - "default_badge": "Standardkonto", - "set_default": "Als Standard festlegen", + "default_badge": "Wird beim Start geöffnet", + "set_default": "Dieses Konto beim Start öffnen", "switch_to": "Zu diesem Konto wechseln", "move_up": "Nach oben", "move_down": "Nach unten", @@ -2794,15 +2794,15 @@ "not_supported": "Ihr Mailserver unterstützt keine E-Mail-Filter.", "rule_name": "Regelname", "rule_name_placeholder": "z.B. Newsletter sortieren", - "match_all": "ALLE Bedingungen erfüllen", - "match_any": "EINE beliebige Bedingung erfüllen", + "match_all": "Alle Bedingungen müssen zutreffen", + "match_any": "Eine Bedingung genügt", "conditions": "Bedingungen", "add_condition": "Bedingung hinzufügen", "actions": "Aktionen", "add_action": "Aktion hinzufügen", "remove_condition": "Bedingung entfernen", "remove_action": "Aktion entfernen", - "stop_processing": "Verarbeitung nachfolgender Regeln stoppen", + "stop_processing": "Spätere Regeln nicht anwenden", "include_spam": "Auch als Spam markierte Nachrichten verschieben", "attachment_type_placeholder": "z.B. pdf, doc, jpg", "value_placeholder_multi": "Wert (mehrere mit Komma trennen)", @@ -2844,7 +2844,7 @@ "discard": "Lautlos löschen", "reject": "Mit Nachricht ablehnen", "keep": "Im Posteingang behalten", - "stop": "Verarbeitung stoppen" + "stop": "Spätere Regeln nicht anwenden" }, "move_to_folder": "Ordner auswählen", "copy_to_folder": "Ordner auswählen", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Der Ordner „{name}“ enthält noch {count, plural, one {1 Nachricht} other {# Nachrichten}}. Ordner samt allen Nachrichten löschen? Das kann nicht rückgängig gemacht werden.", "delete_with_contents_confirm": "Ordner und Nachrichten löschen" }, + "uxs_folders": { + "manage_accounts": "Konten verwalten…", + "apply_to_existing": "{count, plural, one {Auf # vorhandene Nachricht in {folder} anwenden} other {Auf # vorhandene Nachrichten in {folder} anwenden}}" + }, "shortcuts": { "title": "Tastaturkürzel", "tip": "Drücken Sie ? jederzeit, um diese Hilfe anzuzeigen", diff --git a/locales/en/common.json b/locales/en/common.json index d66eb9de8..83ca34f40 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Sign out of {account}", "sign_out_all": "Sign out of all accounts", "add_account": "Add account", - "set_as_default": "Set as default", + "set_as_default": "Open this account at start", "switch_account": "Switch account", "contacts": "Contacts", "calendar": "Calendar", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "Email tags", - "description": "Define tags to organize your emails. These are stored as JMAP keywords on the server.", + "description": "Make tags to sort your messages. The tags are saved with your messages on the server.", "add_keyword": "New tag", "label_field": "Display name", "label_placeholder": "e.g. Work, Personal, Urgent", @@ -1729,8 +1729,8 @@ "hide": "Hide" }, "unrecognized": { - "title": "Recover tags from the server", - "description": "Tag names and colors are stored in this browser, but the tags themselves live on your messages as JMAP keywords. Scan your mail for keywords no tag here explains, then add them back.", + "title": "Find tags on your messages that are missing here", + "description": "This browser keeps the names and colors of your tags. The tags themselves are saved on your messages. Search your mail for tags that are missing here and add them again.", "scan": "Scan for tags", "rescan": "Scan again", "scanning": "Scanning… {scanned} of {total} messages", @@ -2212,8 +2212,8 @@ "title": "Logged-in accounts", "description": "Drag to reorder how accounts appear in the account dropdown", "active": "Currently active account", - "default_badge": "Default account", - "set_default": "Set as default", + "default_badge": "Opens at start", + "set_default": "Open this account at start", "switch_to": "Switch to this account", "move_up": "Move up", "move_down": "Move down", @@ -2801,15 +2801,15 @@ "not_supported": "Your mail server does not support email filters.", "rule_name": "Rule name", "rule_name_placeholder": "e.g., Sort newsletters", - "match_all": "Match ALL conditions", - "match_any": "Match ANY condition", + "match_all": "Match all conditions", + "match_any": "Match any condition", "conditions": "Conditions", "add_condition": "Add condition", "actions": "Actions", "add_action": "Add action", "remove_condition": "Remove condition", "remove_action": "Remove action", - "stop_processing": "Stop processing subsequent rules", + "stop_processing": "Don't apply later rules", "include_spam": "Also move messages marked as spam", "attachment_type_placeholder": "e.g. pdf, doc, jpg", "value_placeholder_multi": "Value (multiple separated by commas)", @@ -2851,7 +2851,7 @@ "discard": "Discard (delete silently)", "reject": "Reject with message", "keep": "Keep in inbox", - "stop": "Stop processing" + "stop": "Don't apply later rules" }, "move_to_folder": "Select folder", "copy_to_folder": "Select folder", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "The folder \"{name}\" still contains {count, plural, one {1 message} other {# messages}}. Delete the folder and all of its messages? This cannot be undone.", "delete_with_contents_confirm": "Delete folder and messages" }, + "uxs_folders": { + "manage_accounts": "Manage accounts…", + "apply_to_existing": "{count, plural, one {Apply to # existing message in {folder}} other {Apply to # existing messages in {folder}}}" + }, "shortcuts": { "title": "Keyboard shortcuts", "tip": "Press ? anytime to show this help", diff --git a/locales/es/common.json b/locales/es/common.json index 14aacebe4..1b0e40808 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Cerrar sesión de {account}", "sign_out_all": "Cerrar sesión de todas las cuentas", "add_account": "Agregar cuenta", - "set_as_default": "Establecer como predeterminada", + "set_as_default": "Abrir esta cuenta al iniciar", "switch_account": "Cambiar cuenta", "contacts": "Contactos", "calendar": "Calendario", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Etiquetas de correo", - "description": "Define etiquetas para organizar tus correos con colores. Se almacenan como palabras clave JMAP en el servidor.", + "description": "Crea etiquetas para ordenar tus mensajes. Las etiquetas se guardan con tus mensajes en el servidor.", "add_keyword": "Añadir etiqueta", "label_field": "Nombre para mostrar", "label_placeholder": "ej. Trabajo, Personal, Urgente", @@ -1726,8 +1726,8 @@ "hide": "Ocultar" }, "unrecognized": { - "title": "Recuperar etiquetas del servidor", - "description": "Los nombres y colores de las etiquetas se guardan en este navegador, pero las etiquetas en sí están en tus correos como palabras clave JMAP. Analiza tu correo en busca de palabras clave que ninguna etiqueta de aquí explique y vuelve a añadirlas.", + "title": "Buscar etiquetas de tus mensajes que faltan aquí", + "description": "Este navegador guarda los nombres y colores de tus etiquetas. Las etiquetas en sí se guardan en tus mensajes. Busca en tu correo las etiquetas que faltan aquí y vuelve a añadirlas.", "scan": "Buscar etiquetas", "rescan": "Analizar de nuevo", "scanning": "Analizando… {scanned} de {total} correos", @@ -2209,8 +2209,8 @@ "title": "Cuentas conectadas", "description": "Arrastra para reordenar cómo aparecen las cuentas en el menú desplegable", "active": "Cuenta actualmente activa", - "default_badge": "Cuenta predeterminada", - "set_default": "Establecer como predeterminada", + "default_badge": "Se abre al iniciar", + "set_default": "Abrir esta cuenta al iniciar", "switch_to": "Cambiar a esta cuenta", "move_up": "Mover arriba", "move_down": "Mover abajo", @@ -2794,15 +2794,15 @@ "not_supported": "Su servidor de correo no admite filtros de correo electrónico.", "rule_name": "Nombre de la regla", "rule_name_placeholder": "ej. Ordenar boletines", - "match_all": "Coincidir con TODAS las condiciones", - "match_any": "Coincidir con CUALQUIER condición", + "match_all": "Coincidir con todas las condiciones", + "match_any": "Coincidir con cualquier condición", "conditions": "Condiciones", "add_condition": "Agregar condición", "actions": "Acciones", "add_action": "Agregar acción", "remove_condition": "Quitar condición", "remove_action": "Quitar acción", - "stop_processing": "Detener el procesamiento de reglas posteriores", + "stop_processing": "No aplicar las reglas siguientes", "include_spam": "Mover también los mensajes marcados como spam", "attachment_type_placeholder": "p. ej. pdf, doc, jpg", "value_placeholder_multi": "Valor (varios separados por comas)", @@ -2844,7 +2844,7 @@ "discard": "Descartar (eliminar silenciosamente)", "reject": "Rechazar con mensaje", "keep": "Mantener en la bandeja de entrada", - "stop": "Detener procesamiento" + "stop": "No aplicar las reglas siguientes" }, "move_to_folder": "Seleccionar carpeta", "copy_to_folder": "Seleccionar carpeta", @@ -3787,6 +3787,10 @@ "create": "Crear", "rename_confirm": "Renombrar" }, + "uxs_folders": { + "manage_accounts": "Gestionar cuentas…", + "apply_to_existing": "{count, plural, one {Aplicar a # mensaje existente en {folder}} other {Aplicar a # mensajes existentes en {folder}}}" + }, "shortcuts": { "title": "Atajos de teclado", "tip": "Presione ? en cualquier momento para mostrar esta ayuda", diff --git a/locales/et/common.json b/locales/et/common.json index 4ae578066..cb54518f5 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Logi välja kontolt {account}", "sign_out_all": "Logi välja kõigist kontodest", "add_account": "Lisa konto", - "set_as_default": "Määra vaikimisi", + "set_as_default": "Ava see konto käivitamisel", "switch_account": "Vaheta kontot", "contacts": "Kontaktid", "calendar": "Kalender", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "E-kirjade sildid", - "description": "Määra sildid, et oma e-kirju korrastada. Need salvestatakse serveris JMAP võtmesõnadena.", + "description": "Loo sildid, et kirju sorteerida. Sildid salvestatakse koos kirjadega serveris.", "add_keyword": "Lisa silt", "label_field": "Kuvatav nimi", "label_placeholder": "nt Töö, Isiklik, Kiireloomuline", @@ -1729,8 +1729,8 @@ "hide": "Peida" }, "unrecognized": { - "title": "Taasta sildid serverist", - "description": "Siltide nimed ja värvid salvestatakse selles brauseris, kuid sildid ise elavad su kirjadel JMAP võtmesõnadena. Skanni oma posti võtmesõnade suhtes, mida ükski siinne silt ei seleta, ja lisa need tagasi.", + "title": "Leia kirjadelt sildid, mis siit puuduvad", + "description": "See brauser hoiab sinu siltide nimesid ja värve. Sildid ise on salvestatud kirjadele. Otsi oma postist silte, mis siit puuduvad, ja lisa need uuesti.", "scan": "Skanni silte", "rescan": "Skanni uuesti", "scanning": "Skannimine… {scanned} / {total} kirja", @@ -2212,8 +2212,8 @@ "title": "Sisselogitud kontod", "description": "Lohista, et muuta kontode järjekorda konto rippmenüüs", "active": "Praegu aktiivne konto", - "default_badge": "Vaikimisi konto", - "set_default": "Määra vaikimisi kontoks", + "default_badge": "Avaneb käivitamisel", + "set_default": "Ava see konto käivitamisel", "switch_to": "Lülitu sellele kontole", "move_up": "Liiguta üles", "move_down": "Liiguta alla", @@ -2801,15 +2801,15 @@ "not_supported": "Sinu meiliserver ei toeta e-posti filtreid.", "rule_name": "Reegli nimi", "rule_name_placeholder": "nt uudiskirjade sortimine", - "match_all": "Vasta KÕIGILE tingimustele", - "match_any": "Vasta MISTAHES tingimusele", + "match_all": "Vasta kõigile tingimustele", + "match_any": "Vasta mõnele tingimusele", "conditions": "Tingimused", "add_condition": "Lisa tingimus", "actions": "Tegevused", "add_action": "Lisa tegevus", "remove_condition": "Eemalda tingimus", "remove_action": "Eemalda toiming", - "stop_processing": "Peata järgmiste reeglite töötlemine", + "stop_processing": "Ära rakenda järgmisi reegleid", "include_spam": "Liiguta ka rämpspostiks märgitud kirjad", "attachment_type_placeholder": "nt pdf, doc, jpg", "value_placeholder_multi": "Väärtus (mitu, komadega eraldatud)", @@ -2851,7 +2851,7 @@ "discard": "Hülga (kustuta vaikselt)", "reject": "Lükka tagasi sõnumiga", "keep": "Jäta sisendkasti", - "stop": "Peata töötlemine" + "stop": "Ära rakenda järgmisi reegleid" }, "move_to_folder": "Vali kaust", "copy_to_folder": "Vali kaust", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Kaust \"{name}\" sisaldab veel {count, plural, one {1 sõnum} other {# sõnumit}}. Kas kustutada kaust ja kõik selle sõnumid? Seda ei saa tagasi võtta.", "delete_with_contents_confirm": "Kustuta kaust ja sõnumid" }, + "uxs_folders": { + "manage_accounts": "Halda kontosid…", + "apply_to_existing": "{count, plural, one {Rakenda # olemasolevale kirjale kaustas {folder}} other {Rakenda # olemasolevale kirjale kaustas {folder}}}" + }, "shortcuts": { "title": "Kiirklahvid", "tip": "Selle abi nägemiseks vajuta igal ajal ?", diff --git a/locales/fa/common.json b/locales/fa/common.json index 00b8848dd..9fad55e05 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -123,7 +123,7 @@ "sign_out_of": "خروج از {account}", "sign_out_all": "خروج از همه حساب‌ها", "add_account": "افزودن حساب", - "set_as_default": "تنظیم به عنوان پیش‌فرض", + "set_as_default": "باز کردن این حساب هنگام شروع", "switch_account": "تعویض حساب", "contacts": "مخاطبین", "calendar": "تقویم", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "برچسب‌های ایمیل", - "description": "برچسب‌ها را برای سازمان‌دهی ایمیل‌ها تعریف کنید", + "description": "برچسب بسازید تا پیام‌هایتان را مرتب کنید. برچسب‌ها همراه پیام‌ها روی سرور ذخیره می‌شوند.", "add_keyword": "افزودن برچسب", "label_field": "نام نمایشی", "label_placeholder": "مثال: کاری، شخصی، فوری", @@ -1729,8 +1729,8 @@ "hide": "پنهان کردن" }, "unrecognized": { - "title": "بازیابی برچسب‌ها از سرور", - "description": "نام و رنگ برچسب‌ها در این مرورگر ذخیره می‌شود، اما خود برچسب‌ها به‌صورت کلیدواژه‌های JMAP روی ایمیل‌های شما قرار دارند. ایمیل‌ها را برای یافتن کلیدواژه‌هایی که هیچ برچسبی اینجا ندارند بررسی کنید و آن‌ها را دوباره اضافه کنید.", + "title": "یافتن برچسب‌هایی روی پیام‌ها که اینجا نیستند", + "description": "این مرورگر نام و رنگ برچسب‌های شما را نگه می‌دارد. خود برچسب‌ها روی پیام‌هایتان ذخیره می‌شوند. در ایمیل‌هایتان دنبال برچسب‌هایی بگردید که اینجا نیستند و دوباره آن‌ها را اضافه کنید.", "scan": "جست‌وجوی برچسب‌ها", "rescan": "بررسی دوباره", "scanning": "در حال بررسی… {scanned} از {total} ایمیل", @@ -2212,8 +2212,8 @@ "title": "حساب‌های وارد شده", "description": "ترتیب‌دهی حساب‌ها", "active": "حساب فعال", - "default_badge": "پیش‌فرض", - "set_default": "تنظیم پیش‌فرض", + "default_badge": "هنگام شروع باز می‌شود", + "set_default": "باز کردن این حساب هنگام شروع", "switch_to": "تعویض", "move_up": "بالا", "move_down": "پایین", @@ -2809,7 +2809,7 @@ "add_action": "افزودن عملیات", "remove_condition": "حذف شرط", "remove_action": "حذف کنش", - "stop_processing": "توقف پردازش قوانین بعدی", + "stop_processing": "قوانین بعدی اعمال نشوند", "include_spam": "پیام‌های علامت‌خورده به‌عنوان هرزنامه هم منتقل شوند", "attachment_type_placeholder": "مثال: pdf, doc, jpg", "value_placeholder_multi": "مقدار (چندتا با کاما جدا شوند)", @@ -2851,7 +2851,7 @@ "discard": "دور انداختن (حذف بی‌صدا)", "reject": "رد با پیام", "keep": "نگه داشتن در صندوق ورودی", - "stop": "توقف پردازش" + "stop": "قوانین بعدی اعمال نشوند" }, "move_to_folder": "انتخاب پوشه", "copy_to_folder": "انتخاب پوشه", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "پوشه «{name}» هنوز شامل {count, plural, one {۱ پیام} other {# پیام}} است. پوشه و همه پیام‌های آن حذف شود؟ این عمل قابل بازگشت نیست.", "delete_with_contents_confirm": "حذف پوشه و پیام‌ها" }, + "uxs_folders": { + "manage_accounts": "مدیریت حساب‌ها…", + "apply_to_existing": "{count, plural, one {اعمال روی # پیام موجود در {folder}} other {اعمال روی # پیام موجود در {folder}}}" + }, "shortcuts": { "title": "میانبرهای صفحه کلید", "tip": "هر زمان کلید ? را فشار دهید", diff --git a/locales/fr/common.json b/locales/fr/common.json index 0c30d3e05..302e0dcab 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Se déconnecter de {account}", "sign_out_all": "Se déconnecter de tous les comptes", "add_account": "Ajouter un compte", - "set_as_default": "Définir par défaut", + "set_as_default": "Ouvrir ce compte au démarrage", "switch_account": "Changer de compte", "contacts": "Contacts", "calendar": "Calendrier", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Étiquettes de messagerie", - "description": "Définissez des étiquettes pour organiser vos e-mails avec des couleurs. Elles sont stockées sous forme de mots-clés JMAP sur le serveur.", + "description": "Créez des étiquettes pour trier vos messages. Les étiquettes sont enregistrées avec vos messages sur le serveur.", "add_keyword": "Ajouter une étiquette", "label_field": "Nom d'affichage", "label_placeholder": "ex. Travail, Personnel, Urgent", @@ -1726,8 +1726,8 @@ "hide": "Masquer" }, "unrecognized": { - "title": "Récupérer les étiquettes depuis le serveur", - "description": "Les noms et couleurs des étiquettes sont enregistrés dans ce navigateur, mais les étiquettes elles-mêmes se trouvent sur vos e-mails sous forme de mots-clés JMAP. Analysez votre messagerie à la recherche de mots-clés qu'aucune étiquette ici n'explique, puis rajoutez-les.", + "title": "Trouver les étiquettes de vos messages qui manquent ici", + "description": "Ce navigateur garde les noms et les couleurs de vos étiquettes. Les étiquettes elles-mêmes sont enregistrées sur vos messages. Cherchez dans votre messagerie les étiquettes qui manquent ici et ajoutez-les à nouveau.", "scan": "Rechercher des étiquettes", "rescan": "Analyser à nouveau", "scanning": "Analyse en cours… {scanned} e-mails sur {total}", @@ -2209,8 +2209,8 @@ "title": "Comptes connectés", "description": "Faites glisser pour réorganiser l'affichage des comptes dans le menu déroulant", "active": "Compte actuellement actif", - "default_badge": "Compte par défaut", - "set_default": "Définir par défaut", + "default_badge": "S'ouvre au démarrage", + "set_default": "Ouvrir ce compte au démarrage", "switch_to": "Basculer vers ce compte", "move_up": "Déplacer vers le haut", "move_down": "Déplacer vers le bas", @@ -2794,15 +2794,15 @@ "not_supported": "Votre serveur de messagerie ne prend pas en charge les filtres de courrier.", "rule_name": "Nom de la règle", "rule_name_placeholder": "ex. Trier les newsletters", - "match_all": "Correspondre à TOUTES les conditions", - "match_any": "Correspondre à N'IMPORTE QUELLE condition", + "match_all": "Correspondre à toutes les conditions", + "match_any": "Correspondre à l'une des conditions", "conditions": "Conditions", "add_condition": "Ajouter une condition", "actions": "Actions", "add_action": "Ajouter une action", "remove_condition": "Retirer la condition", "remove_action": "Retirer l'action", - "stop_processing": "Arrêter le traitement des règles suivantes", + "stop_processing": "Ne pas appliquer les règles suivantes", "include_spam": "Déplacer aussi les messages marqués comme spam", "attachment_type_placeholder": "p. ex. pdf, doc, jpg", "value_placeholder_multi": "Valeur (plusieurs séparées par des virgules)", @@ -2844,7 +2844,7 @@ "discard": "Supprimer silencieusement", "reject": "Rejeter avec un message", "keep": "Conserver dans la boîte de réception", - "stop": "Arrêter le traitement" + "stop": "Ne pas appliquer les règles suivantes" }, "move_to_folder": "Sélectionner le dossier", "copy_to_folder": "Sélectionner le dossier", @@ -3787,6 +3787,10 @@ "create": "Créer", "rename_confirm": "Renommer" }, + "uxs_folders": { + "manage_accounts": "Gérer les comptes…", + "apply_to_existing": "{count, plural, one {Appliquer à # message existant dans {folder}} other {Appliquer à # messages existants dans {folder}}}" + }, "shortcuts": { "title": "Raccourcis clavier", "tip": "Appuyez sur ? à tout moment pour afficher cette aide", diff --git a/locales/he/common.json b/locales/he/common.json index f96c860da..4ab4748be 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -123,7 +123,7 @@ "sign_out_of": "צא מ-{account}", "sign_out_all": "צא מכל החשבונות", "add_account": "הוסף חשבון", - "set_as_default": "הגדר כברירת מחדל", + "set_as_default": "לפתוח את החשבון הזה בהפעלה", "switch_account": "החלף חשבון", "contacts": "אנשי קשר", "calendar": "לוּחַ שָׁנָה", @@ -1634,7 +1634,7 @@ }, "keywords": { "title": "מילות מפתח בדוא\"ל", - "description": "הגדר מילות מפתח (תוויות/תגים) כדי לארגן את המיילים שלך עם צבעים. אלו מאוחסנות כמילות מפתח JMAP בשרת.", + "description": "צרו תגים כדי למיין את ההודעות. התגים נשמרים עם ההודעות בשרת.", "add_keyword": "הוסף מילת מפתח", "label_field": "שם תצוגה", "label_placeholder": "למשל עבודה, אישי, דחוף", @@ -1669,8 +1669,8 @@ "hide": "הסתר" }, "unrecognized": { - "title": "שחזור תגים מהשרת", - "description": "שמות התגים והצבעים שלהם נשמרים בדפדפן הזה, אך התגים עצמם מאוחסנים על ההודעות שלך כמילות מפתח JMAP. סרוק את הדואר שלך לאיתור מילות מפתח שאין להן תג כאן, והוסף אותן בחזרה.", + "title": "חיפוש תגים בהודעות שחסרים כאן", + "description": "הדפדפן הזה שומר את השמות והצבעים של התגים. התגים עצמם שמורים על ההודעות. חפשו בדואר תגים שחסרים כאן והוסיפו אותם שוב.", "scan": "סריקה לאיתור תגים", "rescan": "סרוק שוב", "scanning": "סורק… {scanned} מתוך {total} הודעות", @@ -2152,8 +2152,8 @@ "title": "חשבונות מחוברים", "description": "גרור לסדר כיצד חשבונות מופיעים בתפריט הנפתח", "active": "חשבון פעיל כרגע", - "default_badge": "חשבון ברירת מחדל", - "set_default": "הגדר כברירת מחדל", + "default_badge": "נפתח בהפעלה", + "set_default": "לפתוח את החשבון הזה בהפעלה", "switch_to": "עבור לחשבון זה", "move_up": "עבור למעלה", "move_down": "עבור למטה", @@ -2694,15 +2694,15 @@ "not_supported": "שרת הדואר שלך אינו תומך במסנני דואר אלקטרוני.", "rule_name": "שם כלל", "rule_name_placeholder": "למשל, מיון ניוזלטרים", - "match_all": "התאם את כל התנאים", - "match_any": "התאם לכל תנאי", + "match_all": "התאמה לכל התנאים", + "match_any": "התאמה לתנאי כלשהו", "conditions": "תנאים", "add_condition": "הוסף מצב", "actions": "פעולות", "add_action": "הוסף פעולה", "remove_condition": "הסרת תנאי", "remove_action": "הסרת פעולה", - "stop_processing": "הפסק לעבד את הכללים הבאים", + "stop_processing": "לא להחיל כללים מאוחרים יותר", "include_spam": "להעביר גם הודעות שסומנו כדואר זבל", "condition_fields": { "from": "מ", @@ -2741,7 +2741,7 @@ "discard": "מחק (מחק בשקט)", "reject": "דחה עם הודעה", "keep": "שמור בתיבת הדואר הנכנס", - "stop": "תפסיק לעבד" + "stop": "לא להחיל כללים מאוחרים יותר" }, "move_to_folder": "בחר תיקייה", "copy_to_folder": "בחר תיקייה", @@ -5442,6 +5442,10 @@ "delete_with_contents_message": "התיקייה \"{name}\" עדיין מכילה {count, plural, one {הודעה אחת} other {# הודעות}}. למחוק את התיקייה ואת כל ההודעות שבה? לא ניתן לבטל פעולה זו.", "delete_with_contents_confirm": "מחיקת התיקייה וההודעות" }, + "uxs_folders": { + "manage_accounts": "ניהול חשבונות…", + "apply_to_existing": "{count, plural, one {החלה על הודעה קיימת אחת בתיקייה {folder}} other {החלה על # הודעות קיימות בתיקייה {folder}}}" + }, "calendar_event_notifications": { "someone": "מישהו", "invited": "{name} הזמין/ה אותך ל\"{title}\"", diff --git a/locales/hu/common.json b/locales/hu/common.json index 442837f52..956a64aa1 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Kijelentkezés erről: {account}", "sign_out_all": "Kijelentkezés minden fiókból", "add_account": "Fiók hozzáadása", - "set_as_default": "Beállítás alapértelmezettként", + "set_as_default": "Ez a fiók nyíljon meg induláskor", "switch_account": "Fiók váltása", "contacts": "Névjegyek", "calendar": "Naptár", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "E-mail címkék", - "description": "Címkék definiálása az e-mailek színekkel történő rendezéséhez. Ezek JMAP kulcsszavakként tárolódnak a szerveren.", + "description": "Hozzon létre címkéket az üzenetei rendezéséhez. A címkék az üzenetekkel együtt a szerveren tárolódnak.", "add_keyword": "Címke hozzáadása", "label_field": "Megjelenített név", "label_placeholder": "pl. Munka, Személyes, Sürgős", @@ -1729,8 +1729,8 @@ "hide": "Elrejtés" }, "unrecognized": { - "title": "Címkék helyreállítása a szerverről", - "description": "A címkék nevét és színét ez a böngésző tárolja, maguk a címkék azonban JMAP kulcsszavakként az e-mailjein vannak. Keresse meg a levelein azokat a kulcsszavakat, amelyekhez itt nem tartozik címke, majd adja hozzá őket újra.", + "title": "Az üzeneteken lévő, innen hiányzó címkék keresése", + "description": "Ez a böngésző tárolja a címkék nevét és színét. Maguk a címkék az üzeneteken vannak. Keresse meg a leveleiben az innen hiányzó címkéket, és adja hozzá őket újra.", "scan": "Címkék keresése", "rescan": "Keresés újra", "scanning": "Keresés… {total} e-mailből {scanned}", @@ -2212,8 +2212,8 @@ "title": "Bejelentkezett fiókok", "description": "Húzd át a sorrend módosításához, hogy a fiókok hogyan jelenjenek meg a fiók legördülőben", "active": "Jelenleg aktív fiók", - "default_badge": "Alapértelmezett fiók", - "set_default": "Beállítás alapértelmezettként", + "default_badge": "Induláskor nyílik meg", + "set_default": "Ez a fiók nyíljon meg induláskor", "switch_to": "Váltás erre a fiókra", "move_up": "Mozgatás fel", "move_down": "Mozgatás le", @@ -2797,15 +2797,15 @@ "not_supported": "A levelezőszervered nem támogatja az e-mail szűrőket.", "rule_name": "Szabály neve", "rule_name_placeholder": "pl. Hírlevelek rendezése", - "match_all": "MINDEN feltétel teljesüljön", - "match_any": "BÁRMELYIK feltétel teljesüljön", + "match_all": "Minden feltétel teljesüljön", + "match_any": "Bármelyik feltétel teljesüljön", "conditions": "Feltételek", "add_condition": "Feltétel hozzáadása", "actions": "Műveletek", "add_action": "Művelet hozzáadása", "remove_condition": "Feltétel eltávolítása", "remove_action": "Művelet eltávolítása", - "stop_processing": "További szabályok feldolgozásának leállítása", + "stop_processing": "A későbbi szabályok ne fussanak", "include_spam": "A levélszemétnek jelölt üzenetek áthelyezése is", "attachment_type_placeholder": "pl. pdf, doc, jpg", "value_placeholder_multi": "Érték (több érték vesszővel elválasztva)", @@ -2847,7 +2847,7 @@ "discard": "Elvetés (csendes törlés)", "reject": "Elutasítás üzenettel", "keep": "Megtartás a beérkezőben", - "stop": "Feldolgozás leállítása" + "stop": "A későbbi szabályok ne fussanak" }, "move_to_folder": "Mappa kiválasztása", "copy_to_folder": "Mappa kiválasztása", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "A(z) „{name}” mappa még {count, plural, one {1 üzenetet} other {# üzenetet}} tartalmaz. Törlöd a mappát az összes üzenetével együtt? Ez nem vonható vissza.", "delete_with_contents_confirm": "Mappa és üzenetek törlése" }, + "uxs_folders": { + "manage_accounts": "Fiókok kezelése…", + "apply_to_existing": "{count, plural, one {Alkalmazás # meglévő üzenetre itt: {folder}} other {Alkalmazás # meglévő üzenetre itt: {folder}}}" + }, "shortcuts": { "title": "Billentyűparancsok", "tip": "Nyomd meg a ? gombot bármikor a súgó megjelenítéséhez", diff --git a/locales/it/common.json b/locales/it/common.json index 8c9878d14..619d36baf 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Disconnetti da {account}", "sign_out_all": "Disconnetti da tutti gli account", "add_account": "Aggiungi account", - "set_as_default": "Imposta come predefinito", + "set_as_default": "Apri questo account all'avvio", "switch_account": "Cambia account", "contacts": "Contatti", "calendar": "Calendario", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Etichette e-mail", - "description": "Definisci etichette per organizzare le tue e-mail con i colori. Vengono archiviate come parole chiave JMAP sul server.", + "description": "Crea etichette per ordinare i messaggi. Le etichette vengono salvate con i messaggi sul server.", "add_keyword": "Aggiungi etichetta", "label_field": "Nome visualizzato", "label_placeholder": "es. Lavoro, Personale, Urgente", @@ -1726,8 +1726,8 @@ "hide": "Nascondi" }, "unrecognized": { - "title": "Recupera le etichette dal server", - "description": "I nomi e i colori delle etichette sono salvati in questo browser, ma le etichette vere e proprie si trovano sulle tue e-mail come parole chiave JMAP. Analizza la posta alla ricerca di parole chiave che nessuna etichetta qui spiega, poi aggiungile di nuovo.", + "title": "Trova le etichette dei messaggi che mancano qui", + "description": "Questo browser conserva i nomi e i colori delle etichette. Le etichette vere e proprie sono salvate sui messaggi. Cerca nella posta le etichette che mancano qui e aggiungile di nuovo.", "scan": "Cerca etichette", "rescan": "Analizza di nuovo", "scanning": "Analisi in corso… {scanned} di {total} e-mail", @@ -2209,8 +2209,8 @@ "title": "Account connessi", "description": "Trascina per riordinare la visualizzazione degli account nel menu a discesa", "active": "Account attualmente attivo", - "default_badge": "Account predefinito", - "set_default": "Imposta come predefinito", + "default_badge": "Si apre all'avvio", + "set_default": "Apri questo account all'avvio", "switch_to": "Passa a questo account", "move_up": "Sposta su", "move_down": "Sposta giù", @@ -2794,15 +2794,15 @@ "not_supported": "Il tuo server di posta non supporta i filtri email.", "rule_name": "Nome della regola", "rule_name_placeholder": "es. Ordina newsletter", - "match_all": "Corrispondere a TUTTE le condizioni", - "match_any": "Corrispondere a QUALSIASI condizione", + "match_all": "Corrisponde a tutte le condizioni", + "match_any": "Corrisponde a una qualsiasi condizione", "conditions": "Condizioni", "add_condition": "Aggiungi condizione", "actions": "Azioni", "add_action": "Aggiungi azione", "remove_condition": "Rimuovi condizione", "remove_action": "Rimuovi azione", - "stop_processing": "Interrompere l'elaborazione delle regole successive", + "stop_processing": "Non applicare le regole successive", "include_spam": "Sposta anche i messaggi contrassegnati come spam", "attachment_type_placeholder": "es. pdf, doc, jpg", "value_placeholder_multi": "Valore (più valori separati da virgole)", @@ -2844,7 +2844,7 @@ "discard": "Elimina silenziosamente", "reject": "Rifiuta con messaggio", "keep": "Mantieni nella posta in arrivo", - "stop": "Interrompi elaborazione" + "stop": "Non applicare le regole successive" }, "move_to_folder": "Seleziona cartella", "copy_to_folder": "Seleziona cartella", @@ -3787,6 +3787,10 @@ "create": "Crea", "rename_confirm": "Rinomina" }, + "uxs_folders": { + "manage_accounts": "Gestisci account…", + "apply_to_existing": "{count, plural, one {Applica a # messaggio esistente in {folder}} other {Applica a # messaggi esistenti in {folder}}}" + }, "shortcuts": { "title": "Scorciatoie da tastiera", "tip": "Premi ? in qualsiasi momento per mostrare questo aiuto", diff --git a/locales/ja/common.json b/locales/ja/common.json index d51c02c5c..8478f54ad 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -123,7 +123,7 @@ "sign_out_of": "{account} からサインアウト", "sign_out_all": "すべてのアカウントからサインアウト", "add_account": "アカウントを追加", - "set_as_default": "デフォルトに設定", + "set_as_default": "起動時にこのアカウントを開く", "switch_account": "アカウントを切り替え", "contacts": "連絡先", "calendar": "カレンダー", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "メールラベル", - "description": "メールをカラーで整理するためのラベルを定義します。サーバーにJMAPキーワードとして保存されます。", + "description": "ラベルを作ってメッセージを整理します。ラベルはメッセージと一緒にサーバーに保存されます。", "add_keyword": "ラベルを追加", "label_field": "表示名", "label_placeholder": "例:仕事、個人、緊急", @@ -1726,8 +1726,8 @@ "hide": "表示しない" }, "unrecognized": { - "title": "サーバーからラベルを復元", - "description": "ラベルの名前と色はこのブラウザーに保存されますが、ラベル自体はJMAPキーワードとしてメールに保存されています。ここに定義のないキーワードをメールから検索し、ラベルとして追加し直せます。", + "title": "ここにないラベルをメッセージから探す", + "description": "このブラウザーはラベルの名前と色を保存します。ラベル自体はメッセージに保存されています。ここにないラベルをメールから探して、もう一度追加します。", "scan": "ラベルを検索", "rescan": "再検索", "scanning": "検索中… {total}件中{scanned}件", @@ -2209,8 +2209,8 @@ "title": "ログイン中のアカウント", "description": "ドラッグしてアカウントメニューに表示される順序を変更", "active": "現在アクティブなアカウント", - "default_badge": "デフォルトアカウント", - "set_default": "デフォルトに設定", + "default_badge": "起動時に開きます", + "set_default": "起動時にこのアカウントを開く", "switch_to": "このアカウントに切り替え", "move_up": "上に移動", "move_down": "下に移動", @@ -2802,7 +2802,7 @@ "add_action": "アクションを追加", "remove_condition": "条件を削除", "remove_action": "操作を削除", - "stop_processing": "以降のルールの処理を停止", + "stop_processing": "以降のルールを適用しない", "include_spam": "迷惑メールと判定されたメッセージも移動する", "attachment_type_placeholder": "例: pdf, doc, jpg", "value_placeholder_multi": "値(カンマで複数指定可)", @@ -2844,7 +2844,7 @@ "discard": "サイレント削除", "reject": "メッセージ付きで拒否", "keep": "受信トレイに保持", - "stop": "処理を停止" + "stop": "以降のルールを適用しない" }, "move_to_folder": "フォルダーを選択", "copy_to_folder": "フォルダーを選択", @@ -3787,6 +3787,10 @@ "create": "作成", "rename_confirm": "名前を変更" }, + "uxs_folders": { + "manage_accounts": "アカウントを管理…", + "apply_to_existing": "{count, plural, other {{folder} の既存の # 件に適用}}" + }, "shortcuts": { "title": "キーボードショートカット", "tip": "? キーを押すといつでもこのヘルプを表示できます", diff --git a/locales/ko/common.json b/locales/ko/common.json index 6f27df1cd..902629eba 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -123,7 +123,7 @@ "sign_out_of": "{account}에서 로그아웃", "sign_out_all": "모든 계정에서 로그아웃", "add_account": "계정 추가", - "set_as_default": "기본값으로 설정", + "set_as_default": "시작할 때 이 계정 열기", "switch_account": "계정 전환", "contacts": "연락처", "calendar": "캘린더", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "이메일 태그", - "description": "색상으로 이메일을 정리하기 위한 태그를 정의합니다. 서버에 JMAP 키워드로 저장됩니다.", + "description": "태그를 만들어 메일을 정리하세요. 태그는 메일과 함께 서버에 저장돼요.", "add_keyword": "태그 추가", "label_field": "표시 이름", "label_placeholder": "예: 업무, 개인, 긴급", @@ -1726,8 +1726,8 @@ "hide": "숨기기" }, "unrecognized": { - "title": "서버에서 태그 복구", - "description": "태그 이름과 색상은 이 브라우저에 저장되지만, 태그 자체는 JMAP 키워드로 메일에 저장돼요. 여기에 정의되지 않은 키워드를 메일에서 검색해서 다시 추가할 수 있어요.", + "title": "여기에 없는 메일의 태그 찾기", + "description": "이 브라우저는 태그의 이름과 색상을 저장해요. 태그 자체는 메일에 저장돼요. 여기에 없는 태그를 메일에서 찾아 다시 추가하세요.", "scan": "태그 검색", "rescan": "다시 검색", "scanning": "검색 중… {total}개 중 {scanned}개", @@ -2209,8 +2209,8 @@ "title": "로그인된 계정", "description": "끌어서 계정 드롭다운에 표시되는 순서를 변경합니다", "active": "현재 활성 계정", - "default_badge": "기본 계정", - "set_default": "기본으로 설정", + "default_badge": "시작할 때 열림", + "set_default": "시작할 때 이 계정 열기", "switch_to": "이 계정으로 전환", "move_up": "위로 이동", "move_down": "아래로 이동", @@ -2794,15 +2794,15 @@ "not_supported": "사용 중인 메일 서버는 이메일 필터를 지원하지 않아요.", "rule_name": "규칙 이름", "rule_name_placeholder": "예: 뉴스레터 분류", - "match_all": "모든 조건 만족 (AND)", - "match_any": "조건 중 하나라도 만족 (OR)", + "match_all": "모든 조건 만족", + "match_any": "조건 중 하나라도 만족", "conditions": "조건", "add_condition": "조건 추가", "actions": "동작", "add_action": "동작 추가", "remove_condition": "조건 제거", "remove_action": "동작 제거", - "stop_processing": "이후 규칙 무시하기", + "stop_processing": "이후 규칙 적용 안 함", "include_spam": "스팸으로 표시된 메시지도 이동", "attachment_type_placeholder": "예: pdf, doc, jpg", "value_placeholder_multi": "값 (쉼표로 여러 개 구분)", @@ -2844,7 +2844,7 @@ "discard": "삭제 (조용히 지움)", "reject": "메시지와 함께 수신 거부", "keep": "받은편지함에 유지", - "stop": "더 이상 처리 안 함" + "stop": "이후 규칙 적용 안 함" }, "move_to_folder": "폴더 선택", "copy_to_folder": "폴더 선택", @@ -3787,6 +3787,10 @@ "create": "만들기", "rename_confirm": "이름 바꾸기" }, + "uxs_folders": { + "manage_accounts": "계정 관리…", + "apply_to_existing": "{count, plural, other {{folder}의 기존 메일 #개에 적용}}" + }, "shortcuts": { "title": "단축키", "tip": "언제든 ? 키를 누르면 이 도움말을 볼 수 있어요", diff --git a/locales/lv/common.json b/locales/lv/common.json index cd702e258..a082909bd 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Izrakstīties no {account}", "sign_out_all": "Izrakstīties no visiem kontiem", "add_account": "Pievienot kontu", - "set_as_default": "Iestatīt kā noklusējumu", + "set_as_default": "Atvērt šo kontu startā", "switch_account": "Mainīt kontu", "contacts": "Kontakti", "calendar": "Kalendārs", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "E-pasta tagi", - "description": "Definējiet tagus, lai organizētu e-pastus ar krāsām. Tie tiek saglabāti kā JMAP atslēgvārdi serverī.", + "description": "Izveidojiet tagus, lai kārtotu vēstules. Tagi tiek saglabāti kopā ar vēstulēm serverī.", "add_keyword": "Pievienot tagu", "label_field": "Redzamais nosaukums", "label_placeholder": "piem., Darbs, Personīgi, Steidzami", @@ -1726,8 +1726,8 @@ "hide": "Slēpt" }, "unrecognized": { - "title": "Atgūt tagus no servera", - "description": "Tagu nosaukumi un krāsas tiek glabāti šajā pārlūkā, bet paši tagi atrodas jūsu vēstulēs kā JMAP atslēgvārdi. Pārmeklējiet pastu, lai atrastu atslēgvārdus, kuriem šeit nav taga, un pievienojiet tos atpakaļ.", + "title": "Atrast vēstulēs tagus, kuru šeit trūkst", + "description": "Šis pārlūks glabā jūsu tagu nosaukumus un krāsas. Paši tagi ir saglabāti vēstulēs. Meklējiet pastā tagus, kuru šeit trūkst, un pievienojiet tos vēlreiz.", "scan": "Meklēt tagus", "rescan": "Meklēt vēlreiz", "scanning": "Notiek meklēšana… {scanned} no {total} vēstulēm", @@ -2209,8 +2209,8 @@ "title": "Pieteiktie konti", "description": "Velciet, lai mainītu kontu secību kontu izvēlnē", "active": "Pašlaik aktīvais konts", - "default_badge": "Noklusējuma konts", - "set_default": "Iestatīt kā noklusējumu", + "default_badge": "Atveras startā", + "set_default": "Atvērt šo kontu startā", "switch_to": "Pārslēgties uz šo kontu", "move_up": "Pārvietot uz augšu", "move_down": "Pārvietot uz leju", @@ -2794,15 +2794,15 @@ "not_supported": "Jūsu pasta serveris neatbalsta filtrus.", "rule_name": "Noteikuma nosaukums", "rule_name_placeholder": "piem., Ziņu izdevumu šķirošana", - "match_all": "Atbilst VISIEM nosacījumiem", - "match_any": "Atbilst JEBKURAM nosacījumam", + "match_all": "Atbilst visiem nosacījumiem", + "match_any": "Atbilst jebkuram nosacījumam", "conditions": "Nosacījumi", "add_condition": "Pievienot nosacījumu", "actions": "Darbības", "add_action": "Pievienot darbību", "remove_condition": "Noņemt nosacījumu", "remove_action": "Noņemt darbību", - "stop_processing": "Pārtraukt nākamo noteikumu apstrādi", + "stop_processing": "Nepiemērot nākamos noteikumus", "include_spam": "Pārvietot arī ziņas, kas atzīmētas kā mēstules", "attachment_type_placeholder": "piem. pdf, doc, jpg", "value_placeholder_multi": "Vērtība (vairākas atdalītas ar komatu)", @@ -2844,7 +2844,7 @@ "discard": "Dzēst (bez paziņojuma)", "reject": "Noraidīt ar ziņojumu", "keep": "Atstāt iesūtnē", - "stop": "Pārtraukt apstrādi" + "stop": "Nepiemērot nākamos noteikumus" }, "move_to_folder": "Izvēlēties mapi", "copy_to_folder": "Izvēlēties mapi", @@ -3787,6 +3787,10 @@ "create": "Izveidot", "rename_confirm": "Pārsaukt" }, + "uxs_folders": { + "manage_accounts": "Pārvaldīt kontus…", + "apply_to_existing": "{count, plural, zero {Piemērot # esošajām vēstulēm mapē {folder}} one {Piemērot # esošajai vēstulei mapē {folder}} other {Piemērot # esošajām vēstulēm mapē {folder}}}" + }, "shortcuts": { "title": "Īsinājumtaustiņi", "tip": "Nospiediet ? jebkurā laikā, lai skatītu palīdzību", diff --git a/locales/mn/common.json b/locales/mn/common.json index ea5b95778..2c7807a38 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -123,7 +123,7 @@ "sign_out_of": "{account}", "sign_out_all": "Бүх бүртгэлээс гарах", "add_account": "Бүртгэл нэмэх", - "set_as_default": "Өгөгдмөлөөр тохируулах", + "set_as_default": "Эхлэхэд энэ дансыг нээх", "switch_account": "Бүртгэл солих", "contacts": "Харилцах утас", "calendar": "Хуанли", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "Имэйл хаягууд", - "description": "Имэйлээ цэгцлэх шошгуудыг тодорхойл. Эдгээр нь сервер дээр JMAP түлхүүр үг хэлбэрээр хадгалагддаг.", + "description": "Захиагаа ангилах шошго үүсгэнэ үү. Шошгууд захиатай хамт сервер дээр хадгалагдана.", "add_keyword": "Таг нэмэх", "label_field": "Дэлгэцийн нэр", "label_placeholder": "жишээ нь Ажил, Хувийн, Яаралтай", @@ -1729,8 +1729,8 @@ "hide": "Нуух" }, "unrecognized": { - "title": "Серверээс хаягуудыг сэргээх", - "description": "Тагийн нэр, өнгө нь энэ хөтөч дээр хадгалагддаг боловч шошгууд нь JMAP түлхүүр үг болгон таны мессеж дээр байдаг. Энд ямар ч шошго тайлбарлаагүй түлхүүр үгсийг хайж олохын тулд имэйлээ сканнердаж, дараа нь буцааж нэмнэ үү.", + "title": "Энд байхгүй, захиан дээрх шошгуудыг олох", + "description": "Энэ хөтөч шошгуудын нэр, өнгийг хадгалдаг. Шошгууд өөрсдөө захиан дээр хадгалагддаг. Энд байхгүй шошгуудыг имэйлээсээ хайж, дахин нэмнэ үү.", "scan": "Таг хайх", "rescan": "Дахин скан хийх", "scanning": "Скан хийж байна… {total} мессежийн {scanned}", @@ -2212,8 +2212,8 @@ "title": "Нэвтэрсэн бүртгэлүүд", "description": "Бүртгэл унадаг цэсэнд бүртгэлүүд хэрхэн харагдахыг өөрчлөхийн тулд чирнэ үү", "active": "Одоогоор идэвхтэй байгаа данс", - "default_badge": "Үндсэн данс", - "set_default": "Өгөгдмөлөөр тохируулах", + "default_badge": "Эхлэхэд нээгдэнэ", + "set_default": "Эхлэхэд энэ дансыг нээх", "switch_to": "Энэ данс руу шилжих", "move_up": "Дээш хөдлөх", "move_down": "Доошоо шилжих", @@ -2801,15 +2801,15 @@ "not_supported": "Таны мэйл сервер имэйл шүүлтүүрийг дэмждэггүй.", "rule_name": "Дүрмийн нэр", "rule_name_placeholder": "жишээ нь, Мэдээллийн хуудсыг эрэмбэлэх", - "match_all": "БҮХ нөхцөлийг тааруулах", - "match_any": "Ямар ч нөхцөлтэй тохирно", + "match_all": "Бүх нөхцөлийг хангах", + "match_any": "Аль нэг нөхцөлийг хангах", "conditions": "Нөхцөлүүд", "add_condition": "Нөхцөл нэмэх", "actions": "Үйлдэл", "add_action": "Үйлдэл нэмэх", "remove_condition": "Нөхцөлийг хасах", "remove_action": "Үйлдлийг хасах", - "stop_processing": "Дараагийн дүрмийг боловсруулахаа зогсоох", + "stop_processing": "Дараагийн дүрмүүдийг хэрэглэхгүй", "include_spam": "Спам гэж тэмдэглэсэн захидлыг мөн зөөх", "attachment_type_placeholder": "жишээ нь pdf, doc, jpg", "value_placeholder_multi": "Утга (олон тоог таслалаар тусгаарласан)", @@ -2851,7 +2851,7 @@ "discard": "Тайх (чимээгүй устгах)", "reject": "Мессежээр татгалзах", "keep": "Ирсэн имэйлд хадгалах", - "stop": "Боловсруулалтыг зогсоох" + "stop": "Дараагийн дүрмүүдийг хэрэглэхгүй" }, "move_to_folder": "Фолдер сонгох", "copy_to_folder": "Фолдер сонгох", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "\"{name}\" хавтсанд одоо ч {count} зурвас байна. Хавтас болон бүх зурвасыг устгах уу? Үүнийг буцаах боломжгүй.", "delete_with_contents_confirm": "Хавтас болон зурвасыг устгах" }, + "uxs_folders": { + "manage_accounts": "Данснуудыг удирдах…", + "apply_to_existing": "{count, plural, one {{folder} доторх байгаа # захианд хэрэглэх} other {{folder} доторх байгаа # захианд хэрэглэх}}" + }, "shortcuts": { "title": "Гарын товчлол", "tip": "Энэ тусламжийг хүссэн үедээ ? дарж нээж болно", diff --git a/locales/nb/common.json b/locales/nb/common.json index 0992a5f49..d8a4ecb47 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Logg ut av {account}", "sign_out_all": "Logg ut av alle kontoer", "add_account": "Legg til konto", - "set_as_default": "Sett som standard", + "set_as_default": "Åpne denne kontoen ved oppstart", "switch_account": "Bytt konto", "contacts": "Kontakter", "calendar": "Kalender", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "E-postetiketter", - "description": "Definer etiketter for å organisere e-postene dine. De lagres som JMAP-nøkkelord på serveren.", + "description": "Lag etiketter for å sortere meldingene dine. Etikettene lagres sammen med meldingene på serveren.", "add_keyword": "Legg til etikett", "label_field": "Visningsnavn", "label_placeholder": "f.eks. arbeid, personlig, haster", @@ -1729,8 +1729,8 @@ "hide": "Skjul" }, "unrecognized": { - "title": "Gjenopprett etiketter fra serveren", - "description": "Navn og farger på etiketter lagres i denne nettleseren, men selve etikettene finnes på meldingene som JMAP-nøkkelord. Søk gjennom meldingene etter nøkkelord som ikke er definert her, og legg dem til igjen.", + "title": "Finn etiketter på meldingene som mangler her", + "description": "Denne nettleseren lagrer navn og farger på etikettene dine. Selve etikettene er lagret på meldingene. Søk i e-posten etter etiketter som mangler her, og legg dem til igjen.", "scan": "Søk etter etiketter", "rescan": "Søk på nytt", "scanning": "Søker... {scanned} av {total} meldinger", @@ -2212,8 +2212,8 @@ "title": "Innloggede kontoer", "description": "Dra for å endre rekkefølgen på kontoene i kontomenyen", "active": "Aktiv konto", - "default_badge": "Standardkonto", - "set_default": "Sett som standard", + "default_badge": "Åpnes ved oppstart", + "set_default": "Åpne denne kontoen ved oppstart", "switch_to": "Bytt til denne kontoen", "move_up": "Flytt opp", "move_down": "Flytt ned", @@ -2801,15 +2801,15 @@ "not_supported": "E-postserveren din støtter ikke e-postfiltre.", "rule_name": "Regelnavn", "rule_name_placeholder": "f.eks. sorter nyhetsbrev", - "match_all": "ALLE vilkår må samsvare", - "match_any": "Minst ETT vilkår må samsvare", + "match_all": "Alle vilkår må samsvare", + "match_any": "Minst ett vilkår må samsvare", "conditions": "Vilkår", "add_condition": "Legg til vilkår", "actions": "Handlinger", "add_action": "Legg til handling", "remove_condition": "Fjern betingelse", "remove_action": "Fjern handling", - "stop_processing": "Ikke behandle flere regler", + "stop_processing": "Ikke bruk senere regler", "include_spam": "Flytt også meldinger som er merket som søppelpost", "attachment_type_placeholder": "f.eks. pdf, doc, jpg", "value_placeholder_multi": "Verdi (skill flere verdier med komma)", @@ -2851,7 +2851,7 @@ "discard": "Forkast (slett uten varsel)", "reject": "Avvis med melding", "keep": "Behold i innboksen", - "stop": "Stopp behandlingen" + "stop": "Ikke bruk senere regler" }, "move_to_folder": "Velg mappe", "copy_to_folder": "Velg mappe", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Mappen «{name}» inneholder fortsatt {count, plural, one {1 melding} other {# meldinger}}. Slette mappen og alle meldingene i den? Dette kan ikke angres.", "delete_with_contents_confirm": "Slett mappe og meldinger" }, + "uxs_folders": { + "manage_accounts": "Administrer kontoer…", + "apply_to_existing": "{count, plural, one {Bruk på # eksisterende melding i {folder}} other {Bruk på # eksisterende meldinger i {folder}}}" + }, "shortcuts": { "title": "Tastatursnarveier", "tip": "Trykk på ? når som helst for å vise denne hjelpen", diff --git a/locales/nl/common.json b/locales/nl/common.json index 54980230e..663dd86de 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Uitloggen van {account}", "sign_out_all": "Uitloggen van alle accounts", "add_account": "Account toevoegen", - "set_as_default": "Als standaard instellen", + "set_as_default": "Dit account openen bij het starten", "switch_account": "Account wisselen", "contacts": "Contacten", "calendar": "Agenda", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "E-maillabels", - "description": "Definieer labels om uw e-mails te organiseren. Deze worden opgeslagen als JMAP-trefwoorden op de server.", + "description": "Maak labels om uw berichten te ordenen. De labels worden met uw berichten op de server opgeslagen.", "add_keyword": "Label toevoegen", "label_field": "Weergavenaam", "label_placeholder": "bijv. Werk, Persoonlijk, Urgent", @@ -1726,8 +1726,8 @@ "hide": "Verbergen" }, "unrecognized": { - "title": "Labels van de server herstellen", - "description": "Labelnamen en -kleuren worden in deze browser bewaard, maar de labels zelf staan als JMAP-trefwoorden op uw e-mails. Doorzoek uw e-mail op trefwoorden waarvoor hier geen label bestaat en voeg ze weer toe.", + "title": "Labels op uw berichten zoeken die hier ontbreken", + "description": "Deze browser bewaart de namen en kleuren van uw labels. De labels zelf staan op uw berichten. Zoek in uw e-mail naar labels die hier ontbreken en voeg ze opnieuw toe.", "scan": "Zoeken naar labels", "rescan": "Opnieuw zoeken", "scanning": "Bezig met zoeken… {scanned} van {total} e-mails", @@ -2209,8 +2209,8 @@ "title": "Aangemelde accounts", "description": "Sleep om de volgorde aan te passen waarin accounts in het accountmenu verschijnen", "active": "Momenteel actief account", - "default_badge": "Standaardaccount", - "set_default": "Als standaard instellen", + "default_badge": "Opent bij het starten", + "set_default": "Dit account openen bij het starten", "switch_to": "Overschakelen naar dit account", "move_up": "Omhoog verplaatsen", "move_down": "Omlaag verplaatsen", @@ -2794,15 +2794,15 @@ "not_supported": "Uw mailserver ondersteunt geen e-mailfilters.", "rule_name": "Regelnaam", "rule_name_placeholder": "bijv. Nieuwsbrieven sorteren", - "match_all": "Aan ALLE voorwaarden voldoen", - "match_any": "Aan EEN willekeurige voorwaarde voldoen", + "match_all": "Aan alle voorwaarden voldoen", + "match_any": "Aan een van de voorwaarden voldoen", "conditions": "Voorwaarden", "add_condition": "Voorwaarde toevoegen", "actions": "Acties", "add_action": "Actie toevoegen", "remove_condition": "Voorwaarde verwijderen", "remove_action": "Actie verwijderen", - "stop_processing": "Verwerking van volgende regels stoppen", + "stop_processing": "Latere regels niet toepassen", "include_spam": "Ook berichten verplaatsen die als spam zijn gemarkeerd", "attachment_type_placeholder": "bijv. pdf, doc, jpg", "value_placeholder_multi": "Waarde (meerdere met komma's gescheiden)", @@ -2844,7 +2844,7 @@ "discard": "Stilletjes verwijderen", "reject": "Afwijzen met bericht", "keep": "In postvak IN houden", - "stop": "Verwerking stoppen" + "stop": "Latere regels niet toepassen" }, "move_to_folder": "Map selecteren", "copy_to_folder": "Map selecteren", @@ -3787,6 +3787,10 @@ "create": "Aanmaken", "rename_confirm": "Hernoemen" }, + "uxs_folders": { + "manage_accounts": "Accounts beheren…", + "apply_to_existing": "{count, plural, one {Toepassen op # bestaand bericht in {folder}} other {Toepassen op # bestaande berichten in {folder}}}" + }, "shortcuts": { "title": "Sneltoetsen", "tip": "Druk op ? om deze hulp te tonen", diff --git a/locales/pl/common.json b/locales/pl/common.json index 79600955a..224070ddf 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Wyloguj się z {account}", "sign_out_all": "Wyloguj się ze wszystkich kont", "add_account": "Dodaj konto", - "set_as_default": "Ustaw jako domyślne", + "set_as_default": "Otwieraj to konto przy starcie", "switch_account": "Przełącz konto", "contacts": "Kontakty", "calendar": "Kalendarz", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Etykiety e-mail", - "description": "Zdefiniuj etykiety do organizowania e-maili za pomocą kolorów. Są one przechowywane jako słowa kluczowe JMAP na serwerze.", + "description": "Twórz etykiety, aby porządkować wiadomości. Etykiety są zapisywane razem z wiadomościami na serwerze.", "add_keyword": "Dodaj etykietę", "label_field": "Nazwa wyświetlana", "label_placeholder": "np. Praca, Osobiste, Pilne", @@ -1726,8 +1726,8 @@ "hide": "Ukryj" }, "unrecognized": { - "title": "Odzyskaj etykiety z serwera", - "description": "Nazwy i kolory etykiet są zapisane w tej przeglądarce, ale same etykiety znajdują się w wiadomościach jako słowa kluczowe JMAP. Przeskanuj pocztę w poszukiwaniu słów kluczowych, dla których nie ma tu etykiety, i dodaj je ponownie.", + "title": "Znajdź etykiety na wiadomościach, których tu brakuje", + "description": "Ta przeglądarka przechowuje nazwy i kolory etykiet. Same etykiety są zapisane na wiadomościach. Przeszukaj pocztę w poszukiwaniu etykiet, których tu brakuje, i dodaj je ponownie.", "scan": "Szukaj etykiet", "rescan": "Skanuj ponownie", "scanning": "Skanowanie… {scanned} z {total} wiadomości", @@ -2209,8 +2209,8 @@ "title": "Zalogowane konta", "description": "Przeciągnij, aby zmienić kolejność wyświetlania kont w menu rozwijanym", "active": "Aktualnie aktywne konto", - "default_badge": "Konto domyślne", - "set_default": "Ustaw jako domyślne", + "default_badge": "Otwiera się przy starcie", + "set_default": "Otwieraj to konto przy starcie", "switch_to": "Przełącz na to konto", "move_up": "Przesuń w górę", "move_down": "Przesuń w dół", @@ -2794,15 +2794,15 @@ "not_supported": "Twój serwer pocztowy nie obsługuje filtrów wiadomości e-mail.", "rule_name": "Nazwa reguły", "rule_name_placeholder": "np. Sortuj newslettery", - "match_all": "Dopasuj WSZYSTKIE warunki", - "match_any": "Dopasuj DOWOLNY warunek", + "match_all": "Spełnione wszystkie warunki", + "match_any": "Spełniony dowolny warunek", "conditions": "Warunki", "add_condition": "Dodaj warunek", "actions": "Akcje", "add_action": "Dodaj akcję", "remove_condition": "Usuń warunek", "remove_action": "Usuń akcję", - "stop_processing": "Zatrzymaj przetwarzanie kolejnych reguł", + "stop_processing": "Nie stosuj kolejnych reguł", "include_spam": "Przenoś również wiadomości oznaczone jako spam", "attachment_type_placeholder": "np. pdf, doc, jpg", "value_placeholder_multi": "Wartość (kilka oddzielonych przecinkami)", @@ -2844,7 +2844,7 @@ "discard": "Odrzuć (usuń po cichu)", "reject": "Odrzuć z wiadomością", "keep": "Pozostaw w Odebranych", - "stop": "Zatrzymaj przetwarzanie" + "stop": "Nie stosuj kolejnych reguł" }, "move_to_folder": "Wybierz folder", "copy_to_folder": "Wybierz folder", @@ -3787,6 +3787,10 @@ "create": "Utwórz", "rename_confirm": "Zmień nazwę" }, + "uxs_folders": { + "manage_accounts": "Zarządzaj kontami…", + "apply_to_existing": "{count, plural, one {Zastosuj do # istniejącej wiadomości w folderze {folder}} few {Zastosuj do # istniejących wiadomości w folderze {folder}} many {Zastosuj do # istniejących wiadomości w folderze {folder}} other {Zastosuj do # istniejącej wiadomości w folderze {folder}}}" + }, "shortcuts": { "title": "Skróty klawiszowe", "tip": "Naciśnij ? w dowolnym momencie, aby wyświetlić tę pomoc", diff --git a/locales/pt/common.json b/locales/pt/common.json index 613a6e5db..bd1701609 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Sair de {account}", "sign_out_all": "Sair de todas as contas", "add_account": "Adicionar conta", - "set_as_default": "Definir como padrão", + "set_as_default": "Abrir esta conta ao iniciar", "switch_account": "Trocar conta", "contacts": "Contatos", "calendar": "Calendário", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Etiquetas de e-mail", - "description": "Defina etiquetas para organizar os seus e-mails com cores. São armazenadas como palavras-chave JMAP no servidor.", + "description": "Crie etiquetas para organizar as suas mensagens. As etiquetas são guardadas com as mensagens no servidor.", "add_keyword": "Adicionar etiqueta", "label_field": "Nome de exibição", "label_placeholder": "ex. Trabalho, Pessoal, Urgente", @@ -1726,8 +1726,8 @@ "hide": "Ocultar" }, "unrecognized": { - "title": "Recuperar etiquetas do servidor", - "description": "Os nomes e as cores das etiquetas são guardados neste navegador, mas as etiquetas em si estão nos seus e-mails como palavras-chave JMAP. Analise o seu correio à procura de palavras-chave sem etiqueta definida aqui e volte a adicioná-las.", + "title": "Encontrar etiquetas nas mensagens que faltam aqui", + "description": "Este navegador guarda os nomes e as cores das suas etiquetas. As etiquetas em si estão guardadas nas mensagens. Procure no seu correio as etiquetas que faltam aqui e volte a adicioná-las.", "scan": "Procurar etiquetas", "rescan": "Analisar novamente", "scanning": "A analisar… {scanned} de {total} e-mails", @@ -2209,8 +2209,8 @@ "title": "Contas conectadas", "description": "Arraste para reordenar como as contas aparecem no menu suspenso", "active": "Conta atualmente ativa", - "default_badge": "Conta padrão", - "set_default": "Definir como padrão", + "default_badge": "Abre ao iniciar", + "set_default": "Abrir esta conta ao iniciar", "switch_to": "Mudar para esta conta", "move_up": "Mover para cima", "move_down": "Mover para baixo", @@ -2794,15 +2794,15 @@ "not_supported": "Seu servidor de e-mail não suporta filtros de e-mail.", "rule_name": "Nome da regra", "rule_name_placeholder": "ex. Classificar newsletters", - "match_all": "Corresponder a TODAS as condições", - "match_any": "Corresponder a QUALQUER condição", + "match_all": "Corresponder a todas as condições", + "match_any": "Corresponder a qualquer condição", "conditions": "Condições", "add_condition": "Adicionar condição", "actions": "Ações", "add_action": "Adicionar ação", "remove_condition": "Remover condição", "remove_action": "Remover ação", - "stop_processing": "Parar o processamento das regras seguintes", + "stop_processing": "Não aplicar as regras seguintes", "include_spam": "Mover também as mensagens marcadas como spam", "attachment_type_placeholder": "ex.: pdf, doc, jpg", "value_placeholder_multi": "Valor (vários separados por vírgulas)", @@ -2844,7 +2844,7 @@ "discard": "Descartar (excluir silenciosamente)", "reject": "Rejeitar com mensagem", "keep": "Manter na caixa de entrada", - "stop": "Parar processamento" + "stop": "Não aplicar as regras seguintes" }, "move_to_folder": "Selecionar pasta", "copy_to_folder": "Selecionar pasta", @@ -3787,6 +3787,10 @@ "create": "Criar", "rename_confirm": "Renomear" }, + "uxs_folders": { + "manage_accounts": "Gerir contas…", + "apply_to_existing": "{count, plural, one {Aplicar a # mensagem existente em {folder}} other {Aplicar a # mensagens existentes em {folder}}}" + }, "shortcuts": { "title": "Atalhos de teclado", "tip": "Pressione ? a qualquer momento para mostrar esta ajuda", diff --git a/locales/ro/common.json b/locales/ro/common.json index 07dcd5ba3..f9703cf45 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Deconectați-vă de pe {account}", "sign_out_all": "Deconectați-vă de la toate conturile", "add_account": "Adăugare cont", - "set_as_default": "Setați ca implicită", + "set_as_default": "Deschideți acest cont la pornire", "switch_account": "Schimbă contul", "contacts": "Contacte", "calendar": "Calendar", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "Etichete de e-mail", - "description": "Definiți etichete pentru a vă organiza e-mailurile pe culori. Acestea sunt stocate pe server sub formă de cuvinte-cheie dJMAP.", + "description": "Creați etichete pentru a vă sorta mesajele. Etichetele sunt salvate împreună cu mesajele pe server.", "add_keyword": "Adăugați etichetă", "label_field": "Nume afișat", "label_placeholder": "de ex. Serviciu, Personal, Urgent", @@ -1729,8 +1729,8 @@ "hide": "Ascunde" }, "unrecognized": { - "title": "Recuperați etichetele de pe server", - "description": "Numele și culorile etichetelor sunt stocate în acest browser, dar etichetele în sine se află pe e-mailurile dvs. sub formă de cuvinte-cheie JMAP. Scanați corespondența pentru cuvinte-cheie care nu au o etichetă aici și adăugați-le înapoi.", + "title": "Găsiți etichetele de pe mesaje care lipsesc aici", + "description": "Acest browser păstrează numele și culorile etichetelor. Etichetele în sine sunt salvate pe mesaje. Căutați în e-mailuri etichetele care lipsesc aici și adăugați-le din nou.", "scan": "Căutați etichete", "rescan": "Scanați din nou", "scanning": "Se scanează… {scanned} din {total} e-mailuri", @@ -2212,8 +2212,8 @@ "title": "Conturi conectate", "description": "Trageți pentru a reordona modul în care apar conturile în meniul derulant al conturilor", "active": "Cont activ în prezent", - "default_badge": "Cont implicit", - "set_default": "Setați ca implicită", + "default_badge": "Se deschide la pornire", + "set_default": "Deschideți acest cont la pornire", "switch_to": "Treceți la acest cont", "move_up": "Sus", "move_down": "Derulați în jos", @@ -2801,15 +2801,15 @@ "not_supported": "Serverul dvs. de e-mail nu acceptă filtre de e-mail.", "rule_name": "Numele regulii", "rule_name_placeholder": "de ex., Sortează buletinele informative", - "match_all": "Îndepliniți TOATE condițiile", - "match_any": "Îndepliniți ORICE condiție", + "match_all": "Îndeplinește toate condițiile", + "match_any": "Îndeplinește oricare condiție", "conditions": "Condiții", "add_condition": "Adăugați condiție", "actions": "Acțiuni", "add_action": "Adăugare acțiune", "remove_condition": "Elimină condiția", "remove_action": "Elimină acțiunea", - "stop_processing": "Opriți procesarea regulilor următoare", + "stop_processing": "Nu aplicați regulile următoare", "include_spam": "Mută și mesajele marcate ca spam", "attachment_type_placeholder": "de ex. pdf, doc, jpg", "value_placeholder_multi": "Valoare (mai multe valori separate prin virgule)", @@ -2851,7 +2851,7 @@ "discard": "Ignorare (ștergere fără confirmare)", "reject": "Respinge cu mesaj", "keep": "Păstrează în căsuța de primire", - "stop": "Opriți procesarea" + "stop": "Nu aplicați regulile următoare" }, "move_to_folder": "Selectează folderul", "copy_to_folder": "Selectează folderul", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Dosarul „{name}” încă mai conține {count, plural, one {1 mesaj} other {# mesaje}}. Ștergi dosarul și toate mesajele sale? Acțiunea nu poate fi anulată.", "delete_with_contents_confirm": "Șterge dosarul și mesajele" }, + "uxs_folders": { + "manage_accounts": "Gestionați conturile…", + "apply_to_existing": "{count, plural, one {Aplicați la # mesaj existent din {folder}} few {Aplicați la # mesaje existente din {folder}} other {Aplicați la # de mesaje existente din {folder}}}" + }, "shortcuts": { "title": "Comenzi rapide de la tastatură", "tip": "Apăsați ? oricând pentru a afișa acest ajutor", diff --git a/locales/ru/common.json b/locales/ru/common.json index a4d5e3cb8..5a4ded196 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Выйти из {account}", "sign_out_all": "Выйти из всех аккаунтов", "add_account": "Добавить аккаунт", - "set_as_default": "Установить по умолчанию", + "set_as_default": "Открывать этот аккаунт при запуске", "switch_account": "Сменить аккаунт", "contacts": "Контакты", "calendar": "Календарь", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Теги электронной почты", - "description": "Определите теги для организации электронных писем с помощью цветов. Они хранятся как ключевые слова JMAP на сервере.", + "description": "Создавайте теги, чтобы упорядочить письма. Теги хранятся вместе с письмами на сервере.", "add_keyword": "Добавить тег", "label_field": "Отображаемое название", "label_placeholder": "напр., Работа, Личное, Срочно", @@ -1726,8 +1726,8 @@ "hide": "Скрывать" }, "unrecognized": { - "title": "Восстановить теги с сервера", - "description": "Названия и цвета тегов хранятся в этом браузере, но сами теги находятся в ваших письмах в виде ключевых слов JMAP. Просканируйте почту на ключевые слова, для которых здесь нет тега, и добавьте их обратно.", + "title": "Найти теги на письмах, которых здесь нет", + "description": "Этот браузер хранит названия и цвета ваших тегов. Сами теги сохранены на письмах. Найдите в почте теги, которых здесь нет, и добавьте их снова.", "scan": "Найти теги", "rescan": "Сканировать снова", "scanning": "Сканирование… {scanned} из {total} писем", @@ -2209,8 +2209,8 @@ "title": "Подключённые учётные записи", "description": "Перетащите, чтобы изменить порядок отображения учётных записей в меню", "active": "Текущая активная учётная запись", - "default_badge": "По умолчанию", - "set_default": "Сделать основной", + "default_badge": "Открывается при запуске", + "set_default": "Открывать этот аккаунт при запуске", "switch_to": "Переключиться на эту учётную запись", "move_up": "Переместить вверх", "move_down": "Переместить вниз", @@ -2794,15 +2794,15 @@ "not_supported": "Ваш почтовый сервер не поддерживает фильтры.", "rule_name": "Название правила", "rule_name_placeholder": "напр., Сортировка рассылок", - "match_all": "Совпадают ВСЕ условия", - "match_any": "Совпадает ЛЮБОЕ условие", + "match_all": "Совпадают все условия", + "match_any": "Совпадает любое условие", "conditions": "Условия", "add_condition": "Добавить условие", "actions": "Действия", "add_action": "Добавить действие", "remove_condition": "Убрать условие", "remove_action": "Убрать действие", - "stop_processing": "Прекратить обработку последующих правил", + "stop_processing": "Не применять следующие правила", "include_spam": "Перемещать также письма, помеченные как спам", "attachment_type_placeholder": "напр. pdf, doc, jpg", "value_placeholder_multi": "Значение (несколько через запятую)", @@ -2844,7 +2844,7 @@ "discard": "Удалить (без уведомления)", "reject": "Отклонить с сообщением", "keep": "Оставить во входящих", - "stop": "Прекратить обработку" + "stop": "Не применять следующие правила" }, "move_to_folder": "Выбрать папку", "copy_to_folder": "Выбрать папку", @@ -3787,6 +3787,10 @@ "create": "Создать", "rename_confirm": "Переименовать" }, + "uxs_folders": { + "manage_accounts": "Управление аккаунтами…", + "apply_to_existing": "{count, plural, one {Применить к # имеющемуся письму в папке {folder}} few {Применить к # имеющимся письмам в папке {folder}} many {Применить к # имеющимся письмам в папке {folder}} other {Применить к # имеющегося письма в папке {folder}}}" + }, "shortcuts": { "title": "Сочетания клавиш", "tip": "Нажмите ? в любое время для отображения справки", diff --git a/locales/sk/common.json b/locales/sk/common.json index bb323a8a9..b0cc0202a 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -124,7 +124,7 @@ "sign_out_of": "Odhlásiť sa z {account}", "sign_out_all": "Odhlásiť sa zo všetkých účtov", "add_account": "Pridať účet", - "set_as_default": "Nastaviť ako predvolený", + "set_as_default": "Otvárať tento účet pri spustení", "switch_account": "Prepnúť účet", "contacts": "Kontakty", "calendar": "Kalendár", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "E-mailové štítky", - "description": "Definujte štítky na organizáciu e-mailov s farbami.", + "description": "Vytvorte štítky na triedenie správ. Štítky sa ukladajú so správami na serveri.", "add_keyword": "Pridať štítok", "label_field": "Zobrazovaný názov", "label_placeholder": "napr. Práca, Osobné, Naliehavé", @@ -1729,8 +1729,8 @@ "hide": "Skryť" }, "unrecognized": { - "title": "Obnoviť štítky zo servera", - "description": "Názvy a farby štítkov sú uložené v tomto prehliadači, ale samotné štítky sú na vašich správach ako kľúčové slová JMAP. Prehľadajte poštu na kľúčové slová, ku ktorým tu nie je štítok, a pridajte ich späť.", + "title": "Nájsť štítky na správach, ktoré tu chýbajú", + "description": "Tento prehliadač ukladá názvy a farby štítkov. Samotné štítky sú uložené na správach. Vyhľadajte v pošte štítky, ktoré tu chýbajú, a znova ich pridajte.", "scan": "Vyhľadať štítky", "rescan": "Hľadať znova", "scanning": "Prehľadávanie… {scanned} z {total} správ", @@ -2212,8 +2212,8 @@ "title": "Prihlásené účty", "description": "Presuňte na zmenu poradia účtov v rozbaľovacom zozname", "active": "Aktuálne aktívny účet", - "default_badge": "Predvolený účet", - "set_default": "Nastaviť ako predvolený", + "default_badge": "Otvára sa pri spustení", + "set_default": "Otvárať tento účet pri spustení", "switch_to": "Prepnúť na tento účet", "move_up": "Posunúť nahor", "move_down": "Posunúť nadol", @@ -2801,15 +2801,15 @@ "not_supported": "Váš poštový server nepodporuje e-mailové filtre.", "rule_name": "Názov pravidla", "rule_name_placeholder": "napr. Triediť newslettery", - "match_all": "Splňuje VŠETKY podmienky", - "match_any": "Splňuje AKÚKOĽVEK podmienku", + "match_all": "Splňuje všetky podmienky", + "match_any": "Splňuje ktorúkoľvek podmienku", "conditions": "Podmienky", "add_condition": "Pridať podmienku", "actions": "Akcie", "add_action": "Pridať akciu", "remove_condition": "Odobrať podmienku", "remove_action": "Odobrať akciu", - "stop_processing": "Zastaviť spracovanie ďalších pravidiel", + "stop_processing": "Ďalšie pravidlá nepoužívať", "include_spam": "Presúvať aj správy označené ako spam", "attachment_type_placeholder": "napr. pdf, doc, jpg", "value_placeholder_multi": "Hodnota (viac oddelených čiarkami)", @@ -2851,7 +2851,7 @@ "discard": "Zahodiť (ticho odstrániť)", "reject": "Odmietnuť so správou", "keep": "Ponechať v Doručených", - "stop": "Zastaviť spracovanie" + "stop": "Ďalšie pravidlá nepoužívať" }, "move_to_folder": "Vybrať priečinok", "copy_to_folder": "Vybrať priečinok", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "Priečinok „{name}“ stále obsahuje {count, plural, one {1 správu} few {# správy} other {# správ}}. Odstrániť priečinok aj všetky jeho správy? Túto akciu nie je možné vrátiť späť.", "delete_with_contents_confirm": "Odstrániť priečinok a správy" }, + "uxs_folders": { + "manage_accounts": "Spravovať účty…", + "apply_to_existing": "{count, plural, one {Použiť na # existujúcu správu v priečinku {folder}} few {Použiť na # existujúce správy v priečinku {folder}} many {Použiť na # existujúcej správy v priečinku {folder}} other {Použiť na # existujúcich správ v priečinku {folder}}}" + }, "shortcuts": { "title": "Klávesové skratky", "tip": "Kedykoľvek stlačte ? na zobrazenie tejto nápovedy", diff --git a/locales/th/common.json b/locales/th/common.json index 6ebde8879..fd9a68175 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -253,7 +253,7 @@ "sign_out_of": "ออกจากระบบ {account}", "sign_out_all": "ออกจากระบบทุกบัญชี", "add_account": "เพิ่มบัญชี", - "set_as_default": "ตั้งเป็นค่าเริ่มต้น", + "set_as_default": "เปิดบัญชีนี้เมื่อเริ่มต้น", "switch_account": "สลับบัญชี", "contacts": "ผู้ติดต่อ", "calendar": "ปฏิทิน", @@ -983,6 +983,10 @@ "delete_with_contents_message": "โฟลเดอร์ “{name}” ยังมีข้อความอยู่ {count, plural, other {# ข้อความ}} ต้องการลบโฟลเดอร์และข้อความทั้งหมดภายในหรือไม่? การดำเนินการนี้ไม่สามารถยกเลิกได้", "delete_with_contents_confirm": "ลบโฟลเดอร์และข้อความทั้งหมด" }, + "uxs_folders": { + "manage_accounts": "จัดการบัญชี…", + "apply_to_existing": "{count, plural, other {นำไปใช้กับข้อความเดิม # ฉบับใน {folder}}}" + }, "shortcuts": { "title": "แป้นพิมพ์ลัด", "tip": "กด ? ได้ทุกเมื่อเพื่อแสดงความช่วยเหลือนี้", @@ -4598,7 +4602,7 @@ }, "keywords": { "title": "แท็กอีเมล", - "description": "กำหนดแท็กเพื่อจัดหมวดหมู่อีเมลของคุณ ข้อมูลนี้จะถูกบันทึกเป็นคีย์เวิร์ด JMAP บนเซิร์ฟเวอร์", + "description": "สร้างแท็กเพื่อจัดเรียงข้อความของคุณ แท็กจะถูกบันทึกไว้กับข้อความบนเซิร์ฟเวอร์", "add_keyword": "เพิ่มแท็ก", "label_field": "ชื่อที่แสดง", "label_placeholder": "เช่น งาน, ส่วนตัว, ด่วน", @@ -4633,8 +4637,8 @@ "hide": "ซ่อน" }, "unrecognized": { - "title": "กู้คืนแท็กจากเซิร์ฟเวอร์", - "description": "ชื่อและสีของแท็กจะจัดเก็บไว้ในเบราว์เซอร์นี้ แต่ตัวแท็กเองจะอยู่บนข้อความของคุณในฐานะคีย์เวิร์ด JMAP สแกนอีเมลของคุณเพื่อหาคีย์เวิร์ดที่ยังไม่มีคำจำกัดความที่นี่ แล้วเพิ่มกลับเข้ามา", + "title": "ค้นหาแท็กบนข้อความที่ยังไม่มีที่นี่", + "description": "เบราว์เซอร์นี้เก็บชื่อและสีของแท็ก ส่วนตัวแท็กถูกบันทึกไว้บนข้อความ ค้นหาแท็กที่ยังไม่มีที่นี่ในอีเมลของคุณแล้วเพิ่มกลับเข้ามา", "scan": "สแกนหาแท็ก", "rescan": "สแกนอีกครั้ง", "scanning": "กำลังสแกน… {scanned} จาก {total} ข้อความ", @@ -5116,8 +5120,8 @@ "title": "บัญชีที่ลงชื่อเข้าใช้", "description": "ลากเพื่อจัดลำดับการแสดงผลบัญชีในเมนูแบบเลื่อนลงของบัญชี", "active": "บัญชีที่ใช้งานอยู่ในปัจจุบัน", - "default_badge": "บัญชีเริ่มต้น", - "set_default": "ตั้งเป็นค่าเริ่มต้น", + "default_badge": "เปิดเมื่อเริ่มต้น", + "set_default": "เปิดบัญชีนี้เมื่อเริ่มต้น", "switch_to": "สลับไปยังบัญชีนี้", "move_up": "เลื่อนขึ้น", "move_down": "เลื่อนลง", @@ -5713,7 +5717,7 @@ "add_action": "เพิ่มการดำเนินการ", "remove_condition": "นำเงื่อนไขออก", "remove_action": "นำการทำงานออก", - "stop_processing": "หยุดการประมวลผลกฎข้อถัดไป", + "stop_processing": "ไม่ใช้กฎถัดไป", "include_spam": "ย้ายข้อความที่ทำเครื่องหมายว่าเป็นสแปมด้วย", "attachment_type_placeholder": "เช่น pdf, doc, jpg", "value_placeholder_multi": "ค่า (หากมีหลายค่าให้คั่นด้วยเครื่องหมายจุลภาค)", @@ -5755,7 +5759,7 @@ "discard": "ละทิ้ง (ลบอย่างเงียบๆ)", "reject": "ปฏิเสธพร้อมข้อความ", "keep": "เก็บไว้ในกล่องข้อความ", - "stop": "หยุดการประมวลผล" + "stop": "ไม่ใช้กฎถัดไป" }, "move_to_folder": "เลือกโฟลเดอร์", "copy_to_folder": "เลือกโฟลเดอร์", diff --git a/locales/tr/common.json b/locales/tr/common.json index 598e17caf..21dfdc592 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -123,7 +123,7 @@ "sign_out_of": "{account} hesabından çıkış yap", "sign_out_all": "Tüm hesaplardan çıkış yap", "add_account": "Hesap ekle", - "set_as_default": "Varsayılan olarak ayarla", + "set_as_default": "Bu hesabı başlangıçta aç", "switch_account": "Hesap değiştir", "contacts": "Kişiler", "calendar": "Takvim", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "E-posta Etiketleri", - "description": "E-postalarınızı renklerle düzenlemek için etiketler tanımlayın. Bunlar sunucuda JMAP anahtar sözcükleri olarak saklanır.", + "description": "İletilerinizi düzenlemek için etiketler oluşturun. Etiketler iletilerinizle birlikte sunucuda saklanır.", "add_keyword": "Etiket Ekle", "label_field": "Görünen Ad", "label_placeholder": "ör. İş, Kişisel, Acil", @@ -1726,8 +1726,8 @@ "hide": "Gizle" }, "unrecognized": { - "title": "Etiketleri sunucudan kurtar", - "description": "Etiket adları ve renkleri bu tarayıcıda saklanır, ancak etiketlerin kendisi JMAP anahtar sözcükleri olarak e-postalarınızda bulunur. Burada karşılığı olmayan anahtar sözcükler için postanızı tarayın ve bunları geri ekleyin.", + "title": "İletilerinizde olup burada eksik olan etiketleri bul", + "description": "Bu tarayıcı etiketlerinizin adlarını ve renklerini saklar. Etiketlerin kendisi iletilerinizde saklanır. Postanızda burada eksik olan etiketleri arayın ve yeniden ekleyin.", "scan": "Etiketleri tara", "rescan": "Yeniden tara", "scanning": "Taranıyor… {total} e-postadan {scanned} tanesi", @@ -2209,8 +2209,8 @@ "title": "Oturum açılmış hesaplar", "description": "Hesapların hesap menüsünde görüntülenme sırasını değiştirmek için sürükleyin", "active": "Şu anda etkin hesap", - "default_badge": "Varsayılan hesap", - "set_default": "Varsayılan olarak ayarla", + "default_badge": "Başlangıçta açılır", + "set_default": "Bu hesabı başlangıçta aç", "switch_to": "Bu hesaba geç", "move_up": "Yukarı taşı", "move_down": "Aşağı taşı", @@ -2794,15 +2794,15 @@ "not_supported": "Posta sunucunuz e-posta filtrelerini desteklemiyor.", "rule_name": "Kural Adı", "rule_name_placeholder": "ör. Bültenleri sırala", - "match_all": "TÜM koşullarla eşleş", - "match_any": "HERHANGİ bir koşulla eşleş", + "match_all": "Tüm koşullarla eşleş", + "match_any": "Herhangi bir koşulla eşleş", "conditions": "Koşullar", "add_condition": "Koşul Ekle", "actions": "İşlemler", "add_action": "İşlem Ekle", "remove_condition": "Koşulu kaldır", "remove_action": "Eylemi kaldır", - "stop_processing": "Sonraki kuralları işlemeyi durdur", + "stop_processing": "Sonraki kuralları uygulama", "include_spam": "İstenmeyen olarak işaretlenen iletileri de taşı", "attachment_type_placeholder": "örn. pdf, doc, jpg", "value_placeholder_multi": "Değer (birden fazla virgülle ayrılır)", @@ -2844,7 +2844,7 @@ "discard": "At (sessizce sil)", "reject": "İletiyle reddet", "keep": "Gelen kutusunda tut", - "stop": "İşlemeyi durdur" + "stop": "Sonraki kuralları uygulama" }, "move_to_folder": "Klasör seçin", "copy_to_folder": "Klasör seçin", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "\"{name}\" klasöründe hâlâ {count} ileti var. Klasör ve tüm iletileri silinsin mi? Bu işlem geri alınamaz.", "delete_with_contents_confirm": "Klasörü ve iletileri sil" }, + "uxs_folders": { + "manage_accounts": "Hesapları yönet…", + "apply_to_existing": "{count, plural, one {{folder} içindeki # mevcut iletiye uygula} other {{folder} içindeki # mevcut iletiye uygula}}" + }, "shortcuts": { "title": "Klavye kısayolları", "tip": "Bu yardımı görmek için istediğiniz zaman ? tuşuna basın", diff --git a/locales/uk/common.json b/locales/uk/common.json index a00326d65..3b98a3b09 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Вийти з {account}", "sign_out_all": "Вийти з усіх облікових записів", "add_account": "Додати акаунт", - "set_as_default": "Встановити за умовчанням", + "set_as_default": "Відкривати цей обліковий запис під час запуску", "switch_account": "Змінити обліковий запис", "contacts": "Контакти", "calendar": "Календар", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "Ключові слова електронної пошти", - "description": "Визначте ключові слова (мітки/теги), щоб упорядкувати свої листи за кольорами. Вони зберігаються як ключові слова JMAP на сервері.", + "description": "Створюйте теги, щоб упорядкувати листи. Теги зберігаються разом із листами на сервері.", "add_keyword": "Додати ключове слово", "label_field": "Відображуване ім'я", "label_placeholder": "напр. Робота, Особиста, Терміново", @@ -1726,8 +1726,8 @@ "hide": "Приховувати" }, "unrecognized": { - "title": "Відновити теги із сервера", - "description": "Назви та кольори тегів зберігаються в цьому браузері, але самі теги перебувають у ваших листах як ключові слова JMAP. Проскануйте пошту на ключові слова, для яких тут немає тега, і додайте їх назад.", + "title": "Знайти теги на листах, яких тут немає", + "description": "Цей браузер зберігає назви та кольори ваших тегів. Самі теги збережено на листах. Знайдіть у пошті теги, яких тут немає, і додайте їх знову.", "scan": "Знайти теги", "rescan": "Сканувати ще раз", "scanning": "Сканування… {scanned} з {total} листів", @@ -2209,8 +2209,8 @@ "title": "Підключені облікові записи", "description": "Перетягніть, щоб змінити порядок відображення облікових записів у меню", "active": "Поточний активний обліковий запис", - "default_badge": "Обліковий запис за замовчуванням", - "set_default": "Зробити основним", + "default_badge": "Відкривається під час запуску", + "set_default": "Відкривати цей обліковий запис під час запуску", "switch_to": "Перемкнутися на цей обліковий запис", "move_up": "Перемістити вгору", "move_down": "Перемістити вниз", @@ -2794,15 +2794,15 @@ "not_supported": "Ваш поштовий сервер не підтримує фільтри електронної пошти.", "rule_name": "Назва правила", "rule_name_placeholder": "наприклад, Сортувати інформаційні бюлетені", - "match_all": "Відповідають УСІМ умовам", - "match_any": "Відповідає БУДЬ-ЯКІЙ умові", + "match_all": "Відповідають усім умовам", + "match_any": "Відповідає будь-якій умові", "conditions": "Умови", "add_condition": "Додати умову", "actions": "Дії", "add_action": "Додати дію", "remove_condition": "Прибрати умову", "remove_action": "Прибрати дію", - "stop_processing": "Зупинити обробку наступних правил", + "stop_processing": "Не застосовувати наступні правила", "include_spam": "Переміщувати також листи, позначені як спам", "attachment_type_placeholder": "напр. pdf, doc, jpg", "value_placeholder_multi": "Значення (декілька через кому)", @@ -2844,7 +2844,7 @@ "discard": "Відкинути (видалити мовчки)", "reject": "Відхилити повідомленням", "keep": "Зберігати у вхідних", - "stop": "Зупинити обробку" + "stop": "Не застосовувати наступні правила" }, "move_to_folder": "Виберіть папку", "copy_to_folder": "Виберіть папку", @@ -3787,6 +3787,10 @@ "create": "Створити", "rename_confirm": "Перейменувати" }, + "uxs_folders": { + "manage_accounts": "Керувати обліковими записами…", + "apply_to_existing": "{count, plural, one {Застосувати до # наявного листа в теці {folder}} few {Застосувати до # наявних листів у теці {folder}} many {Застосувати до # наявних листів у теці {folder}} other {Застосувати до # наявного листа в теці {folder}}}" + }, "shortcuts": { "title": "Комбінації клавіш", "tip": "Натисніть ? у будь-який час, щоб показати цю допомогу", diff --git a/locales/vi/common.json b/locales/vi/common.json index b7c6b5e89..0dff91125 100644 --- a/locales/vi/common.json +++ b/locales/vi/common.json @@ -123,7 +123,7 @@ "sign_out_of": "Đăng xuất khỏi {account}", "sign_out_all": "Đăng xuất khỏi tất cả các tài khoản", "add_account": "Thêm tài khoản", - "set_as_default": "Đặt làm mặc định", + "set_as_default": "Mở tài khoản này khi khởi động", "switch_account": "Chuyển đổi tài khoản", "contacts": "Danh bạ", "calendar": "Lịch", @@ -1706,7 +1706,7 @@ }, "keywords": { "title": "Nhãn thư", - "description": "Tạo nhãn để sắp xếp thư. Nhãn được lưu dưới dạng từ khóa JMAP trên máy chủ.", + "description": "Tạo thẻ để sắp xếp thư. Các thẻ được lưu cùng thư trên máy chủ.", "add_keyword": "Nhãn mới", "label_field": "Tên hiển thị", "label_placeholder": "Ví dụ: Công việc, Cá nhân, Khẩn cấp", @@ -1741,8 +1741,8 @@ "hide": "Ẩn" }, "unrecognized": { - "title": "Khôi phục nhãn từ máy chủ", - "description": "Tên và màu nhãn được lưu trong trình duyệt này, còn nhãn được lưu trên thư dưới dạng từ khóa JMAP. Quét thư để tìm từ khóa chưa có nhãn tương ứng, rồi thêm lại chúng.", + "title": "Tìm các thẻ trên thư còn thiếu ở đây", + "description": "Trình duyệt này lưu tên và màu thẻ. Bản thân các thẻ được lưu trên thư. Hãy tìm các thẻ còn thiếu trong thư của bạn rồi thêm lại vào đây.", "scan": "Quét tìm nhãn", "rescan": "Quét lại", "scanning": "Đang quét… {scanned}/{total} thư", @@ -2224,8 +2224,8 @@ "title": "Tài khoản đã đăng nhập", "description": "Kéo để sắp xếp lại cách các tài khoản xuất hiện trong danh sách tài khoản thả xuống", "active": "Tài khoản hiện đang hoạt động", - "default_badge": "Tài khoản mặc định", - "set_default": "Đặt làm mặc định", + "default_badge": "Mở khi khởi động", + "set_default": "Mở tài khoản này khi khởi động", "switch_to": "Chuyển sang tài khoản này", "move_up": "Di chuyển lên", "move_down": "Di chuyển xuống", @@ -2813,15 +2813,15 @@ "not_supported": "Máy chủ thư của bạn không hỗ trợ bộ lọc email.", "rule_name": "Tên quy tắc", "rule_name_placeholder": "Ví dụ: Sắp xếp các bản tin", - "match_all": "Phù hợp với TẤT CẢ các điều kiện", - "match_any": "Phù hợp với bất kỳ điều kiện nào", + "match_all": "Tất cả điều kiện phải đúng", + "match_any": "Chỉ cần một điều kiện đúng", "conditions": "Điều kiện", "add_condition": "Thêm điều kiện", "actions": "Thao tác", "add_action": "Thêm hành động", "remove_condition": "Xóa điều kiện", "remove_action": "Xóa hành động", - "stop_processing": "Dừng xử lý các quy tắc tiếp theo", + "stop_processing": "Không áp dụng các quy tắc sau", "include_spam": "Đồng thời di chuyển các thư bị đánh dấu là thư rác", "attachment_type_placeholder": "Ví dụ: pdf, doc, jpg", "value_placeholder_multi": "Giá trị (phân tách nhiều giá trị bằng dấu phẩy)", @@ -2863,7 +2863,7 @@ "discard": "Hủy (xóa âm thầm)", "reject": "Từ chối bằng thư", "keep": "Giữ trong hộp thư đến", - "stop": "Dừng xử lý" + "stop": "Không áp dụng các quy tắc sau" }, "move_to_folder": "Chọn thư mục", "copy_to_folder": "Chọn thư mục", @@ -3799,6 +3799,10 @@ "delete_with_contents_message": "Thư mục \"{name}\" vẫn chứa {count, plural, one {1 thư} other {# thư}}. Xóa thư mục và tất cả thư của nó? Điều này không thể hoàn tác được.", "delete_with_contents_confirm": "Xóa thư mục và thư" }, + "uxs_folders": { + "manage_accounts": "Quản lý tài khoản…", + "apply_to_existing": "{count, plural, one {Áp dụng cho # thư hiện có trong {folder}} other {Áp dụng cho # thư hiện có trong {folder}}}" + }, "shortcuts": { "title": "Phím tắt", "tip": "Nhấn ? bất cứ lúc nào để hiển thị hướng dẫn này", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 8d1458a86..634aa5be2 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -123,7 +123,7 @@ "sign_out_of": "登出 {account}", "sign_out_all": "登出所有帳號", "add_account": "新增帳號", - "set_as_default": "設為預設", + "set_as_default": "啟動時開啟此帳號", "switch_account": "切換帳號", "contacts": "聯絡人", "calendar": "行事曆", @@ -1694,7 +1694,7 @@ }, "keywords": { "title": "電子郵件標籤", - "description": "定義用來整理郵件的標籤。這些標籤會以 JMAP 關鍵字儲存在伺服器上。", + "description": "建立標籤來整理郵件。標籤會和郵件一起儲存在伺服器上。", "add_keyword": "新增標籤", "label_field": "顯示名稱", "label_placeholder": "例如工作、個人、緊急", @@ -1729,8 +1729,8 @@ "hide": "隱藏" }, "unrecognized": { - "title": "從伺服器復原標籤", - "description": "標籤名稱與顏色儲存在此瀏覽器中,標籤本身則以 JMAP 關鍵字附加在郵件上。掃描郵件以尋找這裡尚未定義的關鍵字,再將它們加回來。", + "title": "尋找郵件上有但這裡缺少的標籤", + "description": "此瀏覽器會儲存標籤的名稱與顏色。標籤本身儲存在郵件上。在郵件中尋找這裡缺少的標籤,再將它們加回來。", "scan": "掃描標籤", "rescan": "重新掃描", "scanning": "正在掃描… {total} 封郵件中的 {scanned} 封", @@ -2212,8 +2212,8 @@ "title": "已登入帳號", "description": "拖曳以重新排序帳號在帳號下拉選單中的顯示順序", "active": "使用中的帳號", - "default_badge": "預設帳號", - "set_default": "設為預設", + "default_badge": "啟動時開啟", + "set_default": "啟動時開啟此帳號", "switch_to": "切換到此帳號", "move_up": "上移", "move_down": "下移", @@ -2809,7 +2809,7 @@ "add_action": "新增動作", "remove_condition": "移除條件", "remove_action": "移除動作", - "stop_processing": "停止處理後續規則", + "stop_processing": "不再套用後面的規則", "include_spam": "同時移動被標記為垃圾郵件的郵件", "attachment_type_placeholder": "例如:pdf、doc、jpg", "value_placeholder_multi": "值(多個用逗號分隔)", @@ -2851,7 +2851,7 @@ "discard": "捨棄(直接刪除)", "reject": "附上訊息拒絕", "keep": "保留在收件匣中", - "stop": "停止處理" + "stop": "不再套用後面的規則" }, "move_to_folder": "選取信件匣", "copy_to_folder": "選取信件匣", @@ -3787,6 +3787,10 @@ "delete_with_contents_message": "資料夾「{name}」中仍有 {count} 封郵件。要刪除該資料夾及其所有郵件嗎?此操作無法復原。", "delete_with_contents_confirm": "刪除資料夾和郵件" }, + "uxs_folders": { + "manage_accounts": "管理帳號…", + "apply_to_existing": "{count, plural, other {套用到{folder}中的 # 封既有郵件}}" + }, "shortcuts": { "title": "鍵盤快速鍵", "tip": "隨時按下 ? 即可顯示此說明", diff --git a/locales/zh/common.json b/locales/zh/common.json index 0bb3e4451..7074412a1 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -123,7 +123,7 @@ "sign_out_of": "退出 {account}", "sign_out_all": "退出所有账户", "add_account": "添加账户", - "set_as_default": "设为默认", + "set_as_default": "启动时打开此账户", "switch_account": "切换账户", "contacts": "联系人", "calendar": "日历", @@ -1691,7 +1691,7 @@ }, "keywords": { "title": "电子邮件标签", - "description": "定义标签以使用颜色组织您的电子邮件。这些标签作为JMAP关键词存储在服务器上。", + "description": "创建标签来整理邮件。标签与邮件一起保存在服务器上。", "add_keyword": "添加标签", "label_field": "显示名称", "label_placeholder": "例如工作、个人、紧急", @@ -1726,8 +1726,8 @@ "hide": "隐藏" }, "unrecognized": { - "title": "从服务器恢复标签", - "description": "标签的名称和颜色保存在此浏览器中,但标签本身以 JMAP 关键词的形式存在于邮件上。扫描邮件以查找此处没有对应标签的关键词,然后重新添加它们。", + "title": "查找邮件上有但这里缺少的标签", + "description": "此浏览器保存标签的名称和颜色。标签本身保存在邮件上。在邮件中查找这里缺少的标签,然后重新添加。", "scan": "扫描标签", "rescan": "重新扫描", "scanning": "正在扫描… {total} 封邮件中的 {scanned} 封", @@ -2209,8 +2209,8 @@ "title": "已登录账户", "description": "拖动以重新排序账户在账户下拉菜单中的显示顺序", "active": "当前活动账户", - "default_badge": "默认账户", - "set_default": "设为默认", + "default_badge": "启动时打开", + "set_default": "启动时打开此账户", "switch_to": "切换到此账户", "move_up": "上移", "move_down": "下移", @@ -2795,14 +2795,14 @@ "rule_name": "规则名称", "rule_name_placeholder": "例如,整理订阅邮件", "match_all": "匹配所有条件", - "match_any": "匹配任何条件", + "match_any": "匹配任一条件", "conditions": "条件", "add_condition": "添加条件", "actions": "操作", "add_action": "添加操作", "remove_condition": "移除条件", "remove_action": "移除操作", - "stop_processing": "停止处理后续规则", + "stop_processing": "不再应用后面的规则", "include_spam": "同时移动被标记为垃圾邮件的邮件", "attachment_type_placeholder": "例如:pdf、doc、jpg", "value_placeholder_multi": "值(多个用逗号分隔)", @@ -2844,7 +2844,7 @@ "discard": "丢弃(静默删除)", "reject": "拒绝并留言", "keep": "保留在收件箱中", - "stop": "停止处理" + "stop": "不再应用后面的规则" }, "move_to_folder": "选择文件夹", "copy_to_folder": "选择文件夹", @@ -3787,6 +3787,10 @@ "create": "创建", "rename_confirm": "重命名" }, + "uxs_folders": { + "manage_accounts": "管理账户…", + "apply_to_existing": "{count, plural, other {应用于{folder}中的 # 封已有邮件}}" + }, "shortcuts": { "title": "键盘快捷键", "tip": "按?随时显示此帮助",