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 {已与 # 人共享}}",