mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-11-06 00:15:32 +00:00
feat: refresh Calendar, Contacts and Files with F9 in the desktop app, and move through the calendar from Go
This commit is contained in:
@@ -30,6 +30,7 @@ vi.mock('@/hooks/use-config', () => ({ useConfig: () => config }));
|
||||
|
||||
import { CalendarApp } from '../calendar-app';
|
||||
import { requestAppCommand } from '@/lib/app-commands';
|
||||
import { mergedDesktopState, resetDesktopCommands, runDesktopCommand } from '@/lib/desktop/commands';
|
||||
|
||||
vi.setConfig({ testTimeout: 30000 });
|
||||
|
||||
@@ -84,3 +85,32 @@ describe('Calendar in the desktop menus', () => {
|
||||
expect(screen.queryByRole('dialog', { name: 'title' })).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
// pim-p2-9 (2026-11-04): the desktop app's Go menu in Calendar moves through time
|
||||
// (Today, Next period, Previous period) instead of offering Mail's folders.
|
||||
describe('Calendar in the desktop Go menu', () => {
|
||||
beforeEach(() => {
|
||||
resetDesktopCommands();
|
||||
(window as unknown as { bulwarkDesktop: unknown }).bulwarkDesktop = { version: 1, platform: 'win32', menu: { setState: vi.fn(), onCommand: vi.fn() } };
|
||||
});
|
||||
afterEach(() => {
|
||||
delete (window as unknown as { bulwarkDesktop?: unknown }).bulwarkDesktop;
|
||||
resetDesktopCommands();
|
||||
});
|
||||
|
||||
it('offers Today, Next period and Previous period, and each moves the week', () => {
|
||||
render(<CalendarApp />);
|
||||
const state = mergedDesktopState();
|
||||
expect(state['go.today']).toBe(true);
|
||||
expect(state['go.nextPeriod']).toBe(true);
|
||||
expect(state['go.previousPeriod']).toBe(true);
|
||||
const day = () => useCalendarStore.getState().selectedDate.toDateString();
|
||||
act(() => { expect(runDesktopCommand('go.nextPeriod')).toBe(true); });
|
||||
expect(day()).toBe(new Date(2026, 9, 19).toDateString());
|
||||
act(() => { runDesktopCommand('go.previousPeriod'); });
|
||||
act(() => { runDesktopCommand('go.previousPeriod'); });
|
||||
expect(day()).toBe(new Date(2026, 9, 5).toDateString());
|
||||
act(() => { runDesktopCommand('go.today'); });
|
||||
expect(day()).toBe(new Date().toDateString());
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1686,7 +1686,7 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps =
|
||||
"new-task": () => { if (enableCalendarTasks) openCreateTaskModal(); },
|
||||
"import-calendar": () => { if (!demoMode) setShowImportModal(true); },
|
||||
}, true);
|
||||
// Its View menu's Day, Week, Month and Agenda, and Edit > Search events.
|
||||
// Its View menu's Day, Week, Month and Agenda, Go's Today and periods, and Edit > Search events.
|
||||
const viewFromMenu = (mode: CalendarViewMode) => () => { setMobileReturnToMonth(false); leaveSearch(); setViewMode(mode); };
|
||||
useDesktopCommands({
|
||||
"view.calendar.day": viewFromMenu("day"),
|
||||
@@ -1694,7 +1694,14 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps =
|
||||
"view.calendar.month": viewFromMenu("month"),
|
||||
"view.calendar.agenda": viewFromMenu("agenda"),
|
||||
"edit.search": openSearch,
|
||||
// Go > Today, Next period and Previous period: the toolbar's arrows and T.
|
||||
"go.today": () => { leaveSearch(); goToToday(); },
|
||||
"go.nextPeriod": () => { leaveSearch(); navigateNext(); },
|
||||
"go.previousPeriod": () => { leaveSearch(); navigatePrev(); },
|
||||
}, {
|
||||
"go.today": normalizedViewMode !== "tasks",
|
||||
"go.nextPeriod": normalizedViewMode !== "tasks",
|
||||
"go.previousPeriod": normalizedViewMode !== "tasks",
|
||||
"view.calendar.day": { enabled: true, checked: normalizedViewMode === "day" },
|
||||
"view.calendar.week": { enabled: true, checked: normalizedViewMode === "week" },
|
||||
"view.calendar.month": { enabled: true, checked: normalizedViewMode === "month" },
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||
import { render, act } from '@testing-library/react';
|
||||
import { useRefreshGesture } from '@/hooks/use-refresh-gesture';
|
||||
import { mergedDesktopState, resetDesktopCommands, runDesktopCommand } from '@/lib/desktop/commands';
|
||||
|
||||
/**
|
||||
* pim-p2-9 (2026-11-04): in the desktop app View > Refresh (F9) was Mail's "Check
|
||||
* for new mail" and greyed in Calendar, Contacts and Files. Each screen's own
|
||||
* refresh (the one F5 and pull-to-refresh run) now answers the menu.
|
||||
*/
|
||||
|
||||
function Screen({ onRefresh, enabled = true }: { onRefresh: () => void; enabled?: boolean }) {
|
||||
const { indicator } = useRefreshGesture({ onRefresh, enabled });
|
||||
return <div>{indicator}</div>;
|
||||
}
|
||||
|
||||
describe('useRefreshGesture in the desktop app', () => {
|
||||
beforeEach(() => {
|
||||
resetDesktopCommands();
|
||||
(window as unknown as { bulwarkDesktop: unknown }).bulwarkDesktop = { version: 1, platform: 'win32', menu: { setState: vi.fn(), onCommand: vi.fn() } };
|
||||
});
|
||||
afterEach(() => {
|
||||
delete (window as unknown as { bulwarkDesktop?: unknown }).bulwarkDesktop;
|
||||
resetDesktopCommands();
|
||||
});
|
||||
|
||||
it('enables View > Refresh and runs the screen refresh from it', async () => {
|
||||
const onRefresh = vi.fn();
|
||||
render(<Screen onRefresh={onRefresh} />);
|
||||
expect(mergedDesktopState()['view.refresh']).toBe(true);
|
||||
await act(async () => {
|
||||
expect(runDesktopCommand('view.refresh')).toBe(true);
|
||||
});
|
||||
expect(onRefresh).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('offers nothing while the screen can not refresh', () => {
|
||||
render(<Screen onRefresh={vi.fn()} enabled={false} />);
|
||||
expect(mergedDesktopState()['view.refresh']).toBeUndefined();
|
||||
expect(runDesktopCommand('view.refresh')).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -3,6 +3,7 @@
|
||||
import { useEffect, useMemo, useRef } from "react";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { getDesktopBridge } from "@/lib/desktop/bridge";
|
||||
import { useDesktopCommands } from "@/lib/desktop/commands";
|
||||
import {
|
||||
PullToRefreshIndicator,
|
||||
createPullToRefreshStore,
|
||||
@@ -93,8 +94,12 @@ export function useRefreshGesture({ onRefresh, enabled = true }: UseRefreshGestu
|
||||
const t = useTranslations("common");
|
||||
const onRefreshRef = useRef(onRefresh);
|
||||
const runningRef = useRef(false);
|
||||
const triggerRef = useRef<(() => void) | null>(null);
|
||||
const store = useMemo(() => createPullToRefreshStore(), []);
|
||||
|
||||
// The desktop app's View > Refresh (F9, F5) runs the same refresh for the screen in front.
|
||||
useDesktopCommands({ "view.refresh": () => triggerRef.current?.() }, { "view.refresh": enabled }, enabled);
|
||||
|
||||
useEffect(() => {
|
||||
onRefreshRef.current = onRefresh;
|
||||
}, [onRefresh]);
|
||||
@@ -135,6 +140,7 @@ export function useRefreshGesture({ onRefresh, enabled = true }: UseRefreshGestu
|
||||
}
|
||||
})();
|
||||
};
|
||||
triggerRef.current = trigger;
|
||||
|
||||
const handleKeyDown = (event: KeyboardEvent) => {
|
||||
const isReloadKey =
|
||||
@@ -240,6 +246,7 @@ export function useRefreshGesture({ onRefresh, enabled = true }: UseRefreshGestu
|
||||
window.removeEventListener("touchcancel", cancelPull);
|
||||
timers.forEach(clearTimeout);
|
||||
timers.clear();
|
||||
if (triggerRef.current === trigger) triggerRef.current = null;
|
||||
store.set({ phase: "idle", distance: 0 });
|
||||
};
|
||||
}, [enabled, store]);
|
||||
|
||||
@@ -91,6 +91,7 @@ export function shellLabels(t: (key: string, values?: Record<string, string>) =>
|
||||
menuSelectAll: t('desktopUi.menu.select_all'),
|
||||
menuSearch: t('desktopUi.menu.search'),
|
||||
menuRefresh: t('desktopUi.menu.refresh'),
|
||||
menuRefreshView: t('ux_p2_pim_cm.menu_refresh'),
|
||||
menuReadingPane: t('desktopUi.menu.reading_pane'),
|
||||
menuPaneRight: t('desktopUi.menu.pane_right'),
|
||||
menuPaneBelow: t('desktopUi.menu.pane_below'),
|
||||
@@ -112,6 +113,9 @@ export function shellLabels(t: (key: string, values?: Record<string, string>) =>
|
||||
menuDelete: t('context_menu.delete'),
|
||||
menuOpenInWindow: t('desktopUi.menu.open_in_window'),
|
||||
menuGoInbox: t('sidebar.mailboxes.inbox'),
|
||||
menuGoToday: t('ux_p2_pim_cm.menu_today'),
|
||||
menuGoNextPeriod: t('ux_p2_pim_cm.menu_next_period'),
|
||||
menuGoPreviousPeriod: t('ux_p2_pim_cm.menu_previous_period'),
|
||||
menuGoSent: t('sidebar.mailboxes.sent'),
|
||||
menuGoDrafts: t('sidebar.mailboxes.drafts'),
|
||||
menuGoNext: t('desktopUi.menu.next_message'),
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "التقويم…",
|
||||
"import_contacts": "جهات الاتصال…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "تحديث",
|
||||
"menu_today": "اليوم",
|
||||
"menu_next_period": "الفترة التالية",
|
||||
"menu_previous_period": "الفترة السابقة",
|
||||
"account_scope_label": "يعرض {address}. تبديل الحساب",
|
||||
"account_scope_menu": "تبديل الحساب",
|
||||
"merge_links": "روابط",
|
||||
"merge_photo": "صورة",
|
||||
"merge_kept": "محفوظ",
|
||||
"import_show": "عرض"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "تعديل",
|
||||
"edit_named": "تعديل {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendari…",
|
||||
"import_contacts": "Contactes…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Actualitza",
|
||||
"menu_today": "Avui",
|
||||
"menu_next_period": "Període següent",
|
||||
"menu_previous_period": "Període anterior",
|
||||
"account_scope_label": "Es mostra {address}. Canvia de compte",
|
||||
"account_scope_menu": "Canvia de compte",
|
||||
"merge_links": "Enllaços",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Es conserva",
|
||||
"import_show": "Mostra"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Edita",
|
||||
"edit_named": "Edita {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalendář…",
|
||||
"import_contacts": "Kontakty…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Obnovit",
|
||||
"menu_today": "Dnes",
|
||||
"menu_next_period": "Další období",
|
||||
"menu_previous_period": "Předchozí období",
|
||||
"account_scope_label": "Zobrazuje se {address}. Přepnout účet",
|
||||
"account_scope_menu": "Přepnout účet",
|
||||
"merge_links": "Odkazy",
|
||||
"merge_photo": "Fotka",
|
||||
"merge_kept": "Zůstane",
|
||||
"import_show": "Zobrazit"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Upravit",
|
||||
"edit_named": "Upravit {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalender…",
|
||||
"import_contacts": "Kontakter…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Opdater",
|
||||
"menu_today": "I dag",
|
||||
"menu_next_period": "Næste periode",
|
||||
"menu_previous_period": "Forrige periode",
|
||||
"account_scope_label": "Viser {address}. Skift konto",
|
||||
"account_scope_menu": "Skift konto",
|
||||
"merge_links": "Links",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Beholdes",
|
||||
"import_show": "Vis"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Rediger",
|
||||
"edit_named": "Rediger {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalender…",
|
||||
"import_contacts": "Kontakte…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Aktualisieren",
|
||||
"menu_today": "Heute",
|
||||
"menu_next_period": "Nächster Zeitraum",
|
||||
"menu_previous_period": "Vorheriger Zeitraum",
|
||||
"account_scope_label": "Zeigt {address}. Konto wechseln",
|
||||
"account_scope_menu": "Konto wechseln",
|
||||
"merge_links": "Links",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Bleibt erhalten",
|
||||
"import_show": "Anzeigen"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Bearbeiten",
|
||||
"edit_named": "{name} bearbeiten",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendar…",
|
||||
"import_contacts": "Contacts…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Refresh",
|
||||
"menu_today": "Today",
|
||||
"menu_next_period": "Next period",
|
||||
"menu_previous_period": "Previous period",
|
||||
"account_scope_label": "Showing {address}. Switch account",
|
||||
"account_scope_menu": "Switch account",
|
||||
"merge_links": "Links",
|
||||
"merge_photo": "Photo",
|
||||
"merge_kept": "Kept",
|
||||
"import_show": "Show"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Edit",
|
||||
"edit_named": "Edit {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendario…",
|
||||
"import_contacts": "Contactos…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Actualizar",
|
||||
"menu_today": "Hoy",
|
||||
"menu_next_period": "Periodo siguiente",
|
||||
"menu_previous_period": "Periodo anterior",
|
||||
"account_scope_label": "Se muestra {address}. Cambiar de cuenta",
|
||||
"account_scope_menu": "Cambiar de cuenta",
|
||||
"merge_links": "Enlaces",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Se conserva",
|
||||
"import_show": "Mostrar"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Editar",
|
||||
"edit_named": "Editar {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalender…",
|
||||
"import_contacts": "Kontaktid…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Värskenda",
|
||||
"menu_today": "Täna",
|
||||
"menu_next_period": "Järgmine periood",
|
||||
"menu_previous_period": "Eelmine periood",
|
||||
"account_scope_label": "Kuvatakse {address}. Vaheta kontot",
|
||||
"account_scope_menu": "Vaheta kontot",
|
||||
"merge_links": "Lingid",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Jääb alles",
|
||||
"import_show": "Näita"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Muuda",
|
||||
"edit_named": "Muuda faili {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "تقویم…",
|
||||
"import_contacts": "مخاطبین…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "بازخوانی",
|
||||
"menu_today": "امروز",
|
||||
"menu_next_period": "بازه بعدی",
|
||||
"menu_previous_period": "بازه قبلی",
|
||||
"account_scope_label": "نمایش {address}. تغییر حساب",
|
||||
"account_scope_menu": "تغییر حساب",
|
||||
"merge_links": "پیوندها",
|
||||
"merge_photo": "عکس",
|
||||
"merge_kept": "حفظ میشود",
|
||||
"import_show": "نمایش"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "ویرایش",
|
||||
"edit_named": "ویرایش {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendrier…",
|
||||
"import_contacts": "Contacts…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Actualiser",
|
||||
"menu_today": "Aujourd’hui",
|
||||
"menu_next_period": "Période suivante",
|
||||
"menu_previous_period": "Période précédente",
|
||||
"account_scope_label": "Affiche {address}. Changer de compte",
|
||||
"account_scope_menu": "Changer de compte",
|
||||
"merge_links": "Liens",
|
||||
"merge_photo": "Photo",
|
||||
"merge_kept": "Conservé",
|
||||
"import_show": "Afficher"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Modifier",
|
||||
"edit_named": "Modifier {name}",
|
||||
|
||||
@@ -7520,6 +7520,18 @@
|
||||
"import_calendar": "לוח שנה…",
|
||||
"import_contacts": "אנשי קשר…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "רענון",
|
||||
"menu_today": "היום",
|
||||
"menu_next_period": "התקופה הבאה",
|
||||
"menu_previous_period": "התקופה הקודמת",
|
||||
"account_scope_label": "מוצג {address}. החלפת חשבון",
|
||||
"account_scope_menu": "החלפת חשבון",
|
||||
"merge_links": "קישורים",
|
||||
"merge_photo": "תמונה",
|
||||
"merge_kept": "נשמר",
|
||||
"import_show": "הצגה"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "עריכה",
|
||||
"edit_named": "עריכת {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Naptár…",
|
||||
"import_contacts": "Névjegyek…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Frissítés",
|
||||
"menu_today": "Ma",
|
||||
"menu_next_period": "Következő időszak",
|
||||
"menu_previous_period": "Előző időszak",
|
||||
"account_scope_label": "Látható: {address}. Fiókváltás",
|
||||
"account_scope_menu": "Fiókváltás",
|
||||
"merge_links": "Hivatkozások",
|
||||
"merge_photo": "Fénykép",
|
||||
"merge_kept": "Megmarad",
|
||||
"import_show": "Megjelenítés"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Szerkesztés",
|
||||
"edit_named": "{name} szerkesztése",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendario…",
|
||||
"import_contacts": "Contatti…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Aggiorna",
|
||||
"menu_today": "Oggi",
|
||||
"menu_next_period": "Periodo successivo",
|
||||
"menu_previous_period": "Periodo precedente",
|
||||
"account_scope_label": "Mostra {address}. Cambia account",
|
||||
"account_scope_menu": "Cambia account",
|
||||
"merge_links": "Link",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Mantenuto",
|
||||
"import_show": "Mostra"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Modifica",
|
||||
"edit_named": "Modifica {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "カレンダー…",
|
||||
"import_contacts": "連絡先…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "更新",
|
||||
"menu_today": "今日",
|
||||
"menu_next_period": "次の期間",
|
||||
"menu_previous_period": "前の期間",
|
||||
"account_scope_label": "{address} を表示中。アカウントを切り替え",
|
||||
"account_scope_menu": "アカウントを切り替え",
|
||||
"merge_links": "リンク",
|
||||
"merge_photo": "写真",
|
||||
"merge_kept": "残ります",
|
||||
"import_show": "表示"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "編集",
|
||||
"edit_named": "{name} を編集",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "캘린더…",
|
||||
"import_contacts": "연락처…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "새로 고침",
|
||||
"menu_today": "오늘",
|
||||
"menu_next_period": "다음 기간",
|
||||
"menu_previous_period": "이전 기간",
|
||||
"account_scope_label": "{address} 표시 중. 계정 전환",
|
||||
"account_scope_menu": "계정 전환",
|
||||
"merge_links": "링크",
|
||||
"merge_photo": "사진",
|
||||
"merge_kept": "유지됨",
|
||||
"import_show": "보기"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "편집",
|
||||
"edit_named": "{name} 편집",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalendārs…",
|
||||
"import_contacts": "Kontakti…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Atsvaidzināt",
|
||||
"menu_today": "Šodien",
|
||||
"menu_next_period": "Nākamais periods",
|
||||
"menu_previous_period": "Iepriekšējais periods",
|
||||
"account_scope_label": "Rāda {address}. Pārslēgt kontu",
|
||||
"account_scope_menu": "Pārslēgt kontu",
|
||||
"merge_links": "Saites",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Saglabājas",
|
||||
"import_show": "Rādīt"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Rediģēt",
|
||||
"edit_named": "Rediģēt {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Хуанли…",
|
||||
"import_contacts": "Харилцагчид…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Шинэчлэх",
|
||||
"menu_today": "Өнөөдөр",
|
||||
"menu_next_period": "Дараагийн үе",
|
||||
"menu_previous_period": "Өмнөх үе",
|
||||
"account_scope_label": "{address}-г харуулж байна. Бүртгэл солих",
|
||||
"account_scope_menu": "Бүртгэл солих",
|
||||
"merge_links": "Холбоосууд",
|
||||
"merge_photo": "Зураг",
|
||||
"merge_kept": "Хадгалагдана",
|
||||
"import_show": "Харуулах"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Засах",
|
||||
"edit_named": "{name} засах",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalender…",
|
||||
"import_contacts": "Kontakter…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Oppdater",
|
||||
"menu_today": "I dag",
|
||||
"menu_next_period": "Neste periode",
|
||||
"menu_previous_period": "Forrige periode",
|
||||
"account_scope_label": "Viser {address}. Bytt konto",
|
||||
"account_scope_menu": "Bytt konto",
|
||||
"merge_links": "Lenker",
|
||||
"merge_photo": "Bilde",
|
||||
"merge_kept": "Beholdes",
|
||||
"import_show": "Vis"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Rediger",
|
||||
"edit_named": "Rediger {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Agenda…",
|
||||
"import_contacts": "Contacten…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Vernieuwen",
|
||||
"menu_today": "Vandaag",
|
||||
"menu_next_period": "Volgende periode",
|
||||
"menu_previous_period": "Vorige periode",
|
||||
"account_scope_label": "Toont {address}. Ander account kiezen",
|
||||
"account_scope_menu": "Ander account kiezen",
|
||||
"merge_links": "Links",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Blijft bewaard",
|
||||
"import_show": "Tonen"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Bewerken",
|
||||
"edit_named": "{name} bewerken",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalendarz…",
|
||||
"import_contacts": "Kontakty…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Odśwież",
|
||||
"menu_today": "Dzisiaj",
|
||||
"menu_next_period": "Następny okres",
|
||||
"menu_previous_period": "Poprzedni okres",
|
||||
"account_scope_label": "Wyświetlane: {address}. Przełącz konto",
|
||||
"account_scope_menu": "Przełącz konto",
|
||||
"merge_links": "Linki",
|
||||
"merge_photo": "Zdjęcie",
|
||||
"merge_kept": "Zostaje",
|
||||
"import_show": "Pokaż"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Edytuj",
|
||||
"edit_named": "Edytuj {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendário…",
|
||||
"import_contacts": "Contactos…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Atualizar",
|
||||
"menu_today": "Hoje",
|
||||
"menu_next_period": "Próximo período",
|
||||
"menu_previous_period": "Período anterior",
|
||||
"account_scope_label": "A mostrar {address}. Mudar de conta",
|
||||
"account_scope_menu": "Mudar de conta",
|
||||
"merge_links": "Ligações",
|
||||
"merge_photo": "Foto",
|
||||
"merge_kept": "Mantém-se",
|
||||
"import_show": "Mostrar"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Editar",
|
||||
"edit_named": "Editar {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Calendar…",
|
||||
"import_contacts": "Contacte…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Reîmprospătează",
|
||||
"menu_today": "Astăzi",
|
||||
"menu_next_period": "Perioada următoare",
|
||||
"menu_previous_period": "Perioada anterioară",
|
||||
"account_scope_label": "Se afișează {address}. Schimbă contul",
|
||||
"account_scope_menu": "Schimbă contul",
|
||||
"merge_links": "Linkuri",
|
||||
"merge_photo": "Fotografie",
|
||||
"merge_kept": "Se păstrează",
|
||||
"import_show": "Afișează"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Editează",
|
||||
"edit_named": "Editează {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Календарь…",
|
||||
"import_contacts": "Контакты…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Обновить",
|
||||
"menu_today": "Сегодня",
|
||||
"menu_next_period": "Следующий период",
|
||||
"menu_previous_period": "Предыдущий период",
|
||||
"account_scope_label": "Показан {address}. Сменить учётную запись",
|
||||
"account_scope_menu": "Сменить учётную запись",
|
||||
"merge_links": "Ссылки",
|
||||
"merge_photo": "Фото",
|
||||
"merge_kept": "Сохранится",
|
||||
"import_show": "Показать"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Изменить",
|
||||
"edit_named": "Изменить {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Kalendár…",
|
||||
"import_contacts": "Kontakty…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Obnoviť",
|
||||
"menu_today": "Dnes",
|
||||
"menu_next_period": "Ďalšie obdobie",
|
||||
"menu_previous_period": "Predchádzajúce obdobie",
|
||||
"account_scope_label": "Zobrazuje sa {address}. Prepnúť účet",
|
||||
"account_scope_menu": "Prepnúť účet",
|
||||
"merge_links": "Odkazy",
|
||||
"merge_photo": "Fotka",
|
||||
"merge_kept": "Zostane",
|
||||
"import_show": "Zobraziť"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Upraviť",
|
||||
"edit_named": "Upraviť {name}",
|
||||
|
||||
@@ -7527,6 +7527,18 @@
|
||||
"import_calendar": "ปฏิทิน…",
|
||||
"import_contacts": "ผู้ติดต่อ…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "รีเฟรช",
|
||||
"menu_today": "วันนี้",
|
||||
"menu_next_period": "ช่วงถัดไป",
|
||||
"menu_previous_period": "ช่วงก่อนหน้า",
|
||||
"account_scope_label": "กำลังแสดง {address} สลับบัญชี",
|
||||
"account_scope_menu": "สลับบัญชี",
|
||||
"merge_links": "ลิงก์",
|
||||
"merge_photo": "รูปภาพ",
|
||||
"merge_kept": "เก็บไว้",
|
||||
"import_show": "แสดง"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "แก้ไข",
|
||||
"edit_named": "แก้ไข {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Takvim…",
|
||||
"import_contacts": "Kişiler…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Yenile",
|
||||
"menu_today": "Bugün",
|
||||
"menu_next_period": "Sonraki dönem",
|
||||
"menu_previous_period": "Önceki dönem",
|
||||
"account_scope_label": "{address} gösteriliyor. Hesap değiştir",
|
||||
"account_scope_menu": "Hesap değiştir",
|
||||
"merge_links": "Bağlantılar",
|
||||
"merge_photo": "Fotoğraf",
|
||||
"merge_kept": "Korunur",
|
||||
"import_show": "Göster"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Düzenle",
|
||||
"edit_named": "{name} dosyasını düzenle",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "Календар…",
|
||||
"import_contacts": "Контакти…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Оновити",
|
||||
"menu_today": "Сьогодні",
|
||||
"menu_next_period": "Наступний період",
|
||||
"menu_previous_period": "Попередній період",
|
||||
"account_scope_label": "Показано {address}. Змінити обліковий запис",
|
||||
"account_scope_menu": "Змінити обліковий запис",
|
||||
"merge_links": "Посилання",
|
||||
"merge_photo": "Фото",
|
||||
"merge_kept": "Залишиться",
|
||||
"import_show": "Показати"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Редагувати",
|
||||
"edit_named": "Редагувати {name}",
|
||||
|
||||
@@ -7531,6 +7531,18 @@
|
||||
"import_calendar": "Lịch…",
|
||||
"import_contacts": "Danh bạ…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "Làm mới",
|
||||
"menu_today": "Hôm nay",
|
||||
"menu_next_period": "Khoảng thời gian sau",
|
||||
"menu_previous_period": "Khoảng thời gian trước",
|
||||
"account_scope_label": "Đang hiển thị {address}. Chuyển tài khoản",
|
||||
"account_scope_menu": "Chuyển tài khoản",
|
||||
"merge_links": "Liên kết",
|
||||
"merge_photo": "Ảnh",
|
||||
"merge_kept": "Được giữ lại",
|
||||
"import_show": "Hiển thị"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "Chỉnh sửa",
|
||||
"edit_named": "Chỉnh sửa {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "行事曆…",
|
||||
"import_contacts": "聯絡人…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "重新整理",
|
||||
"menu_today": "今天",
|
||||
"menu_next_period": "下一個期間",
|
||||
"menu_previous_period": "上一個期間",
|
||||
"account_scope_label": "正在顯示 {address}。切換帳號",
|
||||
"account_scope_menu": "切換帳號",
|
||||
"merge_links": "連結",
|
||||
"merge_photo": "相片",
|
||||
"merge_kept": "保留",
|
||||
"import_show": "顯示"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "編輯",
|
||||
"edit_named": "編輯 {name}",
|
||||
|
||||
@@ -7519,6 +7519,18 @@
|
||||
"import_calendar": "日历…",
|
||||
"import_contacts": "联系人…"
|
||||
},
|
||||
"ux_p2_pim_cm": {
|
||||
"menu_refresh": "刷新",
|
||||
"menu_today": "今天",
|
||||
"menu_next_period": "下一时段",
|
||||
"menu_previous_period": "上一时段",
|
||||
"account_scope_label": "正在显示 {address}。切换账户",
|
||||
"account_scope_menu": "切换账户",
|
||||
"merge_links": "链接",
|
||||
"merge_photo": "照片",
|
||||
"merge_kept": "保留",
|
||||
"import_show": "显示"
|
||||
},
|
||||
"desktopEdit": {
|
||||
"edit": "编辑",
|
||||
"edit_named": "编辑 {name}",
|
||||
|
||||
Reference in New Issue
Block a user