From 28d169c8c41cc4eda901f7bb3f1d861051a36a0d Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Wed, 28 Oct 2026 04:38:46 +0100 Subject: [PATCH] fix: use sentence case and plain words in Calendar: Accept, Maybe and Decline, counted events, error titles that say what couldn't be done --- .../calendar/__tests__/calendar-app.test.tsx | 17 +++++ .../__tests__/calendar-dialogs.test.tsx | 18 +++++ .../calendar/__tests__/rsvp-buttons.test.tsx | 11 ++- components/calendar/calendar-app.tsx | 12 +-- components/calendar/ical-import-modal.tsx | 6 +- components/calendar/rsvp-buttons.tsx | 6 +- locales/ar/common.json | 11 ++- locales/ca/common.json | 11 ++- locales/cs/common.json | 11 ++- locales/da/common.json | 11 ++- locales/de/common.json | 11 ++- locales/en/common.json | 73 ++++++++++--------- locales/es/common.json | 11 ++- locales/et/common.json | 11 ++- locales/fa/common.json | 7 +- locales/fr/common.json | 11 ++- locales/he/common.json | 11 ++- locales/hu/common.json | 7 +- locales/it/common.json | 11 ++- locales/ja/common.json | 5 +- locales/ko/common.json | 7 +- locales/lv/common.json | 11 ++- locales/mn/common.json | 7 +- locales/nb/common.json | 11 ++- locales/nl/common.json | 11 ++- locales/pl/common.json | 11 ++- locales/pt/common.json | 11 ++- locales/ro/common.json | 11 ++- locales/ru/common.json | 11 ++- locales/sk/common.json | 11 ++- locales/th/common.json | 7 +- locales/tr/common.json | 7 +- locales/uk/common.json | 11 ++- locales/zh-TW/common.json | 7 +- locales/zh/common.json | 7 +- 35 files changed, 272 insertions(+), 141 deletions(-) diff --git a/components/calendar/__tests__/calendar-app.test.tsx b/components/calendar/__tests__/calendar-app.test.tsx index 5888ac453..87de6b7da 100644 --- a/components/calendar/__tests__/calendar-app.test.tsx +++ b/components/calendar/__tests__/calendar-app.test.tsx @@ -26,6 +26,8 @@ vi.mock('@/hooks/use-refresh-gesture', () => ({ useRefreshGesture: () => ({ indi vi.mock('@/hooks/use-calendar-push-refresh', () => ({ useCalendarPushRefresh: () => {} })); vi.mock('@/hooks/use-account-principal-emails', () => ({ useAccountPrincipalEmails: () => [] })); vi.mock('../participant-availability', () => ({ ParticipantAvailability: () => null })); +const config = vi.hoisted(() => ({ demoMode: false })); +vi.mock('@/hooks/use-config', () => ({ useConfig: () => config })); import { CalendarApp } from '../calendar-app'; import { useRegisteredCommandGroups } from '@/lib/command-registry'; @@ -563,3 +565,18 @@ describe('CalendarApp control names', () => { expect(screen.getAllByRole('button', { name: /Trip/ })[0].getAttribute('aria-label')).toContain('events.all_day'); }); }); + +describe('CalendarApp in the demo', () => { + it('leaves Import and Subscribe out, which need a mail server', async () => { + config.demoMode = true; + try { + renderApp(); + fireEvent.click(screen.getByRole('button', { name: 'toolbar.more' })); + expect(await screen.findByRole('menuitem', { name: 'refresh' })).toBeInTheDocument(); + expect(screen.queryByRole('menuitem', { name: 'toolbar.import' })).toBeNull(); + expect(screen.queryByRole('menuitem', { name: 'toolbar.subscribe' })).toBeNull(); + } finally { + config.demoMode = false; + } + }); +}); diff --git a/components/calendar/__tests__/calendar-dialogs.test.tsx b/components/calendar/__tests__/calendar-dialogs.test.tsx index eef65314a..e499af3fe 100644 --- a/components/calendar/__tests__/calendar-dialogs.test.tsx +++ b/components/calendar/__tests__/calendar-dialogs.test.tsx @@ -62,3 +62,21 @@ describe('import dialog from the keyboard', () => { expect(screen.getByRole('button', { name: /select_file/ })).toBeInTheDocument(); }); }); + +describe('import preview', () => { + it('names a repeating event\'s rule in the app language', async () => { + const weekly = { title: 'Gym', start: '2026-10-12T18:00:00', duration: 'PT1H', recurrenceRules: [{ '@type': 'RecurrenceRule', frequency: 'weekly', interval: 1 }] }; + const parsing = { + getAccountId: () => 'acct', + getCalendarsAccountId: () => 'acct', + uploadBlob: vi.fn().mockResolvedValue({ blobId: 'b1' }), + parseCalendarEvents: vi.fn().mockResolvedValue([weekly]), + } as unknown as IJMAPClient; + render(); + const file = new File(['BEGIN:VCALENDAR'], 'gym.ics', { type: 'text/calendar' }); + fireEvent.change(document.querySelector('input[type="file"]')!, { target: { files: [file] } }); + expect(await screen.findByText('Gym')).toBeInTheDocument(); + expect(screen.queryByText('weekly')).toBeNull(); + expect(screen.getByText('recurrence.weekly')).toBeInTheDocument(); + }); +}); diff --git a/components/calendar/__tests__/rsvp-buttons.test.tsx b/components/calendar/__tests__/rsvp-buttons.test.tsx index 195874b81..2e4305e3f 100644 --- a/components/calendar/__tests__/rsvp-buttons.test.tsx +++ b/components/calendar/__tests__/rsvp-buttons.test.tsx @@ -9,20 +9,25 @@ import { ParticipantStatusBadge, RsvpButtons } from '../rsvp-buttons'; describe('participation status colours', () => { it('writes answers in readable status shades, not the light fills', () => { render(); - const maybe = screen.getByRole('button', { name: 'participants.tentative' }); + const maybe = screen.getByRole('button', { name: 'participants.maybe' }); expect(maybe.className).toContain('text-amber-600'); expect(maybe.className).not.toMatch(/\btext-warning\b/); - expect(screen.getByRole('button', { name: 'participants.accepted' }).className).toContain('text-green-700'); + expect(screen.getByRole('button', { name: 'participants.accept' }).className).toContain('text-green-700'); }); it('puts dark text on the chosen yellow answer', () => { render(); - const maybe = screen.getByRole('button', { name: 'participants.tentative' }); + const maybe = screen.getByRole('button', { name: 'participants.maybe' }); expect(maybe).toHaveAttribute('aria-pressed', 'true'); expect(maybe.className).toContain('text-neutral-950'); expect(maybe.className).not.toContain('text-warning-foreground'); }); + it('labels the buttons with what they do, not the state', () => { + render(); + expect(screen.getAllByRole('button').map((b) => b.textContent)).toEqual(['participants.accept', 'participants.maybe', 'participants.decline']); + }); + it('colours a participant\'s answer the same way', () => { render(); expect(screen.getByText('participants.accepted').className).toContain('text-green-700'); diff --git a/components/calendar/calendar-app.tsx b/components/calendar/calendar-app.tsx index d03e1381d..d02991ab5 100644 --- a/components/calendar/calendar-app.tsx +++ b/components/calendar/calendar-app.tsx @@ -102,6 +102,7 @@ import { calendarShortcutAction } from "@/lib/calendar-shortcuts"; import { isEditableEventTarget } from "@/lib/keyboard"; import { isContextMenuOpen } from "@/components/ui/context-menu"; import { useRegisterCommands } from "@/lib/command-registry"; +import { useConfig } from "@/hooks/use-config"; // `fromEditor`: asked on the way out of the event editor, which stays open // until a scope is picked, so Cancel goes back to it with the changes. @@ -129,6 +130,7 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps = const tSidebar = useTranslations("sidebar"); useDocumentTitle(tSidebar("calendar")); const tWebcalAction = useTranslations("calendar.webcal_action"); + const { demoMode } = useConfig(); const tDeepLink = useTranslations("deep_link"); const isMobile = useIsMobile(); const isDesktop = useIsDesktop(); @@ -1552,8 +1554,8 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps = run: () => { setMobileReturnToMonth(false); setViewMode(mode); }, when: () => mode !== normalizedViewMode && (mode !== "tasks" || enableCalendarTasks), })), - { id: "import", label: t("toolbar.import"), icon: Upload, run: () => setShowImportModal(true) }, - { id: "subscribe", label: t("toolbar.subscribe"), icon: Globe, run: () => setShowSubscriptionModal(true) }, + { id: "import", label: t("toolbar.import"), icon: Upload, run: () => setShowImportModal(true), when: () => !demoMode }, + { id: "subscribe", label: t("toolbar.subscribe"), icon: Globe, run: () => setShowSubscriptionModal(true), when: () => !demoMode }, { id: "refresh", label: tCommon("refresh"), icon: RefreshCw, shortcut: "F5", run: () => { void refreshCalendar(); } }, ], isEmbedded ? isFocusedProTab : !proInterfaceActive); @@ -1883,8 +1885,8 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps = onViewModeChange={(mode) => { setMobileReturnToMonth(false); setViewMode(mode); }} onCreateEvent={openCreateForView} createLabel={createLabel} - onImport={() => setShowImportModal(true)} - onSubscribe={() => setShowSubscriptionModal(true)} + onImport={demoMode ? undefined : () => setShowImportModal(true)} + onSubscribe={demoMode ? undefined : () => setShowSubscriptionModal(true)} onRefresh={() => { void refreshCalendar(); }} isMobile={isMobile} onNavigateBack={isMobile && mobileReturnToMonth && normalizedViewMode === "day" ? navigateBackToMonth : undefined} @@ -2040,7 +2042,7 @@ export function CalendarApp({ linkSegments: routeSegments }: CalendarAppProps = } } : undefined} onCreateCalendar={client ? () => setShowCreateCalendar(true) : undefined} - onSubscribe={() => setShowSubscriptionModal(true)} + onSubscribe={demoMode ? undefined : () => setShowSubscriptionModal(true)} onEditSubscription={(subId) => setEditingSubscription(subId)} client={client} multiAccountMode={multiAccountEnabled && accountClients.length > 1} diff --git a/components/calendar/ical-import-modal.tsx b/components/calendar/ical-import-modal.tsx index d6688fa41..8389278ca 100644 --- a/components/calendar/ical-import-modal.tsx +++ b/components/calendar/ical-import-modal.tsx @@ -1,7 +1,8 @@ "use client"; import { useState, useCallback, useRef, useId } from "react"; -import { useTranslations } from "next-intl"; +import { useLocale, useTranslations } from "next-intl"; +import { buildRecurrenceSummary } from "./recurrence-editor"; import { Button } from "@/components/ui/button"; import { Upload, Check, RefreshCw, Globe } from "@/components/icons"; import { Dialog } from "@/components/ui/dialog"; @@ -33,6 +34,7 @@ type ImportMode = "file" | "url"; export function ICalImportModal({ calendars, client, onClose, initialUrl }: ICalImportModalProps) { const t = useTranslations("calendar.import"); const tCal = useTranslations("calendar"); + const locale = useLocale(); const tForm = useTranslations("calendar.form"); const importEvents = useCalendarStore((s) => s.importEvents); const timeFormat = useSettingsStore((s) => s.timeFormat); @@ -388,7 +390,7 @@ export function ICalImportModal({ calendars, client, onClose, initialUrl }: ICal {event.recurrenceRules && event.recurrenceRules.length > 0 && ( - {event.recurrenceRules[0].frequency} + {buildRecurrenceSummary(event.recurrenceRules[0], tCal, locale) ?? tCal("recurrence.custom")} )} diff --git a/components/calendar/rsvp-buttons.tsx b/components/calendar/rsvp-buttons.tsx index 0b3aac608..4b0a2cdd3 100644 --- a/components/calendar/rsvp-buttons.tsx +++ b/components/calendar/rsvp-buttons.tsx @@ -46,9 +46,9 @@ const CHOSEN: Record = { }; const ANSWERS: { status: Status; label: string }[] = [ - { status: "accepted", label: "participants.accepted" }, - { status: "tentative", label: "participants.tentative" }, - { status: "declined", label: "participants.declined" }, + { status: "accepted", label: "participants.accept" }, + { status: "tentative", label: "participants.maybe" }, + { status: "declined", label: "participants.decline" }, ]; /** The three answers to an invitation, the current one filled. */ diff --git a/locales/ar/common.json b/locales/ar/common.json index 443bda412..b911f8d05 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -3345,6 +3345,9 @@ "attendee": "حاضر", "accepted": "مقبول", "declined": "مرفوض", + "accept": "قبول", + "maybe": "ربما", + "decline": "رفض", "tentative": "مبدئي", "needs_action": "بحاجة إلى رد", "remove": "إزالة", @@ -3614,14 +3617,14 @@ "invalid_url": "يرجى إدخال رابط صالح", "url_fetch_failed": "فشل جلب التقويم من الرابط", "parsing": "جارٍ تحليل ملف التقويم...", - "parsed_events": "تم العثور على {count} حدث", + "parsed_events": "{count, plural, zero {لم يتم العثور على أي حدث} one {تم العثور على حدث واحد} two {تم العثور على حدثين} few {تم العثور على # أحداث} many {تم العثور على # حدثًا} other {تم العثور على # حدث}}", "no_events": "لم يتم العثور على أحداث في الملف", "select_all": "تحديد الكل", "deselect_all": "إلغاء تحديد الكل", "target_calendar": "الاستيراد إلى التقويم", "import_button": "استيراد المحدد", "importing": "جارٍ استيراد الأحداث...", - "success": "تم استيراد {count} حدث بنجاح", + "success": "{count, plural, zero {لم يُستورد أي حدث} one {تم استيراد حدث واحد} two {تم استيراد حدثين} few {تم استيراد # أحداث} many {تم استيراد # حدثًا} other {تم استيراد # حدث}}", "error": "فشل استيراد التقويم", "file_too_large": "الملف يتجاوز الحد الأقصى 10 ميغابايت", "invalid_format": "تنسيق ملف التقويم غير صالح" @@ -3656,7 +3659,7 @@ "default_updated": "تم تحديث التقويم الافتراضي", "error_default": "فشل تعيين التقويم الافتراضي", "clear_events": "مسح الأحداث", - "events_cleared": "تم مسح {count} حدث", + "events_cleared": "{count, plural, zero {لم يُمسح أي حدث} one {تم مسح حدث واحد} two {تم مسح حدثين} few {تم مسح # أحداث} many {تم مسح # حدثًا} other {تم مسح # حدث}}", "error_clear": "فشل مسح أحداث التقويم", "calendar_created": "تم إنشاء التقويم", "calendar_updated": "تم تحديث التقويم", @@ -3668,7 +3671,7 @@ "caldav_url": "رابط CalDAV", "copy_url": "نسخ رابط CalDAV", "url_copied": "تم نسخ رابط CalDAV إلى الحافظة", - "share": "مشاركة التقويم", + "share": "مشاركة التقويم…", "new_event_in_calendar": "حدث جديد في هذا التقويم", "shared_with": "مشترك مع {names}", "shared_with_count": "{count, plural, zero {غير مشترك مع أحد} one {مشترك مع شخص واحد} two {مشترك مع شخصين} few {مشترك مع # أشخاص} many {مشترك مع # شخصًا} other {مشترك مع # شخص}}", diff --git a/locales/ca/common.json b/locales/ca/common.json index 7865607cc..89d6b6165 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -3345,6 +3345,9 @@ "attendee": "Assistent", "accepted": "Acceptat", "declined": "Rebutjat", + "accept": "Accepta", + "maybe": "Potser", + "decline": "Rebutja", "tentative": "Provisional", "needs_action": "Cal resposta", "remove": "Elimina", @@ -3614,14 +3617,14 @@ "invalid_url": "Introduïu un URL vàlid", "url_fetch_failed": "No s'ha pogut obtenir el calendari des de l'URL", "parsing": "Analitzant el fitxer del calendari...", - "parsed_events": "{count} esdeveniments trobats", + "parsed_events": "{count, plural, one {# esdeveniment trobat} other {# esdeveniments trobats}}", "no_events": "No s'ha trobat cap esdeveniment al fitxer", "select_all": "Selecciona-ho tot", "deselect_all": "Desselecciona-ho tot", "target_calendar": "Importa al calendari", "import_button": "Importa la selecció", "importing": "Important els esdeveniments...", - "success": "{count} esdeveniments importats correctament", + "success": "{count, plural, one {# esdeveniment importat} other {# esdeveniments importats}}", "error": "No s'ha pogut importar el calendari", "file_too_large": "El fitxer supera el límit de 10 MB", "invalid_format": "Format de fitxer de calendari no vàlid" @@ -3656,7 +3659,7 @@ "default_updated": "Calendari predeterminat actualitzat", "error_default": "No s'ha pogut establir el calendari predeterminat", "clear_events": "Esborra els esdeveniments", - "events_cleared": "{count} esdeveniments esborrats", + "events_cleared": "{count, plural, one {# esdeveniment esborrat} other {# esdeveniments esborrats}}", "error_clear": "No s'han pogut esborrar els esdeveniments del calendari", "calendar_created": "Calendari creat", "calendar_updated": "Calendari actualitzat", @@ -3668,7 +3671,7 @@ "caldav_url": "URL de CalDAV", "copy_url": "Copia l'URL de CalDAV", "url_copied": "URL de CalDAV copiat al porta-retalls", - "share": "Comparteix el calendari", + "share": "Comparteix el calendari…", "new_event_in_calendar": "Esdeveniment nou en aquest calendari", "shared_with": "Compartit amb {names}", "shared_with_count": "{count, plural, one {Compartit amb 1 persona} other {Compartit amb # persones}}", diff --git a/locales/cs/common.json b/locales/cs/common.json index 0b1fc0f7e..864f1cfc8 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -3345,6 +3345,9 @@ "attendee": "Účastník", "accepted": "Přijato", "declined": "Odmítnuto", + "accept": "Přijmout", + "maybe": "Možná", + "decline": "Odmítnout", "tentative": "Nezávazně", "needs_action": "Vyžaduje akci", "remove": "Odstranit", @@ -3585,14 +3588,14 @@ "invalid_url": "Zadejte platnou adresu URL", "url_fetch_failed": "Načtení kalendáře z adresy URL selhalo", "parsing": "Analyzování souboru kalendáře...", - "parsed_events": "Nalezeno {count} událostí", + "parsed_events": "{count, plural, one {Nalezena # událost} few {Nalezeny # události} many {Nalezeno # události} other {Nalezeno # událostí}}", "no_events": "V souboru nebyly nalezeny žádné události", "select_all": "Vybrat vše", "deselect_all": "Zrušit výběr všeho", "target_calendar": "Importovat do kalendáře", "import_button": "Importovat vybrané", "importing": "Importování událostí...", - "success": "Úspěšně importováno {count} událostí", + "success": "{count, plural, one {Importována # událost} few {Importovány # události} many {Importováno # události} other {Importováno # událostí}}", "error": "Import kalendáře selhal", "file_too_large": "Soubor překračuje limit 10 MB", "invalid_format": "Neplatný formát souboru kalendáře" @@ -3627,7 +3630,7 @@ "default_updated": "Výchozí kalendář aktualizován", "error_default": "Nepodařilo se nastavit výchozí kalendář", "clear_events": "Vymazat události", - "events_cleared": "Vymazáno {count} událostí", + "events_cleared": "{count, plural, one {Vymazána # událost} few {Vymazány # události} many {Vymazáno # události} other {Vymazáno # událostí}}", "error_clear": "Vymazání událostí kalendáře selhalo", "calendar_created": "Kalendář byl vytvořen", "calendar_updated": "Kalendář byl aktualizován", @@ -3639,7 +3642,7 @@ "caldav_url": "URL CalDAV", "copy_url": "Kopírovat URL CalDAV", "url_copied": "URL CalDAV zkopírováno do schránky", - "share": "Sdílet kalendář", + "share": "Sdílet kalendář…", "new_event_in_calendar": "Nová událost v tomto kalendáři", "shared_with": "Sdíleno s: {names}", "shared_with_count": "{count, plural, one {Sdíleno s 1 osobou} few {Sdíleno s # osobami} many {Sdíleno s # osoby} other {Sdíleno s # osobami}}", diff --git a/locales/da/common.json b/locales/da/common.json index c413e0da3..3faf0fd07 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -3345,6 +3345,9 @@ "attendee": "Deltager", "accepted": "Accepteret", "declined": "Afslået", + "accept": "Acceptér", + "maybe": "Måske", + "decline": "Afvis", "tentative": "Foreløbig", "needs_action": "Kræver handling", "remove": "Fjern", @@ -3611,14 +3614,14 @@ "invalid_url": "Indtast en gyldig URL", "url_fetch_failed": "Kunne ikke hente kalender fra URL", "parsing": "Parser kalenderfil...", - "parsed_events": "{count} begivenheder fundet", + "parsed_events": "{count, plural, one {# begivenhed fundet} other {# begivenheder fundet}}", "no_events": "Ingen begivenheder fundet i filen", "select_all": "Vælg alle", "deselect_all": "Fravælg alle", "target_calendar": "Importér til kalender", "import_button": "Importér valgte", "importing": "Importerer begivenheder...", - "success": "{count} begivenheder importeret", + "success": "{count, plural, one {# begivenhed importeret} other {# begivenheder importeret}}", "error": "Kunne ikke importere kalender", "file_too_large": "Filen overstiger 10 MB grænsen", "invalid_format": "Ugyldigt kalenderfilformat" @@ -3653,7 +3656,7 @@ "default_updated": "Standardkalender opdateret", "error_default": "Kunne ikke angive standardkalender", "clear_events": "Ryd begivenheder", - "events_cleared": "{count} begivenheder ryddet", + "events_cleared": "{count, plural, one {# begivenhed ryddet} other {# begivenheder ryddet}}", "error_clear": "Kunne ikke rydde kalenderbegivenheder", "calendar_created": "Kalender oprettet", "calendar_updated": "Kalender opdateret", @@ -3665,7 +3668,7 @@ "caldav_url": "CalDAV-URL", "copy_url": "Kopier CalDAV-URL", "url_copied": "CalDAV-URL kopieret til udklipsholder", - "share": "Del kalender", + "share": "Del kalender…", "new_event_in_calendar": "Ny begivenhed i denne kalender", "shared_with": "Delt med {names}", "shared_with_count": "{count, plural, one {Delt med 1 person} other {Delt med # personer}}", diff --git a/locales/de/common.json b/locales/de/common.json index 3eb6e245d..8eb02f840 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -3345,6 +3345,9 @@ "attendee": "Teilnehmer", "accepted": "Zugesagt", "declined": "Abgelehnt", + "accept": "Zusagen", + "maybe": "Vielleicht", + "decline": "Absagen", "tentative": "Vorläufig", "needs_action": "Antwort ausstehend", "remove": "Entfernen", @@ -3585,14 +3588,14 @@ "invalid_url": "Bitte geben Sie eine gültige URL ein", "url_fetch_failed": "Kalender konnte nicht von der URL abgerufen werden", "parsing": "Kalenderdatei wird analysiert...", - "parsed_events": "{count} Termine gefunden", + "parsed_events": "{count, plural, one {# Termin gefunden} other {# Termine gefunden}}", "no_events": "Keine Termine in der Datei gefunden", "select_all": "Alle auswählen", "deselect_all": "Alle abwählen", "target_calendar": "In Kalender importieren", "import_button": "Auswahl importieren", "importing": "Termine werden importiert...", - "success": "{count} Termine erfolgreich importiert", + "success": "{count, plural, one {# Termin importiert} other {# Termine importiert}}", "error": "Kalender konnte nicht importiert werden", "file_too_large": "Datei überschreitet das 10-MB-Limit", "invalid_format": "Ungültiges Kalenderdateiformat" @@ -3637,9 +3640,9 @@ "default_updated": "Standardkalender aktualisiert", "error_default": "Standardkalender konnte nicht festgelegt werden", "clear_events": "Ereignisse löschen", - "events_cleared": "{count} Ereignisse gelöscht", + "events_cleared": "{count, plural, one {# Termin gelöscht} other {# Termine gelöscht}}", "error_clear": "Kalenderereignisse konnten nicht gelöscht werden", - "share": "Kalender freigeben", + "share": "Kalender freigeben…", "new_event_in_calendar": "Neuer Termin in diesem Kalender", "shared_with": "Geteilt mit {names}", "shared_with_count": "{count, plural, one {Mit 1 Person geteilt} other {Mit # Personen geteilt}}", diff --git a/locales/en/common.json b/locales/en/common.json index 918a88fa4..f127c705c 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -3303,7 +3303,7 @@ "go_to_today": "Go to today" }, "detail": { - "add_note": "Add a note...", + "add_note": "Add a note…", "save_note": "Save", "note_saved": "Note added", "open_link": "Open link", @@ -3345,6 +3345,9 @@ "attendee": "Attendee", "accepted": "Accepted", "declined": "Declined", + "accept": "Accept", + "maybe": "Maybe", + "decline": "Decline", "tentative": "Tentative", "needs_action": "Needs action", "remove": "Remove", @@ -3563,8 +3566,8 @@ "task_update_error": "Couldn't update task", "calendar_created": "Calendar created", "calendar_deleted": "Calendar deleted", - "event_move_error": "Failed to move event", - "event_resize_error": "Failed to resize event", + "event_move_error": "Couldn't move event", + "event_resize_error": "Couldn't resize event", "alert_title": "Upcoming event", "alert_now": "Starting now", "alert_in_minutes": "In {count} min", @@ -3573,18 +3576,18 @@ "invitations_denied": "The server refused to send the invitations: {reason}. Save the event without sending them?", "save_without_invitations": "Save without invitations", "rsvp_updated": "Response updated", - "rsvp_error": "Failed to update response", + "rsvp_error": "Couldn't send your response", "participant_limit": "The server allows at most {max, plural, one {# participant} other {# participants}} per event, including the organizer, so it refused this change. An administrator can raise the limit.", "event_duplicated": "Event duplicated", - "event_error": "Failed to save event", + "event_error": "Couldn't save event", "task_due": "Task due", "event_exported": "Event exported", "title_copied": "Title copied", "link_copied": "Link copied" }, "status": { - "loading_calendars": "Loading calendars...", - "loading_events": "Loading events...", + "loading_calendars": "Loading calendars…", + "loading_events": "Loading events…", "events_load_failed": "Couldn't load events. The calendar may be out of date.", "tasks_load_failed": "Couldn't load tasks. The list may be out of date.", "retry": "Try again" @@ -3601,7 +3604,7 @@ "nav_hide_sidebar": "Hide sidebar", "nav_show_sidebar": "Show sidebar", "import": { - "title": "Import Calendar", + "title": "Import calendar", "tab_file": "File", "tab_url": "URL", "select_file": "Select .ics file", @@ -3612,17 +3615,17 @@ "url_hint": "Supports iCalendar (.ics) URLs", "fetch": "Fetch", "invalid_url": "Please enter a valid URL", - "url_fetch_failed": "Failed to fetch calendar from URL", - "parsing": "Parsing calendar file...", - "parsed_events": "{count} events found", + "url_fetch_failed": "Couldn't fetch the calendar from this URL", + "parsing": "Reading the calendar file…", + "parsed_events": "{count, plural, one {# event found} other {# events found}}", "no_events": "No events found in file", "select_all": "Select all", "deselect_all": "Deselect all", "target_calendar": "Import to calendar", "import_button": "Import selected", - "importing": "Importing events...", - "success": "{count} events imported successfully", - "error": "Failed to import calendar", + "importing": "Importing events…", + "success": "{count, plural, one {# event imported} other {# events imported}}", + "error": "Couldn't import calendar", "file_too_large": "File exceeds 10MB limit", "invalid_format": "Invalid calendar file format" }, @@ -3636,7 +3639,7 @@ "cancel": "Cancel" }, "management": { - "title": "Calendar Management", + "title": "Calendar management", "description": "Create, rename, and customize your calendars. Right-click a calendar in the sidebar to quickly change its color.", "name": "Name", "name_placeholder": "Calendar name", @@ -3654,21 +3657,21 @@ "confirm_clear": "Clear all events from \"{name}\"? This cannot be undone.", "set_default": "Set as default", "default_updated": "Default calendar updated", - "error_default": "Failed to set default calendar", + "error_default": "Couldn't set default calendar", "clear_events": "Clear events", - "events_cleared": "{count} events cleared", - "error_clear": "Failed to clear calendar events", + "events_cleared": "{count, plural, one {# event cleared} other {# events cleared}}", + "error_clear": "Couldn't clear calendar events", "calendar_created": "Calendar created", "calendar_updated": "Calendar updated", "calendar_deleted": "Calendar deleted", "color_updated": "Calendar color updated", - "error_create": "Failed to create calendar", - "error_update": "Failed to update calendar", - "error_delete": "Failed to delete calendar", + "error_create": "Couldn't create calendar", + "error_update": "Couldn't update calendar", + "error_delete": "Couldn't delete calendar", "caldav_url": "CalDAV URL", "copy_url": "Copy CalDAV URL", "url_copied": "CalDAV URL copied to clipboard", - "share": "Share calendar", + "share": "Share calendar…", "new_event_in_calendar": "New event in this calendar", "shared_with": "Shared with {names}", "shared_with_count": "{count, plural, one {Shared with 1 person} other {Shared with # people}}", @@ -3687,8 +3690,8 @@ "default_alerts_updated": "Default reminders updated" }, "subscription": { - "title": "iCal Subscription", - "section_title": "iCal Subscriptions", + "title": "iCal subscription", + "section_title": "iCal subscriptions", "description": "Subscribe to an external iCalendar feed. Events will be synced automatically into their own calendar. Supports https:// and webcal:// URLs.", "url_label": "Calendar URL", "url_placeholder": "https://example.com/calendar.ics or webcal://...", @@ -3702,23 +3705,23 @@ "interval_360": "Every 6 hours", "interval_1440": "Every day", "subscribe": "Subscribe", - "subscribing": "Subscribing...", + "subscribing": "Subscribing…", "save": "Save changes", - "saving": "Saving...", + "saving": "Saving…", "edit": "Edit", - "edit_title": "Edit Subscription", + "edit_title": "Edit subscription", "updated": "Updated \"{name}\"", - "update_error": "Failed to update subscription", + "update_error": "Couldn't update subscription", "invalid_url": "Please enter a valid URL", "success": "Subscribed to \"{name}\"", - "error": "Failed to add subscription", + "error": "Couldn't add subscription", "refresh": "Refresh now", "refresh_success": "Subscription refreshed", - "refresh_error": "Failed to refresh subscription", + "refresh_error": "Couldn't refresh subscription", "unsubscribe": "Unsubscribe", "confirm_delete": "Unsubscribe from \"{name}\"? The calendar and all its events will be removed.", "deleted": "Subscription removed", - "delete_error": "Failed to remove subscription", + "delete_error": "Couldn't remove subscription", "last_refreshed": "Last updated: {time}" }, "tasks": { @@ -3731,10 +3734,10 @@ "filter_pending": "Pending", "filter_completed": "Completed", "filter_overdue": "Overdue", - "create": "New Task", - "edit": "Edit Task", + "create": "New task", + "edit": "Edit task", "title_placeholder": "Task title", - "description_placeholder": "Add a description...", + "description_placeholder": "Add a description…", "due_date": "Due date", "include_time": "Include time", "priority": "Priority", @@ -3759,7 +3762,7 @@ "delete": "Delete", "cancel": "Cancel", "save": "Save", - "quick_add_placeholder": "Add a task...", + "quick_add_placeholder": "Add a task…", "due_today": "Today", "due_tomorrow": "Tomorrow", "overdue": "Overdue" diff --git a/locales/es/common.json b/locales/es/common.json index 33724aec2..556518fa3 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -3345,6 +3345,9 @@ "attendee": "Participante", "accepted": "Aceptado", "declined": "Rechazado", + "accept": "Aceptar", + "maybe": "Quizás", + "decline": "Rechazar", "tentative": "Provisional", "needs_action": "Pendiente de respuesta", "remove": "Eliminar", @@ -3585,14 +3588,14 @@ "invalid_url": "Introduce una URL válida", "url_fetch_failed": "No se pudo obtener el calendario desde la URL", "parsing": "Analizando archivo de calendario...", - "parsed_events": "{count} eventos encontrados", + "parsed_events": "{count, plural, one {# evento encontrado} other {# eventos encontrados}}", "no_events": "No se encontraron eventos en el archivo", "select_all": "Seleccionar todo", "deselect_all": "Deseleccionar todo", "target_calendar": "Importar al calendario", "import_button": "Importar selección", "importing": "Importando eventos...", - "success": "{count} eventos importados correctamente", + "success": "{count, plural, one {# evento importado} other {# eventos importados}}", "error": "Error al importar el calendario", "file_too_large": "El archivo supera el límite de 10 MB", "invalid_format": "Formato de archivo de calendario no válido" @@ -3637,9 +3640,9 @@ "default_updated": "Calendario predeterminado actualizado", "error_default": "Error al establecer el calendario predeterminado", "clear_events": "Borrar eventos", - "events_cleared": "{count} eventos borrados", + "events_cleared": "{count, plural, one {# evento borrado} other {# eventos borrados}}", "error_clear": "No se pudieron borrar los eventos del calendario", - "share": "Compartir calendario", + "share": "Compartir calendario…", "new_event_in_calendar": "Nuevo evento en este calendario", "shared_with": "Compartido con {names}", "shared_with_count": "{count, plural, one {Compartido con 1 persona} other {Compartido con # personas}}", diff --git a/locales/et/common.json b/locales/et/common.json index c4790b36a..931572857 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -3345,6 +3345,9 @@ "attendee": "Osaleja", "accepted": "Nõustunud", "declined": "Keeldunud", + "accept": "Nõustu", + "maybe": "Võib-olla", + "decline": "Keeldu", "tentative": "Esialgne", "needs_action": "Vajab vastust", "remove": "Eemalda", @@ -3614,14 +3617,14 @@ "invalid_url": "Palun sisesta kehtiv URL", "url_fetch_failed": "Kalendri laadimine URL-ilt ebaõnnestus", "parsing": "Kalendrifaili töötlemine...", - "parsed_events": "Leiti {count} sündmust", + "parsed_events": "{count, plural, one {Leiti # sündmus} other {Leiti # sündmust}}", "no_events": "Failist ei leitud sündmusi", "select_all": "Vali kõik", "deselect_all": "Tühista kõigi valik", "target_calendar": "Impordi kalendrisse", "import_button": "Impordi valitud", "importing": "Sündmuste importimine...", - "success": "{count} sündmust imporditi edukalt", + "success": "{count, plural, one {Imporditi # sündmus} other {Imporditi # sündmust}}", "error": "Kalendri importimine ebaõnnestus", "file_too_large": "Fail ületab 10 MB piirangu", "invalid_format": "Vale kalendrifaili vorming" @@ -3656,7 +3659,7 @@ "default_updated": "Vaikekalender uuendatud", "error_default": "Vaikekalendri määramine ebaõnnestus", "clear_events": "Tühjenda sündmused", - "events_cleared": "{count} sündmust tühjendatud", + "events_cleared": "{count, plural, one {# sündmus tühjendatud} other {# sündmust tühjendatud}}", "error_clear": "Kalendrisündmuste tühjendamine ebaõnnestus", "calendar_created": "Kalender loodud", "calendar_updated": "Kalender uuendatud", @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV URL", "copy_url": "Kopeeri CalDAV URL", "url_copied": "CalDAV URL kopeeriti lõikelauale", - "share": "Jaga kalendrit", + "share": "Jaga kalendrit…", "new_event_in_calendar": "Uus sündmus selles kalendris", "shared_with": "Jagatud: {names}", "shared_with_count": "{count, plural, one {Jagatud 1 inimesega} other {Jagatud # inimesega}}", diff --git a/locales/fa/common.json b/locales/fa/common.json index bdbdd85ec..301a70765 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -3345,6 +3345,9 @@ "attendee": "شرکت‌کننده", "accepted": "پذیرفته شد", "declined": "رد شد", + "accept": "پذیرفتن", + "maybe": "شاید", + "decline": "رد کردن", "tentative": "احتمالی", "needs_action": "نیاز به اقدام", "remove": "حذف", @@ -3621,7 +3624,7 @@ "target_calendar": "وارد کردن به تقویم", "import_button": "وارد کردن انتخاب‌شده‌ها", "importing": "در حال وارد کردن رویدادها...", - "success": "{count} رویداد با موفقیت وارد شد", + "success": "{count} رویداد وارد شد", "error": "وارد کردن تقویم ناموفق بود", "file_too_large": "حجم فایل بیش از ۱۰ مگابایت است", "invalid_format": "فرمت فایل تقویم نامعتبر است" @@ -3668,7 +3671,7 @@ "caldav_url": "آدرس CalDAV", "copy_url": "کپی آدرس CalDAV", "url_copied": "آدرس CalDAV در کلیپ‌بورد کپی شد", - "share": "اشتراک‌گذاری تقویم", + "share": "اشتراک‌گذاری تقویم…", "new_event_in_calendar": "رویداد جدید در این تقویم", "shared_with": "به اشتراک گذاشته شده با {names}", "shared_with_count": "{count, plural, one {با ۱ نفر به اشتراک گذاشته شده} other {با # نفر به اشتراک گذاشته شده}}", diff --git a/locales/fr/common.json b/locales/fr/common.json index cf6c37d39..a19525a0f 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -3345,6 +3345,9 @@ "attendee": "Participant", "accepted": "Accepté", "declined": "Refusé", + "accept": "Accepter", + "maybe": "Peut-être", + "decline": "Refuser", "tentative": "Provisoire", "needs_action": "En attente de réponse", "remove": "Retirer", @@ -3611,14 +3614,14 @@ "invalid_url": "Veuillez entrer une URL valide", "url_fetch_failed": "Impossible de récupérer le calendrier depuis l'URL", "parsing": "Analyse du fichier en cours...", - "parsed_events": "{count} événements trouvés", + "parsed_events": "{count, plural, one {# événement trouvé} other {# événements trouvés}}", "no_events": "Aucun événement trouvé dans le fichier", "select_all": "Tout sélectionner", "deselect_all": "Tout désélectionner", "target_calendar": "Importer dans le calendrier", "import_button": "Importer la sélection", "importing": "Importation en cours...", - "success": "{count} événements importés avec succès", + "success": "{count, plural, one {# événement importé} other {# événements importés}}", "error": "Échec de l'importation du calendrier", "file_too_large": "Le fichier dépasse la limite de 10 Mo", "invalid_format": "Format de fichier calendrier invalide" @@ -3663,9 +3666,9 @@ "default_updated": "Calendrier par défaut mis à jour", "error_default": "Échec de la définition du calendrier par défaut", "clear_events": "Supprimer les événements", - "events_cleared": "{count} événements supprimés", + "events_cleared": "{count, plural, one {# événement supprimé} other {# événements supprimés}}", "error_clear": "Impossible de supprimer les événements du calendrier", - "share": "Partager le calendrier", + "share": "Partager le calendrier…", "new_event_in_calendar": "Nouvel événement dans ce calendrier", "shared_with": "Partagé avec {names}", "shared_with_count": "{count, plural, one {Partagé avec 1 personne} other {Partagé avec # personnes}}", diff --git a/locales/he/common.json b/locales/he/common.json index 400c1efa6..e0c56d656 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -3263,6 +3263,9 @@ "attendee": "משתתף", "accepted": "התקבל", "declined": "נדחה", + "accept": "אישור", + "maybe": "אולי", + "decline": "דחייה", "tentative": "טנטטיבי", "needs_action": "צריך פעולה", "remove": "הסר", @@ -3503,14 +3506,14 @@ "invalid_url": "אנא הזן כתובת אתר חוקית", "url_fetch_failed": "אחזור היומן מ-URL נכשל", "parsing": "מנתח קובץ לוח שנה...", - "parsed_events": "נמצאו אירועים של{count}", + "parsed_events": "{count, plural, one {נמצא אירוע אחד} other {נמצאו # אירועים}}", "no_events": "לא נמצאו אירועים בקובץ", "select_all": "בחר הכל", "deselect_all": "בטל את הבחירה בכולם", "target_calendar": "ייבא ליומן", "import_button": "ייבא נבחר", "importing": "מייבא אירועים...", - "success": "אירועי{count}יובאו בהצלחה", + "success": "{count, plural, one {אירוע אחד יובא} other {# אירועים יובאו}}", "error": "ייבוא היומן נכשל", "file_too_large": "הקובץ חורג ממגבלת 10MB", "invalid_format": "פורמט קובץ לוח שנה לא חוקי" @@ -3532,7 +3535,7 @@ "confirm_delete": "למחוק את \"{name}\"? כל האירועים בלוח השנה הזה יוסרו.", "confirm_clear": "לנקות את כל האירועים מ-\"{name}\"? לא ניתן לבטל זאת.", "clear_events": "נקה אירועים", - "events_cleared": "אירועי{count}נוקו", + "events_cleared": "{count, plural, one {אירוע אחד נוקה} other {# אירועים נוקו}}", "error_clear": "נכשל ניקוי אירועים ביומן", "calendar_created": "יומן נוצר", "calendar_updated": "לוח השנה עודכן", @@ -3548,7 +3551,7 @@ "set_default": "הגדר כברירת מחדל", "default_updated": "לוח שנה ברירת המחדל עודכן", "error_default": "נכשל בהגדרת לוח שנה ברירת מחדל", - "share": "שתף לוח שנה", + "share": "שתף לוח שנה…", "new_event_in_calendar": "אירוע חדש בלוח שנה זה", "shared_with": "משותף עם {names}", "shared_with_count": "{count, plural, one {משותף עם אדם אחד} two {משותף עם שני אנשים} other {משותף עם # אנשים}}", diff --git a/locales/hu/common.json b/locales/hu/common.json index 82f8c103d..9219b2c85 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -3345,6 +3345,9 @@ "attendee": "Résztvevő", "accepted": "Elfogadva", "declined": "Elutasítva", + "accept": "Elfogadás", + "maybe": "Talán", + "decline": "Elutasítás", "tentative": "Előzetes", "needs_action": "Művelet szükséges", "remove": "Eltávolítás", @@ -3621,7 +3624,7 @@ "target_calendar": "Importálás ebbe a naptárba", "import_button": "Kijelöltek importálása", "importing": "Események importálása...", - "success": "{count} esemény sikeresen importálva", + "success": "{count} esemény importálva", "error": "Nem sikerült importálni a naptárt", "file_too_large": "A fájl meghaladja a 10 MB korlátot", "invalid_format": "Érvénytelen naptár fájl formátum" @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV URL", "copy_url": "CalDAV URL másolása", "url_copied": "CalDAV URL a vágólapra másolva", - "share": "Naptár megosztása", + "share": "Naptár megosztása…", "new_event_in_calendar": "Új esemény ebben a naptárban", "shared_with": "Megosztva: {names}", "shared_with_count": "{count, plural, one {Megosztva 1 személlyel} other {Megosztva # személlyel}}", diff --git a/locales/it/common.json b/locales/it/common.json index b8bbac629..2a3139e19 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -3345,6 +3345,9 @@ "attendee": "Partecipante", "accepted": "Accettato", "declined": "Rifiutato", + "accept": "Accetta", + "maybe": "Forse", + "decline": "Rifiuta", "tentative": "Provvisorio", "needs_action": "In attesa di risposta", "remove": "Rimuovi", @@ -3585,14 +3588,14 @@ "invalid_url": "Inserisci un URL valido", "url_fetch_failed": "Impossibile recuperare il calendario dall'URL", "parsing": "Analisi del file in corso...", - "parsed_events": "{count} eventi trovati", + "parsed_events": "{count, plural, one {# evento trovato} other {# eventi trovati}}", "no_events": "Nessun evento trovato nel file", "select_all": "Seleziona tutto", "deselect_all": "Deseleziona tutto", "target_calendar": "Importa nel calendario", "import_button": "Importa selezionati", "importing": "Importazione eventi...", - "success": "{count} eventi importati con successo", + "success": "{count, plural, one {# evento importato} other {# eventi importati}}", "error": "Importazione del calendario fallita", "file_too_large": "Il file supera il limite di 10 MB", "invalid_format": "Formato del file calendario non valido" @@ -3637,9 +3640,9 @@ "default_updated": "Calendario predefinito aggiornato", "error_default": "Impossibile impostare il calendario predefinito", "clear_events": "Cancella eventi", - "events_cleared": "{count} eventi cancellati", + "events_cleared": "{count, plural, one {# evento cancellato} other {# eventi cancellati}}", "error_clear": "Impossibile cancellare gli eventi del calendario", - "share": "Condividi calendario", + "share": "Condividi calendario…", "new_event_in_calendar": "Nuovo evento in questo calendario", "shared_with": "Condiviso con {names}", "shared_with_count": "{count, plural, one {Condiviso con 1 persona} other {Condiviso con # persone}}", diff --git a/locales/ja/common.json b/locales/ja/common.json index 3451b4b50..a7a9c0796 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -3345,6 +3345,9 @@ "attendee": "参加者", "accepted": "承諾", "declined": "辞退", + "accept": "承諾", + "maybe": "未定", + "decline": "辞退", "tentative": "仮承諾", "needs_action": "未回答", "remove": "削除", @@ -3639,7 +3642,7 @@ "clear_events": "イベントを削除", "events_cleared": "{count}件のイベントを削除しました", "error_clear": "カレンダーイベントの削除に失敗しました", - "share": "カレンダーを共有", + "share": "カレンダーを共有…", "new_event_in_calendar": "このカレンダーに新規イベント", "shared_with": "{names} と共有", "shared_with_count": "{count, plural, other {#人と共有}}", diff --git a/locales/ko/common.json b/locales/ko/common.json index 7e5ba0e24..96eb4c3c0 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -3345,6 +3345,9 @@ "attendee": "참석자", "accepted": "수락함", "declined": "거절함", + "accept": "수락", + "maybe": "미정", + "decline": "거절", "tentative": "미정", "needs_action": "응답 필요", "remove": "삭제", @@ -3592,7 +3595,7 @@ "target_calendar": "저장할 캘린더", "import_button": "선택 항목 가져오기", "importing": "일정을 가져오는 중...", - "success": "{count}개의 일정을 성공적으로 가져왔어요", + "success": "{count}개의 일정을 가져왔어요", "error": "캘린더를 가져오지 못했어요", "file_too_large": "파일이 10MB 제한을 넘었어요", "invalid_format": "캘린더 파일 형식이 올바르지 않아요" @@ -3639,7 +3642,7 @@ "caldav_url": "CalDAV URL", "copy_url": "CalDAV URL 복사", "url_copied": "CalDAV URL이 클립보드에 복사되었어요", - "share": "캘린더 공유", + "share": "캘린더 공유…", "new_event_in_calendar": "이 캘린더에 새 일정", "shared_with": "공유 대상: {names}", "shared_with_count": "{count, plural, other {#명과 공유됨}}", diff --git a/locales/lv/common.json b/locales/lv/common.json index 32a698615..c23924a42 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -3344,6 +3344,9 @@ "attendee": "Dalībnieks", "accepted": "Pieņemts", "declined": "Noraidīts", + "accept": "Pieņemt", + "maybe": "Varbūt", + "decline": "Noraidīt", "tentative": "Pagaidām", "needs_action": "Nepieciešama atbilde", "remove": "Noņemt", @@ -3584,14 +3587,14 @@ "invalid_url": "Ievadiet derīgu URL", "url_fetch_failed": "Neizdevās iegūt kalendāru no saites", "parsing": "Nolasa kalendāra failu...", - "parsed_events": "Atrasti {count} pasākumi", + "parsed_events": "{count, plural, zero {Atrasti # pasākumi} one {Atrasts # pasākums} other {Atrasti # pasākumi}}", "no_events": "Failā netika atrasti pasākumi", "select_all": "Atlasīt visus", "deselect_all": "Noņemt atlasi", "target_calendar": "Importēt kalendārā", "import_button": "Importēt atlasītos", "importing": "Importē pasākumus...", - "success": "{count} pasākumi veiksmīgi importēti", + "success": "{count, plural, zero {Importēti # pasākumi} one {Importēts # pasākums} other {Importēti # pasākumi}}", "error": "Neizdevās importēt kalendāru", "file_too_large": "Fails pārsniedz 10 MB limitu", "invalid_format": "Nederīgs kalendāra faila formāts" @@ -3626,7 +3629,7 @@ "default_updated": "Noklusējuma kalendārs atjaunināts", "error_default": "Neizdevās iestatīt noklusējuma kalendāru", "clear_events": "Iztīrīt pasākumus", - "events_cleared": "Iztīrīti {count} pasākumi", + "events_cleared": "{count, plural, zero {Iztīrīti # pasākumi} one {Iztīrīts # pasākums} other {Iztīrīti # pasākumi}}", "error_clear": "Neizdevās iztīrīt kalendāra pasākumus", "calendar_created": "Kalendārs izveidots", "calendar_updated": "Kalendārs atjaunināts", @@ -3638,7 +3641,7 @@ "caldav_url": "CalDAV URL", "copy_url": "Kopēt CalDAV URL", "url_copied": "CalDAV URL nokopēts starpliktuvē", - "share": "Kopīgot kalendāru", + "share": "Kopīgot kalendāru…", "new_event_in_calendar": "Jauns notikums šajā kalendārā", "shared_with": "Kopīgots ar: {names}", "shared_with_count": "{count, plural, zero {Kopīgots ar # personām} one {Kopīgots ar # personu} other {Kopīgots ar # personām}}", diff --git a/locales/mn/common.json b/locales/mn/common.json index c9ac88f45..3e4913096 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -3345,6 +3345,9 @@ "attendee": "Оролцогч", "accepted": "Хүлээн зөвшөөрсөн", "declined": "Татгалзсан", + "accept": "Зөвшөөрөх", + "maybe": "Магадгүй", + "decline": "Татгалзах", "tentative": "Урьдчилсан", "needs_action": "Арга хэмжээ авах шаардлагатай", "remove": "Устгах", @@ -3621,7 +3624,7 @@ "target_calendar": "Хуанли руу импортлох", "import_button": "Импортыг сонгосон", "importing": "Үйл явдал импортлож байна...", - "success": "{count} арга хэмжээг амжилттай импортолсон", + "success": "{count} арга хэмжээг импортолсон", "error": "Хуанли импорт хийж чадсангүй", "file_too_large": "Файл 10МБ-ын хязгаараас хэтэрсэн байна", "invalid_format": "Хуанли файлын формат буруу байна" @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV URL", "copy_url": "CalDAV URL-г хуулах", "url_copied": "CalDAV URL-г санах ой руу хуулсан", - "share": "Хуанлигаа хуваалцах", + "share": "Хуанлигаа хуваалцах…", "new_event_in_calendar": "Энэ хуанли дахь шинэ арга хэмжээ", "shared_with": "Хуваалцсан: {names}", "shared_with_count": "{count, plural, one {1 хүнтэй хуваалцсан} other {# хүнтэй хуваалцсан}}", diff --git a/locales/nb/common.json b/locales/nb/common.json index 28541507c..ec51e2d2a 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -3345,6 +3345,9 @@ "attendee": "Deltaker", "accepted": "Godtatt", "declined": "Avslått", + "accept": "Godta", + "maybe": "Kanskje", + "decline": "Avslå", "tentative": "Kanskje", "needs_action": "Har ikke svart", "remove": "Fjern", @@ -3614,14 +3617,14 @@ "invalid_url": "Skriv inn en gyldig URL", "url_fetch_failed": "Kunne ikke hente kalenderen fra nettadressen", "parsing": "Leser kalenderfilen...", - "parsed_events": "Hendelser funnet: {count}", + "parsed_events": "{count, plural, one {# hendelse funnet} other {# hendelser funnet}}", "no_events": "Ingen hendelser funnet i filen", "select_all": "Velg alle", "deselect_all": "Fjern alle markeringer", "target_calendar": "Importer til kalender", "import_button": "Importer valgte hendelser", "importing": "Importerer hendelser...", - "success": "Importerte hendelser: {count}", + "success": "{count, plural, one {# hendelse importert} other {# hendelser importert}}", "error": "Kunne ikke importere kalenderen", "file_too_large": "Filen er større enn grensen på 10 MB", "invalid_format": "Ugyldig kalenderfilformat" @@ -3656,7 +3659,7 @@ "default_updated": "Standardkalenderen er oppdatert", "error_default": "Kunne ikke angi standardkalender", "clear_events": "Fjern alle hendelser", - "events_cleared": "Hendelser fjernet: {count}", + "events_cleared": "{count, plural, one {# hendelse fjernet} other {# hendelser fjernet}}", "error_clear": "Kunne ikke fjerne kalenderhendelsene", "calendar_created": "Kalenderen er opprettet", "calendar_updated": "Kalenderen er oppdatert", @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV-URL", "copy_url": "Kopier CalDAV-URL", "url_copied": "CalDAV-URL kopiert til utklippstavlen", - "share": "Del kalender", + "share": "Del kalender…", "new_event_in_calendar": "Ny hendelse i denne kalenderen", "shared_with": "Delt med {names}", "shared_with_count": "{count, plural, one {Delt med 1 person} other {Delt med # personer}}", diff --git a/locales/nl/common.json b/locales/nl/common.json index 76e67bd0f..f8e808850 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -3345,6 +3345,9 @@ "attendee": "Deelnemer", "accepted": "Geaccepteerd", "declined": "Geweigerd", + "accept": "Accepteren", + "maybe": "Misschien", + "decline": "Weigeren", "tentative": "Voorlopig", "needs_action": "Reactie vereist", "remove": "Verwijderen", @@ -3585,14 +3588,14 @@ "invalid_url": "Voer een geldige URL in", "url_fetch_failed": "Kan agenda niet ophalen van URL", "parsing": "Agendabestand wordt verwerkt...", - "parsed_events": "{count} evenementen gevonden", + "parsed_events": "{count, plural, one {# afspraak gevonden} other {# afspraken gevonden}}", "no_events": "Geen evenementen gevonden in bestand", "select_all": "Alles selecteren", "deselect_all": "Alles deselecteren", "target_calendar": "Importeren in agenda", "import_button": "Selectie importeren", "importing": "Evenementen importeren...", - "success": "{count} evenementen succesvol geïmporteerd", + "success": "{count, plural, one {# afspraak geïmporteerd} other {# afspraken geïmporteerd}}", "error": "Agenda importeren mislukt", "file_too_large": "Bestand overschrijdt de limiet van 10 MB", "invalid_format": "Ongeldig agendabestandsformaat" @@ -3637,9 +3640,9 @@ "default_updated": "Standaardagenda bijgewerkt", "error_default": "Standaardagenda instellen mislukt", "clear_events": "Afspraken verwijderen", - "events_cleared": "{count} afspraken verwijderd", + "events_cleared": "{count, plural, one {# afspraak verwijderd} other {# afspraken verwijderd}}", "error_clear": "Kan agendagebeurtenissen niet verwijderen", - "share": "Agenda delen", + "share": "Agenda delen…", "new_event_in_calendar": "Nieuwe afspraak in deze agenda", "shared_with": "Gedeeld met {names}", "shared_with_count": "{count, plural, one {Gedeeld met 1 persoon} other {Gedeeld met # personen}}", diff --git a/locales/pl/common.json b/locales/pl/common.json index fab432864..d709d85d6 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -3345,6 +3345,9 @@ "attendee": "Uczestnik", "accepted": "Zaakceptowano", "declined": "Odrzucono", + "accept": "Akceptuj", + "maybe": "Może", + "decline": "Odrzuć", "tentative": "Wstępnie", "needs_action": "Wymaga działania", "remove": "Usuń", @@ -3585,14 +3588,14 @@ "invalid_url": "Wprowadź prawidłowy adres URL", "url_fetch_failed": "Nie udało się pobrać kalendarza z adresu URL", "parsing": "Analizowanie pliku kalendarza...", - "parsed_events": "Znaleziono {count} wydarzeń", + "parsed_events": "{count, plural, one {Znaleziono # wydarzenie} few {Znaleziono # wydarzenia} many {Znaleziono # wydarzeń} other {Znaleziono # wydarzenia}}", "no_events": "Nie znaleziono wydarzeń w pliku", "select_all": "Zaznacz wszystko", "deselect_all": "Odznacz wszystko", "target_calendar": "Importuj do kalendarza", "import_button": "Importuj zaznaczone", "importing": "Importowanie wydarzeń...", - "success": "Pomyślnie zaimportowano {count} wydarzeń", + "success": "{count, plural, one {Zaimportowano # wydarzenie} few {Zaimportowano # wydarzenia} many {Zaimportowano # wydarzeń} other {Zaimportowano # wydarzenia}}", "error": "Nie udało się zaimportować kalendarza", "file_too_large": "Plik przekracza limit 10 MB", "invalid_format": "Nieprawidłowy format pliku kalendarza" @@ -3627,7 +3630,7 @@ "default_updated": "Zaktualizowano domyślny kalendarz", "error_default": "Nie udało się ustawić domyślnego kalendarza", "clear_events": "Wyczyść wydarzenia", - "events_cleared": "Wyczyszczono {count} wydarzeń", + "events_cleared": "{count, plural, one {Wyczyszczono # wydarzenie} few {Wyczyszczono # wydarzenia} many {Wyczyszczono # wydarzeń} other {Wyczyszczono # wydarzenia}}", "error_clear": "Nie udało się wyczyścić wydarzeń kalendarza", "calendar_created": "Kalendarz utworzono", "calendar_updated": "Kalendarz zaktualizowano", @@ -3639,7 +3642,7 @@ "caldav_url": "Adres URL CalDAV", "copy_url": "Kopiuj adres URL CalDAV", "url_copied": "Adres URL CalDAV skopiowano do schowka", - "share": "Udostępnij kalendarz", + "share": "Udostępnij kalendarz…", "new_event_in_calendar": "Nowe wydarzenie w tym kalendarzu", "shared_with": "Udostępniono: {names}", "shared_with_count": "{count, plural, one {Udostępniono 1 osobie} few {Udostępniono # osobom} many {Udostępniono # osobom} other {Udostępniono # osoby}}", diff --git a/locales/pt/common.json b/locales/pt/common.json index 3d62f0f1d..1aafc9ecd 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -3345,6 +3345,9 @@ "attendee": "Participante", "accepted": "Aceito", "declined": "Recusado", + "accept": "Aceitar", + "maybe": "Talvez", + "decline": "Recusar", "tentative": "Provisório", "needs_action": "Aguardando resposta", "remove": "Remover", @@ -3611,14 +3614,14 @@ "invalid_url": "Insira uma URL válida", "url_fetch_failed": "Não foi possível buscar o calendário da URL", "parsing": "Analisando arquivo de calendário...", - "parsed_events": "{count} eventos encontrados", + "parsed_events": "{count, plural, one {# evento encontrado} other {# eventos encontrados}}", "no_events": "Nenhum evento encontrado no arquivo", "select_all": "Selecionar tudo", "deselect_all": "Desmarcar tudo", "target_calendar": "Importar para o calendário", "import_button": "Importar selecionados", "importing": "Importando eventos...", - "success": "{count} eventos importados com sucesso", + "success": "{count, plural, one {# evento importado} other {# eventos importados}}", "error": "Falha ao importar calendário", "file_too_large": "Arquivo excede o limite de 10 MB", "invalid_format": "Formato de arquivo de calendário inválido" @@ -3663,9 +3666,9 @@ "default_updated": "Calendário padrão atualizado", "error_default": "Falha ao definir calendário padrão", "clear_events": "Limpar eventos", - "events_cleared": "{count} eventos removidos", + "events_cleared": "{count, plural, one {# evento removido} other {# eventos removidos}}", "error_clear": "Falha ao limpar os eventos do calendário", - "share": "Compartilhar calendário", + "share": "Compartilhar calendário…", "new_event_in_calendar": "Novo evento neste calendário", "shared_with": "Compartilhado com {names}", "shared_with_count": "{count, plural, one {Compartilhado com 1 pessoa} other {Compartilhado com # pessoas}}", diff --git a/locales/ro/common.json b/locales/ro/common.json index 367fcb947..b3e0a54f7 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -3345,6 +3345,9 @@ "attendee": "Participant", "accepted": "Acceptat", "declined": "Respins", + "accept": "Acceptă", + "maybe": "Poate", + "decline": "Refuză", "tentative": "Provizoriu", "needs_action": "Necesită acțiune", "remove": "Eliminați", @@ -3614,14 +3617,14 @@ "invalid_url": "Vă rugăm să introduceți o adresă de e-mail validă URL", "url_fetch_failed": "Nu s-a putut prelua calendarul de la URL", "parsing": "Se analizează fișierul de calendar...", - "parsed_events": "{count} evenimente găsite", + "parsed_events": "{count, plural, one {# eveniment găsit} few {# evenimente găsite} other {# de evenimente găsite}}", "no_events": "Nu s-au găsit evenimente în fișier", "select_all": "Selectează tot", "deselect_all": "Deselectați tot", "target_calendar": "Import în calendar", "import_button": "Importați elementele selectate", "importing": "Se importă evenimente...", - "success": "{count} evenimentele au fost importate cu succes", + "success": "{count, plural, one {# eveniment importat} few {# evenimente importate} other {# de evenimente importate}}", "error": "Importul calendarului a eșuat", "file_too_large": "Fișierul depășește limita de 10 MB", "invalid_format": "Format de fișier calendar invalid" @@ -3656,7 +3659,7 @@ "default_updated": "Calendarul implicit a fost actualizat", "error_default": "Nu s-a reușit setarea calendarului implicit", "clear_events": "Ștergeți evenimentele", - "events_cleared": "{count} evenimente șterse", + "events_cleared": "{count, plural, one {# eveniment șters} few {# evenimente șterse} other {# de evenimente șterse}}", "error_clear": "Nu s-au șters evenimentele din calendar", "calendar_created": "Calendar creat", "calendar_updated": "Calendar actualizat", @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV URL", "copy_url": "Copiați CalDAV URL", "url_copied": "CalDAV URL copiat în clipboard", - "share": "Partajare calendar", + "share": "Partajare calendar…", "new_event_in_calendar": "Eveniment nou în acest calendar", "shared_with": "Partajat cu {names}", "shared_with_count": "{count, plural, one {Partajat cu 1 persoană} few {Partajat cu # persoane} other {Partajat cu # de persoane}}", diff --git a/locales/ru/common.json b/locales/ru/common.json index 3445ca511..e1228ad6e 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -3345,6 +3345,9 @@ "attendee": "Участник", "accepted": "Принято", "declined": "Отклонено", + "accept": "Принять", + "maybe": "Может быть", + "decline": "Отклонить", "tentative": "Предварительно", "needs_action": "Требует ответа", "remove": "Удалить", @@ -3585,14 +3588,14 @@ "invalid_url": "Введите корректный URL", "url_fetch_failed": "Не удалось получить календарь по URL", "parsing": "Разбор файла календаря...", - "parsed_events": "Найдено {count} событий", + "parsed_events": "{count, plural, one {Найдено # событие} few {Найдено # события} many {Найдено # событий} other {Найдено # события}}", "no_events": "События в файле не найдены", "select_all": "Выбрать все", "deselect_all": "Снять выделение", "target_calendar": "Импортировать в календарь", "import_button": "Импортировать выбранные", "importing": "Импортирование событий...", - "success": "{count} событий успешно импортировано", + "success": "{count, plural, one {Импортировано # событие} few {Импортировано # события} many {Импортировано # событий} other {Импортировано # события}}", "error": "Не удалось импортировать календарь", "file_too_large": "Файл превышает лимит 10 МБ", "invalid_format": "Неверный формат файла календаря" @@ -3627,7 +3630,7 @@ "default_updated": "Календарь по умолчанию обновлён", "error_default": "Не удалось установить календарь по умолчанию", "clear_events": "Очистить события", - "events_cleared": "{count} событий очищено", + "events_cleared": "{count, plural, one {Очищено # событие} few {Очищено # события} many {Очищено # событий} other {Очищено # события}}", "error_clear": "Не удалось очистить события календаря", "calendar_created": "Календарь создан", "calendar_updated": "Календарь обновлён", @@ -3639,7 +3642,7 @@ "caldav_url": "URL CalDAV", "copy_url": "Скопировать CalDAV URL", "url_copied": "CalDAV URL скопирован в буфер обмена", - "share": "Поделиться календарём", + "share": "Поделиться календарём…", "new_event_in_calendar": "Новое событие в этом календаре", "shared_with": "Доступ открыт: {names}", "shared_with_count": "{count, plural, one {Доступ открыт # человеку} few {Доступ открыт # людям} many {Доступ открыт # людям} other {Доступ открыт # человека}}", diff --git a/locales/sk/common.json b/locales/sk/common.json index c01808dfc..25c60f9e2 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -3345,6 +3345,9 @@ "attendee": "Účastník", "accepted": "Prijaté", "declined": "Odmietnuté", + "accept": "Prijať", + "maybe": "Možno", + "decline": "Odmietnuť", "tentative": "Nezáväzne", "needs_action": "Vyžaduje akciu", "remove": "Odstrániť", @@ -3614,14 +3617,14 @@ "invalid_url": "Zadajte platnú URL adresu", "url_fetch_failed": "Načítanie kalendára z URL adresy zlyhalo", "parsing": "Analyzovanie súboru kalendára...", - "parsed_events": "Nájdených {count} udalostí", + "parsed_events": "{count, plural, one {Nájdená # udalosť} few {Nájdené # udalosti} many {Nájdenej # udalosti} other {Nájdených # udalostí}}", "no_events": "V súbore neboli nájdené žiadne udalosti", "select_all": "Vybrať všetko", "deselect_all": "Zrušiť výber všetkého", "target_calendar": "Importovať do kalendára", "import_button": "Importovať vybrané", "importing": "Importovanie udalostí...", - "success": "Úspešne importovaných {count} udalostí", + "success": "{count, plural, one {Importovaná # udalosť} few {Importované # udalosti} many {Importovanej # udalosti} other {Importovaných # udalostí}}", "error": "Import kalendára zlyhal", "file_too_large": "Súbor prekračuje limit 10 MB", "invalid_format": "Neplatný formát súboru kalendára" @@ -3656,7 +3659,7 @@ "default_updated": "Predvolený kalendár aktualizovaný", "error_default": "Nepodarilo sa nastaviť predvolený kalendár", "clear_events": "Vymazať udalosti", - "events_cleared": "Vymazaných {count} udalostí", + "events_cleared": "{count, plural, one {Vymazaná # udalosť} few {Vymazané # udalosti} many {Vymazanej # udalosti} other {Vymazaných # udalostí}}", "error_clear": "Vymazanie udalostí kalendára zlyhalo", "calendar_created": "Kalendár bol vytvorený", "calendar_updated": "Kalendár bol aktualizovaný", @@ -3668,7 +3671,7 @@ "caldav_url": "URL CalDAV", "copy_url": "Kopírovať URL CalDAV", "url_copied": "URL CalDAV skopírovaná do schránky", - "share": "Zdieľať kalendár", + "share": "Zdieľať kalendár…", "new_event_in_calendar": "Nová udalosť v tomto kalendári", "shared_with": "Zdieľané s: {names}", "shared_with_count": "{count, plural, one {Zdieľané s 1 osobou} few {Zdieľané s # osobami} many {Zdieľané s # osoby} other {Zdieľané s # osobami}}", diff --git a/locales/th/common.json b/locales/th/common.json index bb4c2f68d..f655de87f 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -2659,6 +2659,9 @@ "attendee": "ผู้เข้าร่วม", "accepted": "ยอมรับแล้ว", "declined": "ปฏิเสธแล้ว", + "accept": "ตอบรับ", + "maybe": "อาจจะ", + "decline": "ปฏิเสธ", "tentative": "อาจจะไป", "needs_action": "รอการตอบรับ", "remove": "ลบออก", @@ -2935,7 +2938,7 @@ "target_calendar": "นำเข้าไปยังปฏิทิน", "import_button": "นำเข้ารายการที่เลือก", "importing": "กำลังนำเข้ากิจกรรม...", - "success": "นำเข้ากิจกรรมสำเร็จ {count} รายการ", + "success": "นำเข้ากิจกรรมแล้ว {count} รายการ", "error": "นำเข้าปฏิทินไม่สำเร็จ", "file_too_large": "ไฟล์มีขนาดเกิน 10 MB", "invalid_format": "รูปแบบไฟล์ปฏิทินไม่ถูกต้อง" @@ -2982,7 +2985,7 @@ "caldav_url": "CalDAV URL", "copy_url": "คัดลอก CalDAV URL", "url_copied": "คัดลอก CalDAV URL ไปยังคลิปบอร์ดแล้ว", - "share": "แชร์ปฏิทิน", + "share": "แชร์ปฏิทิน…", "new_event_in_calendar": "กิจกรรมใหม่ในปฏิทินนี้", "shared_with": "แชร์กับ {names}", "shared_with_count": "{count, plural, one {แชร์กับบุคคล 1 คน} other {แชร์กับบุคคล # คน}}", diff --git a/locales/tr/common.json b/locales/tr/common.json index 02875f198..a3a582ea1 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -3345,6 +3345,9 @@ "attendee": "Katılımcı", "accepted": "Kabul edildi", "declined": "Reddedildi", + "accept": "Kabul et", + "maybe": "Belki", + "decline": "Reddet", "tentative": "Geçici", "needs_action": "İşlem gerekiyor", "remove": "Kaldır", @@ -3618,7 +3621,7 @@ "target_calendar": "Takvime içe aktar", "import_button": "Seçilenleri içe aktar", "importing": "Etkinlikler içe aktarılıyor...", - "success": "{count} etkinlik başarıyla içe aktarıldı", + "success": "{count} etkinlik içe aktarıldı", "error": "Takvim içe aktarılamadı", "file_too_large": "Dosya 10 MB sınırını aşıyor", "invalid_format": "Geçersiz takvim dosyası biçimi" @@ -3665,7 +3668,7 @@ "caldav_url": "CalDAV URL'si", "copy_url": "CalDAV URL'sini kopyala", "url_copied": "CalDAV URL'si panoya kopyalandı", - "share": "Takvimi paylaş", + "share": "Takvimi paylaş…", "new_event_in_calendar": "Bu takvimde yeni etkinlik", "shared_with": "Paylaşılan kişiler: {names}", "shared_with_count": "{count, plural, one {1 kişiyle paylaşıldı} other {# kişiyle paylaşıldı}}", diff --git a/locales/uk/common.json b/locales/uk/common.json index 54bd6768d..ac379bad8 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -3345,6 +3345,9 @@ "attendee": "Присутній", "accepted": "прийнято", "declined": "Відхилено", + "accept": "Прийняти", + "maybe": "Можливо", + "decline": "Відхилити", "tentative": "Орієнтовний", "needs_action": "Потребує дії", "remove": "видалити", @@ -3585,14 +3588,14 @@ "invalid_url": "Введіть дійсну URL-адресу", "url_fetch_failed": "Не вдалося отримати календар з URL-адреси", "parsing": "Розбір файлу календаря...", - "parsed_events": "Знайдено подій: {count}", + "parsed_events": "{count, plural, one {Знайдено # подію} few {Знайдено # події} many {Знайдено # подій} other {Знайдено # події}}", "no_events": "У файлі не знайдено подій", "select_all": "Вибрати все", "deselect_all": "Зняти вибір із усіх", "target_calendar": "Імпорт до календаря", "import_button": "Вибраний імпорт", "importing": "Імпорт подій...", - "success": "{count} подій успішно імпортовано", + "success": "{count, plural, one {Імпортовано # подію} few {Імпортовано # події} many {Імпортовано # подій} other {Імпортовано # події}}", "error": "Не вдалося імпортувати календар", "file_too_large": "Файл перевищує обмеження в 10 Мб", "invalid_format": "Недійсний формат файлу календаря" @@ -3627,7 +3630,7 @@ "default_updated": "Типовий календар оновлено", "error_default": "Не вдалося встановити типовий календар", "clear_events": "Ясні події", - "events_cleared": "{count} подій видалено", + "events_cleared": "{count, plural, one {Видалено # подію} few {Видалено # події} many {Видалено # подій} other {Видалено # події}}", "error_clear": "Не вдалося очистити події календаря", "calendar_created": "Календар створено", "calendar_updated": "Календар оновлено", @@ -3639,7 +3642,7 @@ "caldav_url": "URL-адреса CalDAV", "copy_url": "Скопіюйте URL-адресу CalDAV", "url_copied": "URL-адресу CalDAV скопійовано в буфер обміну", - "share": "Поділитися календарем", + "share": "Поділитися календарем…", "new_event_in_calendar": "Нова подія в цьому календарі", "shared_with": "Доступ надано: {names}", "shared_with_count": "{count, plural, one {Доступ надано # особі} few {Доступ надано # особам} many {Доступ надано # особам} other {Доступ надано # особи}}", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index d4a72f18b..ea13ff1b8 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -3345,6 +3345,9 @@ "attendee": "與會者", "accepted": "已接受", "declined": "已拒絕", + "accept": "接受", + "maybe": "暫定", + "decline": "拒絕", "tentative": "暫定", "needs_action": "待處理", "remove": "移除", @@ -3621,7 +3624,7 @@ "target_calendar": "匯入到行事曆", "import_button": "匯入選取項目", "importing": "正在匯入活動…", - "success": "{count} 個活動已成功匯入", + "success": "已匯入 {count} 個活動", "error": "匯入行事曆失敗", "file_too_large": "檔案超過 10 MB 上限", "invalid_format": "行事曆檔案格式無效" @@ -3668,7 +3671,7 @@ "caldav_url": "CalDAV URL", "copy_url": "複製 CalDAV URL", "url_copied": "CalDAV URL 已複製到剪貼簿", - "share": "分享行事曆", + "share": "分享行事曆…", "new_event_in_calendar": "在此行事曆中新增活動", "shared_with": "已與 {names} 共用", "shared_with_count": "{count, plural, other {已與 # 人共用}}", diff --git a/locales/zh/common.json b/locales/zh/common.json index 1db121482..2603455e0 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -3345,6 +3345,9 @@ "attendee": "出席者", "accepted": "已接受", "declined": "已拒绝", + "accept": "接受", + "maybe": "暂定", + "decline": "拒绝", "tentative": "暂定", "needs_action": "待处理", "remove": "移除", @@ -3592,7 +3595,7 @@ "target_calendar": "导入到日历", "import_button": "导入所选", "importing": "正在导入活动...", - "success": "{count} 个活动已成功导入", + "success": "已导入 {count} 个活动", "error": "导入日历失败", "file_too_large": "文件超过 10MB 限制", "invalid_format": "日历文件格式无效" @@ -3639,7 +3642,7 @@ "caldav_url": "CalDAV URL", "copy_url": "复制 CalDAV URL", "url_copied": "CalDAV URL 已复制到剪贴板", - "share": "共享日历", + "share": "共享日历…", "new_event_in_calendar": "在此日历中新建事件", "shared_with": "已与 {names} 共享", "shared_with_count": "{count, plural, other {已与 # 人共享}}",