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