diff --git a/.github/workflows/flutter-linux.yml b/.github/workflows/flutter-linux.yml
index c305212..25b9da6 100644
--- a/.github/workflows/flutter-linux.yml
+++ b/.github/workflows/flutter-linux.yml
@@ -23,6 +23,7 @@ jobs:
ninja-build \
pkg-config \
libgtk-3-dev \
+ libhandy-1-dev \
libstdc++-12-dev \
libsecret-1-dev \
libjsoncpp-dev \
diff --git a/README.md b/README.md
index 08cdca8..2dfc930 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ It brings calendar events and tasks into a native-feeling Linux desktop interfac
- Calendar views for day, week, month, year, and agenda planning.
- Task creation with lists, due dates, reminders, and repeat options.
- Event editing with calendar selection, time controls, repeat rules, and reminders.
-- Compact agenda window for quick access to upcoming work.
+- Tray shortcut for opening the main Agenda view.
- Integrations with Google Calendar, Google Tasks, Microsoft Calendar, and Microsoft To Do.
## Screenshots
@@ -67,22 +67,28 @@ It brings calendar events and tasks into a native-feeling Linux desktop interfac
-
-
-
-
-
-
## Prerequisites
- Flutter: https://docs.flutter.dev/install
+- GTK 3 and libhandy development packages (`libgtk-3-dev` and
+ `libhandy-1-dev` on Ubuntu/Debian)
- `GOOGLE_OAUTH_CLIENT_ID` and `GOOGLE_OAUTH_CLIENT_SECRET`, see [Google Setup](docs/google_setup.md)
- `MICROSOFT_OAUTH_CLIENT_ID`, see [Microsoft Setup](docs/microsoft_setup.md)
## Run locally
+Register the development launcher once so GNOME can associate BusyMax's native
+Wayland windows with its desktop icon. The helper is idempotent and defaults to
+the Flutter debug bundle:
+
+```bash
+tools/install_linux_dev_desktop.sh
+```
+
+Then run BusyMax normally:
+
```bash
flutter run -d linux \
--dart-define=GOOGLE_OAUTH_CLIENT_ID= \
@@ -90,6 +96,10 @@ flutter run -d linux \
--dart-define=MICROSOFT_OAUTH_CLIENT_ID=
```
+Use `tools/install_linux_dev_desktop.sh --uninstall` to remove the development
+launcher. Remove it before testing an installed Snap so the user-level launcher
+does not take precedence; packaged Snaps register their own launcher.
+
## Feedback submissions
The native **Send feedback** form in the About dialog sends JSON to
diff --git a/docs/beta_snap_release.md b/docs/beta_snap_release.md
index ef14f09..84c0fa8 100644
--- a/docs/beta_snap_release.md
+++ b/docs/beta_snap_release.md
@@ -7,7 +7,8 @@ OAuth-enabled Flutter build must run first.
## Prepare
Required: Linux amd64, the Flutter Linux toolchain, snapd, Snapcraft with LXD,
-`unsquashfs` from `squashfs-tools`, and BusyMax Store access for publishing.
+the `libhandy-1-dev` build package, `unsquashfs` from `squashfs-tools`, and
+BusyMax Store access for publishing.
Check that the package versions match:
@@ -113,12 +114,14 @@ snap run busymax
Before upload, verify:
-- Desktop search shows one BusyMax launcher; both main and Agenda windows open.
+- Desktop search shows one BusyMax launcher; the tray Agenda action opens the
+ Agenda view in the main window.
- Google and Microsoft sign-in complete successfully.
- Tasks and events can be created, edited, completed, and deleted; a task
created in Agenda appears immediately without manual refresh.
- Accounts, settings, and data survive restart.
-- Notifications and tray actions, including Agenda and Quit, work.
+- Notifications and tray actions, including opening Agenda in the main window
+ and Quit, work.
## Upload To Beta
diff --git a/docs/screenshots/agenda_window_agenda.png b/docs/screenshots/agenda_window_agenda.png
deleted file mode 100644
index 6ec1ad3..0000000
Binary files a/docs/screenshots/agenda_window_agenda.png and /dev/null differ
diff --git a/docs/screenshots/agenda_window_agenda_event_details.png b/docs/screenshots/agenda_window_agenda_event_details.png
deleted file mode 100644
index bb5afac..0000000
Binary files a/docs/screenshots/agenda_window_agenda_event_details.png and /dev/null differ
diff --git a/docs/screenshots/agenda_window_edit_event.png b/docs/screenshots/agenda_window_edit_event.png
deleted file mode 100644
index 1fd96cb..0000000
Binary files a/docs/screenshots/agenda_window_edit_event.png and /dev/null differ
diff --git a/l10n.yaml b/l10n.yaml
index ee89381..80ed2b7 100644
--- a/l10n.yaml
+++ b/l10n.yaml
@@ -3,3 +3,7 @@ template-arb-file: app_en.arb
output-dir: lib/l10n/generated
output-localization-file: app_localizations.dart
nullable-getter: false
+header: |
+ // coverage:ignore-file
+ // GENERATED CODE - DO NOT MODIFY BY HAND
+ // ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
new file mode 100644
index 0000000..6a96363
--- /dev/null
+++ b/lib/l10n/app_ar.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "ar",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "اربط حسابات Google وMicrosoft لمزامنة التقويمات والمهام.",
+ "googlePermissionsConsentNotice": "في شاشة أذونات Google، حدّد أذونات التقويم والمهام معًا.",
+ "googlePermissionsRequiredRetry": "أذونات تقويم Google وGoogle Tasks مطلوبة. حاول مرة أخرى وحدّد مربعي الاختيار.",
+ "finishSetup": "إنهاء الإعداد",
+ "continueSetup": "متابعة",
+ "onboardingSetupTitle": "إعداد BusyMax",
+ "onboardingAccountsStepTitle": "ربط الحسابات",
+ "onboardingAccountsStepDescription": "أضف جميع حسابات Google وMicrosoft التي تريد استخدامها. يزامن BusyMax التقويمات والأحداث وقوائم المهام والمهام من كل حساب.",
+ "onboardingPreferencesStepTitle": "اختيار إعدادات النظام",
+ "onboardingPreferencesStepDescription": "اضبط سلوك التطبيق على سطح المكتب والتذكيرات ومستوى تفاصيل الإشعارات والمظهر قبل فتح جدولك.",
+ "signInWithGoogle": "تسجيل الدخول باستخدام Google",
+ "signInWithMicrosoft": "تسجيل الدخول باستخدام Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "هذه الخدمة غير مهيأة.",
+ "waitingForGoogleSignIn": "في انتظار تسجيل الدخول إلى Google...",
+ "waitingForMicrosoftSignIn": "في انتظار تسجيل الدخول إلى Microsoft...",
+ "microsoftSignInNotConfigured": "تسجيل الدخول إلى Microsoft غير مهيأ. اضبط MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "إلغاء",
+ "close": "إغلاق",
+ "exit": "خروج",
+ "options": "خيارات",
+ "hide": "إخفاء",
+ "show": "إظهار",
+ "export": "تصدير",
+ "save": "حفظ",
+ "settings": "الإعدادات",
+ "all": "الكل",
+ "calendarEvents": "الأحداث",
+ "calendarTasks": "المهام",
+ "calendar": "التقويم",
+ "calendars": "التقويمات",
+ "newEvent": "حدث جديد",
+ "refreshCalendar": "تحديث التقويم",
+ "openInProvider": "فتح في الخدمة",
+ "hideFromSchedule": "إخفاء من الجدول",
+ "showInSchedule": "إظهار في الجدول",
+ "noCalendarsSynced": "لم تتم مزامنة أي تقويمات بعد.",
+ "allDay": "طوال اليوم",
+ "moreItems": "+\u2068{count}\u2069 عناصر أخرى",
+ "noEventsOrTasks": "لا توجد أحداث أو مهام",
+ "scheduleLoading": "جارٍ تحميل الجدول...",
+ "scheduleUnavailable": "الجدول غير متاح",
+ "scheduleNoSources": "لا توجد تقويمات أو قوائم مهام ظاهرة",
+ "scheduleNoSourcesDescription": "اختر ما تريد إظهاره في الإعدادات، ثم حدّث الجدول.",
+ "scheduleSignInRequired": "ربط حساب",
+ "scheduleSignInDescription": "سجّل الدخول لمزامنة التقويمات والمهام.",
+ "scheduleNoSearchResults": "لا توجد أحداث أو مهام مطابقة",
+ "scheduleNoSearchResultsDescription": "جرّب بحثًا مختلفًا أو امسح عوامل التصفية الحالية.",
+ "refresh": "تحديث",
+ "trayOpenBusyMax": "فتح BusyMax",
+ "agendaLoadMoreOverdue": "تحميل المزيد من المهام المتأخرة",
+ "agendaLoadMoreNoDate": "تحميل المزيد من المهام بلا تاريخ",
+ "viewDay": "يوم",
+ "viewWeek": "أسبوع",
+ "viewMonth": "شهر",
+ "viewYear": "سنة",
+ "viewAgenda": "جدول الأعمال",
+ "scheduleSettings": "الجدول",
+ "scheduleDisplaySettings": "عرض الجدول",
+ "scheduleDisplayHoursDescription": "تفتح طريقتا عرض اليوم والأسبوع ضمن هذه الساعات. توسّع العناصر المبكرة والمتأخرة النطاق عند الحاجة.",
+ "scheduleDayStartsAt": "يبدأ اليوم في",
+ "scheduleDayEndsAt": "ينتهي اليوم في",
+ "sourceCalendar": "التقويم",
+ "sourceTaskList": "قائمة المهام",
+ "createChoiceTitle": "إنشاء",
+ "createEventAtTime": "حدث",
+ "createTaskAtDate": "مهمة",
+ "editEvent": "تعديل الحدث",
+ "eventTitle": "عنوان الحدث",
+ "location": "الموقع",
+ "timeSlot": "الفترة الزمنية",
+ "startDateTime": "تاريخ/وقت البدء",
+ "endDateTime": "تاريخ/وقت الانتهاء",
+ "doesNotRepeat": "لا يتكرر",
+ "defaultReminder": "التذكير الافتراضي",
+ "guests": "المدعوون",
+ "noGuests": "لا يوجد مدعوون",
+ "description": "الوصف",
+ "availabilityShowAs": "التوفر / إظهار كـ",
+ "busy": "مشغول",
+ "visibility": "إمكانية العرض",
+ "defaultVisibility": "إمكانية العرض الافتراضية",
+ "conference": "اجتماع",
+ "noConference": "لا يوجد اجتماع",
+ "providerCalendar": "تقويم الخدمة",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "عريض",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "مائل",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "تحته خط",
+ "reminderMinutesBefore": "{minutes, plural, =0{عند البدء} =1{قبل دقيقة واحدة} =2{قبل دقيقتين} few{قبل \u2068{minutes}\u2069 دقائق} many{قبل \u2068{minutes}\u2069 دقيقة} other{قبل \u2068{minutes}\u2069 دقيقة}}",
+ "reminderAtStart": "عند البدء",
+ "reminderHoursBefore": "{hours, plural, =0{عند البدء} =1{قبل ساعة واحدة} =2{قبل ساعتين} few{قبل \u2068{hours}\u2069 ساعات} many{قبل \u2068{hours}\u2069 ساعة} other{قبل \u2068{hours}\u2069 ساعة}}",
+ "reminderDaysBefore": "{days, plural, =0{في اليوم نفسه} =1{قبل يوم واحد} =2{قبل يومين} few{قبل \u2068{days}\u2069 أيام} many{قبل \u2068{days}\u2069 يومًا} other{قبل \u2068{days}\u2069 يوم}}",
+ "availabilityFree": "متاح",
+ "availabilityTentative": "مبدئي",
+ "availabilityOutOfOffice": "خارج المكتب",
+ "availabilityWorkingElsewhere": "العمل من مكان آخر",
+ "visibilityDefault": "افتراضي",
+ "visibilityPublic": "عام",
+ "visibilityPrivate": "خاص",
+ "visibilityConfidential": "سري",
+ "sensitivityNormal": "عادي",
+ "sensitivityPersonal": "شخصي",
+ "tasks": "المهام",
+ "allTasks": "كل المهام",
+ "tasksInList": "المهام في \u2068{title}\u2069",
+ "taskLists": "قوائم المهام",
+ "navigation": "التنقل",
+ "mainMenu": "القائمة الرئيسية",
+ "keyboardShortcuts": "اختصارات لوحة المفاتيح",
+ "shortcutGroupGeneral": "عام",
+ "shortcutKeyboardShortcutsDescription": "إظهار مرجع الاختصارات هذا",
+ "shortcutGroupNavigation": "التنقل",
+ "shortcutNextPeriod": "الفترة التالية",
+ "shortcutNextPeriodDescription": "الأسبوع التالي في عرض الأسبوع، والشهر التالي في عرض الشهر، وهكذا",
+ "shortcutPreviousPeriod": "الفترة السابقة",
+ "shortcutPreviousPeriodDescription": "الأسبوع السابق في عرض الأسبوع، والشهر السابق في عرض الشهر، وهكذا",
+ "shortcutJumpToToday": "الانتقال إلى اليوم",
+ "shortcutGroupView": "العرض",
+ "shortcutDayView": "عرض اليوم",
+ "shortcutWeekView": "عرض الأسبوع",
+ "shortcutMonthView": "عرض الشهر",
+ "shortcutYearView": "عرض السنة",
+ "shortcutAgendaView": "عرض جدول الأعمال",
+ "shortcutGroupCreateAndEdit": "الإنشاء والتعديل",
+ "shortcutSaveItem": "حفظ الحدث أو المهمة",
+ "shortcutDeleteItem": "حذف الحدث أو المهمة",
+ "shortcutGroupTaskEditing": "تعديل المهام",
+ "shortcutCancelEditing": "إلغاء التعديل",
+ "shortcutCancelEditingDescription": "إغلاق تعديل المهمة أو تفاصيلها",
+ "aboutBusyMax": "حول BusyMax",
+ "aboutBusyMaxDescription": "التقويم والمهام",
+ "license": "الترخيص",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "الموقع الإلكتروني",
+ "sourceCode": "الشيفرة المصدرية",
+ "reportAnIssue": "الإبلاغ عن مشكلة",
+ "sendFeedback": "إرسال الملاحظات",
+ "feedbackSubmit": "إرسال",
+ "feedbackCategory": "الفئة",
+ "feedbackSelectCategory": "اختر فئة",
+ "feedbackCategoryProblem": "مشكلة أو خلل",
+ "feedbackCategoryFeature": "طلب ميزة",
+ "feedbackCategoryPrivacySecurity": "مشكلة تتعلق بالخصوصية أو الأمان",
+ "feedbackCategoryUsability": "مشكلة في سهولة الاستخدام",
+ "feedbackCategoryOther": "أخرى",
+ "feedbackSubject": "الموضوع",
+ "feedbackDetailedMessage": "رسالة مفصّلة",
+ "feedbackReplyEmail": "البريد الإلكتروني للرد (اختياري)",
+ "feedbackIncludeTechnicalDetails": "تضمين التفاصيل التقنية",
+ "feedbackTechnicalDetailsDisclosure": "يضيف فقط إصدار نظام التشغيل Linux ولغة التطبيق ومنطقته. لا يتم تضمين أي سجلات أو بيانات حسابات أو أسماء ملفات أو معلومات تشخيصية أخرى.",
+ "feedbackCategoryRequired": "اختر فئة.",
+ "feedbackSubjectLengthError": "يجب أن يتراوح الموضوع بين 3 و120 حرفًا.",
+ "feedbackMessageLengthError": "يجب أن تتراوح الرسالة بين 10 و5,000 حرف.",
+ "feedbackInvalidEmail": "أدخل عنوان بريد إلكتروني صالحًا.",
+ "feedbackConnectionError": "تعذر الاتصال بـ BusyStack. تحقق من اتصالك وحاول مرة أخرى.",
+ "feedbackTimeoutError": "انتهت مهلة الطلب. لم تُمسح ملاحظاتك؛ حاول مرة أخرى.",
+ "feedbackRateLimitedError": "أُرسلت ملاحظات كثيرة جدًا من هذه الشبكة. انتظر وحاول مرة أخرى.",
+ "feedbackRejectedError": "رفض الخادم الإرسال. راجع الحقول وحاول مرة أخرى.",
+ "feedbackServerError": "يتعذر على BusyStack قبول ملاحظاتك الآن. لم تُمسح ملاحظاتك؛ حاول مرة أخرى.",
+ "feedbackSuccess": "تم إرسال الملاحظات. المرجع: \u2068{id}\u2069",
+ "toggleSidebar": "إظهار الشريط الجانبي أو إخفاؤه",
+ "showSidebar": "إظهار اللوحة الجانبية",
+ "hideSidebar": "إخفاء اللوحة الجانبية",
+ "accounts": "الحسابات",
+ "currentAccount": "الحساب الحالي",
+ "switchAccount": "تبديل الحساب",
+ "addGoogleAccount": "إضافة حساب Google",
+ "addMicrosoftAccount": "إضافة حساب Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "تم تسجيل الدخول",
+ "removeAccount": "إزالة الحساب…",
+ "removingAccount": "جارٍ إزالة الحساب…",
+ "removeAccountDescription": "إيقاف المزامنة وإزالة بيانات هذا الحساب من هذا الجهاز.",
+ "removeAccountTitle": "إزالة \u2068{account}\u2069 من BusyMax؟",
+ "removeAccountConfirmation": "سيؤدي ذلك إلى حذف المهام والتقويمات والأحداث والتذكيرات والتغييرات غير المتصلة المعلّقة المخزّنة مؤقتًا من هذا الجهاز. ستُفقد التغييرات غير المتزامنة. لن يُحذف أي شيء من Google أو Microsoft.",
+ "revokeGoogleAccess": "إلغاء وصول BusyMax إلى حساب Google هذا أيضًا",
+ "revokeGoogleAccessDescription": "ستحتاج إلى منح الوصول مرة أخرى قبل إعادة الاتصال.",
+ "removeAccountAction": "إزالة الحساب",
+ "removeAccountFailed": "تعذر إكمال إزالة الحساب. حاول مرة أخرى.",
+ "accountRemovedGoogleRevokeFailed": "تمت إزالة الحساب من هذا الجهاز، لكن تعذر على BusyMax إلغاء الوصول إلى Google. يمكنك إلغاء الوصول من حسابك على Google.",
+ "newList": "قائمة جديدة",
+ "signInToViewTaskLists": "سجّل الدخول لعرض قوائم المهام.",
+ "noTaskListsSynced": "لم تتم مزامنة أي قوائم مهام بعد.",
+ "listActions": "إجراءات القائمة",
+ "rename": "إعادة تسمية",
+ "delete": "حذف",
+ "renameList": "إعادة تسمية القائمة",
+ "deleteList": "حذف القائمة",
+ "builtInMicrosoftList": "مدمجة",
+ "builtInMicrosoftListCannotRenameDelete": "لا يمكن إعادة تسمية قوائم Microsoft To Do المدمجة أو حذفها.",
+ "deleteListConfirmation": "حذف «\u2068{title}\u2069» من Google Tasks؟",
+ "deleteEvent": "حذف الحدث",
+ "title": "العنوان",
+ "create": "إنشاء",
+ "newTask": "مهمة جديدة",
+ "clearCompleted": "مسح المهام المكتملة",
+ "refreshList": "تحديث القائمة",
+ "refreshAll": "تحديث الكل",
+ "listRefreshed": "تم تحديث القائمة.",
+ "allTasksRefreshed": "تم تحديث جميع الحسابات.",
+ "exportedFile": "تم التصدير إلى \u2068{path}\u2069",
+ "exportFailed": "فشل التصدير: \u2068{error}\u2069",
+ "refreshFailed": "فشل التحديث: \u2068{error}\u2069",
+ "selectOrCreateTaskList": "اختر قائمة مهام أو أنشئ واحدة للبدء.",
+ "signInToViewTasks": "سجّل الدخول لعرض المهام.",
+ "noTasks": "لا توجد مهام.",
+ "noTasksYet": "لا توجد مهام بعد",
+ "noTasksYetMessage": "أنشئ مهمة أو حدّث حساباتك للبدء.",
+ "noTasksInList": "لا توجد مهام في هذه القائمة.",
+ "overdue": "متأخرة",
+ "today": "اليوم",
+ "tomorrow": "غدًا",
+ "upcoming": "القادمة",
+ "noDate": "بلا تاريخ",
+ "completed": "مكتملة",
+ "duePrefix": "مستحقة في \u2068{date}\u2069",
+ "dateTimeDisplay": "\u2068{date}\u2069 · \u2068{time}\u2069",
+ "taskDetails": "تفاصيل المهمة",
+ "editTask": "تعديل المهمة",
+ "noTaskSelected": "لم يتم تحديد مهمة.",
+ "noTaskSelectedHelper": "حدّد مهمة لعرض تفاصيلها وتعديلها.",
+ "taskUnavailable": "المهمة غير متاحة.",
+ "signInToEditTasks": "سجّل الدخول لتعديل المهام.",
+ "refreshTask": "تحديث المهمة",
+ "primarySection": "أساسي",
+ "statusSection": "الحالة",
+ "openStatus": "مفتوحة",
+ "doneStatus": "منجزة",
+ "notes": "ملاحظات",
+ "dueDate": "تاريخ الاستحقاق",
+ "clearDueDate": "مسح تاريخ الاستحقاق",
+ "dueTime": "وقت الاستحقاق",
+ "startDate": "تاريخ البدء",
+ "startTime": "وقت البدء",
+ "endDate": "تاريخ الانتهاء",
+ "endTime": "وقت الانتهاء",
+ "reminderDate": "تاريخ التذكير",
+ "reminderTime": "وقت التذكير",
+ "reminder": "تذكير",
+ "addReminder": "إضافة تذكير",
+ "addGuest": "إضافة مدعو",
+ "addGuestEmail": "إضافة بريد المدعو الإلكتروني",
+ "removeReminder": "إزالة التذكير",
+ "off": "إيقاف",
+ "repeat": "التكرار",
+ "repeatNone": "بلا تكرار",
+ "noneValue": "لا شيء",
+ "repeatDaily": "يوميًا",
+ "repeatWeekly": "أسبوعيًا",
+ "repeatMonthly": "شهريًا",
+ "repeatYearly": "سنويًا",
+ "importance": "الأهمية",
+ "importanceLow": "منخفضة",
+ "importanceNormal": "عادية",
+ "importanceHigh": "مرتفعة",
+ "categories": "الفئات",
+ "scheduleSection": "الجدول",
+ "dueGroup": "الاستحقاق",
+ "startGroup": "البدء",
+ "reminderGroup": "التذكير",
+ "organizationSection": "التنظيم",
+ "actionsSection": "الإجراءات",
+ "advancedSection": "متقدم",
+ "addCategory": "إضافة فئة",
+ "list": "القائمة",
+ "microsoftMoveUnsupported": "نقل المهام بين القوائم غير مدعوم لحسابات Microsoft To Do في هذا الإصدار.",
+ "createSubtask": "إنشاء مهمة فرعية",
+ "moveToTop": "نقل إلى الأعلى",
+ "deleteTask": "حذف المهمة",
+ "newSubtask": "مهمة فرعية جديدة",
+ "deleteTaskConfirmation": "حذف «\u2068{title}\u2069» من Google Tasks؟",
+ "metadata": "البيانات الوصفية",
+ "id": "المعرّف",
+ "etag": "ETag",
+ "updated": "آخر تحديث",
+ "parent": "المهمة الأصلية",
+ "position": "الموضع",
+ "webLink": "رابط الويب",
+ "assignment": "التعيين",
+ "localState": "الحالة المحلية",
+ "pendingSync": "في انتظار المزامنة",
+ "synced": "تمت المزامنة",
+ "account": "الحساب",
+ "sync": "المزامنة",
+ "manualFullSync": "مزامنة كاملة يدويًا",
+ "runInBackgroundWhenClosed": "متابعة التشغيل عند إغلاق النافذة",
+ "showTrayIcon": "إظهار أيقونة شريط النظام",
+ "startMinimizedToTray": "البدء مصغّرًا في شريط النظام",
+ "requiresTrayIcon": "يتطلب أيقونة شريط النظام.",
+ "syncComplete": "اكتملت المزامنة.",
+ "syncFailed": "فشلت المزامنة: \u2068{error}\u2069",
+ "notifySyncFailures": "إشعارات عند فشل المزامنة",
+ "notifyConflicts": "إشعارات عند حدوث تعارضات",
+ "notifyDueToday": "إشعارات المهام المستحقة اليوم",
+ "eventReminders": "تذكيرات الأحداث",
+ "taskReminders": "تذكيرات المهام",
+ "notificationDetailLevel": "مستوى تفاصيل الإشعارات",
+ "notificationDetailPrivate": "خاص",
+ "notificationDetailNormal": "عادي",
+ "quietHours": "ساعات الهدوء",
+ "quietHoursDescription": "إيقاف الإشعارات مؤقتًا خلال هذه الفترة.",
+ "quietHoursStart": "بداية ساعات الهدوء",
+ "quietHoursEnd": "نهاية ساعات الهدوء",
+ "notifications": "الإشعارات",
+ "appearance": "المظهر",
+ "theme": "السمة",
+ "themeSystem": "النظام",
+ "themeLight": "فاتحة",
+ "themeDark": "داكنة",
+ "themeFamily": "عائلة السمات",
+ "themeFamilyYaru": "سمة Ubuntu الأصلية (Yaru)",
+ "localization": "اللغة والمنطقة",
+ "currentLocale": "اللغة والمنطقة الحالية",
+ "privacy": "الخصوصية",
+ "redactTaskContentInDiagnostics": "إخفاء محتوى المهام في معلومات التشخيص",
+ "developerDiagnostics": "تشخيصات المطور",
+ "diagnostics": "التشخيصات",
+ "apiInspectorDisabled": "إظهار فاحص API",
+ "googleTasksApi": "واجهة Google Tasks API",
+ "discoveryRevision": "مراجعة Discovery: \u2068{revision}\u2069",
+ "implementedMethods": "الطرق المنفذة",
+ "supportsTasksScopes": "يدعم نطاقَي tasks وtasks.readonly",
+ "requiresTasksScope": "يتطلب نطاق tasks",
+ "blockedPendingOperations": "العمليات المعلّقة المحظورة",
+ "signInToInspectPendingOperations": "سجّل الدخول لفحص العمليات المعلّقة.",
+ "noBlockedPendingOperations": "لا توجد عمليات معلّقة محظورة.",
+ "operationActions": "إجراءات العملية",
+ "pendingOpListId": "القائمة=\u2068{id}\u2069",
+ "pendingOpTaskId": "المهمة=\u2068{id}\u2069",
+ "pendingOpAttempts": "المحاولات=\u2068{count}\u2069",
+ "retry": "إعادة المحاولة",
+ "discard": "تجاهل",
+ "discardChangesAction": "تجاهل التغييرات",
+ "discardChanges": "تجاهل التغييرات؟",
+ "discardChangesConfirmation": "سيؤدي ذلك إلى تجاهل التعديلات غير المحفوظة على هذه المهمة.",
+ "retryCompleted": "اكتملت إعادة المحاولة.",
+ "discardPendingOperation": "تجاهل العملية المعلّقة؟",
+ "discardPendingOperationConfirmation": "سيؤدي ذلك إلى إزالة العملية المحلية المحظورة. ستُحدّث البيانات من Google Tasks في المزامنة التالية.",
+ "pendingOperationDiscarded": "تم تجاهل العملية المعلّقة.",
+ "syncFailureNotificationTitle": "فشلت مزامنة BusyMax",
+ "syncFailureNotificationBody": "فشلت المزامنة في الخلفية. \u2068{message}\u2069",
+ "conflictNotificationTitle": "تعارض في مزامنة BusyMax",
+ "conflictNotificationBody": "تم حظر تغيير محلي معلّق. \u2068{summary}\u2069",
+ "dueTodayNotificationTitle": "المهام المستحقة اليوم",
+ "dueTodayNotificationBody": "{count, plural, =0{لا توجد مهام مستحقة اليوم.} =1{هناك مهمة واحدة مستحقة اليوم.} =2{هناك مهمتان مستحقتان اليوم.} few{هناك \u2068{count}\u2069 مهام مستحقة اليوم.} many{هناك \u2068{count}\u2069 مهمة مستحقة اليوم.} other{هناك \u2068{count}\u2069 مهمة مستحقة اليوم.}}",
+ "eventReminderNotificationTitle": "تذكير بحدث",
+ "taskReminderNotificationTitle": "تذكير بمهمة",
+ "eventReminderNotificationBody": "سيبدأ الحدث قريبًا.",
+ "taskReminderNotificationBody": "ستحلّ مهلة المهمة قريبًا.",
+ "notificationOpenAction": "فتح",
+ "notificationDetailsHidden": "التفاصيل مخفية وفقًا لإعدادات الخصوصية.",
+ "previousMonth": "الشهر السابق",
+ "nextMonth": "الشهر التالي",
+ "openMonthView": "فتح عرض الشهر",
+ "previousYear": "السنة السابقة",
+ "nextYear": "السنة التالية",
+ "openYearView": "فتح عرض السنة",
+ "weekNumberTooltip": "الأسبوع \u2068{number}\u2069",
+ "resizeAllDayPanel": "تغيير حجم لوحة اليوم الكامل",
+ "scheduleItemCount": "{count, plural, =0{لا عناصر} =1{عنصر واحد} =2{عنصران} few{\u2068{count}\u2069 عناصر} many{\u2068{count}\u2069 عنصرًا} other{\u2068{count}\u2069 عنصر}}",
+ "readOnlyCalendar": "هذا التقويم للقراءة فقط.",
+ "selectTimeZone": "اختيار المنطقة الزمنية",
+ "searchLocations": "البحث عن مواقع",
+ "noLocationsFound": "لم يتم العثور على مواقع",
+ "deleteCalendarConfirmation": "حذف «\u2068{title}\u2069»؟"
+}
diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb
index 73ef7f3..dd8a9bb 100644
--- a/lib/l10n/app_de.arb
+++ b/lib/l10n/app_de.arb
@@ -3,7 +3,7 @@
"appTitle": "BusyMax",
"connectGoogleAccount": "Verbinden Sie Google- und Microsoft-Konten, um Kalender und Aufgaben zu synchronisieren.",
"googlePermissionsConsentNotice": "Wählen Sie auf dem Google-Berechtigungsbildschirm sowohl Kalender- als auch Aufgabenberechtigungen aus.",
- "googlePermissionsRequiredRetry": "Google Calendar- und Google Tasks-Berechtigungen sind erforderlich. Versuchen Sie es erneut und wählen Sie beide Kontrollkästchen aus.",
+ "googlePermissionsRequiredRetry": "Die Berechtigungen für Google Kalender und Google Tasks sind erforderlich. Versuchen Sie es erneut und aktivieren Sie beide Kontrollkästchen.",
"finishSetup": "Einrichtung abschließen",
"continueSetup": "Weiter",
"onboardingSetupTitle": "BusyMax einrichten",
@@ -40,28 +40,18 @@
"showInSchedule": "Im Zeitplan anzeigen",
"noCalendarsSynced": "Noch keine Kalender synchronisiert.",
"allDay": "Ganztägig",
- "moreItems": "+{count} weitere",
+ "moreItems": "+{count} mehr",
"noEventsOrTasks": "Keine Termine oder Aufgaben",
- "trayAgendaLoading": "Agenda wird geladen...",
- "trayAgendaSignInRequired": "Melden Sie sich an, um die Agenda anzuzeigen.",
- "trayAgendaNoSources": "Keine sichtbaren Kalender oder Aufgabenlisten.",
- "trayAgendaOpenBusyMax": "App öffnen",
- "trayAgendaRefresh": "Aktualisieren",
- "trayAgendaError": "Agenda nicht verfügbar",
- "compactAgendaTitle": "Agenda",
- "compactAgendaSubtitle": "Anstehend",
- "compactAgendaOverdue": "Überfällig",
- "compactAgendaClear": "Im Moment frei",
- "compactAgendaOpenBusyMax": "BusyMax öffnen",
- "compactAgendaHide": "Ausblenden",
- "compactAgendaNewTask": "Neue Aufgabe",
- "compactAgendaRetry": "Erneut versuchen",
- "compactAgendaRefresh": "Aktualisieren",
- "compactAgendaAllDay": "Ganztägig",
- "compactAgendaDueToday": "Heute fällig",
- "compactAgendaDueTomorrow": "Morgen fällig",
- "compactAgendaDueOn": "Fällig {date}",
- "compactAgendaMoreOverdue": "Weitere überfällige Aufgaben laden",
+ "scheduleLoading": "Zeitplan wird geladen...",
+ "scheduleUnavailable": "Zeitplan nicht verfügbar",
+ "scheduleNoSources": "Keine sichtbaren Kalender oder Aufgabenlisten",
+ "scheduleNoSourcesDescription": "Wählen Sie in den Einstellungen aus, was angezeigt werden soll, und aktualisieren Sie anschließend den Zeitplan.",
+ "scheduleSignInRequired": "Konto verbinden",
+ "scheduleSignInDescription": "Melden Sie sich an, um Kalender und Aufgaben zu synchronisieren.",
+ "scheduleNoSearchResults": "Keine passenden Termine oder Aufgaben",
+ "scheduleNoSearchResultsDescription": "Versuchen Sie es mit einer anderen Suche oder setzen Sie die aktuellen Filter zurück.",
+ "refresh": "Aktualisieren",
+ "trayOpenBusyMax": "BusyMax öffnen",
"agendaLoadMoreOverdue": "Weitere überfällige Aufgaben laden",
"agendaLoadMoreNoDate": "Weitere Aufgaben ohne Datum laden",
"viewDay": "Tag",
@@ -71,7 +61,7 @@
"viewAgenda": "Agenda",
"scheduleSettings": "Zeitplan",
"scheduleDisplaySettings": "Zeitplananzeige",
- "scheduleDisplayHoursDescription": "Tages- und Wochenansicht öffnen innerhalb dieser Zeiten. Frühe und späte Einträge erweitern den Bereich bei Bedarf.",
+ "scheduleDisplayHoursDescription": "In der Tages- und Wochenansicht wird zunächst dieser Zeitraum angezeigt. Frühere oder spätere Einträge erweitern ihn bei Bedarf.",
"scheduleDayStartsAt": "Tag beginnt um",
"scheduleDayEndsAt": "Tag endet um",
"sourceCalendar": "Kalender",
@@ -97,6 +87,29 @@
"conference": "Konferenz",
"noConference": "Keine Konferenz",
"providerCalendar": "Anbieterkalender",
+ "formatBoldShortLabel": "F",
+ "formatBoldTooltip": "Fett",
+ "formatItalicShortLabel": "K",
+ "formatItalicTooltip": "Kursiv",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "Unterstrichen",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 Minute vorher} other{{minutes} Minuten vorher}}",
+ "@reminderMinutesBefore": {"placeholders": {"minutes": {"type": "int"}}},
+ "reminderAtStart": "Zum Startzeitpunkt",
+ "reminderHoursBefore": "{hours, plural, =1{1 Stunde vorher} other{{hours} Stunden vorher}}",
+ "@reminderHoursBefore": {"placeholders": {"hours": {"type": "int"}}},
+ "reminderDaysBefore": "{days, plural, =1{1 Tag vorher} other{{days} Tage vorher}}",
+ "@reminderDaysBefore": {"placeholders": {"days": {"type": "int"}}},
+ "availabilityFree": "Frei",
+ "availabilityTentative": "Mit Vorbehalt",
+ "availabilityOutOfOffice": "Abwesend",
+ "availabilityWorkingElsewhere": "An einem anderen Ort tätig",
+ "visibilityDefault": "Standard",
+ "visibilityPublic": "Öffentlich",
+ "visibilityPrivate": "Privat",
+ "visibilityConfidential": "Vertraulich",
+ "sensitivityNormal": "Normal",
+ "sensitivityPersonal": "Persönlich",
"tasks": "Aufgaben",
"allTasks": "Alle Aufgaben",
"tasksInList": "Aufgaben in {title}",
@@ -111,7 +124,7 @@
"shortcutNextPeriodDescription": "Nächste Woche in der Wochenansicht, nächster Monat in der Monatsansicht usw.",
"shortcutPreviousPeriod": "Vorheriger Zeitraum",
"shortcutPreviousPeriodDescription": "Vorherige Woche in der Wochenansicht, vorheriger Monat in der Monatsansicht usw.",
- "shortcutJumpToToday": "Zu Heute springen",
+ "shortcutJumpToToday": "Zum heutigen Tag springen",
"shortcutGroupView": "Ansicht",
"shortcutDayView": "Tagesansicht",
"shortcutWeekView": "Wochenansicht",
@@ -124,12 +137,12 @@
"shortcutGroupTaskEditing": "Aufgabenbearbeitung",
"shortcutCancelEditing": "Bearbeitung abbrechen",
"shortcutCancelEditingDescription": "Aufgabenbearbeitung oder Aufgabendetails schließen",
- "shortcutGroupCompactAgenda": "Kompakte Agenda",
- "shortcutRefreshCompactAgendaDescription": "Das kompakte Agenda-Fenster aktualisieren",
- "shortcutHideCompactAgendaDescription": "Das kompakte Agenda-Fenster ausblenden",
"aboutBusyMax": "Über BusyMax",
- "aboutBusyMaxDescription": "ToDo und Kalender",
+ "aboutBusyMaxDescription": "Kalender und Aufgaben",
+ "license": "Lizenz",
+ "apacheLicenseName": "Apache License 2.0",
"website": "Website",
+ "sourceCode": "Quellcode",
"reportAnIssue": "Problem melden",
"sendFeedback": "Feedback senden",
"feedbackSubmit": "Senden",
@@ -142,7 +155,7 @@
"feedbackCategoryOther": "Sonstiges",
"feedbackSubject": "Betreff",
"feedbackDetailedMessage": "Ausführliche Nachricht",
- "feedbackReplyEmail": "E-Mail-Adresse für Antwort (optional)",
+ "feedbackReplyEmail": "E-Mail-Adresse für Antworten (optional)",
"feedbackIncludeTechnicalDetails": "Technische Details hinzufügen",
"feedbackTechnicalDetailsDisclosure": "Fügt nur die Version Ihres Linux-Betriebssystems und die Spracheinstellung der Anwendung hinzu. Es werden keine Protokolle, Kontodaten, Dateinamen oder anderen Diagnosedaten hinzugefügt.",
"feedbackCategoryRequired": "Wählen Sie eine Kategorie aus.",
@@ -156,6 +169,8 @@
"feedbackServerError": "BusyStack kann Ihr Feedback derzeit nicht annehmen. Ihr Feedback wurde nicht gelöscht; versuchen Sie es erneut.",
"feedbackSuccess": "Feedback gesendet. Referenz: {id}",
"toggleSidebar": "Seitenleiste umschalten",
+ "showSidebar": "Seitenbereich anzeigen",
+ "hideSidebar": "Seitenbereich ausblenden",
"accounts": "Konten",
"currentAccount": "Aktuelles Konto",
"switchAccount": "Konto wechseln",
@@ -164,10 +179,17 @@
"googleProvider": "Google",
"microsoftProvider": "Microsoft",
"signedInAccount": "Angemeldet",
- "signOutThisAccount": "Dieses Konto abmelden",
- "revokeThisAccount": "Dieses Konto widerrufen",
- "disconnectThisAccount": "Dieses Konto trennen",
- "deleteLocalDataForThisAccount": "Lokale Daten für dieses Konto löschen",
+ "removeAccount": "Konto entfernen…",
+ "removingAccount": "Konto wird entfernt…",
+ "removeAccountDescription": "Synchronisierung beenden und die Daten dieses Kontos von diesem Gerät entfernen.",
+ "removeAccountTitle": "{account} aus BusyMax entfernen?",
+ "@removeAccountTitle": {"placeholders": {"account": {"type": "String"}}},
+ "removeAccountConfirmation": "Dadurch werden zwischengespeicherte Aufgaben, Kalender, Termine, Erinnerungen und ausstehende Offline-Änderungen von diesem Gerät gelöscht. Nicht synchronisierte Änderungen gehen verloren. Bei Google oder Microsoft wird nichts gelöscht.",
+ "revokeGoogleAccess": "BusyMax-Zugriff auf dieses Google-Konto ebenfalls widerrufen",
+ "revokeGoogleAccessDescription": "Vor einer erneuten Verbindung müssen Sie den Zugriff wieder gewähren.",
+ "removeAccountAction": "Konto entfernen",
+ "removeAccountFailed": "Das Konto konnte nicht vollständig entfernt werden. Versuchen Sie es erneut.",
+ "accountRemovedGoogleRevokeFailed": "Das Konto wurde von diesem Gerät entfernt, aber BusyMax konnte den Google-Zugriff nicht widerrufen. Sie können ihn in Ihrem Google-Konto widerrufen.",
"newList": "Neue Liste",
"signInToViewTaskLists": "Melden Sie sich an, um Aufgabenlisten zu sehen.",
"noTaskListsSynced": "Noch keine Aufgabenlisten synchronisiert.",
@@ -179,7 +201,7 @@
"builtInMicrosoftList": "Integriert",
"builtInMicrosoftListCannotRenameDelete": "Integrierte Microsoft To Do-Listen können nicht umbenannt oder gelöscht werden.",
"deleteListConfirmation": "\"{title}\" aus Google Tasks löschen?",
- "deleteEvent": "Ereignis löschen",
+ "deleteEvent": "Termin löschen",
"title": "Titel",
"create": "Erstellen",
"newTask": "Neue Aufgabe",
@@ -193,11 +215,11 @@
"exportFailed": "Export fehlgeschlagen: {error}",
"@exportFailed": {"placeholders": {"error": {"type": "String"}}},
"refreshFailed": "Aktualisierung fehlgeschlagen: {error}",
- "selectOrCreateTaskList": "Wählen oder erstellen Sie eine Aufgabenliste.",
+ "selectOrCreateTaskList": "Wählen oder erstellen Sie zunächst eine Aufgabenliste.",
"signInToViewTasks": "Melden Sie sich an, um Aufgaben zu sehen.",
"noTasks": "Keine Aufgaben.",
"noTasksYet": "Noch keine Aufgaben",
- "noTasksYetMessage": "Erstellen Sie eine Aufgabe oder aktualisieren Sie Ihre Konten.",
+ "noTasksYetMessage": "Erstellen Sie eine Aufgabe oder aktualisieren Sie Ihre Konten, um loszulegen.",
"noTasksInList": "Keine Aufgaben in dieser Liste.",
"overdue": "Überfällig",
"today": "Heute",
@@ -207,11 +229,6 @@
"completed": "Erledigt",
"duePrefix": "Fällig {date}",
"dateTimeDisplay": "{date}, {time}",
- "searchTasks": "Aufgaben suchen",
- "advancedFilters": "Erweiterte Filter",
- "showCompleted": "Erledigte anzeigen",
- "showHidden": "Ausgeblendete anzeigen",
- "showAssigned": "Zugewiesene anzeigen",
"taskDetails": "Aufgabendetails",
"editTask": "Aufgabe bearbeiten",
"noTaskSelected": "Keine Aufgabe ausgewählt.",
@@ -262,7 +279,7 @@
"list": "Liste",
"microsoftMoveUnsupported": "Das Verschieben zwischen Listen wird für Microsoft To Do-Konten in dieser Version nicht unterstützt.",
"createSubtask": "Unteraufgabe erstellen",
- "moveToTop": "Nach oben verschieben",
+ "moveToTop": "Ganz nach oben verschieben",
"deleteTask": "Aufgabe löschen",
"newSubtask": "Neue Unteraufgabe",
"deleteTaskConfirmation": "\"{title}\" aus Google Tasks löschen?",
@@ -270,7 +287,7 @@
"id": "ID",
"etag": "ETag",
"updated": "Aktualisiert",
- "parent": "Übergeordnet",
+ "parent": "Übergeordnete Aufgabe",
"position": "Position",
"webLink": "Weblink",
"assignment": "Zuweisung",
@@ -278,38 +295,46 @@
"pendingSync": "Synchronisierung ausstehend",
"synced": "Synchronisiert",
"account": "Konto",
- "signOut": "Abmelden",
- "revokeGoogleAuthorization": "Google-Autorisierung widerrufen",
- "deleteLocalData": "Lokale Daten löschen",
- "deleteLocalDataConfirmation": "Dies entfernt das lokale Konto, synchronisierte Aufgaben und ausstehende Offline-Änderungen von diesem Gerät.",
"sync": "Synchronisierung",
"manualFullSync": "Manuelle vollständige Synchronisierung",
+ "runInBackgroundWhenClosed": "Nach dem Schließen des Fensters weiter ausführen",
+ "showTrayIcon": "Symbol im Benachrichtigungsbereich anzeigen",
+ "startMinimizedToTray": "Minimiert im Benachrichtigungsbereich starten",
+ "requiresTrayIcon": "Erfordert das Symbol im Benachrichtigungsbereich.",
"syncComplete": "Synchronisierung abgeschlossen.",
"syncFailed": "Synchronisierung fehlgeschlagen: {error}",
"notifySyncFailures": "Benachrichtigungen bei Synchronisierungsfehlern",
"notifyConflicts": "Benachrichtigungen bei Konflikten",
"notifyDueToday": "Benachrichtigungen für heute fällige Aufgaben",
+ "eventReminders": "Terminerinnerungen",
+ "taskReminders": "Aufgabenerinnerungen",
+ "notificationDetailLevel": "Detailgrad der Benachrichtigungen",
+ "notificationDetailPrivate": "Privat",
+ "notificationDetailNormal": "Normal",
+ "quietHours": "Ruhezeiten",
+ "quietHoursDescription": "Benachrichtigungen während dieses Zeitraums pausieren.",
+ "quietHoursStart": "Beginn der Ruhezeit",
+ "quietHoursEnd": "Ende der Ruhezeit",
"notifications": "Benachrichtigungen",
"appearance": "Darstellung",
- "theme": "Theme",
+ "theme": "Design",
"themeSystem": "System",
"themeLight": "Hell",
"themeDark": "Dunkel",
- "themeFamily": "Theme-Familie",
- "themeFamilyYaru": "Natives Ubuntu (Yaru)",
+ "themeFamily": "Designfamilie",
+ "themeFamilyYaru": "Natives Ubuntu-Design (Yaru)",
"localization": "Lokalisierung",
"currentLocale": "Aktuelle Sprache",
"privacy": "Datenschutz",
"redactTaskContentInDiagnostics": "Aufgabeninhalte in Diagnosen schwärzen",
- "detailedNotifications": "Detaillierte Benachrichtigungstexte",
"developerDiagnostics": "Entwicklerdiagnose",
"diagnostics": "Diagnose",
"apiInspectorDisabled": "API-Inspektor anzeigen",
"googleTasksApi": "Google Tasks API",
"discoveryRevision": "Discovery-Revision: {revision}",
"implementedMethods": "Implementierte Methoden",
- "supportsTasksScopes": "Unterstützt tasks- und tasks.readonly-Berechtigungen",
- "requiresTasksScope": "Benötigt tasks-Berechtigung",
+ "supportsTasksScopes": "Unterstützt die Berechtigungsbereiche tasks und tasks.readonly",
+ "requiresTasksScope": "Erfordert den Berechtigungsbereich tasks",
"blockedPendingOperations": "Blockierte ausstehende Vorgänge",
"signInToInspectPendingOperations": "Melden Sie sich an, um ausstehende Vorgänge zu prüfen.",
"noBlockedPendingOperations": "Keine blockierten ausstehenden Vorgänge.",
@@ -319,11 +344,12 @@
"pendingOpAttempts": "Versuche={count}",
"retry": "Erneut versuchen",
"discard": "Verwerfen",
+ "discardChangesAction": "Verwerfen",
"discardChanges": "Änderungen verwerfen?",
"discardChangesConfirmation": "Dies verwirft ungespeicherte Änderungen an dieser Aufgabe.",
"retryCompleted": "Erneuter Versuch abgeschlossen.",
"discardPendingOperation": "Ausstehenden Vorgang verwerfen?",
- "discardPendingOperationConfirmation": "Dies entfernt den blockierten lokalen Vorgang. Die nächste Synchronisierung aktualisiert von Google Tasks.",
+ "discardPendingOperationConfirmation": "Dadurch wird der blockierte lokale Vorgang entfernt. Bei der nächsten Synchronisierung werden die Daten aus Google Tasks neu geladen.",
"pendingOperationDiscarded": "Ausstehender Vorgang verworfen.",
"syncFailureNotificationTitle": "BusyMax-Synchronisierung fehlgeschlagen",
"syncFailureNotificationBody": "Hintergrundsynchronisierung fehlgeschlagen. {message}",
@@ -331,5 +357,27 @@
"conflictNotificationBody": "Eine ausstehende lokale Änderung wurde blockiert. {summary}",
"dueTodayNotificationTitle": "Heute fällige Aufgaben",
"dueTodayNotificationBody": "{count, plural, =1{Eine Aufgabe ist heute fällig.} other{{count} Aufgaben sind heute fällig.}}",
- "notificationDetailsHidden": "Details werden durch Datenschutzeinstellungen ausgeblendet."
+ "eventReminderNotificationTitle": "Terminerinnerung",
+ "taskReminderNotificationTitle": "Aufgabenerinnerung",
+ "eventReminderNotificationBody": "Der Termin beginnt bald.",
+ "taskReminderNotificationBody": "Die Aufgabe ist bald fällig.",
+ "notificationOpenAction": "Öffnen",
+ "notificationDetailsHidden": "Details werden durch Datenschutzeinstellungen ausgeblendet.",
+ "previousMonth": "Vorheriger Monat",
+ "nextMonth": "Nächster Monat",
+ "openMonthView": "Monatsansicht öffnen",
+ "previousYear": "Vorheriges Jahr",
+ "nextYear": "Nächstes Jahr",
+ "openYearView": "Jahresansicht öffnen",
+ "weekNumberTooltip": "Woche {number}",
+ "@weekNumberTooltip": {"placeholders": {"number": {"type": "int"}}},
+ "resizeAllDayPanel": "Ganztägigen Bereich vergrößern oder verkleinern",
+ "scheduleItemCount": "{count, plural, =1{1 Eintrag} other{{count} Einträge}}",
+ "@scheduleItemCount": {"placeholders": {"count": {"type": "int"}}},
+ "readOnlyCalendar": "Dieser Kalender ist schreibgeschützt.",
+ "selectTimeZone": "Zeitzone auswählen",
+ "searchLocations": "Orte suchen",
+ "noLocationsFound": "Keine Orte gefunden",
+ "deleteCalendarConfirmation": "\"{title}\" löschen?",
+ "@deleteCalendarConfirmation": {"placeholders": {"title": {"type": "String"}}}
}
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 9b283bd..db12d05 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -39,31 +39,20 @@
"hideFromSchedule": "Hide from schedule",
"showInSchedule": "Show in schedule",
"noCalendarsSynced": "No calendars synced yet.",
- "allDay": "All Day",
+ "allDay": "All day",
"moreItems": "+{count} more",
"@moreItems": {"placeholders": {"count": {"type": "int"}}},
"noEventsOrTasks": "No events or tasks",
- "trayAgendaLoading": "Loading agenda...",
- "trayAgendaSignInRequired": "Sign in to show agenda.",
- "trayAgendaNoSources": "No visible calendars or task lists.",
- "trayAgendaOpenBusyMax": "Open app",
- "trayAgendaRefresh": "Refresh",
- "trayAgendaError": "Agenda unavailable",
- "compactAgendaTitle": "Agenda",
- "compactAgendaSubtitle": "Upcoming",
- "compactAgendaOverdue": "Overdue",
- "compactAgendaClear": "Clear for now",
- "compactAgendaOpenBusyMax": "Open BusyMax",
- "compactAgendaHide": "Hide",
- "compactAgendaNewTask": "New task",
- "compactAgendaRetry": "Retry",
- "compactAgendaRefresh": "Refresh",
- "compactAgendaAllDay": "All day",
- "compactAgendaDueToday": "Due today",
- "compactAgendaDueTomorrow": "Due tomorrow",
- "compactAgendaDueOn": "Due {date}",
- "@compactAgendaDueOn": {"placeholders": {"date": {"type": "String"}}},
- "compactAgendaMoreOverdue": "Load more overdue tasks",
+ "scheduleLoading": "Loading schedule...",
+ "scheduleUnavailable": "Schedule unavailable",
+ "scheduleNoSources": "No visible calendars or task lists",
+ "scheduleNoSourcesDescription": "Choose what to show in Settings, then refresh.",
+ "scheduleSignInRequired": "Connect an account",
+ "scheduleSignInDescription": "Sign in to sync calendars and tasks.",
+ "scheduleNoSearchResults": "No matching events or tasks",
+ "scheduleNoSearchResultsDescription": "Try a different search or clear the current filters.",
+ "refresh": "Refresh",
+ "trayOpenBusyMax": "Open BusyMax",
"agendaLoadMoreOverdue": "Load more overdue tasks",
"agendaLoadMoreNoDate": "Load more no-date tasks",
"viewDay": "Day",
@@ -84,7 +73,7 @@
"editEvent": "Edit event",
"eventTitle": "Event title",
"location": "Location",
- "timeSlot": "Time Slot",
+ "timeSlot": "Time slot",
"startDateTime": "Start date/time",
"endDateTime": "End date/time",
"doesNotRepeat": "Does not repeat",
@@ -99,6 +88,29 @@
"conference": "Conference",
"noConference": "No conference",
"providerCalendar": "Provider calendar",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "Bold",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "Italic",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "Underline",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minute before} other{{minutes} minutes before}}",
+ "@reminderMinutesBefore": {"placeholders": {"minutes": {"type": "int"}}},
+ "reminderAtStart": "At start",
+ "reminderHoursBefore": "{hours, plural, =1{1 hour before} other{{hours} hours before}}",
+ "@reminderHoursBefore": {"placeholders": {"hours": {"type": "int"}}},
+ "reminderDaysBefore": "{days, plural, =1{1 day before} other{{days} days before}}",
+ "@reminderDaysBefore": {"placeholders": {"days": {"type": "int"}}},
+ "availabilityFree": "Free",
+ "availabilityTentative": "Tentative",
+ "availabilityOutOfOffice": "Out of office",
+ "availabilityWorkingElsewhere": "Working elsewhere",
+ "visibilityDefault": "Default",
+ "visibilityPublic": "Public",
+ "visibilityPrivate": "Private",
+ "visibilityConfidential": "Confidential",
+ "sensitivityNormal": "Normal",
+ "sensitivityPersonal": "Personal",
"tasks": "Tasks",
"allTasks": "All tasks",
"tasksInList": "Tasks in {title}",
@@ -127,12 +139,12 @@
"shortcutGroupTaskEditing": "Task editing",
"shortcutCancelEditing": "Cancel editing",
"shortcutCancelEditingDescription": "Close task editing or task details",
- "shortcutGroupCompactAgenda": "Compact agenda",
- "shortcutRefreshCompactAgendaDescription": "Refresh the compact agenda window",
- "shortcutHideCompactAgendaDescription": "Hide the compact agenda window",
"aboutBusyMax": "About BusyMax",
- "aboutBusyMaxDescription": "ToDo and Calendar",
+ "aboutBusyMaxDescription": "Calendar and tasks",
+ "license": "License",
+ "apacheLicenseName": "Apache License 2.0",
"website": "Website",
+ "sourceCode": "Source code",
"reportAnIssue": "Report an issue",
"sendFeedback": "Send feedback",
"feedbackSubmit": "Submit",
@@ -160,6 +172,8 @@
"feedbackSuccess": "Feedback sent. Reference: {id}",
"@feedbackSuccess": {"placeholders": {"id": {"type": "String"}}},
"toggleSidebar": "Toggle Sidebar",
+ "showSidebar": "Show sidebar panel",
+ "hideSidebar": "Hide sidebar panel",
"accounts": "Accounts",
"currentAccount": "Current account",
"switchAccount": "Switch account",
@@ -168,10 +182,17 @@
"googleProvider": "Google",
"microsoftProvider": "Microsoft",
"signedInAccount": "Signed in",
- "signOutThisAccount": "Sign out this account",
- "revokeThisAccount": "Revoke this account",
- "disconnectThisAccount": "Disconnect this account",
- "deleteLocalDataForThisAccount": "Delete local data for this account",
+ "removeAccount": "Remove account…",
+ "removingAccount": "Removing account…",
+ "removeAccountDescription": "Stop syncing and remove this account’s data from this device.",
+ "removeAccountTitle": "Remove {account} from BusyMax?",
+ "@removeAccountTitle": {"placeholders": {"account": {"type": "String"}}},
+ "removeAccountConfirmation": "This deletes cached tasks, calendars, events, reminders, and pending offline changes from this device. Unsynced changes will be lost. Nothing will be deleted from Google or Microsoft.",
+ "revokeGoogleAccess": "Also revoke BusyMax’s access to this Google Account",
+ "revokeGoogleAccessDescription": "You will need to grant access again before reconnecting.",
+ "removeAccountAction": "Remove account",
+ "removeAccountFailed": "Could not finish removing the account. Try again.",
+ "accountRemovedGoogleRevokeFailed": "The account was removed from this device, but BusyMax could not revoke Google access. You can revoke it from your Google Account.",
"newList": "New list",
"signInToViewTaskLists": "Sign in to view task lists.",
"noTaskListsSynced": "No task lists synced yet.",
@@ -220,11 +241,6 @@
"time": {"type": "String"}
}
},
- "searchTasks": "Search tasks",
- "advancedFilters": "Advanced filters",
- "showCompleted": "Show completed",
- "showHidden": "Show hidden",
- "showAssigned": "Show assigned",
"taskDetails": "Task details",
"editTask": "Edit Task",
"noTaskSelected": "No task selected.",
@@ -292,18 +308,27 @@
"pendingSync": "Pending sync",
"synced": "Synced",
"account": "Account",
- "signOut": "Sign out",
- "revokeGoogleAuthorization": "Revoke Google authorization",
- "deleteLocalData": "Delete local data",
- "deleteLocalDataConfirmation": "This removes the local account, synced tasks, and pending offline changes from this device.",
"sync": "Sync",
"manualFullSync": "Manual full sync",
+ "runInBackgroundWhenClosed": "Continue running when the window is closed",
+ "showTrayIcon": "Show tray icon",
+ "startMinimizedToTray": "Start minimized to the tray",
+ "requiresTrayIcon": "Requires the tray icon.",
"syncComplete": "Sync complete.",
"syncFailed": "Sync failed: {error}",
"@syncFailed": {"placeholders": {"error": {"type": "String"}}},
"notifySyncFailures": "Notifications on sync failure",
"notifyConflicts": "Notifications on conflicts",
"notifyDueToday": "Due-today notifications",
+ "eventReminders": "Event reminders",
+ "taskReminders": "Task reminders",
+ "notificationDetailLevel": "Notification detail level",
+ "notificationDetailPrivate": "Private",
+ "notificationDetailNormal": "Normal",
+ "quietHours": "Quiet hours",
+ "quietHoursDescription": "Pause notifications during this period.",
+ "quietHoursStart": "Quiet hours start",
+ "quietHoursEnd": "Quiet hours end",
"notifications": "Notifications",
"appearance": "Appearance",
"theme": "Theme",
@@ -316,7 +341,6 @@
"currentLocale": "Current locale",
"privacy": "Privacy",
"redactTaskContentInDiagnostics": "Redact task content in diagnostics",
- "detailedNotifications": "Detailed notification text",
"developerDiagnostics": "Developer diagnostics",
"diagnostics": "Diagnostics",
"apiInspectorDisabled": "Show API inspector",
@@ -338,6 +362,10 @@
"@pendingOpAttempts": {"placeholders": {"count": {"type": "int"}}},
"retry": "Retry",
"discard": "Discard",
+ "discardChangesAction": "Discard",
+ "@discardChangesAction": {
+ "description": "Destructive confirmation button that throws away unsaved edits. Translate it distinctly from Cancel."
+ },
"discardChanges": "Discard changes?",
"discardChangesConfirmation": "This discards unsaved edits to this task.",
"retryCompleted": "Retry completed.",
@@ -353,5 +381,27 @@
"dueTodayNotificationTitle": "Tasks due today",
"dueTodayNotificationBody": "{count, plural, =1{One task is due today.} other{{count} tasks are due today.}}",
"@dueTodayNotificationBody": {"placeholders": {"count": {"type": "int"}}},
- "notificationDetailsHidden": "Details are hidden by privacy settings."
+ "eventReminderNotificationTitle": "Event reminder",
+ "taskReminderNotificationTitle": "Task reminder",
+ "eventReminderNotificationBody": "Event starts soon.",
+ "taskReminderNotificationBody": "Task is due soon.",
+ "notificationOpenAction": "Open",
+ "notificationDetailsHidden": "Details are hidden by privacy settings.",
+ "previousMonth": "Previous month",
+ "nextMonth": "Next month",
+ "openMonthView": "Open month view",
+ "previousYear": "Previous year",
+ "nextYear": "Next year",
+ "openYearView": "Open year view",
+ "weekNumberTooltip": "Week {number}",
+ "@weekNumberTooltip": {"placeholders": {"number": {"type": "int"}}},
+ "resizeAllDayPanel": "Resize the all-day panel",
+ "scheduleItemCount": "{count, plural, =1{1 item} other{{count} items}}",
+ "@scheduleItemCount": {"placeholders": {"count": {"type": "int"}}},
+ "readOnlyCalendar": "This calendar is read-only.",
+ "selectTimeZone": "Select Timezone",
+ "searchLocations": "Search locations",
+ "noLocationsFound": "No locations found",
+ "deleteCalendarConfirmation": "Delete \"{title}\"?",
+ "@deleteCalendarConfirmation": {"placeholders": {"title": {"type": "String"}}}
}
diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb
index ddc7368..cfd3fef 100644
--- a/lib/l10n/app_es.arb
+++ b/lib/l10n/app_es.arb
@@ -10,7 +10,7 @@
"onboardingAccountsStepTitle": "Conectar cuentas",
"onboardingAccountsStepDescription": "Añade todas las cuentas de Google y Microsoft que quieras usar. BusyMax sincroniza calendarios, eventos, listas de tareas y tareas de cada cuenta.",
"onboardingPreferencesStepTitle": "Elegir ajustes del sistema",
- "onboardingPreferencesStepDescription": "Configura el comportamiento de escritorio, recordatorios, detalle de notificaciones y apariencia antes de abrir tu agenda.",
+ "onboardingPreferencesStepDescription": "Configura el comportamiento de la aplicación en el escritorio, los recordatorios, el nivel de detalle de las notificaciones y la apariencia antes de abrir tu agenda.",
"signInWithGoogle": "Iniciar sesión con Google",
"signInWithMicrosoft": "Iniciar sesión con Microsoft",
"googleTasksProvider": "Google Tasks",
@@ -35,33 +35,23 @@
"calendars": "Calendarios",
"newEvent": "Nuevo evento",
"refreshCalendar": "Actualizar calendario",
- "openInProvider": "Abrir en proveedor",
+ "openInProvider": "Abrir en el proveedor",
"hideFromSchedule": "Ocultar de la agenda",
"showInSchedule": "Mostrar en la agenda",
"noCalendarsSynced": "Aún no hay calendarios sincronizados.",
"allDay": "Todo el día",
"moreItems": "+{count} más",
"noEventsOrTasks": "No hay eventos ni tareas",
- "trayAgendaLoading": "Cargando agenda...",
- "trayAgendaSignInRequired": "Inicia sesión para mostrar la agenda.",
- "trayAgendaNoSources": "No hay calendarios ni listas de tareas visibles.",
- "trayAgendaOpenBusyMax": "Abrir app",
- "trayAgendaRefresh": "Actualizar",
- "trayAgendaError": "Agenda no disponible",
- "compactAgendaTitle": "Agenda",
- "compactAgendaSubtitle": "Próximamente",
- "compactAgendaOverdue": "Vencidas",
- "compactAgendaClear": "Libre por ahora",
- "compactAgendaOpenBusyMax": "Abrir BusyMax",
- "compactAgendaHide": "Ocultar",
- "compactAgendaNewTask": "Nueva tarea",
- "compactAgendaRetry": "Reintentar",
- "compactAgendaRefresh": "Actualizar",
- "compactAgendaAllDay": "Todo el día",
- "compactAgendaDueToday": "Vence hoy",
- "compactAgendaDueTomorrow": "Vence mañana",
- "compactAgendaDueOn": "Vence {date}",
- "compactAgendaMoreOverdue": "Cargar más tareas vencidas",
+ "scheduleLoading": "Cargando la agenda...",
+ "scheduleUnavailable": "Agenda no disponible",
+ "scheduleNoSources": "No hay calendarios ni listas de tareas visibles",
+ "scheduleNoSourcesDescription": "Elige qué mostrar en Configuración y, después, actualiza la agenda.",
+ "scheduleSignInRequired": "Conectar una cuenta",
+ "scheduleSignInDescription": "Inicia sesión para sincronizar calendarios y tareas.",
+ "scheduleNoSearchResults": "No hay eventos ni tareas coincidentes",
+ "scheduleNoSearchResultsDescription": "Prueba con otra búsqueda o borra los filtros actuales.",
+ "refresh": "Actualizar",
+ "trayOpenBusyMax": "Abrir BusyMax",
"agendaLoadMoreOverdue": "Cargar más tareas vencidas",
"agendaLoadMoreNoDate": "Cargar más tareas sin fecha",
"viewDay": "Día",
@@ -71,7 +61,7 @@
"viewAgenda": "Agenda",
"scheduleSettings": "Agenda",
"scheduleDisplaySettings": "Visualización de agenda",
- "scheduleDisplayHoursDescription": "Las vistas Día y Semana se abren dentro de este horario. Los elementos tempranos y tardíos amplían el intervalo si hace falta.",
+ "scheduleDisplayHoursDescription": "Las vistas de día y semana muestran inicialmente este intervalo horario. Los elementos anteriores o posteriores lo amplían cuando es necesario.",
"scheduleDayStartsAt": "El día empieza a las",
"scheduleDayEndsAt": "El día termina a las",
"sourceCalendar": "Calendario",
@@ -97,6 +87,29 @@
"conference": "Conferencia",
"noConference": "Sin conferencia",
"providerCalendar": "Calendario del proveedor",
+ "formatBoldShortLabel": "N",
+ "formatBoldTooltip": "Negrita",
+ "formatItalicShortLabel": "C",
+ "formatItalicTooltip": "Cursiva",
+ "formatUnderlineShortLabel": "S",
+ "formatUnderlineTooltip": "Subrayado",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minuto antes} other{{minutes} minutos antes}}",
+ "@reminderMinutesBefore": {"placeholders": {"minutes": {"type": "int"}}},
+ "reminderAtStart": "A la hora de inicio",
+ "reminderHoursBefore": "{hours, plural, =1{1 hora antes} other{{hours} horas antes}}",
+ "@reminderHoursBefore": {"placeholders": {"hours": {"type": "int"}}},
+ "reminderDaysBefore": "{days, plural, =1{1 día antes} other{{days} días antes}}",
+ "@reminderDaysBefore": {"placeholders": {"days": {"type": "int"}}},
+ "availabilityFree": "Libre",
+ "availabilityTentative": "Provisional",
+ "availabilityOutOfOffice": "Fuera de la oficina",
+ "availabilityWorkingElsewhere": "Trabajando en otro lugar",
+ "visibilityDefault": "Predeterminada",
+ "visibilityPublic": "Pública",
+ "visibilityPrivate": "Privada",
+ "visibilityConfidential": "Confidencial",
+ "sensitivityNormal": "Normal",
+ "sensitivityPersonal": "Personal",
"tasks": "Tareas",
"allTasks": "Todas las tareas",
"tasksInList": "Tareas en {title}",
@@ -111,7 +124,7 @@
"shortcutNextPeriodDescription": "Semana siguiente en la vista semanal, mes siguiente en la vista mensual, etc.",
"shortcutPreviousPeriod": "Periodo anterior",
"shortcutPreviousPeriodDescription": "Semana anterior en la vista semanal, mes anterior en la vista mensual, etc.",
- "shortcutJumpToToday": "Ir a hoy",
+ "shortcutJumpToToday": "Ir a la fecha de hoy",
"shortcutGroupView": "Vista",
"shortcutDayView": "Vista de día",
"shortcutWeekView": "Vista de semana",
@@ -124,12 +137,12 @@
"shortcutGroupTaskEditing": "Edición de tareas",
"shortcutCancelEditing": "Cancelar edición",
"shortcutCancelEditingDescription": "Cerrar la edición o los detalles de la tarea",
- "shortcutGroupCompactAgenda": "Agenda compacta",
- "shortcutRefreshCompactAgendaDescription": "Actualizar la ventana de agenda compacta",
- "shortcutHideCompactAgendaDescription": "Ocultar la ventana de agenda compacta",
"aboutBusyMax": "Acerca de BusyMax",
- "aboutBusyMaxDescription": "ToDo y calendario",
+ "aboutBusyMaxDescription": "Calendario y tareas",
+ "license": "Licencia",
+ "apacheLicenseName": "Apache License 2.0",
"website": "Sitio web",
+ "sourceCode": "Código fuente",
"reportAnIssue": "Informar de un problema",
"sendFeedback": "Enviar comentarios",
"feedbackSubmit": "Enviar",
@@ -142,7 +155,7 @@
"feedbackCategoryOther": "Otro",
"feedbackSubject": "Asunto",
"feedbackDetailedMessage": "Mensaje detallado",
- "feedbackReplyEmail": "Correo electrónico de respuesta (opcional)",
+ "feedbackReplyEmail": "Correo electrónico para recibir una respuesta (opcional)",
"feedbackIncludeTechnicalDetails": "Incluir detalles técnicos",
"feedbackTechnicalDetailsDisclosure": "Incluye únicamente la versión del sistema operativo Linux y la configuración regional de la aplicación. No se incluyen registros, datos de cuenta, nombres de archivos ni otros diagnósticos.",
"feedbackCategoryRequired": "Selecciona una categoría.",
@@ -150,12 +163,14 @@
"feedbackMessageLengthError": "El mensaje debe tener entre 10 y 5.000 caracteres.",
"feedbackInvalidEmail": "Introduce una dirección de correo electrónico válida.",
"feedbackConnectionError": "No se pudo conectar con BusyStack. Comprueba tu conexión e inténtalo de nuevo.",
- "feedbackTimeoutError": "La solicitud agotó el tiempo de espera. Tus comentarios no se han borrado; inténtalo de nuevo.",
+ "feedbackTimeoutError": "Se agotó el tiempo de espera de la solicitud. Tus comentarios no se han borrado; inténtalo de nuevo.",
"feedbackRateLimitedError": "Se han enviado demasiados comentarios desde esta red. Espera e inténtalo de nuevo.",
"feedbackRejectedError": "El servidor rechazó el envío. Revisa los campos e inténtalo de nuevo.",
"feedbackServerError": "BusyStack no puede aceptar tus comentarios ahora. Tus comentarios no se han borrado; inténtalo de nuevo.",
"feedbackSuccess": "Comentarios enviados. Referencia: {id}",
- "toggleSidebar": "Alternar barra lateral",
+ "toggleSidebar": "Mostrar u ocultar la barra lateral",
+ "showSidebar": "Mostrar panel lateral",
+ "hideSidebar": "Ocultar panel lateral",
"accounts": "Cuentas",
"currentAccount": "Cuenta actual",
"switchAccount": "Cambiar cuenta",
@@ -164,10 +179,17 @@
"googleProvider": "Google",
"microsoftProvider": "Microsoft",
"signedInAccount": "Sesión iniciada",
- "signOutThisAccount": "Cerrar sesión de esta cuenta",
- "revokeThisAccount": "Revocar esta cuenta",
- "disconnectThisAccount": "Desconectar esta cuenta",
- "deleteLocalDataForThisAccount": "Eliminar datos locales de esta cuenta",
+ "removeAccount": "Eliminar cuenta…",
+ "removingAccount": "Eliminando cuenta…",
+ "removeAccountDescription": "Detener la sincronización y eliminar de este dispositivo los datos de esta cuenta.",
+ "removeAccountTitle": "¿Eliminar {account} de BusyMax?",
+ "@removeAccountTitle": {"placeholders": {"account": {"type": "String"}}},
+ "removeAccountConfirmation": "Esto elimina de este dispositivo las tareas, los calendarios, los eventos, los recordatorios y los cambios sin conexión pendientes almacenados en caché. Los cambios no sincronizados se perderán. No se eliminará nada de Google ni Microsoft.",
+ "revokeGoogleAccess": "Revocar también el acceso de BusyMax a esta cuenta de Google",
+ "revokeGoogleAccessDescription": "Tendrás que volver a conceder acceso antes de reconectar la cuenta.",
+ "removeAccountAction": "Eliminar cuenta",
+ "removeAccountFailed": "No se pudo terminar de eliminar la cuenta. Inténtalo de nuevo.",
+ "accountRemovedGoogleRevokeFailed": "La cuenta se eliminó de este dispositivo, pero BusyMax no pudo revocar su acceso a tu cuenta de Google. Puedes revocarlo desde tu cuenta de Google.",
"newList": "Nueva lista",
"signInToViewTaskLists": "Inicia sesión para ver las listas de tareas.",
"noTaskListsSynced": "Aún no hay listas de tareas sincronizadas.",
@@ -193,7 +215,7 @@
"exportFailed": "Error al exportar: {error}",
"@exportFailed": {"placeholders": {"error": {"type": "String"}}},
"refreshFailed": "Error al actualizar: {error}",
- "selectOrCreateTaskList": "Selecciona o crea una lista de tareas.",
+ "selectOrCreateTaskList": "Selecciona o crea una lista de tareas para empezar.",
"signInToViewTasks": "Inicia sesión para ver las tareas.",
"noTasks": "No hay tareas.",
"noTasksYet": "Aún no hay tareas",
@@ -207,11 +229,6 @@
"completed": "Completadas",
"duePrefix": "Vence {date}",
"dateTimeDisplay": "{date}, {time}",
- "searchTasks": "Buscar tareas",
- "advancedFilters": "Filtros avanzados",
- "showCompleted": "Mostrar completadas",
- "showHidden": "Mostrar ocultas",
- "showAssigned": "Mostrar asignadas",
"taskDetails": "Detalles de la tarea",
"editTask": "Editar tarea",
"noTaskSelected": "No hay tarea seleccionada.",
@@ -260,9 +277,9 @@
"advancedSection": "Avanzado",
"addCategory": "Añadir categoría",
"list": "Lista",
- "microsoftMoveUnsupported": "Mover tareas entre listas no es compatible con las cuentas de Microsoft To Do en esta versión.",
+ "microsoftMoveUnsupported": "En esta versión, no se pueden mover tareas entre listas en cuentas de Microsoft To Do.",
"createSubtask": "Crear subtarea",
- "moveToTop": "Mover arriba",
+ "moveToTop": "Mover al principio",
"deleteTask": "Eliminar tarea",
"newSubtask": "Nueva subtarea",
"deleteTaskConfirmation": "¿Eliminar \"{title}\" de Google Tasks?",
@@ -270,7 +287,7 @@
"id": "ID",
"etag": "ETag",
"updated": "Actualizada",
- "parent": "Padre",
+ "parent": "Tarea principal",
"position": "Posición",
"webLink": "Enlace web",
"assignment": "Asignación",
@@ -278,30 +295,38 @@
"pendingSync": "Sincronización pendiente",
"synced": "Sincronizada",
"account": "Cuenta",
- "signOut": "Cerrar sesión",
- "revokeGoogleAuthorization": "Revocar autorización de Google",
- "deleteLocalData": "Eliminar datos locales",
- "deleteLocalDataConfirmation": "Esto elimina de este dispositivo la cuenta local, las tareas sincronizadas y los cambios sin conexión pendientes.",
"sync": "Sincronización",
"manualFullSync": "Sincronización completa manual",
+ "runInBackgroundWhenClosed": "Seguir ejecutándose al cerrar la ventana",
+ "showTrayIcon": "Mostrar el icono en la bandeja del sistema",
+ "startMinimizedToTray": "Iniciar minimizado en la bandeja del sistema",
+ "requiresTrayIcon": "Requiere el icono de la bandeja del sistema.",
"syncComplete": "Sincronización completa.",
"syncFailed": "Error de sincronización: {error}",
"notifySyncFailures": "Notificaciones de errores de sincronización",
"notifyConflicts": "Notificaciones de conflictos",
- "notifyDueToday": "Notificaciones de tareas para hoy",
+ "notifyDueToday": "Notificaciones de tareas que vencen hoy",
+ "eventReminders": "Recordatorios de eventos",
+ "taskReminders": "Recordatorios de tareas",
+ "notificationDetailLevel": "Nivel de detalle de las notificaciones",
+ "notificationDetailPrivate": "Privado",
+ "notificationDetailNormal": "Normal",
+ "quietHours": "Horario de silencio",
+ "quietHoursDescription": "Pausar las notificaciones durante este período.",
+ "quietHoursStart": "Inicio del horario de silencio",
+ "quietHoursEnd": "Fin del horario de silencio",
"notifications": "Notificaciones",
"appearance": "Apariencia",
"theme": "Tema",
"themeSystem": "Sistema",
"themeLight": "Claro",
"themeDark": "Oscuro",
- "themeFamily": "Familia de tema",
- "themeFamilyYaru": "Ubuntu nativo (Yaru)",
+ "themeFamily": "Familia de temas",
+ "themeFamilyYaru": "Tema nativo de Ubuntu (Yaru)",
"localization": "Localización",
"currentLocale": "Configuración regional actual",
"privacy": "Privacidad",
"redactTaskContentInDiagnostics": "Ocultar contenido de tareas en diagnósticos",
- "detailedNotifications": "Texto detallado en notificaciones",
"developerDiagnostics": "Diagnósticos de desarrollo",
"diagnostics": "Diagnósticos",
"apiInspectorDisabled": "Mostrar inspector de API",
@@ -313,17 +338,18 @@
"blockedPendingOperations": "Operaciones pendientes bloqueadas",
"signInToInspectPendingOperations": "Inicia sesión para inspeccionar operaciones pendientes.",
"noBlockedPendingOperations": "No hay operaciones pendientes bloqueadas.",
- "operationActions": "Acciones de operación",
+ "operationActions": "Acciones de la operación",
"pendingOpListId": "lista={id}",
"pendingOpTaskId": "tarea={id}",
"pendingOpAttempts": "intentos={count}",
"retry": "Reintentar",
"discard": "Descartar",
+ "discardChangesAction": "Descartar",
"discardChanges": "¿Descartar cambios?",
"discardChangesConfirmation": "Esto descarta las ediciones no guardadas de esta tarea.",
"retryCompleted": "Reintento completado.",
"discardPendingOperation": "¿Descartar operación pendiente?",
- "discardPendingOperationConfirmation": "Esto elimina la operación local bloqueada. La próxima sincronización actualizará desde Google Tasks.",
+ "discardPendingOperationConfirmation": "Esto elimina la operación local bloqueada. En la próxima sincronización, se volverán a cargar los datos desde Google Tasks.",
"pendingOperationDiscarded": "Operación pendiente descartada.",
"syncFailureNotificationTitle": "Falló la sincronización de BusyMax",
"syncFailureNotificationBody": "Falló la sincronización en segundo plano. {message}",
@@ -331,5 +357,27 @@
"conflictNotificationBody": "Se bloqueó un cambio local pendiente. {summary}",
"dueTodayNotificationTitle": "Tareas que vencen hoy",
"dueTodayNotificationBody": "{count, plural, =1{Una tarea vence hoy.} other{{count} tareas vencen hoy.}}",
- "notificationDetailsHidden": "Los detalles están ocultos por la configuración de privacidad."
+ "eventReminderNotificationTitle": "Recordatorio de evento",
+ "taskReminderNotificationTitle": "Recordatorio de tarea",
+ "eventReminderNotificationBody": "El evento empieza pronto.",
+ "taskReminderNotificationBody": "La tarea vence pronto.",
+ "notificationOpenAction": "Abrir",
+ "notificationDetailsHidden": "Los detalles están ocultos por la configuración de privacidad.",
+ "previousMonth": "Mes anterior",
+ "nextMonth": "Mes siguiente",
+ "openMonthView": "Abrir la vista mensual",
+ "previousYear": "Año anterior",
+ "nextYear": "Año siguiente",
+ "openYearView": "Abrir la vista anual",
+ "weekNumberTooltip": "Semana {number}",
+ "@weekNumberTooltip": {"placeholders": {"number": {"type": "int"}}},
+ "resizeAllDayPanel": "Cambiar el tamaño del panel de todo el día",
+ "scheduleItemCount": "{count, plural, =1{1 elemento} other{{count} elementos}}",
+ "@scheduleItemCount": {"placeholders": {"count": {"type": "int"}}},
+ "readOnlyCalendar": "Este calendario es de solo lectura.",
+ "selectTimeZone": "Seleccionar zona horaria",
+ "searchLocations": "Buscar ubicaciones",
+ "noLocationsFound": "No se encontraron ubicaciones",
+ "deleteCalendarConfirmation": "¿Eliminar \"{title}\"?",
+ "@deleteCalendarConfirmation": {"placeholders": {"title": {"type": "String"}}}
}
diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb
new file mode 100644
index 0000000..6b952dc
--- /dev/null
+++ b/lib/l10n/app_et.arb
@@ -0,0 +1,404 @@
+{
+ "@@locale": "et",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Ühendage Google'i ja Microsofti kontod kalendrite ja ülesannete sünkroonimiseks.",
+ "googlePermissionsConsentNotice": "Valige Google'i õiguste kuval nii kalendri kui ka ülesannete õigused.",
+ "googlePermissionsRequiredRetry": "Google Calendari ja Google Tasksi õigused on nõutavad. Proovige uuesti ja märkige mõlemad ruudud.",
+ "finishSetup": "Lõpeta seadistamine",
+ "continueSetup": "Jätka",
+ "onboardingSetupTitle": "BusyMaxi seadistamine",
+ "onboardingAccountsStepTitle": "Kontode ühendamine",
+ "onboardingAccountsStepDescription": "Lisage kõik Google'i ja Microsofti kontod, mida soovite kasutada. BusyMax sünkroonib iga konto kalendrid, sündmused, ülesandeloendid ja ülesanded.",
+ "onboardingPreferencesStepTitle": "Süsteemiseadete valimine",
+ "onboardingPreferencesStepDescription": "Enne ajakava avamist määrake töölauakäitumine, meeldetuletused, teavituste üksikasjalikkus ja välimus.",
+ "signInWithGoogle": "Logi Google'iga sisse",
+ "signInWithMicrosoft": "Logi Microsoftiga sisse",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "See teenusepakkuja pole seadistatud.",
+ "waitingForGoogleSignIn": "Google'isse sisselogimise ootel...",
+ "waitingForMicrosoftSignIn": "Microsofti sisselogimise ootel...",
+ "microsoftSignInNotConfigured": "Microsofti sisselogimine pole seadistatud. Määrake MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Tühista",
+ "close": "Sulge",
+ "exit": "Välju",
+ "options": "Valikud",
+ "hide": "Peida",
+ "show": "Kuva",
+ "export": "Ekspordi",
+ "save": "Salvesta",
+ "settings": "Seaded",
+ "all": "Kõik",
+ "calendarEvents": "Sündmused",
+ "calendarTasks": "Ülesanded",
+ "calendar": "Kalender",
+ "calendars": "Kalendrid",
+ "newEvent": "Uus sündmus",
+ "refreshCalendar": "Värskenda kalendrit",
+ "openInProvider": "Ava teenuses",
+ "hideFromSchedule": "Peida ajakavast",
+ "showInSchedule": "Kuva ajakavas",
+ "noCalendarsSynced": "Ühtegi kalendrit pole veel sünkroonitud.",
+ "allDay": "Kogu päev",
+ "moreItems": "+{count} veel",
+ "@moreItems": {"placeholders": {"count": {"type": "int"}}},
+ "noEventsOrTasks": "Sündmusi ega ülesandeid pole",
+ "scheduleLoading": "Ajakava laadimine...",
+ "scheduleUnavailable": "Ajakava pole saadaval",
+ "scheduleNoSources": "Nähtavaid kalendreid ega ülesandeloendeid pole",
+ "scheduleNoSourcesDescription": "Valige seadetes, mida kuvada, ja seejärel värskendage.",
+ "scheduleSignInRequired": "Ühendage konto",
+ "scheduleSignInDescription": "Kalendrite ja ülesannete sünkroonimiseks logige sisse.",
+ "scheduleNoSearchResults": "Sobivaid sündmusi ega ülesandeid ei leitud",
+ "scheduleNoSearchResultsDescription": "Proovige teistsugust otsingut või eemaldage praegused filtrid.",
+ "refresh": "Värskenda",
+ "trayOpenBusyMax": "Ava BusyMax",
+ "agendaLoadMoreOverdue": "Laadi veel tähtaja ületanud ülesandeid",
+ "agendaLoadMoreNoDate": "Laadi veel kuupäevata ülesandeid",
+ "viewDay": "Päev",
+ "viewWeek": "Nädal",
+ "viewMonth": "Kuu",
+ "viewYear": "Aasta",
+ "viewAgenda": "Päevakava",
+ "scheduleSettings": "Ajakava",
+ "scheduleDisplaySettings": "Ajakava kuvamine",
+ "scheduleDisplayHoursDescription": "Päeva- ja nädalavaade avanevad nende kellaaegade piires. Vajaduse korral laiendavad varasemad ja hilisemad kirjed vahemikku.",
+ "scheduleDayStartsAt": "Päev algab",
+ "scheduleDayEndsAt": "Päev lõpeb",
+ "sourceCalendar": "Kalender",
+ "sourceTaskList": "Ülesandeloend",
+ "createChoiceTitle": "Loo",
+ "createEventAtTime": "Sündmus",
+ "createTaskAtDate": "Ülesanne",
+ "editEvent": "Muuda sündmust",
+ "eventTitle": "Sündmuse pealkiri",
+ "location": "Asukoht",
+ "timeSlot": "Ajavahemik",
+ "startDateTime": "Alguskuupäev ja -kellaaeg",
+ "endDateTime": "Lõppkuupäev ja -kellaaeg",
+ "doesNotRepeat": "Ei kordu",
+ "defaultReminder": "Vaikemeeldetuletus",
+ "guests": "Külalised",
+ "noGuests": "Külalisi pole",
+ "description": "Kirjeldus",
+ "availabilityShowAs": "Hõivatus / Kuva kui",
+ "busy": "Hõivatud",
+ "visibility": "Nähtavus",
+ "defaultVisibility": "Vaikimisi nähtavus",
+ "conference": "Konverents",
+ "noConference": "Konverentsi pole",
+ "providerCalendar": "Teenuse kalender",
+ "formatBoldShortLabel": "R",
+ "formatBoldTooltip": "Rasvane",
+ "formatItalicShortLabel": "K",
+ "formatItalicTooltip": "Kursiiv",
+ "formatUnderlineShortLabel": "A",
+ "formatUnderlineTooltip": "Allajoonitud",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minut varem} other{{minutes} minutit varem}}",
+ "@reminderMinutesBefore": {"placeholders": {"minutes": {"type": "int"}}},
+ "reminderAtStart": "Algusajal",
+ "reminderHoursBefore": "{hours, plural, =1{1 tund varem} other{{hours} tundi varem}}",
+ "@reminderHoursBefore": {"placeholders": {"hours": {"type": "int"}}},
+ "reminderDaysBefore": "{days, plural, =1{1 päev varem} other{{days} päeva varem}}",
+ "@reminderDaysBefore": {"placeholders": {"days": {"type": "int"}}},
+ "availabilityFree": "Vaba",
+ "availabilityTentative": "Esialgne",
+ "availabilityOutOfOffice": "Kontorist väljas",
+ "availabilityWorkingElsewhere": "Töötab mujal",
+ "visibilityDefault": "Vaikimisi",
+ "visibilityPublic": "Avalik",
+ "visibilityPrivate": "Privaatne",
+ "visibilityConfidential": "Konfidentsiaalne",
+ "sensitivityNormal": "Tavaline",
+ "sensitivityPersonal": "Isiklik",
+ "tasks": "Ülesanded",
+ "allTasks": "Kõik ülesanded",
+ "tasksInList": "Loendi „{title}” ülesanded",
+ "@tasksInList": {"placeholders": {"title": {"type": "String"}}},
+ "taskLists": "Ülesandeloendid",
+ "navigation": "Navigeerimine",
+ "mainMenu": "Peamenüü",
+ "keyboardShortcuts": "Klaviatuuri otseteed",
+ "shortcutGroupGeneral": "Üldine",
+ "shortcutKeyboardShortcutsDescription": "Kuva klaviatuuri otseteede loend",
+ "shortcutGroupNavigation": "Navigeerimine",
+ "shortcutNextPeriod": "Järgmine periood",
+ "shortcutNextPeriodDescription": "Nädalavaates järgmine nädal, kuuvaates järgmine kuu jne",
+ "shortcutPreviousPeriod": "Eelmine periood",
+ "shortcutPreviousPeriodDescription": "Nädalavaates eelmine nädal, kuuvaates eelmine kuu jne",
+ "shortcutJumpToToday": "Mine tänasele kuupäevale",
+ "shortcutGroupView": "Vaade",
+ "shortcutDayView": "Päevavaade",
+ "shortcutWeekView": "Nädalavaade",
+ "shortcutMonthView": "Kuuvaade",
+ "shortcutYearView": "Aastavaade",
+ "shortcutAgendaView": "Päevakavavaade",
+ "shortcutGroupCreateAndEdit": "Loomine ja muutmine",
+ "shortcutSaveItem": "Salvesta sündmus või ülesanne",
+ "shortcutDeleteItem": "Kustuta sündmus või ülesanne",
+ "shortcutGroupTaskEditing": "Ülesande muutmine",
+ "shortcutCancelEditing": "Tühista muutmine",
+ "shortcutCancelEditingDescription": "Sulge ülesande muutmine või ülesande üksikasjad",
+ "aboutBusyMax": "Teave BusyMaxi kohta",
+ "aboutBusyMaxDescription": "Kalender ja ülesanded",
+ "license": "Litsents",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Veebisait",
+ "sourceCode": "Lähtekood",
+ "reportAnIssue": "Teata probleemist",
+ "sendFeedback": "Saada tagasisidet",
+ "feedbackSubmit": "Saada",
+ "feedbackCategory": "Kategooria",
+ "feedbackSelectCategory": "Valige kategooria",
+ "feedbackCategoryProblem": "Probleem või viga",
+ "feedbackCategoryFeature": "Funktsioonisoov",
+ "feedbackCategoryPrivacySecurity": "Privaatsus- või turbeprobleem",
+ "feedbackCategoryUsability": "Kasutatavusprobleem",
+ "feedbackCategoryOther": "Muu",
+ "feedbackSubject": "Teema",
+ "feedbackDetailedMessage": "Üksikasjalik sõnum",
+ "feedbackReplyEmail": "Vastamise e-posti aadress (valikuline)",
+ "feedbackIncludeTechnicalDetails": "Lisa tehnilised üksikasjad",
+ "feedbackTechnicalDetailsDisclosure": "Lisatakse ainult teie Linuxi operatsioonisüsteemi versioon ning rakenduse keel ja piirkonnaseaded. Logisid, kontoandmeid, failinimesid ega muid diagnostikaandmeid ei lisata.",
+ "feedbackCategoryRequired": "Valige kategooria.",
+ "feedbackSubjectLengthError": "Teema peab olema 3–120 tähemärki pikk.",
+ "feedbackMessageLengthError": "Sõnum peab olema 10–5000 tähemärki pikk.",
+ "feedbackInvalidEmail": "Sisestage kehtiv e-posti aadress.",
+ "feedbackConnectionError": "BusyStackiga ei saanud ühendust luua. Kontrollige ühendust ja proovige uuesti.",
+ "feedbackTimeoutError": "Päring aegus. Teie tagasisidet ei kustutatud; proovige uuesti.",
+ "feedbackRateLimitedError": "Sellest võrgust on saadetud liiga palju tagasisidet. Oodake ja proovige uuesti.",
+ "feedbackRejectedError": "Server lükkas saatmise tagasi. Kontrollige välju ja proovige uuesti.",
+ "feedbackServerError": "BusyStack ei saa praegu teie tagasisidet vastu võtta. Teie tagasisidet ei kustutatud; proovige uuesti.",
+ "feedbackSuccess": "Tagasiside saadetud. Viide: {id}",
+ "@feedbackSuccess": {"placeholders": {"id": {"type": "String"}}},
+ "toggleSidebar": "Kuva või peida külgriba",
+ "showSidebar": "Kuva külgpaneel",
+ "hideSidebar": "Peida külgpaneel",
+ "accounts": "Kontod",
+ "currentAccount": "Praegune konto",
+ "switchAccount": "Vaheta kontot",
+ "addGoogleAccount": "Lisa Google'i konto",
+ "addMicrosoftAccount": "Lisa Microsofti konto",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Sisse logitud",
+ "removeAccount": "Eemalda konto…",
+ "removingAccount": "Konto eemaldamine…",
+ "removeAccountDescription": "Lõpeta sünkroonimine ja eemalda selle konto andmed seadmest.",
+ "removeAccountTitle": "Kas eemaldada {account} BusyMaxist?",
+ "@removeAccountTitle": {"placeholders": {"account": {"type": "String"}}},
+ "removeAccountConfirmation": "See kustutab seadmest vahemällu salvestatud ülesanded, kalendrid, sündmused, meeldetuletused ja sünkroonimist ootavad võrguühenduseta muudatused. Sünkroonimata muudatused lähevad kaotsi. Google'ist ega Microsoftist midagi ei kustutata.",
+ "revokeGoogleAccess": "Tühista ka BusyMaxi juurdepääs sellele Google'i kontole",
+ "revokeGoogleAccessDescription": "Enne uuesti ühendamist peate juurdepääsu uuesti andma.",
+ "removeAccountAction": "Eemalda konto",
+ "removeAccountFailed": "Konto eemaldamist ei saanud lõpetada. Proovige uuesti.",
+ "accountRemovedGoogleRevokeFailed": "Konto eemaldati sellest seadmest, kuid BusyMaxi juurdepääsu teie Google'i kontole ei saanud tühistada. Saate selle oma Google'i kontol käsitsi tühistada.",
+ "newList": "Uus loend",
+ "signInToViewTaskLists": "Ülesandeloendite vaatamiseks logige sisse.",
+ "noTaskListsSynced": "Ühtegi ülesandeloendit pole veel sünkroonitud.",
+ "listActions": "Loendi toimingud",
+ "rename": "Nimeta ümber",
+ "delete": "Kustuta",
+ "renameList": "Nimeta loend ümber",
+ "deleteList": "Kustuta loend",
+ "builtInMicrosoftList": "Sisseehitatud",
+ "builtInMicrosoftListCannotRenameDelete": "Microsoft To Do sisseehitatud loendeid ei saa ümber nimetada ega kustutada.",
+ "deleteListConfirmation": "Kas kustutada „{title}” Google Tasksist?",
+ "@deleteListConfirmation": {"placeholders": {"title": {"type": "String"}}},
+ "deleteEvent": "Kustuta sündmus",
+ "title": "Pealkiri",
+ "create": "Loo",
+ "newTask": "Uus ülesanne",
+ "clearCompleted": "Eemalda lõpetatud ülesanded",
+ "refreshList": "Värskenda loendit",
+ "refreshAll": "Värskenda kõiki",
+ "listRefreshed": "Loend on värskendatud.",
+ "allTasksRefreshed": "Kõik kontod on värskendatud.",
+ "exportedFile": "Eksporditud asukohta {path}",
+ "@exportedFile": {"placeholders": {"path": {"type": "String"}}},
+ "exportFailed": "Eksportimine nurjus: {error}",
+ "@exportFailed": {"placeholders": {"error": {"type": "String"}}},
+ "refreshFailed": "Värskendamine nurjus: {error}",
+ "@refreshFailed": {"placeholders": {"error": {"type": "String"}}},
+ "selectOrCreateTaskList": "Alustamiseks valige või looge ülesandeloend.",
+ "signInToViewTasks": "Ülesannete vaatamiseks logige sisse.",
+ "noTasks": "Ülesandeid pole.",
+ "noTasksYet": "Ülesandeid veel pole",
+ "noTasksYetMessage": "Alustamiseks looge ülesanne või värskendage kontosid.",
+ "noTasksInList": "Selles loendis pole ülesandeid.",
+ "overdue": "Tähtaja ületanud",
+ "today": "Täna",
+ "tomorrow": "Homme",
+ "upcoming": "Tulekul",
+ "noDate": "Kuupäevata",
+ "completed": "Lõpetatud",
+ "duePrefix": "Tähtaeg {date}",
+ "@duePrefix": {"placeholders": {"date": {"type": "String"}}},
+ "dateTimeDisplay": "{date} · {time}",
+ "@dateTimeDisplay": {
+ "placeholders": {
+ "date": {"type": "String"},
+ "time": {"type": "String"}
+ }
+ },
+ "taskDetails": "Ülesande üksikasjad",
+ "editTask": "Muuda ülesannet",
+ "noTaskSelected": "Ülesannet pole valitud.",
+ "noTaskSelectedHelper": "Üksikasjade vaatamiseks ja muutmiseks valige ülesanne.",
+ "taskUnavailable": "Ülesanne pole saadaval.",
+ "signInToEditTasks": "Ülesannete muutmiseks logige sisse.",
+ "refreshTask": "Värskenda ülesannet",
+ "primarySection": "Põhiteave",
+ "statusSection": "Olek",
+ "openStatus": "Pooleli",
+ "doneStatus": "Valmis",
+ "notes": "Märkmed",
+ "dueDate": "Tähtaeg",
+ "clearDueDate": "Eemalda tähtaeg",
+ "dueTime": "Tähtaja kellaaeg",
+ "startDate": "Alguskuupäev",
+ "startTime": "Alguskellaaeg",
+ "endDate": "Lõppkuupäev",
+ "endTime": "Lõppkellaaeg",
+ "reminderDate": "Meeldetuletuse kuupäev",
+ "reminderTime": "Meeldetuletuse kellaaeg",
+ "reminder": "Meeldetuletus",
+ "addReminder": "Lisa meeldetuletus",
+ "addGuest": "Lisa külaline",
+ "addGuestEmail": "Lisa külalise e-posti aadress",
+ "removeReminder": "Eemalda meeldetuletus",
+ "off": "Väljas",
+ "repeat": "Kordus",
+ "repeatNone": "Ei kordu",
+ "noneValue": "Puudub",
+ "repeatDaily": "Iga päev",
+ "repeatWeekly": "Iga nädal",
+ "repeatMonthly": "Iga kuu",
+ "repeatYearly": "Iga aasta",
+ "importance": "Tähtsus",
+ "importanceLow": "Madal",
+ "importanceNormal": "Tavaline",
+ "importanceHigh": "Kõrge",
+ "categories": "Kategooriad",
+ "scheduleSection": "Ajakava",
+ "dueGroup": "Tähtaeg",
+ "startGroup": "Algus",
+ "reminderGroup": "Meeldetuletus",
+ "organizationSection": "Korraldus",
+ "actionsSection": "Toimingud",
+ "advancedSection": "Täpsemad seaded",
+ "addCategory": "Lisa kategooria",
+ "list": "Loend",
+ "microsoftMoveUnsupported": "Selles versioonis ei toetata Microsoft To Do kontodel ülesannete teisaldamist loendite vahel.",
+ "createSubtask": "Loo alamülesanne",
+ "moveToTop": "Teisalda kõige üles",
+ "deleteTask": "Kustuta ülesanne",
+ "newSubtask": "Uus alamülesanne",
+ "deleteTaskConfirmation": "Kas kustutada „{title}” Google Tasksist?",
+ "@deleteTaskConfirmation": {"placeholders": {"title": {"type": "String"}}},
+ "metadata": "Metaandmed",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "Uuendatud",
+ "parent": "Ülemülesanne",
+ "position": "Asukoht",
+ "webLink": "Veebilink",
+ "assignment": "Määramine",
+ "localState": "Kohalik olek",
+ "pendingSync": "Sünkroonimise ootel",
+ "synced": "Sünkroonitud",
+ "account": "Konto",
+ "sync": "Sünkroonimine",
+ "manualFullSync": "Käsitsi täielik sünkroonimine",
+ "runInBackgroundWhenClosed": "Jätka töötamist, kui aken on suletud",
+ "showTrayIcon": "Kuva süsteemisalve ikoon",
+ "startMinimizedToTray": "Käivita minimeerituna süsteemisalves",
+ "requiresTrayIcon": "Nõuab süsteemisalve ikooni.",
+ "syncComplete": "Sünkroonimine on lõpetatud.",
+ "syncFailed": "Sünkroonimine nurjus: {error}",
+ "@syncFailed": {"placeholders": {"error": {"type": "String"}}},
+ "notifySyncFailures": "Teavitused sünkroonimise nurjumisel",
+ "notifyConflicts": "Teavitused konfliktide korral",
+ "notifyDueToday": "Täna tähtuvate ülesannete teavitused",
+ "eventReminders": "Sündmuste meeldetuletused",
+ "taskReminders": "Ülesannete meeldetuletused",
+ "notificationDetailLevel": "Teavituste üksikasjalikkus",
+ "notificationDetailPrivate": "Privaatne",
+ "notificationDetailNormal": "Tavaline",
+ "quietHours": "Vaikne aeg",
+ "quietHoursDescription": "Peata teavitused selleks ajavahemikuks.",
+ "quietHoursStart": "Vaikse aja algus",
+ "quietHoursEnd": "Vaikse aja lõpp",
+ "notifications": "Teavitused",
+ "appearance": "Välimus",
+ "theme": "Kujundus",
+ "themeSystem": "Süsteem",
+ "themeLight": "Hele",
+ "themeDark": "Tume",
+ "themeFamily": "Kujunduse perekond",
+ "themeFamilyYaru": "Ubuntu algupärane kujundus (Yaru)",
+ "localization": "Keel ja piirkond",
+ "currentLocale": "Praegune lokaat",
+ "privacy": "Privaatsus",
+ "redactTaskContentInDiagnostics": "Peida diagnostikas ülesannete sisu",
+ "developerDiagnostics": "Arendaja diagnostika",
+ "diagnostics": "Diagnostika",
+ "apiInspectorDisabled": "Kuva API-inspektor",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery versioon: {revision}",
+ "@discoveryRevision": {"placeholders": {"revision": {"type": "String"}}},
+ "implementedMethods": "Rakendatud meetodid",
+ "supportsTasksScopes": "Toetab õiguse ulatusi tasks ja tasks.readonly",
+ "requiresTasksScope": "Nõuab õiguse ulatust tasks",
+ "blockedPendingOperations": "Blokeeritud ootel toimingud",
+ "signInToInspectPendingOperations": "Ootel toimingute kontrollimiseks logige sisse.",
+ "noBlockedPendingOperations": "Blokeeritud ootel toiminguid pole.",
+ "operationActions": "Toimingu tegevused",
+ "pendingOpListId": "loend={id}",
+ "@pendingOpListId": {"placeholders": {"id": {"type": "String"}}},
+ "pendingOpTaskId": "ülesanne={id}",
+ "@pendingOpTaskId": {"placeholders": {"id": {"type": "String"}}},
+ "pendingOpAttempts": "katseid={count}",
+ "@pendingOpAttempts": {"placeholders": {"count": {"type": "int"}}},
+ "retry": "Proovi uuesti",
+ "discard": "Hülga",
+ "discardChangesAction": "Hülga",
+ "discardChanges": "Kas hüljata muudatused?",
+ "discardChangesConfirmation": "See hülgab ülesande salvestamata muudatused.",
+ "retryCompleted": "Uuesti proovimine lõpetatud.",
+ "discardPendingOperation": "Kas hüljata ootel toiming?",
+ "discardPendingOperationConfirmation": "See eemaldab blokeeritud kohaliku toimingu. Järgmine sünkroonimine laadib andmed Google Tasksist uuesti.",
+ "pendingOperationDiscarded": "Ootel toiming hüljatud.",
+ "syncFailureNotificationTitle": "BusyMaxi sünkroonimine nurjus",
+ "syncFailureNotificationBody": "Taustal sünkroonimine nurjus. {message}",
+ "@syncFailureNotificationBody": {"placeholders": {"message": {"type": "String"}}},
+ "conflictNotificationTitle": "BusyMaxi sünkroonimiskonflikt",
+ "conflictNotificationBody": "Ootel kohalik muudatus blokeeriti. {summary}",
+ "@conflictNotificationBody": {"placeholders": {"summary": {"type": "String"}}},
+ "dueTodayNotificationTitle": "Täna tähtuvad ülesanded",
+ "dueTodayNotificationBody": "{count, plural, =1{Üks ülesanne tähtub täna.} other{{count} ülesannet tähtub täna.}}",
+ "@dueTodayNotificationBody": {"placeholders": {"count": {"type": "int"}}},
+ "eventReminderNotificationTitle": "Sündmuse meeldetuletus",
+ "taskReminderNotificationTitle": "Ülesande meeldetuletus",
+ "eventReminderNotificationBody": "Sündmus algab varsti.",
+ "taskReminderNotificationBody": "Ülesande tähtaeg on varsti.",
+ "notificationOpenAction": "Ava",
+ "notificationDetailsHidden": "Üksikasjad on privaatsusseadete tõttu peidetud.",
+ "previousMonth": "Eelmine kuu",
+ "nextMonth": "Järgmine kuu",
+ "openMonthView": "Ava kuuvaade",
+ "previousYear": "Eelmine aasta",
+ "nextYear": "Järgmine aasta",
+ "openYearView": "Ava aastavaade",
+ "weekNumberTooltip": "Nädal {number}",
+ "@weekNumberTooltip": {"placeholders": {"number": {"type": "int"}}},
+ "resizeAllDayPanel": "Muuda kogu päeva paneeli suurust",
+ "scheduleItemCount": "{count, plural, =1{1 kirje} other{{count} kirjet}}",
+ "@scheduleItemCount": {"placeholders": {"count": {"type": "int"}}},
+ "readOnlyCalendar": "See kalender on kirjutuskaitstud.",
+ "selectTimeZone": "Valige ajavöönd",
+ "searchLocations": "Otsi asukohti",
+ "noLocationsFound": "Asukohti ei leitud",
+ "deleteCalendarConfirmation": "Kas kustutada „{title}”?",
+ "@deleteCalendarConfirmation": {"placeholders": {"title": {"type": "String"}}}
+}
diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb
new file mode 100644
index 0000000..7caa2aa
--- /dev/null
+++ b/lib/l10n/app_fa.arb
@@ -0,0 +1,438 @@
+{
+ "@@locale": "fa",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "حسابهای Google و Microsoft را متصل کنید تا تقویمها و کارها همگام شوند.",
+ "googlePermissionsConsentNotice": "در صفحهٔ مجوزهای Google، مجوزهای تقویم و کارها را هر دو انتخاب کنید.",
+ "googlePermissionsRequiredRetry": "مجوزهای Google Calendar و Google Tasks لازم هستند. دوباره تلاش کنید و هر دو کادر را علامت بزنید.",
+ "finishSetup": "پایان راهاندازی",
+ "continueSetup": "ادامه",
+ "onboardingSetupTitle": "راهاندازی BusyMax",
+ "onboardingAccountsStepTitle": "اتصال حسابها",
+ "onboardingAccountsStepDescription": "همهٔ حسابهای Google و Microsoft موردنظرتان را اضافه کنید. BusyMax تقویمها، رویدادها، فهرستهای کار و کارهای هر حساب را همگام میکند.",
+ "onboardingPreferencesStepTitle": "انتخاب تنظیمات سیستم",
+ "onboardingPreferencesStepDescription": "پیش از باز کردن برنامه، رفتار برنامه روی میزکار، یادآورها، سطح جزئیات اعلانها و ظاهر را تنظیم کنید.",
+ "signInWithGoogle": "ورود با Google",
+ "signInWithMicrosoft": "ورود با Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "این سرویس پیکربندی نشده است.",
+ "waitingForGoogleSignIn": "در انتظار ورود به Google...",
+ "waitingForMicrosoftSignIn": "در انتظار ورود به Microsoft...",
+ "microsoftSignInNotConfigured": "ورود به Microsoft پیکربندی نشده است. MICROSOFT_OAUTH_CLIENT_ID را تنظیم کنید.",
+ "cancel": "لغو",
+ "close": "بستن",
+ "exit": "خروج",
+ "options": "گزینهها",
+ "hide": "پنهان کردن",
+ "show": "نمایش",
+ "export": "خروجی گرفتن",
+ "save": "ذخیره",
+ "settings": "تنظیمات",
+ "all": "همه",
+ "calendarEvents": "رویدادها",
+ "calendarTasks": "کارها",
+ "calendar": "تقویم",
+ "calendars": "تقویمها",
+ "newEvent": "رویداد جدید",
+ "refreshCalendar": "تازهسازی تقویم",
+ "openInProvider": "باز کردن در سرویس",
+ "hideFromSchedule": "پنهان کردن از برنامه",
+ "showInSchedule": "نمایش در برنامه",
+ "noCalendarsSynced": "هنوز هیچ تقویمی همگام نشده است.",
+ "allDay": "تمام روز",
+ "moreItems": "+\u2068{count}\u2069 مورد دیگر",
+ "noEventsOrTasks": "هیچ رویداد یا کاری وجود ندارد",
+ "scheduleLoading": "در حال بارگیری برنامه...",
+ "scheduleUnavailable": "برنامه در دسترس نیست",
+ "scheduleNoSources": "هیچ تقویم یا فهرست کار قابل نمایشی وجود ندارد",
+ "scheduleNoSourcesDescription": "در تنظیمات انتخاب کنید چه چیزهایی نمایش داده شوند، سپس برنامه را تازهسازی کنید.",
+ "scheduleSignInRequired": "اتصال حساب",
+ "scheduleSignInDescription": "برای همگامسازی تقویمها و کارها وارد شوید.",
+ "scheduleNoSearchResults": "هیچ رویداد یا کار منطبقی وجود ندارد",
+ "scheduleNoSearchResultsDescription": "جستوجوی دیگری را امتحان کنید یا پالایههای فعلی را پاک کنید.",
+ "refresh": "تازهسازی",
+ "trayOpenBusyMax": "باز کردن BusyMax",
+ "agendaLoadMoreOverdue": "بارگیری کارهای عقبافتادهٔ بیشتر",
+ "agendaLoadMoreNoDate": "بارگیری کارهای بدون تاریخ بیشتر",
+ "viewDay": "روز",
+ "viewWeek": "هفته",
+ "viewMonth": "ماه",
+ "viewYear": "سال",
+ "viewAgenda": "برنامه",
+ "scheduleSettings": "برنامه",
+ "scheduleDisplaySettings": "نمایش برنامه",
+ "scheduleDisplayHoursDescription": "نماهای روز و هفته ابتدا این بازهٔ زمانی را نشان میدهند. موارد زودتر یا دیرتر در صورت نیاز این بازه را گسترش میدهند.",
+ "scheduleDayStartsAt": "شروع روز از",
+ "scheduleDayEndsAt": "پایان روز در",
+ "sourceCalendar": "تقویم",
+ "sourceTaskList": "فهرست کار",
+ "createChoiceTitle": "ایجاد",
+ "createEventAtTime": "رویداد",
+ "createTaskAtDate": "کار",
+ "editEvent": "ویرایش رویداد",
+ "eventTitle": "عنوان رویداد",
+ "location": "مکان",
+ "timeSlot": "بازهٔ زمانی",
+ "startDateTime": "تاریخ/زمان شروع",
+ "endDateTime": "تاریخ/زمان پایان",
+ "doesNotRepeat": "تکرار نمیشود",
+ "defaultReminder": "یادآور پیشفرض",
+ "guests": "مهمانان",
+ "noGuests": "بدون مهمان",
+ "description": "توضیحات",
+ "availabilityShowAs": "وضعیت دسترسی / نمایش بهعنوان",
+ "busy": "مشغول",
+ "visibility": "قابلیت مشاهده",
+ "defaultVisibility": "قابلیت مشاهدهٔ پیشفرض",
+ "conference": "جلسه",
+ "noConference": "بدون جلسه",
+ "providerCalendar": "تقویم سرویس",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "پررنگ",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "مورب",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "زیرخط",
+ "reminderMinutesBefore": "{minutes, plural, =0{هنگام شروع} =1{یک دقیقه قبل} other{\u2068{minutes}\u2069 دقیقه قبل}}",
+ "reminderAtStart": "هنگام شروع",
+ "reminderHoursBefore": "{hours, plural, =0{هنگام شروع} =1{یک ساعت قبل} other{\u2068{hours}\u2069 ساعت قبل}}",
+ "reminderDaysBefore": "{days, plural, =0{همان روز} =1{یک روز قبل} other{\u2068{days}\u2069 روز قبل}}",
+ "availabilityFree": "آزاد",
+ "availabilityTentative": "احتمالی",
+ "availabilityOutOfOffice": "خارج از دفتر",
+ "availabilityWorkingElsewhere": "مشغول به کار در مکانی دیگر",
+ "visibilityDefault": "پیشفرض",
+ "visibilityPublic": "عمومی",
+ "visibilityPrivate": "خصوصی",
+ "visibilityConfidential": "محرمانه",
+ "sensitivityNormal": "عادی",
+ "sensitivityPersonal": "شخصی",
+ "tasks": "کارها",
+ "allTasks": "همهٔ کارها",
+ "tasksInList": "کارهای \u2068{title}\u2069",
+ "taskLists": "فهرستهای کار",
+ "navigation": "پیمایش",
+ "mainMenu": "منوی اصلی",
+ "keyboardShortcuts": "میانبرهای صفحهکلید",
+ "shortcutGroupGeneral": "عمومی",
+ "shortcutKeyboardShortcutsDescription": "نمایش این راهنمای میانبرها",
+ "shortcutGroupNavigation": "پیمایش",
+ "shortcutNextPeriod": "بازهٔ بعدی",
+ "shortcutNextPeriodDescription": "هفتهٔ بعد در نمای هفته، ماه بعد در نمای ماه و به همین ترتیب",
+ "shortcutPreviousPeriod": "بازهٔ قبلی",
+ "shortcutPreviousPeriodDescription": "هفتهٔ قبل در نمای هفته، ماه قبل در نمای ماه و به همین ترتیب",
+ "shortcutJumpToToday": "رفتن به امروز",
+ "shortcutGroupView": "نما",
+ "shortcutDayView": "نمای روز",
+ "shortcutWeekView": "نمای هفته",
+ "shortcutMonthView": "نمای ماه",
+ "shortcutYearView": "نمای سال",
+ "shortcutAgendaView": "نمای برنامه",
+ "shortcutGroupCreateAndEdit": "ایجاد و ویرایش",
+ "shortcutSaveItem": "ذخیرهٔ رویداد یا کار",
+ "shortcutDeleteItem": "حذف رویداد یا کار",
+ "shortcutGroupTaskEditing": "ویرایش کار",
+ "shortcutCancelEditing": "لغو ویرایش",
+ "shortcutCancelEditingDescription": "بستن ویرایش یا جزئیات کار",
+ "aboutBusyMax": "دربارهٔ BusyMax",
+ "aboutBusyMaxDescription": "تقویم و کارها",
+ "license": "مجوز",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "وبسایت",
+ "sourceCode": "کد منبع",
+ "reportAnIssue": "گزارش مشکل",
+ "sendFeedback": "ارسال بازخورد",
+ "feedbackSubmit": "ارسال",
+ "feedbackCategory": "دستهبندی",
+ "feedbackSelectCategory": "یک دستهبندی انتخاب کنید",
+ "feedbackCategoryProblem": "مشکل یا اشکال",
+ "feedbackCategoryFeature": "درخواست قابلیت",
+ "feedbackCategoryPrivacySecurity": "نگرانی دربارهٔ حریم خصوصی یا امنیت",
+ "feedbackCategoryUsability": "نگرانی دربارهٔ کاربردپذیری",
+ "feedbackCategoryOther": "سایر",
+ "feedbackSubject": "موضوع",
+ "feedbackDetailedMessage": "پیام با جزئیات",
+ "feedbackReplyEmail": "نشانی ایمیل برای پاسخ (اختیاری)",
+ "feedbackIncludeTechnicalDetails": "افزودن جزئیات فنی",
+ "feedbackTechnicalDetailsDisclosure": "فقط نسخهٔ سیستمعامل Linux و تنظیمات منطقهای برنامه افزوده میشود. هیچ گزارش، دادهٔ حساب، نام پرونده یا اطلاعات تشخیصی دیگری افزوده نمیشود.",
+ "feedbackCategoryRequired": "یک دستهبندی انتخاب کنید.",
+ "feedbackSubjectLengthError": "موضوع باید بین ۳ تا ۱۲۰ نویسه باشد.",
+ "feedbackMessageLengthError": "پیام باید بین ۱۰ تا ۵٬۰۰۰ نویسه باشد.",
+ "feedbackInvalidEmail": "یک نشانی ایمیل معتبر وارد کنید.",
+ "feedbackConnectionError": "اتصال به BusyStack ممکن نشد. اتصال خود را بررسی و دوباره تلاش کنید.",
+ "feedbackTimeoutError": "مهلت درخواست پایان یافت. بازخورد شما پاک نشده است؛ دوباره تلاش کنید.",
+ "feedbackRateLimitedError": "بازخوردهای بیش از حدی از این شبکه ارسال شده است. کمی صبر کنید و دوباره تلاش کنید.",
+ "feedbackRejectedError": "سرور ارسال را رد کرد. فیلدها را بررسی و دوباره تلاش کنید.",
+ "feedbackServerError": "BusyStack اکنون نمیتواند بازخورد شما را بپذیرد. بازخورد شما پاک نشده است؛ دوباره تلاش کنید.",
+ "feedbackSuccess": "بازخورد ارسال شد. شناسهٔ پیگیری: \u2068{id}\u2069",
+ "toggleSidebar": "نمایش یا پنهان کردن نوار کناری",
+ "showSidebar": "نمایش پنل کناری",
+ "hideSidebar": "پنهان کردن پنل کناری",
+ "accounts": "حسابها",
+ "currentAccount": "حساب فعلی",
+ "switchAccount": "تعویض حساب",
+ "addGoogleAccount": "افزودن حساب Google",
+ "addMicrosoftAccount": "افزودن حساب Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "وارد شده",
+ "removeAccount": "حذف حساب…",
+ "removingAccount": "در حال حذف حساب…",
+ "removeAccountDescription": "همگامسازی را متوقف و دادههای این حساب را از این دستگاه حذف کنید.",
+ "removeAccountTitle": "حذف \u2068{account}\u2069 از BusyMax؟",
+ "removeAccountConfirmation": "با این کار، کارها، تقویمها، رویدادها، یادآورها و تغییرات آفلاین در انتظار از حافظهٔ نهان این دستگاه حذف میشوند. تغییرات همگامنشده از دست میروند. هیچ چیزی از Google یا Microsoft حذف نمیشود.",
+ "revokeGoogleAccess": "دسترسی BusyMax به این حساب Google نیز لغو شود",
+ "revokeGoogleAccessDescription": "پیش از اتصال دوباره باید دسترسی را دوباره اعطا کنید.",
+ "removeAccountAction": "حذف حساب",
+ "removeAccountFailed": "حذف حساب کامل نشد. دوباره تلاش کنید.",
+ "accountRemovedGoogleRevokeFailed": "حساب از این دستگاه حذف شد، اما BusyMax نتوانست دسترسی Google را لغو کند. میتوانید آن را از حساب Google خود لغو کنید.",
+ "newList": "فهرست جدید",
+ "signInToViewTaskLists": "برای دیدن فهرستهای کار وارد شوید.",
+ "noTaskListsSynced": "هنوز هیچ فهرست کاری همگام نشده است.",
+ "listActions": "عملیات فهرست",
+ "rename": "تغییر نام",
+ "delete": "حذف",
+ "renameList": "تغییر نام فهرست",
+ "deleteList": "حذف فهرست",
+ "builtInMicrosoftList": "داخلی",
+ "builtInMicrosoftListCannotRenameDelete": "فهرستهای داخلی Microsoft To Do را نمیتوان تغییر نام داد یا حذف کرد.",
+ "deleteListConfirmation": "«\u2068{title}\u2069» از Google Tasks حذف شود؟",
+ "deleteEvent": "حذف رویداد",
+ "title": "عنوان",
+ "create": "ایجاد",
+ "newTask": "کار جدید",
+ "clearCompleted": "پاک کردن کارهای انجامشده",
+ "refreshList": "تازهسازی فهرست",
+ "refreshAll": "تازهسازی همه",
+ "listRefreshed": "فهرست تازهسازی شد.",
+ "allTasksRefreshed": "همهٔ حسابها تازهسازی شدند.",
+ "exportedFile": "در \u2068{path}\u2069 خروجی گرفته شد",
+ "exportFailed": "خروجی گرفتن ناموفق بود: \u2068{error}\u2069",
+ "refreshFailed": "تازهسازی ناموفق بود: \u2068{error}\u2069",
+ "selectOrCreateTaskList": "برای شروع، یک فهرست کار انتخاب یا ایجاد کنید.",
+ "signInToViewTasks": "برای دیدن کارها وارد شوید.",
+ "noTasks": "هیچ کاری وجود ندارد.",
+ "noTasksYet": "هنوز کاری وجود ندارد",
+ "noTasksYetMessage": "برای شروع یک کار ایجاد کنید یا حسابهایتان را تازهسازی کنید.",
+ "noTasksInList": "هیچ کاری در این فهرست وجود ندارد.",
+ "overdue": "گذشته از موعد",
+ "today": "امروز",
+ "tomorrow": "فردا",
+ "upcoming": "پیش رو",
+ "noDate": "بدون تاریخ",
+ "completed": "انجامشده",
+ "duePrefix": "سررسید: \u2068{date}\u2069",
+ "dateTimeDisplay": "\u2068{date}\u2069 · \u2068{time}\u2069",
+ "taskDetails": "جزئیات کار",
+ "editTask": "ویرایش کار",
+ "noTaskSelected": "هیچ کاری انتخاب نشده است.",
+ "noTaskSelectedHelper": "برای دیدن و ویرایش جزئیات، کاری را انتخاب کنید.",
+ "taskUnavailable": "کار در دسترس نیست.",
+ "signInToEditTasks": "برای ویرایش کارها وارد شوید.",
+ "refreshTask": "تازهسازی کار",
+ "primarySection": "اصلی",
+ "statusSection": "وضعیت",
+ "openStatus": "باز",
+ "doneStatus": "انجامشده",
+ "notes": "یادداشتها",
+ "dueDate": "تاریخ سررسید",
+ "clearDueDate": "پاک کردن تاریخ سررسید",
+ "dueTime": "زمان سررسید",
+ "startDate": "تاریخ شروع",
+ "startTime": "زمان شروع",
+ "endDate": "تاریخ پایان",
+ "endTime": "زمان پایان",
+ "reminderDate": "تاریخ یادآور",
+ "reminderTime": "زمان یادآور",
+ "reminder": "یادآور",
+ "addReminder": "افزودن یادآور",
+ "addGuest": "افزودن مهمان",
+ "addGuestEmail": "افزودن ایمیل مهمان",
+ "removeReminder": "حذف یادآور",
+ "off": "خاموش",
+ "repeat": "تکرار",
+ "repeatNone": "بدون تکرار",
+ "noneValue": "هیچکدام",
+ "repeatDaily": "روزانه",
+ "repeatWeekly": "هفتگی",
+ "repeatMonthly": "ماهانه",
+ "repeatYearly": "سالانه",
+ "importance": "اهمیت",
+ "importanceLow": "کم",
+ "importanceNormal": "عادی",
+ "importanceHigh": "زیاد",
+ "categories": "دستهها",
+ "scheduleSection": "برنامه",
+ "dueGroup": "سررسید",
+ "startGroup": "شروع",
+ "reminderGroup": "یادآور",
+ "organizationSection": "سازماندهی",
+ "actionsSection": "عملیات",
+ "advancedSection": "پیشرفته",
+ "addCategory": "افزودن دسته",
+ "list": "فهرست",
+ "microsoftMoveUnsupported": "در این نسخه، جابهجایی کارها بین فهرستهای حساب Microsoft To Do پشتیبانی نمیشود.",
+ "createSubtask": "ایجاد زیرکار",
+ "moveToTop": "انتقال به بالاترین جایگاه",
+ "deleteTask": "حذف کار",
+ "newSubtask": "زیرکار جدید",
+ "deleteTaskConfirmation": "«\u2068{title}\u2069» از Google Tasks حذف شود؟",
+ "metadata": "فراداده",
+ "id": "شناسه",
+ "etag": "ETag",
+ "updated": "بهروزشده",
+ "parent": "کار والد",
+ "position": "جایگاه",
+ "webLink": "پیوند وب",
+ "assignment": "واگذاری",
+ "localState": "وضعیت محلی",
+ "pendingSync": "در انتظار همگامسازی",
+ "synced": "همگامشده",
+ "account": "حساب",
+ "sync": "همگامسازی",
+ "manualFullSync": "همگامسازی کامل دستی",
+ "runInBackgroundWhenClosed": "ادامهٔ اجرا پس از بسته شدن پنجره",
+ "showTrayIcon": "نمایش نماد سینی سیستم",
+ "startMinimizedToTray": "شروع بهصورت کوچکشده در سینی سیستم",
+ "requiresTrayIcon": "به نماد سینی سیستم نیاز دارد.",
+ "syncComplete": "همگامسازی کامل شد.",
+ "syncFailed": "همگامسازی ناموفق بود: \u2068{error}\u2069",
+ "notifySyncFailures": "اعلان هنگام شکست همگامسازی",
+ "notifyConflicts": "اعلان هنگام تداخل",
+ "notifyDueToday": "اعلان کارهای دارای سررسید امروز",
+ "eventReminders": "یادآورهای رویداد",
+ "taskReminders": "یادآورهای کار",
+ "notificationDetailLevel": "سطح جزئیات اعلان",
+ "notificationDetailPrivate": "خصوصی",
+ "notificationDetailNormal": "عادی",
+ "quietHours": "ساعات سکوت",
+ "quietHoursDescription": "اعلانها را در این بازه موقتاً متوقف کنید.",
+ "quietHoursStart": "شروع ساعات سکوت",
+ "quietHoursEnd": "پایان ساعات سکوت",
+ "notifications": "اعلانها",
+ "appearance": "ظاهر",
+ "theme": "پوسته",
+ "themeSystem": "سیستم",
+ "themeLight": "روشن",
+ "themeDark": "تیره",
+ "themeFamily": "خانوادهٔ پوسته",
+ "themeFamilyYaru": "پوستهٔ بومی Ubuntu (Yaru)",
+ "localization": "زبان و منطقه",
+ "currentLocale": "زبان و منطقهٔ فعلی",
+ "privacy": "حریم خصوصی",
+ "redactTaskContentInDiagnostics": "پنهان کردن محتوای کارها در اطلاعات تشخیصی",
+ "developerDiagnostics": "تشخیصهای توسعهدهنده",
+ "diagnostics": "اطلاعات تشخیصی",
+ "apiInspectorDisabled": "نمایش بازرس API",
+ "googleTasksApi": "رابط Google Tasks API",
+ "discoveryRevision": "بازبینی Discovery: \u2068{revision}\u2069",
+ "implementedMethods": "روشهای پیادهسازیشده",
+ "supportsTasksScopes": "از محدودههای tasks و tasks.readonly پشتیبانی میکند",
+ "requiresTasksScope": "به محدودهٔ tasks نیاز دارد",
+ "blockedPendingOperations": "عملیات در انتظار مسدودشده",
+ "signInToInspectPendingOperations": "برای بررسی عملیات در انتظار وارد شوید.",
+ "noBlockedPendingOperations": "هیچ عملیات در انتظار مسدودشدهای وجود ندارد.",
+ "operationActions": "اقدامات عملیات",
+ "pendingOpListId": "فهرست=\u2068{id}\u2069",
+ "pendingOpTaskId": "کار=\u2068{id}\u2069",
+ "pendingOpAttempts": "تلاشها=\u2068{count}\u2069",
+ "retry": "تلاش دوباره",
+ "discard": "کنار گذاشتن",
+ "discardChangesAction": "ذخیره نشود",
+ "discardChanges": "تغییرات کنار گذاشته شوند؟",
+ "discardChangesConfirmation": "با این کار ویرایشهای ذخیرهنشدهٔ این کار کنار گذاشته میشوند.",
+ "retryCompleted": "تلاش دوباره کامل شد.",
+ "discardPendingOperation": "عملیات در انتظار کنار گذاشته شود؟",
+ "discardPendingOperationConfirmation": "با این کار عملیات محلی مسدودشده حذف میشود. در همگامسازی بعدی، دادهها از Google Tasks تازهسازی میشوند.",
+ "pendingOperationDiscarded": "عملیات در انتظار کنار گذاشته شد.",
+ "syncFailureNotificationTitle": "همگامسازی BusyMax ناموفق بود",
+ "syncFailureNotificationBody": "همگامسازی پسزمینه ناموفق بود. \u2068{message}\u2069",
+ "conflictNotificationTitle": "تداخل همگامسازی BusyMax",
+ "conflictNotificationBody": "یک تغییر محلی در انتظار مسدود شد. \u2068{summary}\u2069",
+ "dueTodayNotificationTitle": "کارهای دارای سررسید امروز",
+ "dueTodayNotificationBody": "{count, plural, =0{امروز هیچ کاری سررسید ندارد.} =1{امروز یک کار سررسید دارد.} other{امروز \u2068{count}\u2069 کار سررسید دارند.}}",
+ "eventReminderNotificationTitle": "یادآور رویداد",
+ "taskReminderNotificationTitle": "یادآور کار",
+ "eventReminderNotificationBody": "رویداد بهزودی شروع میشود.",
+ "taskReminderNotificationBody": "سررسید کار نزدیک است.",
+ "notificationOpenAction": "باز کردن",
+ "notificationDetailsHidden": "جزئیات بهدلیل تنظیمات حریم خصوصی پنهان شدهاند.",
+ "previousMonth": "ماه قبل",
+ "nextMonth": "ماه بعد",
+ "openMonthView": "باز کردن نمای ماه",
+ "previousYear": "سال قبل",
+ "nextYear": "سال بعد",
+ "openYearView": "باز کردن نمای سال",
+ "weekNumberTooltip": "هفتهٔ \u2068{number}\u2069",
+ "resizeAllDayPanel": "تغییر اندازهٔ پنل تمامروز",
+ "scheduleItemCount": "{count, plural, =0{هیچ موردی} =1{یک مورد} other{\u2068{count}\u2069 مورد}}",
+ "readOnlyCalendar": "این تقویم فقطخواندنی است.",
+ "selectTimeZone": "انتخاب منطقهٔ زمانی",
+ "searchLocations": "جستوجوی مکانها",
+ "noLocationsFound": "مکانی پیدا نشد",
+ "deleteCalendarConfirmation": "«\u2068{title}\u2069» حذف شود؟",
+ "@moreItems": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@reminderMinutesBefore": {
+ "placeholders": {
+ "minutes": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@reminderHoursBefore": {
+ "placeholders": {
+ "hours": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@reminderDaysBefore": {
+ "placeholders": {
+ "days": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@pendingOpAttempts": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@dueTodayNotificationBody": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@weekNumberTooltip": {
+ "placeholders": {
+ "number": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "@scheduleItemCount": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "format": "decimalPattern"
+ }
+ }
+ }
+}
diff --git a/lib/l10n/app_fi.arb b/lib/l10n/app_fi.arb
new file mode 100644
index 0000000..900bd8d
--- /dev/null
+++ b/lib/l10n/app_fi.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "fi",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Yhdistä Google- ja Microsoft-tilit kalenterien ja tehtävien synkronointia varten.",
+ "googlePermissionsConsentNotice": "Valitse Googlen käyttöoikeusnäkymässä sekä Kalenteri- että Tehtävät-käyttöoikeudet.",
+ "googlePermissionsRequiredRetry": "Google Kalenterin ja Google Tasksin käyttöoikeudet vaaditaan. Yritä uudelleen ja valitse molemmat valintaruudut.",
+ "finishSetup": "Viimeistele määritys",
+ "continueSetup": "Jatka",
+ "onboardingSetupTitle": "Määritä BusyMax",
+ "onboardingAccountsStepTitle": "Yhdistä tilit",
+ "onboardingAccountsStepDescription": "Lisää kaikki haluamasi Google- ja Microsoft-tilit. BusyMax synkronoi kunkin tilin kalenterit, tapahtumat, tehtäväluettelot ja tehtävät.",
+ "onboardingPreferencesStepTitle": "Valitse järjestelmäasetukset",
+ "onboardingPreferencesStepDescription": "Määritä sovelluksen toiminta työpöydällä, muistutukset, ilmoitusten yksityiskohtaisuus ja ulkoasu ennen aikataulun avaamista.",
+ "signInWithGoogle": "Kirjaudu Google-tilillä",
+ "signInWithMicrosoft": "Kirjaudu Microsoft-tilillä",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "Tätä palveluntarjoajaa ei ole määritetty.",
+ "waitingForGoogleSignIn": "Odotetaan Google-kirjautumista...",
+ "waitingForMicrosoftSignIn": "Odotetaan Microsoft-kirjautumista...",
+ "microsoftSignInNotConfigured": "Microsoft-kirjautumista ei ole määritetty. Aseta MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Peruuta",
+ "close": "Sulje",
+ "exit": "Lopeta",
+ "options": "Valinnat",
+ "hide": "Piilota",
+ "show": "Näytä",
+ "export": "Vie",
+ "save": "Tallenna",
+ "settings": "Asetukset",
+ "all": "Kaikki",
+ "calendarEvents": "Tapahtumat",
+ "calendarTasks": "Tehtävät",
+ "calendar": "Kalenteri",
+ "calendars": "Kalenterit",
+ "newEvent": "Uusi tapahtuma",
+ "refreshCalendar": "Päivitä kalenteri",
+ "openInProvider": "Avaa palvelussa",
+ "hideFromSchedule": "Piilota aikataulusta",
+ "showInSchedule": "Näytä aikataulussa",
+ "noCalendarsSynced": "Kalentereita ei ole vielä synkronoitu.",
+ "allDay": "Koko päivä",
+ "moreItems": "+{count} muuta",
+ "noEventsOrTasks": "Ei tapahtumia tai tehtäviä",
+ "scheduleLoading": "Ladataan aikataulua...",
+ "scheduleUnavailable": "Aikataulu ei ole käytettävissä",
+ "scheduleNoSources": "Ei näkyviä kalentereita tai tehtäväluetteloita",
+ "scheduleNoSourcesDescription": "Valitse asetuksissa, mitä näytetään, ja päivitä sitten näkymä.",
+ "scheduleSignInRequired": "Yhdistä tili",
+ "scheduleSignInDescription": "Kirjaudu sisään synkronoidaksesi kalenterit ja tehtävät.",
+ "scheduleNoSearchResults": "Ei vastaavia tapahtumia tai tehtäviä",
+ "scheduleNoSearchResultsDescription": "Kokeile toista hakua tai tyhjennä nykyiset suodattimet.",
+ "refresh": "Päivitä",
+ "trayOpenBusyMax": "Avaa BusyMax",
+ "agendaLoadMoreOverdue": "Lataa lisää myöhässä olevia tehtäviä",
+ "agendaLoadMoreNoDate": "Lataa lisää päiväämättömiä tehtäviä",
+ "viewDay": "Päivä",
+ "viewWeek": "Viikko",
+ "viewMonth": "Kuukausi",
+ "viewYear": "Vuosi",
+ "viewAgenda": "Agenda",
+ "scheduleSettings": "Aikataulu",
+ "scheduleDisplaySettings": "Aikataulun näyttö",
+ "scheduleDisplayHoursDescription": "Päivä- ja viikkonäkymät näyttävät aluksi tämän aikavälin. Aikaisemmat ja myöhemmät kohteet laajentavat sitä tarvittaessa.",
+ "scheduleDayStartsAt": "Päivä alkaa",
+ "scheduleDayEndsAt": "Päivä päättyy",
+ "sourceCalendar": "Kalenteri",
+ "sourceTaskList": "Tehtäväluettelo",
+ "createChoiceTitle": "Luo",
+ "createEventAtTime": "Tapahtuma",
+ "createTaskAtDate": "Tehtävä",
+ "editEvent": "Muokkaa tapahtumaa",
+ "eventTitle": "Tapahtuman nimi",
+ "location": "Sijainti",
+ "timeSlot": "Ajankohta",
+ "startDateTime": "Alkamispäivä ja -aika",
+ "endDateTime": "Päättymispäivä ja -aika",
+ "doesNotRepeat": "Ei toistu",
+ "defaultReminder": "Oletusmuistutus",
+ "guests": "Vieraat",
+ "noGuests": "Ei vieraita",
+ "description": "Kuvaus",
+ "availabilityShowAs": "Saatavuus / Näytä tilana",
+ "busy": "Varattu",
+ "visibility": "Näkyvyys",
+ "defaultVisibility": "Oletusnäkyvyys",
+ "conference": "Verkkokokous",
+ "noConference": "Ei verkkokokousta",
+ "providerCalendar": "Palveluntarjoajan kalenteri",
+ "formatBoldShortLabel": "L",
+ "formatBoldTooltip": "Lihavointi",
+ "formatItalicShortLabel": "K",
+ "formatItalicTooltip": "Kursivointi",
+ "formatUnderlineShortLabel": "A",
+ "formatUnderlineTooltip": "Alleviivaus",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minuutti ennen} other{{minutes} minuuttia ennen}}",
+ "reminderAtStart": "Alkamishetkellä",
+ "reminderHoursBefore": "{hours, plural, =1{1 tunti ennen} other{{hours} tuntia ennen}}",
+ "reminderDaysBefore": "{days, plural, =1{1 päivä ennen} other{{days} päivää ennen}}",
+ "availabilityFree": "Vapaa",
+ "availabilityTentative": "Alustava",
+ "availabilityOutOfOffice": "Poissa toimistolta",
+ "availabilityWorkingElsewhere": "Työskentelee muualla",
+ "visibilityDefault": "Oletus",
+ "visibilityPublic": "Julkinen",
+ "visibilityPrivate": "Yksityinen",
+ "visibilityConfidential": "Luottamuksellinen",
+ "sensitivityNormal": "Normaali",
+ "sensitivityPersonal": "Henkilökohtainen",
+ "tasks": "Tehtävät",
+ "allTasks": "Kaikki tehtävät",
+ "tasksInList": "Luettelon {title} tehtävät",
+ "taskLists": "Tehtäväluettelot",
+ "navigation": "Siirtyminen",
+ "mainMenu": "Päävalikko",
+ "keyboardShortcuts": "Pikanäppäimet",
+ "shortcutGroupGeneral": "Yleiset",
+ "shortcutKeyboardShortcutsDescription": "Näytä tämä pikanäppäinluettelo",
+ "shortcutGroupNavigation": "Siirtyminen",
+ "shortcutNextPeriod": "Seuraava ajanjakso",
+ "shortcutNextPeriodDescription": "Seuraava viikko viikkonäkymässä, seuraava kuukausi kuukausinäkymässä ja niin edelleen",
+ "shortcutPreviousPeriod": "Edellinen ajanjakso",
+ "shortcutPreviousPeriodDescription": "Edellinen viikko viikkonäkymässä, edellinen kuukausi kuukausinäkymässä ja niin edelleen",
+ "shortcutJumpToToday": "Siirry tähän päivään",
+ "shortcutGroupView": "Näkymä",
+ "shortcutDayView": "Päivänäkymä",
+ "shortcutWeekView": "Viikkonäkymä",
+ "shortcutMonthView": "Kuukausinäkymä",
+ "shortcutYearView": "Vuosinäkymä",
+ "shortcutAgendaView": "Agendanäkymä",
+ "shortcutGroupCreateAndEdit": "Luominen ja muokkaaminen",
+ "shortcutSaveItem": "Tallenna tapahtuma tai tehtävä",
+ "shortcutDeleteItem": "Poista tapahtuma tai tehtävä",
+ "shortcutGroupTaskEditing": "Tehtävien muokkaaminen",
+ "shortcutCancelEditing": "Peruuta muokkaaminen",
+ "shortcutCancelEditingDescription": "Sulje tehtävän muokkaus tai tehtävän tiedot",
+ "aboutBusyMax": "Tietoja BusyMaxista",
+ "aboutBusyMaxDescription": "Kalenteri ja tehtävät",
+ "license": "Lisenssi",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Verkkosivusto",
+ "sourceCode": "Lähdekoodi",
+ "reportAnIssue": "Ilmoita ongelmasta",
+ "sendFeedback": "Lähetä palautetta",
+ "feedbackSubmit": "Lähetä",
+ "feedbackCategory": "Luokka",
+ "feedbackSelectCategory": "Valitse luokka",
+ "feedbackCategoryProblem": "Ongelma tai virhe",
+ "feedbackCategoryFeature": "Ominaisuuspyyntö",
+ "feedbackCategoryPrivacySecurity": "Tietosuojaan tai tietoturvaan liittyvä huoli",
+ "feedbackCategoryUsability": "Käytettävyyshuoli",
+ "feedbackCategoryOther": "Muu",
+ "feedbackSubject": "Aihe",
+ "feedbackDetailedMessage": "Yksityiskohtainen viesti",
+ "feedbackReplyEmail": "Sähköpostiosoite vastausta varten (valinnainen)",
+ "feedbackIncludeTechnicalDetails": "Sisällytä tekniset tiedot",
+ "feedbackTechnicalDetailsDisclosure": "Lisää vain Linux-käyttöjärjestelmäsi version ja sovelluksen alueasetuksen. Lokeja, tilitietoja, tiedostonimiä tai muita diagnostiikkatietoja ei lisätä.",
+ "feedbackCategoryRequired": "Valitse luokka.",
+ "feedbackSubjectLengthError": "Aiheen pituuden on oltava 3–120 merkkiä.",
+ "feedbackMessageLengthError": "Viestin pituuden on oltava 10–5 000 merkkiä.",
+ "feedbackInvalidEmail": "Anna kelvollinen sähköpostiosoite.",
+ "feedbackConnectionError": "BusyStackiin ei saatu yhteyttä. Tarkista yhteys ja yritä uudelleen.",
+ "feedbackTimeoutError": "Pyyntö aikakatkaistiin. Palautettasi ei ole tyhjennetty. Yritä uudelleen.",
+ "feedbackRateLimitedError": "Tästä verkosta on lähetetty liian monta palautetta. Odota ja yritä uudelleen.",
+ "feedbackRejectedError": "Palvelin hylkäsi lähetyksen. Tarkista kentät ja yritä uudelleen.",
+ "feedbackServerError": "BusyStack ei voi vastaanottaa palautettasi juuri nyt. Palautettasi ei ole tyhjennetty. Yritä uudelleen.",
+ "feedbackSuccess": "Palaute lähetetty. Viite: {id}",
+ "toggleSidebar": "Näytä tai piilota sivupalkki",
+ "showSidebar": "Näytä sivupaneeli",
+ "hideSidebar": "Piilota sivupaneeli",
+ "accounts": "Tilit",
+ "currentAccount": "Nykyinen tili",
+ "switchAccount": "Vaihda tiliä",
+ "addGoogleAccount": "Lisää Google-tili",
+ "addMicrosoftAccount": "Lisää Microsoft-tili",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Kirjautunut",
+ "removeAccount": "Poista tili…",
+ "removingAccount": "Poistetaan tiliä…",
+ "removeAccountDescription": "Lopeta synkronointi ja poista tämän tilin tiedot tältä laitteelta.",
+ "removeAccountTitle": "Poistetaanko {account} BusyMaxista?",
+ "removeAccountConfirmation": "Tämä poistaa välimuistissa olevat tehtävät, kalenterit, tapahtumat, muistutukset ja odottavat offline-muutokset tältä laitteelta. Synkronoimattomat muutokset menetetään. Mitään ei poisteta Googlesta tai Microsoftista.",
+ "revokeGoogleAccess": "Peruuta myös BusyMaxin käyttöoikeus tähän Google-tiliin",
+ "revokeGoogleAccessDescription": "Käyttöoikeus on myönnettävä uudelleen ennen tilin yhdistämistä.",
+ "removeAccountAction": "Poista tili",
+ "removeAccountFailed": "Tilin poistamista ei voitu viimeistellä. Yritä uudelleen.",
+ "accountRemovedGoogleRevokeFailed": "Tili poistettiin tältä laitteelta, mutta BusyMax ei voinut peruuttaa Google-käyttöoikeutta. Voit peruuttaa sen Google-tililtäsi.",
+ "newList": "Uusi luettelo",
+ "signInToViewTaskLists": "Kirjaudu sisään nähdäksesi tehtäväluettelot.",
+ "noTaskListsSynced": "Tehtäväluetteloita ei ole vielä synkronoitu.",
+ "listActions": "Luettelon toiminnot",
+ "rename": "Nimeä uudelleen",
+ "delete": "Poista",
+ "renameList": "Nimeä luettelo uudelleen",
+ "deleteList": "Poista luettelo",
+ "builtInMicrosoftList": "Sisäänrakennettu",
+ "builtInMicrosoftListCannotRenameDelete": "Microsoft To Do -sovelluksen sisäänrakennettuja luetteloita ei voi nimetä uudelleen tai poistaa.",
+ "deleteListConfirmation": "Poistetaanko \"{title}\" Google Tasksista?",
+ "deleteEvent": "Poista tapahtuma",
+ "title": "Nimi",
+ "create": "Luo",
+ "newTask": "Uusi tehtävä",
+ "clearCompleted": "Tyhjennä valmiit",
+ "refreshList": "Päivitä luettelo",
+ "refreshAll": "Päivitä kaikki",
+ "listRefreshed": "Luettelo päivitetty.",
+ "allTasksRefreshed": "Kaikki tilit päivitetty.",
+ "exportedFile": "Viety kohteeseen {path}",
+ "exportFailed": "Vienti epäonnistui: {error}",
+ "refreshFailed": "Päivitys epäonnistui: {error}",
+ "selectOrCreateTaskList": "Valitse tai luo tehtäväluettelo aloittaaksesi.",
+ "signInToViewTasks": "Kirjaudu sisään nähdäksesi tehtävät.",
+ "noTasks": "Ei tehtäviä.",
+ "noTasksYet": "Ei vielä tehtäviä",
+ "noTasksYetMessage": "Luo tehtävä tai päivitä tilisi aloittaaksesi.",
+ "noTasksInList": "Tässä luettelossa ei ole tehtäviä.",
+ "overdue": "Myöhässä",
+ "today": "Tänään",
+ "tomorrow": "Huomenna",
+ "upcoming": "Tulossa",
+ "noDate": "Ei päivämäärää",
+ "completed": "Valmiit",
+ "duePrefix": "Eräpäivä {date}",
+ "dateTimeDisplay": "{date} klo {time}",
+ "taskDetails": "Tehtävän tiedot",
+ "editTask": "Muokkaa tehtävää",
+ "noTaskSelected": "Tehtävää ei ole valittu.",
+ "noTaskSelectedHelper": "Valitse tehtävä nähdäksesi ja muokataksesi sen tietoja.",
+ "taskUnavailable": "Tehtävä ei ole käytettävissä.",
+ "signInToEditTasks": "Kirjaudu sisään muokataksesi tehtäviä.",
+ "refreshTask": "Päivitä tehtävä",
+ "primarySection": "Ensisijaiset tiedot",
+ "statusSection": "Tila",
+ "openStatus": "Avoin",
+ "doneStatus": "Valmis",
+ "notes": "Muistiinpanot",
+ "dueDate": "Eräpäivä",
+ "clearDueDate": "Tyhjennä eräpäivä",
+ "dueTime": "Erääntymisaika",
+ "startDate": "Alkamispäivä",
+ "startTime": "Alkamisaika",
+ "endDate": "Päättymispäivä",
+ "endTime": "Päättymisaika",
+ "reminderDate": "Muistutuspäivä",
+ "reminderTime": "Muistutusaika",
+ "reminder": "Muistutus",
+ "addReminder": "Lisää muistutus",
+ "addGuest": "Lisää vieras",
+ "addGuestEmail": "Lisää vieraan sähköpostiosoite",
+ "removeReminder": "Poista muistutus",
+ "off": "Ei käytössä",
+ "repeat": "Toisto",
+ "repeatNone": "Ei toistoa",
+ "noneValue": "Ei mitään",
+ "repeatDaily": "Päivittäin",
+ "repeatWeekly": "Viikoittain",
+ "repeatMonthly": "Kuukausittain",
+ "repeatYearly": "Vuosittain",
+ "importance": "Tärkeys",
+ "importanceLow": "Pieni",
+ "importanceNormal": "Normaali",
+ "importanceHigh": "Suuri",
+ "categories": "Luokat",
+ "scheduleSection": "Aikataulu",
+ "dueGroup": "Eräpäivä",
+ "startGroup": "Alku",
+ "reminderGroup": "Muistutus",
+ "organizationSection": "Järjestely",
+ "actionsSection": "Toiminnot",
+ "advancedSection": "Lisäasetukset",
+ "addCategory": "Lisää luokka",
+ "list": "Luettelo",
+ "microsoftMoveUnsupported": "Luettelosta toiseen siirtämistä ei tueta Microsoft To Do -tileillä tässä versiossa.",
+ "createSubtask": "Luo alitehtävä",
+ "moveToTop": "Siirrä ylimmäksi",
+ "deleteTask": "Poista tehtävä",
+ "newSubtask": "Uusi alitehtävä",
+ "deleteTaskConfirmation": "Poistetaanko \"{title}\" Google Tasksista?",
+ "metadata": "Metatiedot",
+ "id": "Tunnus",
+ "etag": "ETag",
+ "updated": "Päivitetty",
+ "parent": "Ylätehtävä",
+ "position": "Sijainti",
+ "webLink": "Verkkolinkki",
+ "assignment": "Määritys",
+ "localState": "Paikallinen tila",
+ "pendingSync": "Odottaa synkronointia",
+ "synced": "Synkronoitu",
+ "account": "Tili",
+ "sync": "Synkronointi",
+ "manualFullSync": "Manuaalinen täysi synkronointi",
+ "runInBackgroundWhenClosed": "Jatka toimintaa, kun ikkuna suljetaan",
+ "showTrayIcon": "Näytä ilmoitusalueen kuvake",
+ "startMinimizedToTray": "Käynnistä pienennettynä ilmoitusalueelle",
+ "requiresTrayIcon": "Vaatii ilmoitusalueen kuvakkeen.",
+ "syncComplete": "Synkronointi valmis.",
+ "syncFailed": "Synkronointi epäonnistui: {error}",
+ "notifySyncFailures": "Ilmoita synkronointivirheistä",
+ "notifyConflicts": "Ilmoita ristiriidoista",
+ "notifyDueToday": "Ilmoita tänään erääntyvistä",
+ "eventReminders": "Tapahtumamuistutukset",
+ "taskReminders": "Tehtävämuistutukset",
+ "notificationDetailLevel": "Ilmoitusten yksityiskohtaisuus",
+ "notificationDetailPrivate": "Yksityinen",
+ "notificationDetailNormal": "Normaali",
+ "quietHours": "Hiljainen aika",
+ "quietHoursDescription": "Keskeytä ilmoitukset tällä ajanjaksolla.",
+ "quietHoursStart": "Hiljaisen ajan alku",
+ "quietHoursEnd": "Hiljaisen ajan loppu",
+ "notifications": "Ilmoitukset",
+ "appearance": "Ulkoasu",
+ "theme": "Teema",
+ "themeSystem": "Järjestelmä",
+ "themeLight": "Vaalea",
+ "themeDark": "Tumma",
+ "themeFamily": "Teemaperhe",
+ "themeFamilyYaru": "Ubuntun oma (Yaru)",
+ "localization": "Lokalisointi",
+ "currentLocale": "Nykyinen alueasetus",
+ "privacy": "Tietosuoja",
+ "redactTaskContentInDiagnostics": "Peitä tehtävien sisältö diagnostiikassa",
+ "developerDiagnostics": "Kehittäjän diagnostiikka",
+ "diagnostics": "Diagnostiikka",
+ "apiInspectorDisabled": "Näytä API-tarkastaja",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery-versio: {revision}",
+ "implementedMethods": "Toteutetut metodit",
+ "supportsTasksScopes": "Tukee tasks- ja tasks.readonly-käyttöoikeusalueita",
+ "requiresTasksScope": "Vaatii tasks-käyttöoikeusalueen",
+ "blockedPendingOperations": "Estetyt odottavat toiminnot",
+ "signInToInspectPendingOperations": "Kirjaudu sisään tarkastellaksesi odottavia toimintoja.",
+ "noBlockedPendingOperations": "Ei estettyjä odottavia toimintoja.",
+ "operationActions": "Toiminnot",
+ "pendingOpListId": "luettelo={id}",
+ "pendingOpTaskId": "tehtävä={id}",
+ "pendingOpAttempts": "yritykset={count}",
+ "retry": "Yritä uudelleen",
+ "discard": "Hylkää",
+ "discardChangesAction": "Hylkää",
+ "discardChanges": "Hylätäänkö muutokset?",
+ "discardChangesConfirmation": "Tämä hylkää tehtävän tallentamattomat muutokset.",
+ "retryCompleted": "Uudelleenyritys suoritettu.",
+ "discardPendingOperation": "Hylätäänkö odottava toiminto?",
+ "discardPendingOperationConfirmation": "Tämä poistaa estetyn paikallisen toiminnon. Seuraava synkronointi päivittää tiedot Google Tasksista.",
+ "pendingOperationDiscarded": "Odottava toiminto hylätty.",
+ "syncFailureNotificationTitle": "BusyMaxin synkronointi epäonnistui",
+ "syncFailureNotificationBody": "Taustasynkronointi epäonnistui. {message}",
+ "conflictNotificationTitle": "BusyMaxin synkronointiristiriita",
+ "conflictNotificationBody": "Odottava paikallinen muutos estettiin. {summary}",
+ "dueTodayNotificationTitle": "Tänään erääntyvät tehtävät",
+ "dueTodayNotificationBody": "{count, plural, =1{Yksi tehtävä erääntyy tänään.} other{{count} tehtävää erääntyy tänään.}}",
+ "eventReminderNotificationTitle": "Tapahtumamuistutus",
+ "taskReminderNotificationTitle": "Tehtävämuistutus",
+ "eventReminderNotificationBody": "Tapahtuma alkaa pian.",
+ "taskReminderNotificationBody": "Tehtävän määräaika lähestyy.",
+ "notificationOpenAction": "Avaa",
+ "notificationDetailsHidden": "Yksityiskohdat on piilotettu tietosuoja-asetusten vuoksi.",
+ "previousMonth": "Edellinen kuukausi",
+ "nextMonth": "Seuraava kuukausi",
+ "openMonthView": "Avaa kuukausinäkymä",
+ "previousYear": "Edellinen vuosi",
+ "nextYear": "Seuraava vuosi",
+ "openYearView": "Avaa vuosinäkymä",
+ "weekNumberTooltip": "Viikko {number}",
+ "resizeAllDayPanel": "Muuta koko päivän paneelin kokoa",
+ "scheduleItemCount": "{count, plural, =1{1 kohde} other{{count} kohdetta}}",
+ "readOnlyCalendar": "Tämä kalenteri on kirjoitussuojattu.",
+ "selectTimeZone": "Valitse aikavyöhyke",
+ "searchLocations": "Hae sijainteja",
+ "noLocationsFound": "Sijainteja ei löytynyt",
+ "deleteCalendarConfirmation": "Poistetaanko \"{title}\"?"
+}
diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb
index ef966a6..7d4d9a8 100644
--- a/lib/l10n/app_fr.arb
+++ b/lib/l10n/app_fr.arb
@@ -10,7 +10,7 @@
"onboardingAccountsStepTitle": "Connecter des comptes",
"onboardingAccountsStepDescription": "Ajoutez tous les comptes Google et Microsoft que vous voulez utiliser. BusyMax synchronise les calendriers, événements, listes de tâches et tâches de chaque compte.",
"onboardingPreferencesStepTitle": "Choisir les paramètres système",
- "onboardingPreferencesStepDescription": "Réglez le comportement du bureau, les rappels, le détail des notifications et l’apparence avant d’ouvrir votre planning.",
+ "onboardingPreferencesStepDescription": "Réglez le comportement de l’application sur le bureau, les rappels, le niveau de détail des notifications et l’apparence avant d’ouvrir votre planning.",
"signInWithGoogle": "Se connecter avec Google",
"signInWithMicrosoft": "Se connecter avec Microsoft",
"googleTasksProvider": "Google Tasks",
@@ -35,33 +35,23 @@
"calendars": "Calendriers",
"newEvent": "Nouvel événement",
"refreshCalendar": "Actualiser le calendrier",
- "openInProvider": "Ouvrir chez le fournisseur",
+ "openInProvider": "Ouvrir dans le service",
"hideFromSchedule": "Masquer du planning",
"showInSchedule": "Afficher dans le planning",
"noCalendarsSynced": "Aucun calendrier synchronisé.",
"allDay": "Toute la journée",
"moreItems": "+{count} de plus",
"noEventsOrTasks": "Aucun événement ni tâche",
- "trayAgendaLoading": "Chargement de l’agenda...",
- "trayAgendaSignInRequired": "Connectez-vous pour afficher l’agenda.",
- "trayAgendaNoSources": "Aucun calendrier ni liste de tâches visible.",
- "trayAgendaOpenBusyMax": "Ouvrir l’app",
- "trayAgendaRefresh": "Actualiser",
- "trayAgendaError": "Agenda indisponible",
- "compactAgendaTitle": "Agenda",
- "compactAgendaSubtitle": "À venir",
- "compactAgendaOverdue": "En retard",
- "compactAgendaClear": "Libre pour le moment",
- "compactAgendaOpenBusyMax": "Ouvrir BusyMax",
- "compactAgendaHide": "Masquer",
- "compactAgendaNewTask": "Nouvelle tâche",
- "compactAgendaRetry": "Réessayer",
- "compactAgendaRefresh": "Actualiser",
- "compactAgendaAllDay": "Toute la journée",
- "compactAgendaDueToday": "Échéance aujourd’hui",
- "compactAgendaDueTomorrow": "Échéance demain",
- "compactAgendaDueOn": "Échéance {date}",
- "compactAgendaMoreOverdue": "Charger plus de tâches en retard",
+ "scheduleLoading": "Chargement du planning...",
+ "scheduleUnavailable": "Planning indisponible",
+ "scheduleNoSources": "Aucun calendrier ni liste de tâches visible",
+ "scheduleNoSourcesDescription": "Choisissez les éléments à afficher dans les paramètres, puis actualisez.",
+ "scheduleSignInRequired": "Connecter un compte",
+ "scheduleSignInDescription": "Connectez-vous pour synchroniser vos calendriers et vos tâches.",
+ "scheduleNoSearchResults": "Aucun événement ni aucune tâche ne correspond",
+ "scheduleNoSearchResultsDescription": "Essayez une autre recherche ou effacez les filtres actuels.",
+ "refresh": "Actualiser",
+ "trayOpenBusyMax": "Ouvrir BusyMax",
"agendaLoadMoreOverdue": "Charger plus de tâches en retard",
"agendaLoadMoreNoDate": "Charger plus de tâches sans date",
"viewDay": "Jour",
@@ -71,7 +61,7 @@
"viewAgenda": "Agenda",
"scheduleSettings": "Planning",
"scheduleDisplaySettings": "Affichage du planning",
- "scheduleDisplayHoursDescription": "Les vues Jour et Semaine s’ouvrent dans cette plage horaire. Les éléments tôt ou tardifs l’élargissent si nécessaire.",
+ "scheduleDisplayHoursDescription": "Les vues Jour et Semaine s’ouvrent dans cette plage horaire. Les éléments situés avant ou après cette plage l’étendent si nécessaire.",
"scheduleDayStartsAt": "La journée commence à",
"scheduleDayEndsAt": "La journée se termine à",
"sourceCalendar": "Calendrier",
@@ -97,6 +87,29 @@
"conference": "Conférence",
"noConference": "Aucune conférence",
"providerCalendar": "Calendrier du fournisseur",
+ "formatBoldShortLabel": "G",
+ "formatBoldTooltip": "Gras",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "Italique",
+ "formatUnderlineShortLabel": "S",
+ "formatUnderlineTooltip": "Souligné",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minute avant} other{{minutes} minutes avant}}",
+ "@reminderMinutesBefore": {"placeholders": {"minutes": {"type": "int"}}},
+ "reminderAtStart": "À l’heure de début",
+ "reminderHoursBefore": "{hours, plural, =1{1 heure avant} other{{hours} heures avant}}",
+ "@reminderHoursBefore": {"placeholders": {"hours": {"type": "int"}}},
+ "reminderDaysBefore": "{days, plural, =1{1 jour avant} other{{days} jours avant}}",
+ "@reminderDaysBefore": {"placeholders": {"days": {"type": "int"}}},
+ "availabilityFree": "Disponible",
+ "availabilityTentative": "Provisoire",
+ "availabilityOutOfOffice": "Absent du bureau",
+ "availabilityWorkingElsewhere": "Travail ailleurs",
+ "visibilityDefault": "Par défaut",
+ "visibilityPublic": "Publique",
+ "visibilityPrivate": "Privée",
+ "visibilityConfidential": "Confidentielle",
+ "sensitivityNormal": "Normale",
+ "sensitivityPersonal": "Personnelle",
"tasks": "Tâches",
"allTasks": "Toutes les tâches",
"tasksInList": "Tâches dans {title}",
@@ -111,7 +124,7 @@
"shortcutNextPeriodDescription": "Semaine suivante en vue semaine, mois suivant en vue mois, etc.",
"shortcutPreviousPeriod": "Période précédente",
"shortcutPreviousPeriodDescription": "Semaine précédente en vue semaine, mois précédent en vue mois, etc.",
- "shortcutJumpToToday": "Aller à aujourd'hui",
+ "shortcutJumpToToday": "Aller à la date du jour",
"shortcutGroupView": "Affichage",
"shortcutDayView": "Vue jour",
"shortcutWeekView": "Vue semaine",
@@ -124,12 +137,12 @@
"shortcutGroupTaskEditing": "Modification des tâches",
"shortcutCancelEditing": "Annuler la modification",
"shortcutCancelEditingDescription": "Fermer la modification ou les détails de la tâche",
- "shortcutGroupCompactAgenda": "Agenda compact",
- "shortcutRefreshCompactAgendaDescription": "Actualiser la fenêtre d'agenda compact",
- "shortcutHideCompactAgendaDescription": "Masquer la fenêtre d'agenda compact",
"aboutBusyMax": "À propos de BusyMax",
- "aboutBusyMaxDescription": "ToDo et calendrier",
+ "aboutBusyMaxDescription": "Calendrier et tâches",
+ "license": "Licence",
+ "apacheLicenseName": "Apache License 2.0",
"website": "Site web",
+ "sourceCode": "Code source",
"reportAnIssue": "Signaler un problème",
"sendFeedback": "Envoyer des commentaires",
"feedbackSubmit": "Envoyer",
@@ -156,6 +169,8 @@
"feedbackServerError": "BusyStack ne peut pas accepter vos commentaires pour le moment. Vos commentaires n’ont pas été effacés ; réessayez.",
"feedbackSuccess": "Commentaires envoyés. Référence : {id}",
"toggleSidebar": "Afficher/masquer la barre latérale",
+ "showSidebar": "Afficher le panneau latéral",
+ "hideSidebar": "Masquer le panneau latéral",
"accounts": "Comptes",
"currentAccount": "Compte actuel",
"switchAccount": "Changer de compte",
@@ -164,10 +179,17 @@
"googleProvider": "Google",
"microsoftProvider": "Microsoft",
"signedInAccount": "Connecté",
- "signOutThisAccount": "Déconnecter ce compte",
- "revokeThisAccount": "Révoquer ce compte",
- "disconnectThisAccount": "Dissocier ce compte",
- "deleteLocalDataForThisAccount": "Supprimer les données locales de ce compte",
+ "removeAccount": "Supprimer le compte…",
+ "removingAccount": "Suppression du compte…",
+ "removeAccountDescription": "Arrêter la synchronisation et supprimer les données de ce compte de cet appareil.",
+ "removeAccountTitle": "Supprimer {account} de BusyMax ?",
+ "@removeAccountTitle": {"placeholders": {"account": {"type": "String"}}},
+ "removeAccountConfirmation": "Cette action supprime de cet appareil les tâches, calendriers, événements, rappels et modifications hors ligne en attente mis en cache. Les modifications non synchronisées seront perdues. Aucune donnée ne sera supprimée de Google ou Microsoft.",
+ "revokeGoogleAccess": "Révoquer également l’accès de BusyMax à ce compte Google",
+ "revokeGoogleAccessDescription": "Vous devrez accorder à nouveau l’accès avant de reconnecter le compte.",
+ "removeAccountAction": "Supprimer le compte",
+ "removeAccountFailed": "Impossible de terminer la suppression du compte. Réessayez.",
+ "accountRemovedGoogleRevokeFailed": "Le compte a été supprimé de cet appareil, mais BusyMax n’a pas pu révoquer son accès à votre compte Google. Vous pouvez révoquer cet accès depuis votre compte Google.",
"newList": "Nouvelle liste",
"signInToViewTaskLists": "Connectez-vous pour voir les listes de tâches.",
"noTaskListsSynced": "Aucune liste de tâches synchronisée.",
@@ -183,7 +205,7 @@
"title": "Titre",
"create": "Créer",
"newTask": "Nouvelle tâche",
- "clearCompleted": "Effacer les terminées",
+ "clearCompleted": "Effacer les tâches terminées",
"refreshList": "Actualiser la liste",
"refreshAll": "Tout actualiser",
"listRefreshed": "Liste actualisée.",
@@ -193,7 +215,7 @@
"exportFailed": "Échec de l’export : {error}",
"@exportFailed": {"placeholders": {"error": {"type": "String"}}},
"refreshFailed": "Échec de l’actualisation : {error}",
- "selectOrCreateTaskList": "Sélectionnez ou créez une liste de tâches.",
+ "selectOrCreateTaskList": "Sélectionnez ou créez une liste de tâches pour commencer.",
"signInToViewTasks": "Connectez-vous pour voir les tâches.",
"noTasks": "Aucune tâche.",
"noTasksYet": "Aucune tâche pour le moment",
@@ -207,11 +229,6 @@
"completed": "Terminées",
"duePrefix": "Échéance {date}",
"dateTimeDisplay": "{date} à {time}",
- "searchTasks": "Rechercher des tâches",
- "advancedFilters": "Filtres avancés",
- "showCompleted": "Afficher les terminées",
- "showHidden": "Afficher les masquées",
- "showAssigned": "Afficher les assignées",
"taskDetails": "Détails de la tâche",
"editTask": "Modifier la tâche",
"noTaskSelected": "Aucune tâche sélectionnée.",
@@ -262,7 +279,7 @@
"list": "Liste",
"microsoftMoveUnsupported": "Le déplacement entre listes n’est pas pris en charge pour les comptes Microsoft To Do dans cette version.",
"createSubtask": "Créer une sous-tâche",
- "moveToTop": "Déplacer en haut",
+ "moveToTop": "Déplacer tout en haut",
"deleteTask": "Supprimer la tâche",
"newSubtask": "Nouvelle sous-tâche",
"deleteTaskConfirmation": "Supprimer « {title} » de Google Tasks ?",
@@ -270,38 +287,46 @@
"id": "ID",
"etag": "ETag",
"updated": "Mis à jour",
- "parent": "Parent",
+ "parent": "Tâche parente",
"position": "Position",
"webLink": "Lien web",
- "assignment": "Assignation",
+ "assignment": "Attribution",
"localState": "État local",
"pendingSync": "Synchronisation en attente",
"synced": "Synchronisé",
"account": "Compte",
- "signOut": "Se déconnecter",
- "revokeGoogleAuthorization": "Révoquer l’autorisation Google",
- "deleteLocalData": "Supprimer les données locales",
- "deleteLocalDataConfirmation": "Cela supprime de cet appareil le compte local, les tâches synchronisées et les changements hors ligne en attente.",
"sync": "Synchronisation",
"manualFullSync": "Synchronisation complète manuelle",
+ "runInBackgroundWhenClosed": "Continuer à s’exécuter après la fermeture de la fenêtre",
+ "showTrayIcon": "Afficher l’icône dans la zone de notification",
+ "startMinimizedToTray": "Démarrer réduit dans la zone de notification",
+ "requiresTrayIcon": "Nécessite l’icône de la zone de notification.",
"syncComplete": "Synchronisation terminée.",
"syncFailed": "Échec de la synchronisation : {error}",
"notifySyncFailures": "Notifications d’échec de synchronisation",
"notifyConflicts": "Notifications de conflits",
"notifyDueToday": "Notifications des tâches dues aujourd’hui",
+ "eventReminders": "Rappels d’événements",
+ "taskReminders": "Rappels de tâches",
+ "notificationDetailLevel": "Niveau de détail des notifications",
+ "notificationDetailPrivate": "Privé",
+ "notificationDetailNormal": "Normal",
+ "quietHours": "Période de silence",
+ "quietHoursDescription": "Mettre les notifications en pause pendant cette période.",
+ "quietHoursStart": "Début de la période de silence",
+ "quietHoursEnd": "Fin de la période de silence",
"notifications": "Notifications",
"appearance": "Apparence",
"theme": "Thème",
"themeSystem": "Système",
"themeLight": "Clair",
"themeDark": "Sombre",
- "themeFamily": "Famille de thème",
- "themeFamilyYaru": "Ubuntu natif (Yaru)",
+ "themeFamily": "Famille de thèmes",
+ "themeFamilyYaru": "Thème natif d’Ubuntu (Yaru)",
"localization": "Localisation",
"currentLocale": "Paramètres régionaux actuels",
"privacy": "Confidentialité",
"redactTaskContentInDiagnostics": "Masquer le contenu des tâches dans les diagnostics",
- "detailedNotifications": "Texte de notification détaillé",
"developerDiagnostics": "Diagnostics développeur",
"diagnostics": "Diagnostics",
"apiInspectorDisabled": "Afficher l’inspecteur API",
@@ -318,18 +343,41 @@
"pendingOpTaskId": "tâche={id}",
"pendingOpAttempts": "tentatives={count}",
"retry": "Réessayer",
- "discard": "Ignorer",
- "discardChanges": "Ignorer les modifications ?",
- "discardChangesConfirmation": "Cela ignore les modifications non enregistrées de cette tâche.",
+ "discard": "Abandonner",
+ "discardChangesAction": "Abandonner",
+ "discardChanges": "Abandonner les modifications ?",
+ "discardChangesConfirmation": "Les modifications non enregistrées apportées à cette tâche seront perdues.",
"retryCompleted": "Nouvelle tentative terminée.",
- "discardPendingOperation": "Ignorer l’opération en attente ?",
- "discardPendingOperationConfirmation": "Cela supprime l’opération locale bloquée. La prochaine synchronisation actualisera depuis Google Tasks.",
- "pendingOperationDiscarded": "Opération en attente ignorée.",
+ "discardPendingOperation": "Abandonner l’opération en attente ?",
+ "discardPendingOperationConfirmation": "Cette action supprime l’opération locale bloquée. Lors de la prochaine synchronisation, les données seront rechargées depuis Google Tasks.",
+ "pendingOperationDiscarded": "Opération en attente abandonnée.",
"syncFailureNotificationTitle": "Échec de la synchronisation BusyMax",
"syncFailureNotificationBody": "La synchronisation en arrière-plan a échoué. {message}",
"conflictNotificationTitle": "Conflit de synchronisation BusyMax",
"conflictNotificationBody": "Une modification locale en attente a été bloquée. {summary}",
"dueTodayNotificationTitle": "Tâches dues aujourd’hui",
"dueTodayNotificationBody": "{count, plural, =1{Une tâche est due aujourd’hui.} other{{count} tâches sont dues aujourd’hui.}}",
- "notificationDetailsHidden": "Les détails sont masqués par les paramètres de confidentialité."
+ "eventReminderNotificationTitle": "Rappel d’événement",
+ "taskReminderNotificationTitle": "Rappel de tâche",
+ "eventReminderNotificationBody": "L’événement commence bientôt.",
+ "taskReminderNotificationBody": "La tâche arrive bientôt à échéance.",
+ "notificationOpenAction": "Ouvrir",
+ "notificationDetailsHidden": "Les détails sont masqués par les paramètres de confidentialité.",
+ "previousMonth": "Mois précédent",
+ "nextMonth": "Mois suivant",
+ "openMonthView": "Ouvrir la vue mensuelle",
+ "previousYear": "Année précédente",
+ "nextYear": "Année suivante",
+ "openYearView": "Ouvrir la vue annuelle",
+ "weekNumberTooltip": "Semaine {number}",
+ "@weekNumberTooltip": {"placeholders": {"number": {"type": "int"}}},
+ "resizeAllDayPanel": "Redimensionner le volet des événements sur toute la journée",
+ "scheduleItemCount": "{count, plural, =1{1 élément} other{{count} éléments}}",
+ "@scheduleItemCount": {"placeholders": {"count": {"type": "int"}}},
+ "readOnlyCalendar": "Ce calendrier est en lecture seule.",
+ "selectTimeZone": "Sélectionner le fuseau horaire",
+ "searchLocations": "Rechercher des lieux",
+ "noLocationsFound": "Aucun lieu trouvé",
+ "deleteCalendarConfirmation": "Supprimer « {title} » ?",
+ "@deleteCalendarConfirmation": {"placeholders": {"title": {"type": "String"}}}
}
diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb
new file mode 100644
index 0000000..a809900
--- /dev/null
+++ b/lib/l10n/app_hi.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "hi",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "कैलेंडर और कार्य सिंक करने के लिए Google और Microsoft खाते कनेक्ट करें।",
+ "googlePermissionsConsentNotice": "Google अनुमति स्क्रीन पर, कैलेंडर और कार्य दोनों अनुमतियाँ चुनें।",
+ "googlePermissionsRequiredRetry": "Google Calendar और Google Tasks की अनुमतियाँ आवश्यक हैं। फिर से कोशिश करें और दोनों चेकबॉक्स चुनें।",
+ "finishSetup": "सेटअप पूरा करें",
+ "continueSetup": "जारी रखें",
+ "onboardingSetupTitle": "BusyMax सेट अप करें",
+ "onboardingAccountsStepTitle": "खाते कनेक्ट करें",
+ "onboardingAccountsStepDescription": "वे सभी Google और Microsoft खाते जोड़ें जिन्हें आप उपयोग करना चाहते हैं। BusyMax प्रत्येक खाते के कैलेंडर, ईवेंट, कार्य सूचियाँ और कार्य सिंक करता है।",
+ "onboardingPreferencesStepTitle": "सिस्टम सेटिंग्स चुनें",
+ "onboardingPreferencesStepDescription": "अपना शेड्यूल खोलने से पहले डेस्कटॉप व्यवहार, रिमाइंडर, सूचनाओं के विवरण का स्तर और दिखावट सेट करें।",
+ "signInWithGoogle": "Google से साइन इन करें",
+ "signInWithMicrosoft": "Microsoft से साइन इन करें",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "यह प्रदाता कॉन्फ़िगर नहीं किया गया है।",
+ "waitingForGoogleSignIn": "Google साइन-इन की प्रतीक्षा हो रही है...",
+ "waitingForMicrosoftSignIn": "Microsoft साइन-इन की प्रतीक्षा हो रही है...",
+ "microsoftSignInNotConfigured": "Microsoft साइन-इन कॉन्फ़िगर नहीं है। MICROSOFT_OAUTH_CLIENT_ID सेट करें।",
+ "cancel": "रद्द करें",
+ "close": "बंद करें",
+ "exit": "बाहर निकलें",
+ "options": "विकल्प",
+ "hide": "छिपाएँ",
+ "show": "दिखाएँ",
+ "export": "निर्यात करें",
+ "save": "सहेजें",
+ "settings": "सेटिंग्स",
+ "all": "सभी",
+ "calendarEvents": "ईवेंट",
+ "calendarTasks": "कार्य",
+ "calendar": "कैलेंडर",
+ "calendars": "कैलेंडर",
+ "newEvent": "नया ईवेंट",
+ "refreshCalendar": "कैलेंडर रीफ़्रेश करें",
+ "openInProvider": "सेवा में खोलें",
+ "hideFromSchedule": "शेड्यूल से छिपाएँ",
+ "showInSchedule": "शेड्यूल में दिखाएँ",
+ "noCalendarsSynced": "अभी तक कोई कैलेंडर सिंक नहीं हुआ है।",
+ "allDay": "पूरे दिन",
+ "moreItems": "+{count} और",
+ "noEventsOrTasks": "कोई ईवेंट या कार्य नहीं",
+ "scheduleLoading": "शेड्यूल लोड हो रहा है...",
+ "scheduleUnavailable": "शेड्यूल उपलब्ध नहीं है",
+ "scheduleNoSources": "कोई दिखाई देने वाला कैलेंडर या कार्य सूची नहीं",
+ "scheduleNoSourcesDescription": "सेटिंग्स में चुनें कि क्या दिखाना है, फिर रीफ़्रेश करें।",
+ "scheduleSignInRequired": "खाता कनेक्ट करें",
+ "scheduleSignInDescription": "कैलेंडर और कार्य सिंक करने के लिए साइन इन करें।",
+ "scheduleNoSearchResults": "कोई मिलता-जुलता ईवेंट या कार्य नहीं",
+ "scheduleNoSearchResultsDescription": "कोई दूसरी खोज आज़माएँ या मौजूदा फ़िल्टर हटाएँ।",
+ "refresh": "रीफ़्रेश करें",
+ "trayOpenBusyMax": "BusyMax खोलें",
+ "agendaLoadMoreOverdue": "समय-सीमा पार कर चुके अतिरिक्त कार्य लोड करें",
+ "agendaLoadMoreNoDate": "बिना तारीख वाले और कार्य लोड करें",
+ "viewDay": "दिन",
+ "viewWeek": "सप्ताह",
+ "viewMonth": "महीना",
+ "viewYear": "वर्ष",
+ "viewAgenda": "कार्यसूची",
+ "scheduleSettings": "शेड्यूल",
+ "scheduleDisplaySettings": "शेड्यूल प्रदर्शन",
+ "scheduleDisplayHoursDescription": "दिन और सप्ताह दृश्य शुरू में यह समयावधि दिखाते हैं। आवश्यकता होने पर पहले या बाद के आइटम इस सीमा को बढ़ाते हैं।",
+ "scheduleDayStartsAt": "दिन शुरू होता है",
+ "scheduleDayEndsAt": "दिन समाप्त होता है",
+ "sourceCalendar": "कैलेंडर",
+ "sourceTaskList": "कार्य सूची",
+ "createChoiceTitle": "बनाएँ",
+ "createEventAtTime": "ईवेंट",
+ "createTaskAtDate": "कार्य",
+ "editEvent": "ईवेंट संपादित करें",
+ "eventTitle": "ईवेंट का शीर्षक",
+ "location": "स्थान",
+ "timeSlot": "समयावधि",
+ "startDateTime": "शुरू होने की तारीख/समय",
+ "endDateTime": "समाप्त होने की तारीख/समय",
+ "doesNotRepeat": "दोहराया नहीं जाता",
+ "defaultReminder": "डिफ़ॉल्ट रिमाइंडर",
+ "guests": "अतिथि",
+ "noGuests": "कोई अतिथि नहीं",
+ "description": "विवरण",
+ "availabilityShowAs": "उपलब्धता / इस रूप में दिखाएँ",
+ "busy": "व्यस्त",
+ "visibility": "दृश्यता",
+ "defaultVisibility": "डिफ़ॉल्ट दृश्यता",
+ "conference": "कॉन्फ़्रेंस",
+ "noConference": "कोई कॉन्फ़्रेंस नहीं",
+ "providerCalendar": "प्रदाता कैलेंडर",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "बोल्ड",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "इटैलिक",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "रेखांकित",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 मिनट पहले} other{{minutes} मिनट पहले}}",
+ "reminderAtStart": "शुरू होने पर",
+ "reminderHoursBefore": "{hours, plural, =1{1 घंटा पहले} other{{hours} घंटे पहले}}",
+ "reminderDaysBefore": "{days, plural, =1{1 दिन पहले} other{{days} दिन पहले}}",
+ "availabilityFree": "खाली",
+ "availabilityTentative": "अस्थायी",
+ "availabilityOutOfOffice": "कार्यालय से बाहर",
+ "availabilityWorkingElsewhere": "किसी अन्य स्थान पर कार्यरत",
+ "visibilityDefault": "डिफ़ॉल्ट",
+ "visibilityPublic": "सार्वजनिक",
+ "visibilityPrivate": "निजी",
+ "visibilityConfidential": "गोपनीय",
+ "sensitivityNormal": "सामान्य",
+ "sensitivityPersonal": "व्यक्तिगत",
+ "tasks": "कार्य",
+ "allTasks": "सभी कार्य",
+ "tasksInList": "{title} में कार्य",
+ "taskLists": "कार्य सूचियाँ",
+ "navigation": "नेविगेशन",
+ "mainMenu": "मुख्य मेन्यू",
+ "keyboardShortcuts": "कीबोर्ड शॉर्टकट",
+ "shortcutGroupGeneral": "सामान्य",
+ "shortcutKeyboardShortcutsDescription": "यह शॉर्टकट संदर्भ दिखाएँ",
+ "shortcutGroupNavigation": "नेविगेशन",
+ "shortcutNextPeriod": "अगली अवधि",
+ "shortcutNextPeriodDescription": "सप्ताह दृश्य में अगला सप्ताह, महीने के दृश्य में अगला महीना, इत्यादि",
+ "shortcutPreviousPeriod": "पिछली अवधि",
+ "shortcutPreviousPeriodDescription": "सप्ताह दृश्य में पिछला सप्ताह, महीने के दृश्य में पिछला महीना, इत्यादि",
+ "shortcutJumpToToday": "आज की तारीख पर जाएँ",
+ "shortcutGroupView": "दृश्य",
+ "shortcutDayView": "दिन का दृश्य",
+ "shortcutWeekView": "सप्ताह का दृश्य",
+ "shortcutMonthView": "महीने का दृश्य",
+ "shortcutYearView": "वर्ष का दृश्य",
+ "shortcutAgendaView": "कार्यसूची दृश्य",
+ "shortcutGroupCreateAndEdit": "बनाएँ और संपादित करें",
+ "shortcutSaveItem": "ईवेंट या कार्य सहेजें",
+ "shortcutDeleteItem": "ईवेंट या कार्य मिटाएँ",
+ "shortcutGroupTaskEditing": "कार्य संपादन",
+ "shortcutCancelEditing": "संपादन रद्द करें",
+ "shortcutCancelEditingDescription": "कार्य संपादन या कार्य विवरण बंद करें",
+ "aboutBusyMax": "BusyMax के बारे में",
+ "aboutBusyMaxDescription": "कैलेंडर और कार्य",
+ "license": "लाइसेंस",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "वेबसाइट",
+ "sourceCode": "स्रोत कोड",
+ "reportAnIssue": "समस्या की रिपोर्ट करें",
+ "sendFeedback": "प्रतिक्रिया भेजें",
+ "feedbackSubmit": "सबमिट करें",
+ "feedbackCategory": "श्रेणी",
+ "feedbackSelectCategory": "श्रेणी चुनें",
+ "feedbackCategoryProblem": "समस्या या बग",
+ "feedbackCategoryFeature": "सुविधा का अनुरोध",
+ "feedbackCategoryPrivacySecurity": "गोपनीयता या सुरक्षा संबंधी चिंता",
+ "feedbackCategoryUsability": "उपयोगिता संबंधी चिंता",
+ "feedbackCategoryOther": "अन्य",
+ "feedbackSubject": "विषय",
+ "feedbackDetailedMessage": "विस्तृत संदेश",
+ "feedbackReplyEmail": "जवाब के लिए ईमेल (वैकल्पिक)",
+ "feedbackIncludeTechnicalDetails": "तकनीकी विवरण शामिल करें",
+ "feedbackTechnicalDetailsDisclosure": "केवल आपके Linux ऑपरेटिंग सिस्टम का संस्करण और ऐप की भाषा व क्षेत्रीय सेटिंग जोड़ी जाती है। लॉग, खाता डेटा, फ़ाइल नाम या अन्य निदान जानकारी शामिल नहीं की जाती।",
+ "feedbackCategoryRequired": "श्रेणी चुनें।",
+ "feedbackSubjectLengthError": "विषय 3 से 120 वर्णों के बीच होना चाहिए।",
+ "feedbackMessageLengthError": "संदेश 10 से 5,000 वर्णों के बीच होना चाहिए।",
+ "feedbackInvalidEmail": "मान्य ईमेल पता दर्ज करें।",
+ "feedbackConnectionError": "BusyStack से कनेक्ट नहीं हो सका। अपना कनेक्शन जाँचें और फिर कोशिश करें।",
+ "feedbackTimeoutError": "अनुरोध का समय समाप्त हो गया। आपकी प्रतिक्रिया हटाई नहीं गई है; फिर से कोशिश करें।",
+ "feedbackRateLimitedError": "इस नेटवर्क से बहुत अधिक प्रतिक्रियाएँ भेजी गई हैं। प्रतीक्षा करें और फिर कोशिश करें।",
+ "feedbackRejectedError": "सर्वर ने सबमिशन अस्वीकार कर दिया। फ़ील्ड की समीक्षा करें और फिर कोशिश करें।",
+ "feedbackServerError": "BusyStack अभी आपकी प्रतिक्रिया स्वीकार नहीं कर सका। आपकी प्रतिक्रिया हटाई नहीं गई है; फिर से कोशिश करें।",
+ "feedbackSuccess": "प्रतिक्रिया भेज दी गई। संदर्भ: {id}",
+ "toggleSidebar": "साइडबार दिखाएँ या छिपाएँ",
+ "showSidebar": "साइडबार पैनल दिखाएँ",
+ "hideSidebar": "साइडबार पैनल छिपाएँ",
+ "accounts": "खाते",
+ "currentAccount": "मौजूदा खाता",
+ "switchAccount": "खाता बदलें",
+ "addGoogleAccount": "Google खाता जोड़ें",
+ "addMicrosoftAccount": "Microsoft खाता जोड़ें",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "साइन इन है",
+ "removeAccount": "खाता हटाएँ…",
+ "removingAccount": "खाता हटाया जा रहा है…",
+ "removeAccountDescription": "सिंक करना बंद करें और इस डिवाइस से इस खाते का डेटा हटाएँ।",
+ "removeAccountTitle": "BusyMax से {account} हटाएँ?",
+ "removeAccountConfirmation": "इससे कैश किए गए कार्य, कैलेंडर, ईवेंट, रिमाइंडर और लंबित ऑफ़लाइन बदलाव इस डिवाइस से मिट जाएँगे। सिंक न किए गए बदलाव खो जाएँगे। Google या Microsoft से कुछ भी नहीं मिटेगा।",
+ "revokeGoogleAccess": "इस Google खाते से BusyMax की पहुँच भी रद्द करें",
+ "revokeGoogleAccessDescription": "दोबारा कनेक्ट करने से पहले आपको फिर से पहुँच देनी होगी।",
+ "removeAccountAction": "खाता हटाएँ",
+ "removeAccountFailed": "खाता हटाना पूरा नहीं हो सका। फिर से कोशिश करें।",
+ "accountRemovedGoogleRevokeFailed": "खाता इस डिवाइस से हटा दिया गया, लेकिन BusyMax की Google खाते तक पहुँच रद्द नहीं की जा सकी। आप यह पहुँच अपने Google खाते से रद्द कर सकते हैं।",
+ "newList": "नई सूची",
+ "signInToViewTaskLists": "कार्य सूचियाँ देखने के लिए साइन इन करें।",
+ "noTaskListsSynced": "अभी तक कोई कार्य सूची सिंक नहीं हुई है।",
+ "listActions": "सूची की कार्रवाइयाँ",
+ "rename": "नाम बदलें",
+ "delete": "मिटाएँ",
+ "renameList": "सूची का नाम बदलें",
+ "deleteList": "सूची मिटाएँ",
+ "builtInMicrosoftList": "अंतर्निहित",
+ "builtInMicrosoftListCannotRenameDelete": "Microsoft To Do की अंतर्निहित सूचियों का नाम बदला या उन्हें मिटाया नहीं जा सकता।",
+ "deleteListConfirmation": "Google Tasks से “{title}” मिटाएँ?",
+ "deleteEvent": "ईवेंट मिटाएँ",
+ "title": "शीर्षक",
+ "create": "बनाएँ",
+ "newTask": "नया कार्य",
+ "clearCompleted": "पूरे हुए कार्य हटाएँ",
+ "refreshList": "सूची रीफ़्रेश करें",
+ "refreshAll": "सभी रीफ़्रेश करें",
+ "listRefreshed": "सूची रीफ़्रेश हो गई।",
+ "allTasksRefreshed": "सभी खाते रीफ़्रेश हो गए।",
+ "exportedFile": "{path} में निर्यात किया गया",
+ "exportFailed": "निर्यात विफल: {error}",
+ "refreshFailed": "रीफ़्रेश विफल: {error}",
+ "selectOrCreateTaskList": "शुरू करने के लिए कार्य सूची चुनें या बनाएँ।",
+ "signInToViewTasks": "कार्य देखने के लिए साइन इन करें।",
+ "noTasks": "कोई कार्य नहीं।",
+ "noTasksYet": "अभी तक कोई कार्य नहीं",
+ "noTasksYetMessage": "शुरू करने के लिए कार्य बनाएँ या अपने खाते रीफ़्रेश करें।",
+ "noTasksInList": "इस सूची में कोई कार्य नहीं है।",
+ "overdue": "समय सीमा बीत चुकी",
+ "today": "आज",
+ "tomorrow": "कल",
+ "upcoming": "आगामी",
+ "noDate": "कोई तारीख नहीं",
+ "completed": "पूर्ण",
+ "duePrefix": "{date} को देय",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "कार्य का विवरण",
+ "editTask": "कार्य संपादित करें",
+ "noTaskSelected": "कोई कार्य नहीं चुना गया।",
+ "noTaskSelectedHelper": "विवरण देखने और संपादित करने के लिए कोई कार्य चुनें।",
+ "taskUnavailable": "कार्य उपलब्ध नहीं है।",
+ "signInToEditTasks": "कार्य संपादित करने के लिए साइन इन करें।",
+ "refreshTask": "कार्य रीफ़्रेश करें",
+ "primarySection": "मुख्य",
+ "statusSection": "स्थिति",
+ "openStatus": "खुला",
+ "doneStatus": "पूर्ण",
+ "notes": "नोट्स",
+ "dueDate": "देय तारीख",
+ "clearDueDate": "देय तारीख हटाएँ",
+ "dueTime": "देय समय",
+ "startDate": "शुरू होने की तारीख",
+ "startTime": "शुरू होने का समय",
+ "endDate": "समाप्ति तारीख",
+ "endTime": "समाप्ति समय",
+ "reminderDate": "रिमाइंडर की तारीख",
+ "reminderTime": "रिमाइंडर का समय",
+ "reminder": "रिमाइंडर",
+ "addReminder": "रिमाइंडर जोड़ें",
+ "addGuest": "अतिथि जोड़ें",
+ "addGuestEmail": "अतिथि का ईमेल जोड़ें",
+ "removeReminder": "रिमाइंडर हटाएँ",
+ "off": "बंद",
+ "repeat": "दोहराएँ",
+ "repeatNone": "कभी नहीं",
+ "noneValue": "कोई नहीं",
+ "repeatDaily": "प्रतिदिन",
+ "repeatWeekly": "हर सप्ताह",
+ "repeatMonthly": "हर महीने",
+ "repeatYearly": "हर वर्ष",
+ "importance": "महत्त्व",
+ "importanceLow": "कम",
+ "importanceNormal": "सामान्य",
+ "importanceHigh": "उच्च",
+ "categories": "श्रेणियाँ",
+ "scheduleSection": "शेड्यूल",
+ "dueGroup": "देय",
+ "startGroup": "शुरुआत",
+ "reminderGroup": "रिमाइंडर",
+ "organizationSection": "व्यवस्था",
+ "actionsSection": "कार्रवाइयाँ",
+ "advancedSection": "उन्नत",
+ "addCategory": "श्रेणी जोड़ें",
+ "list": "सूची",
+ "microsoftMoveUnsupported": "इस संस्करण में Microsoft To Do खातों के लिए सूचियों के बीच कार्य ले जाना समर्थित नहीं है।",
+ "createSubtask": "उपकार्य बनाएँ",
+ "moveToTop": "सबसे ऊपर ले जाएँ",
+ "deleteTask": "कार्य मिटाएँ",
+ "newSubtask": "नया उपकार्य",
+ "deleteTaskConfirmation": "Google Tasks से “{title}” मिटाएँ?",
+ "metadata": "मेटाडेटा",
+ "id": "आईडी",
+ "etag": "ETag",
+ "updated": "अपडेट किया गया",
+ "parent": "मूल कार्य",
+ "position": "स्थान",
+ "webLink": "वेब लिंक",
+ "assignment": "असाइनमेंट",
+ "localState": "स्थानीय स्थिति",
+ "pendingSync": "सिंक लंबित",
+ "synced": "सिंक किया गया",
+ "account": "खाता",
+ "sync": "सिंक",
+ "manualFullSync": "मैन्युअल पूर्ण सिंक",
+ "runInBackgroundWhenClosed": "विंडो बंद होने पर भी चलते रहें",
+ "showTrayIcon": "ट्रे आइकन दिखाएँ",
+ "startMinimizedToTray": "ट्रे में मिनिमाइज़ होकर शुरू करें",
+ "requiresTrayIcon": "ट्रे आइकन आवश्यक है।",
+ "syncComplete": "सिंक पूरा हुआ।",
+ "syncFailed": "सिंक विफल: {error}",
+ "notifySyncFailures": "सिंक विफल होने की सूचनाएँ",
+ "notifyConflicts": "टकराव की सूचनाएँ",
+ "notifyDueToday": "आज देय कार्यों की सूचनाएँ",
+ "eventReminders": "ईवेंट रिमाइंडर",
+ "taskReminders": "कार्य रिमाइंडर",
+ "notificationDetailLevel": "सूचनाओं के विवरण का स्तर",
+ "notificationDetailPrivate": "निजी",
+ "notificationDetailNormal": "सामान्य",
+ "quietHours": "शांत समय",
+ "quietHoursDescription": "इस अवधि के दौरान सूचनाएँ रोकें।",
+ "quietHoursStart": "शांत समय की शुरुआत",
+ "quietHoursEnd": "शांत समय की समाप्ति",
+ "notifications": "सूचनाएँ",
+ "appearance": "दिखावट",
+ "theme": "थीम",
+ "themeSystem": "सिस्टम",
+ "themeLight": "हल्की",
+ "themeDark": "गहरी",
+ "themeFamily": "थीम परिवार",
+ "themeFamilyYaru": "Ubuntu की मूल थीम (Yaru)",
+ "localization": "स्थानीयकरण",
+ "currentLocale": "मौजूदा भाषा और क्षेत्रीय सेटिंग",
+ "privacy": "गोपनीयता",
+ "redactTaskContentInDiagnostics": "निदान में कार्य सामग्री छिपाएँ",
+ "developerDiagnostics": "डेवलपर निदान",
+ "diagnostics": "निदान",
+ "apiInspectorDisabled": "API इंस्पेक्टर दिखाएँ",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "डिस्कवरी संशोधन: {revision}",
+ "implementedMethods": "लागू की गई विधियाँ",
+ "supportsTasksScopes": "tasks और tasks.readonly स्कोप समर्थित हैं",
+ "requiresTasksScope": "tasks स्कोप आवश्यक है",
+ "blockedPendingOperations": "अवरुद्ध लंबित कार्रवाइयाँ",
+ "signInToInspectPendingOperations": "लंबित कार्रवाइयाँ देखने के लिए साइन इन करें।",
+ "noBlockedPendingOperations": "कोई अवरुद्ध लंबित कार्रवाई नहीं है।",
+ "operationActions": "कार्रवाई के विकल्प",
+ "pendingOpListId": "सूची={id}",
+ "pendingOpTaskId": "कार्य={id}",
+ "pendingOpAttempts": "प्रयास={count}",
+ "retry": "फिर से कोशिश करें",
+ "discard": "खारिज करें",
+ "discardChangesAction": "बदलाव छोड़ें",
+ "discardChanges": "बदलाव खारिज करें?",
+ "discardChangesConfirmation": "इससे इस कार्य में किए गए सहेजे न गए बदलाव खारिज हो जाएँगे।",
+ "retryCompleted": "दोबारा प्रयास पूरा हुआ।",
+ "discardPendingOperation": "लंबित कार्रवाई खारिज करें?",
+ "discardPendingOperationConfirmation": "इससे अवरुद्ध स्थानीय कार्रवाई हट जाती है। अगला सिंक Google Tasks से डेटा रीफ़्रेश करेगा।",
+ "pendingOperationDiscarded": "लंबित कार्रवाई खारिज कर दी गई।",
+ "syncFailureNotificationTitle": "BusyMax सिंक विफल",
+ "syncFailureNotificationBody": "बैकग्राउंड सिंक विफल हुआ। {message}",
+ "conflictNotificationTitle": "BusyMax सिंक में टकराव",
+ "conflictNotificationBody": "एक लंबित स्थानीय बदलाव अवरुद्ध हो गया। {summary}",
+ "dueTodayNotificationTitle": "आज देय कार्य",
+ "dueTodayNotificationBody": "{count, plural, =1{आज एक कार्य देय है।} other{आज {count} कार्य देय हैं।}}",
+ "eventReminderNotificationTitle": "ईवेंट रिमाइंडर",
+ "taskReminderNotificationTitle": "कार्य रिमाइंडर",
+ "eventReminderNotificationBody": "ईवेंट जल्द शुरू होगा।",
+ "taskReminderNotificationBody": "कार्य जल्द देय है।",
+ "notificationOpenAction": "खोलें",
+ "notificationDetailsHidden": "गोपनीयता सेटिंग्स के कारण विवरण छिपे हुए हैं।",
+ "previousMonth": "पिछला महीना",
+ "nextMonth": "अगला महीना",
+ "openMonthView": "महीने का दृश्य खोलें",
+ "previousYear": "पिछला वर्ष",
+ "nextYear": "अगला वर्ष",
+ "openYearView": "वर्ष का दृश्य खोलें",
+ "weekNumberTooltip": "सप्ताह {number}",
+ "resizeAllDayPanel": "पूरे दिन वाले पैनल का आकार बदलें",
+ "scheduleItemCount": "{count, plural, =1{1 आइटम} other{{count} आइटम}}",
+ "readOnlyCalendar": "यह कैलेंडर केवल पढ़ने योग्य है।",
+ "selectTimeZone": "समय क्षेत्र चुनें",
+ "searchLocations": "स्थान खोजें",
+ "noLocationsFound": "कोई स्थान नहीं मिला",
+ "deleteCalendarConfirmation": "“{title}” मिटाएँ?"
+}
diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb
new file mode 100644
index 0000000..f486c22
--- /dev/null
+++ b/lib/l10n/app_it.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "it",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Collega gli account Google e Microsoft per sincronizzare calendari e attività.",
+ "googlePermissionsConsentNotice": "Nella schermata delle autorizzazioni di Google, seleziona sia l’autorizzazione per il calendario sia quella per le attività.",
+ "googlePermissionsRequiredRetry": "Sono necessarie le autorizzazioni per Google Calendar e Google Tasks. Riprova e seleziona entrambe le caselle.",
+ "finishSetup": "Completa la configurazione",
+ "continueSetup": "Continua",
+ "onboardingSetupTitle": "Configura BusyMax",
+ "onboardingAccountsStepTitle": "Collega gli account",
+ "onboardingAccountsStepDescription": "Aggiungi tutti gli account Google e Microsoft che vuoi utilizzare. BusyMax sincronizza calendari, eventi, elenchi di attività e attività di ogni account.",
+ "onboardingPreferencesStepTitle": "Scegli le impostazioni di sistema",
+ "onboardingPreferencesStepDescription": "Prima di aprire l’agenda, configura il comportamento sul desktop, i promemoria, il livello di dettaglio delle notifiche e l’aspetto.",
+ "signInWithGoogle": "Accedi con Google",
+ "signInWithMicrosoft": "Accedi con Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "Questo servizio non è configurato.",
+ "waitingForGoogleSignIn": "In attesa dell’accesso a Google...",
+ "waitingForMicrosoftSignIn": "In attesa dell’accesso a Microsoft...",
+ "microsoftSignInNotConfigured": "L’accesso a Microsoft non è configurato. Imposta MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Annulla",
+ "close": "Chiudi",
+ "exit": "Esci",
+ "options": "Opzioni",
+ "hide": "Nascondi",
+ "show": "Mostra",
+ "export": "Esporta",
+ "save": "Salva",
+ "settings": "Impostazioni",
+ "all": "Tutto",
+ "calendarEvents": "Eventi",
+ "calendarTasks": "Attività",
+ "calendar": "Calendario",
+ "calendars": "Calendari",
+ "newEvent": "Nuovo evento",
+ "refreshCalendar": "Aggiorna calendario",
+ "openInProvider": "Apri nel servizio",
+ "hideFromSchedule": "Nascondi dall’agenda",
+ "showInSchedule": "Mostra nell’agenda",
+ "noCalendarsSynced": "Nessun calendario ancora sincronizzato.",
+ "allDay": "Tutto il giorno",
+ "moreItems": "+{count} in più",
+ "noEventsOrTasks": "Nessun evento o attività",
+ "scheduleLoading": "Caricamento agenda...",
+ "scheduleUnavailable": "Agenda non disponibile",
+ "scheduleNoSources": "Nessun calendario o elenco di attività visibile",
+ "scheduleNoSourcesDescription": "Scegli cosa mostrare nelle Impostazioni, quindi aggiorna l’agenda.",
+ "scheduleSignInRequired": "Collega un account",
+ "scheduleSignInDescription": "Accedi per sincronizzare calendari e attività.",
+ "scheduleNoSearchResults": "Nessun evento o attività corrispondente",
+ "scheduleNoSearchResultsDescription": "Prova una ricerca diversa o cancella i filtri attuali.",
+ "refresh": "Aggiorna",
+ "trayOpenBusyMax": "Apri BusyMax",
+ "agendaLoadMoreOverdue": "Carica altre attività scadute",
+ "agendaLoadMoreNoDate": "Carica altre attività senza data",
+ "viewDay": "Giorno",
+ "viewWeek": "Settimana",
+ "viewMonth": "Mese",
+ "viewYear": "Anno",
+ "viewAgenda": "Agenda",
+ "scheduleSettings": "Agenda",
+ "scheduleDisplaySettings": "Visualizzazione agenda",
+ "scheduleDisplayHoursDescription": "Le viste Giorno e Settimana mostrano inizialmente questo intervallo orario. Gli elementi precedenti o successivi lo estendono quando necessario.",
+ "scheduleDayStartsAt": "Inizio giornata",
+ "scheduleDayEndsAt": "Fine giornata",
+ "sourceCalendar": "Calendario",
+ "sourceTaskList": "Elenco di attività",
+ "createChoiceTitle": "Crea",
+ "createEventAtTime": "Evento",
+ "createTaskAtDate": "Attività",
+ "editEvent": "Modifica evento",
+ "eventTitle": "Titolo dell’evento",
+ "location": "Luogo",
+ "timeSlot": "Fascia oraria",
+ "startDateTime": "Data/ora di inizio",
+ "endDateTime": "Data/ora di fine",
+ "doesNotRepeat": "Non si ripete",
+ "defaultReminder": "Promemoria predefinito",
+ "guests": "Invitati",
+ "noGuests": "Nessun invitato",
+ "description": "Descrizione",
+ "availabilityShowAs": "Disponibilità / Mostra come",
+ "busy": "Occupato",
+ "visibility": "Visibilità",
+ "defaultVisibility": "Visibilità predefinita",
+ "conference": "Conferenza",
+ "noConference": "Nessuna conferenza",
+ "providerCalendar": "Calendario del servizio",
+ "formatBoldShortLabel": "G",
+ "formatBoldTooltip": "Grassetto",
+ "formatItalicShortLabel": "C",
+ "formatItalicTooltip": "Corsivo",
+ "formatUnderlineShortLabel": "S",
+ "formatUnderlineTooltip": "Sottolineato",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minuto prima} other{{minutes} minuti prima}}",
+ "reminderAtStart": "All’inizio",
+ "reminderHoursBefore": "{hours, plural, =1{1 ora prima} other{{hours} ore prima}}",
+ "reminderDaysBefore": "{days, plural, =1{1 giorno prima} other{{days} giorni prima}}",
+ "availabilityFree": "Libero",
+ "availabilityTentative": "Provvisorio",
+ "availabilityOutOfOffice": "Fuori sede",
+ "availabilityWorkingElsewhere": "Lavora altrove",
+ "visibilityDefault": "Predefinita",
+ "visibilityPublic": "Pubblica",
+ "visibilityPrivate": "Privata",
+ "visibilityConfidential": "Riservata",
+ "sensitivityNormal": "Normale",
+ "sensitivityPersonal": "Personale",
+ "tasks": "Attività",
+ "allTasks": "Tutte le attività",
+ "tasksInList": "Attività in {title}",
+ "taskLists": "Elenchi di attività",
+ "navigation": "Navigazione",
+ "mainMenu": "Menu principale",
+ "keyboardShortcuts": "Scorciatoie da tastiera",
+ "shortcutGroupGeneral": "Generali",
+ "shortcutKeyboardShortcutsDescription": "Mostra questo elenco di scorciatoie",
+ "shortcutGroupNavigation": "Navigazione",
+ "shortcutNextPeriod": "Periodo successivo",
+ "shortcutNextPeriodDescription": "Settimana successiva nella vista settimanale, mese successivo nella vista mensile e così via",
+ "shortcutPreviousPeriod": "Periodo precedente",
+ "shortcutPreviousPeriodDescription": "Settimana precedente nella vista settimanale, mese precedente nella vista mensile e così via",
+ "shortcutJumpToToday": "Vai alla data odierna",
+ "shortcutGroupView": "Vista",
+ "shortcutDayView": "Vista giornaliera",
+ "shortcutWeekView": "Vista settimanale",
+ "shortcutMonthView": "Vista mensile",
+ "shortcutYearView": "Vista annuale",
+ "shortcutAgendaView": "Vista agenda",
+ "shortcutGroupCreateAndEdit": "Creazione e modifica",
+ "shortcutSaveItem": "Salva evento o attività",
+ "shortcutDeleteItem": "Elimina evento o attività",
+ "shortcutGroupTaskEditing": "Modifica delle attività",
+ "shortcutCancelEditing": "Annulla modifica",
+ "shortcutCancelEditingDescription": "Chiudi la modifica o i dettagli dell’attività",
+ "aboutBusyMax": "Informazioni su BusyMax",
+ "aboutBusyMaxDescription": "Calendario e attività",
+ "license": "Licenza",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Sito web",
+ "sourceCode": "Codice sorgente",
+ "reportAnIssue": "Segnala un problema",
+ "sendFeedback": "Invia feedback",
+ "feedbackSubmit": "Invia",
+ "feedbackCategory": "Categoria",
+ "feedbackSelectCategory": "Seleziona una categoria",
+ "feedbackCategoryProblem": "Problema o errore",
+ "feedbackCategoryFeature": "Richiesta di funzionalità",
+ "feedbackCategoryPrivacySecurity": "Problema di privacy o sicurezza",
+ "feedbackCategoryUsability": "Problema di usabilità",
+ "feedbackCategoryOther": "Altro",
+ "feedbackSubject": "Oggetto",
+ "feedbackDetailedMessage": "Messaggio dettagliato",
+ "feedbackReplyEmail": "Indirizzo email per la risposta (facoltativo)",
+ "feedbackIncludeTechnicalDetails": "Includi dettagli tecnici",
+ "feedbackTechnicalDetailsDisclosure": "Aggiunge soltanto la versione del sistema operativo Linux e le impostazioni locali dell’applicazione. Non vengono inclusi log, dati degli account, nomi di file o altre informazioni diagnostiche.",
+ "feedbackCategoryRequired": "Seleziona una categoria.",
+ "feedbackSubjectLengthError": "L’oggetto deve contenere da 3 a 120 caratteri.",
+ "feedbackMessageLengthError": "Il messaggio deve contenere da 10 a 5.000 caratteri.",
+ "feedbackInvalidEmail": "Inserisci un indirizzo email valido.",
+ "feedbackConnectionError": "Impossibile connettersi a BusyStack. Controlla la connessione e riprova.",
+ "feedbackTimeoutError": "La richiesta ha superato il tempo limite. Il feedback non è stato cancellato; riprova.",
+ "feedbackRateLimitedError": "Sono stati inviati troppi feedback da questa rete. Attendi e riprova.",
+ "feedbackRejectedError": "Il server ha rifiutato l’invio. Controlla i campi e riprova.",
+ "feedbackServerError": "BusyStack non può accettare il feedback in questo momento. Il feedback non è stato cancellato; riprova.",
+ "feedbackSuccess": "Feedback inviato. Riferimento: {id}",
+ "toggleSidebar": "Mostra o nascondi la barra laterale",
+ "showSidebar": "Mostra il pannello laterale",
+ "hideSidebar": "Nascondi il pannello laterale",
+ "accounts": "Account",
+ "currentAccount": "Account attuale",
+ "switchAccount": "Cambia account",
+ "addGoogleAccount": "Aggiungi account Google",
+ "addMicrosoftAccount": "Aggiungi account Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Accesso effettuato",
+ "removeAccount": "Rimuovi account…",
+ "removingAccount": "Rimozione account…",
+ "removeAccountDescription": "Interrompi la sincronizzazione e rimuovi i dati di questo account dal dispositivo.",
+ "removeAccountTitle": "Rimuovere {account} da BusyMax?",
+ "removeAccountConfirmation": "Questa azione elimina dal dispositivo attività, calendari, eventi e promemoria memorizzati nella cache, oltre alle modifiche offline in sospeso. Le modifiche non sincronizzate andranno perse. Non verrà eliminato nulla da Google o Microsoft.",
+ "revokeGoogleAccess": "Revoca anche l’accesso di BusyMax a questo account Google",
+ "revokeGoogleAccessDescription": "Dovrai concedere nuovamente l’accesso prima di riconnetterti.",
+ "removeAccountAction": "Rimuovi account",
+ "removeAccountFailed": "Impossibile completare la rimozione dell’account. Riprova.",
+ "accountRemovedGoogleRevokeFailed": "L’account è stato rimosso da questo dispositivo, ma BusyMax non è riuscito a revocare il proprio accesso a Google. Puoi revocarlo dal tuo account Google.",
+ "newList": "Nuovo elenco",
+ "signInToViewTaskLists": "Accedi per visualizzare gli elenchi di attività.",
+ "noTaskListsSynced": "Nessun elenco di attività ancora sincronizzato.",
+ "listActions": "Azioni dell’elenco",
+ "rename": "Rinomina",
+ "delete": "Elimina",
+ "renameList": "Rinomina elenco",
+ "deleteList": "Elimina elenco",
+ "builtInMicrosoftList": "Integrato",
+ "builtInMicrosoftListCannotRenameDelete": "Gli elenchi integrati di Microsoft To Do non possono essere rinominati o eliminati.",
+ "deleteListConfirmation": "Eliminare «{title}» da Google Tasks?",
+ "deleteEvent": "Elimina evento",
+ "title": "Titolo",
+ "create": "Crea",
+ "newTask": "Nuova attività",
+ "clearCompleted": "Cancella attività completate",
+ "refreshList": "Aggiorna elenco",
+ "refreshAll": "Aggiorna tutto",
+ "listRefreshed": "Elenco aggiornato.",
+ "allTasksRefreshed": "Tutti gli account sono stati aggiornati.",
+ "exportedFile": "Esportato in {path}",
+ "exportFailed": "Esportazione non riuscita: {error}",
+ "refreshFailed": "Aggiornamento non riuscito: {error}",
+ "selectOrCreateTaskList": "Seleziona o crea un elenco di attività per iniziare.",
+ "signInToViewTasks": "Accedi per visualizzare le attività.",
+ "noTasks": "Nessuna attività.",
+ "noTasksYet": "Ancora nessuna attività",
+ "noTasksYetMessage": "Crea un’attività o aggiorna gli account per iniziare.",
+ "noTasksInList": "Nessuna attività in questo elenco.",
+ "overdue": "Scadute",
+ "today": "Oggi",
+ "tomorrow": "Domani",
+ "upcoming": "In arrivo",
+ "noDate": "Senza data",
+ "completed": "Completate",
+ "duePrefix": "Scadenza: {date}",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "Dettagli attività",
+ "editTask": "Modifica attività",
+ "noTaskSelected": "Nessuna attività selezionata.",
+ "noTaskSelectedHelper": "Seleziona un’attività per visualizzarne e modificarne i dettagli.",
+ "taskUnavailable": "Attività non disponibile.",
+ "signInToEditTasks": "Accedi per modificare le attività.",
+ "refreshTask": "Aggiorna attività",
+ "primarySection": "Principale",
+ "statusSection": "Stato",
+ "openStatus": "Aperta",
+ "doneStatus": "Completata",
+ "notes": "Note",
+ "dueDate": "Data di scadenza",
+ "clearDueDate": "Cancella data di scadenza",
+ "dueTime": "Ora di scadenza",
+ "startDate": "Data di inizio",
+ "startTime": "Ora di inizio",
+ "endDate": "Data di fine",
+ "endTime": "Ora di fine",
+ "reminderDate": "Data del promemoria",
+ "reminderTime": "Ora del promemoria",
+ "reminder": "Promemoria",
+ "addReminder": "Aggiungi promemoria",
+ "addGuest": "Aggiungi invitato",
+ "addGuestEmail": "Aggiungi email dell’invitato",
+ "removeReminder": "Rimuovi promemoria",
+ "off": "Disattivato",
+ "repeat": "Ripeti",
+ "repeatNone": "Nessuna ripetizione",
+ "noneValue": "Nessuno",
+ "repeatDaily": "Ogni giorno",
+ "repeatWeekly": "Ogni settimana",
+ "repeatMonthly": "Ogni mese",
+ "repeatYearly": "Ogni anno",
+ "importance": "Importanza",
+ "importanceLow": "Bassa",
+ "importanceNormal": "Normale",
+ "importanceHigh": "Alta",
+ "categories": "Categorie",
+ "scheduleSection": "Programmazione",
+ "dueGroup": "Scadenza",
+ "startGroup": "Inizio",
+ "reminderGroup": "Promemoria",
+ "organizationSection": "Organizzazione",
+ "actionsSection": "Azioni",
+ "advancedSection": "Avanzate",
+ "addCategory": "Aggiungi categoria",
+ "list": "Elenco",
+ "microsoftMoveUnsupported": "In questa versione non è possibile spostare attività tra elenchi negli account Microsoft To Do.",
+ "createSubtask": "Crea sottoattività",
+ "moveToTop": "Sposta in cima",
+ "deleteTask": "Elimina attività",
+ "newSubtask": "Nuova sottoattività",
+ "deleteTaskConfirmation": "Eliminare «{title}» da Google Tasks?",
+ "metadata": "Metadati",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "Aggiornato",
+ "parent": "Attività principale",
+ "position": "Posizione",
+ "webLink": "Collegamento web",
+ "assignment": "Assegnazione",
+ "localState": "Stato locale",
+ "pendingSync": "Sincronizzazione in sospeso",
+ "synced": "Sincronizzato",
+ "account": "Account",
+ "sync": "Sincronizzazione",
+ "manualFullSync": "Sincronizzazione completa manuale",
+ "runInBackgroundWhenClosed": "Continua a funzionare quando la finestra è chiusa",
+ "showTrayIcon": "Mostra icona nell’area di notifica",
+ "startMinimizedToTray": "Avvia ridotto a icona nell’area di notifica",
+ "requiresTrayIcon": "Richiede l’icona nell’area di notifica.",
+ "syncComplete": "Sincronizzazione completata.",
+ "syncFailed": "Sincronizzazione non riuscita: {error}",
+ "notifySyncFailures": "Notifiche in caso di errore di sincronizzazione",
+ "notifyConflicts": "Notifiche in caso di conflitto",
+ "notifyDueToday": "Notifiche per attività in scadenza oggi",
+ "eventReminders": "Promemoria degli eventi",
+ "taskReminders": "Promemoria delle attività",
+ "notificationDetailLevel": "Livello di dettaglio delle notifiche",
+ "notificationDetailPrivate": "Privato",
+ "notificationDetailNormal": "Normale",
+ "quietHours": "Ore di silenzio",
+ "quietHoursDescription": "Sospendi le notifiche durante questo periodo.",
+ "quietHoursStart": "Inizio delle ore di silenzio",
+ "quietHoursEnd": "Fine delle ore di silenzio",
+ "notifications": "Notifiche",
+ "appearance": "Aspetto",
+ "theme": "Tema",
+ "themeSystem": "Sistema",
+ "themeLight": "Chiaro",
+ "themeDark": "Scuro",
+ "themeFamily": "Famiglia di temi",
+ "themeFamilyYaru": "Tema nativo di Ubuntu (Yaru)",
+ "localization": "Lingua e area geografica",
+ "currentLocale": "Impostazioni locali correnti",
+ "privacy": "Privacy",
+ "redactTaskContentInDiagnostics": "Nascondi il contenuto delle attività nelle informazioni diagnostiche",
+ "developerDiagnostics": "Diagnostica per sviluppatori",
+ "diagnostics": "Diagnostica",
+ "apiInspectorDisabled": "Mostra l’ispettore API",
+ "googleTasksApi": "API Google Tasks",
+ "discoveryRevision": "Revisione Discovery: {revision}",
+ "implementedMethods": "Metodi implementati",
+ "supportsTasksScopes": "Supporta gli ambiti tasks e tasks.readonly",
+ "requiresTasksScope": "Richiede l’ambito tasks",
+ "blockedPendingOperations": "Operazioni in sospeso bloccate",
+ "signInToInspectPendingOperations": "Accedi per esaminare le operazioni in sospeso.",
+ "noBlockedPendingOperations": "Nessuna operazione in sospeso bloccata.",
+ "operationActions": "Azioni dell’operazione",
+ "pendingOpListId": "elenco={id}",
+ "pendingOpTaskId": "attività={id}",
+ "pendingOpAttempts": "tentativi={count}",
+ "retry": "Riprova",
+ "discard": "Scarta",
+ "discardChangesAction": "Scarta",
+ "discardChanges": "Scartare le modifiche?",
+ "discardChangesConfirmation": "Questa azione scarta le modifiche non salvate dell’attività.",
+ "retryCompleted": "Nuovo tentativo completato.",
+ "discardPendingOperation": "Scartare l’operazione in sospeso?",
+ "discardPendingOperationConfirmation": "Questa azione rimuove l’operazione locale bloccata. Alla prossima sincronizzazione, i dati verranno ricaricati da Google Tasks.",
+ "pendingOperationDiscarded": "Operazione in sospeso scartata.",
+ "syncFailureNotificationTitle": "Sincronizzazione di BusyMax non riuscita",
+ "syncFailureNotificationBody": "Sincronizzazione in background non riuscita. {message}",
+ "conflictNotificationTitle": "Conflitto di sincronizzazione di BusyMax",
+ "conflictNotificationBody": "Una modifica locale in sospeso è stata bloccata. {summary}",
+ "dueTodayNotificationTitle": "Attività in scadenza oggi",
+ "dueTodayNotificationBody": "{count, plural, =1{Un’attività scade oggi.} other{{count} attività scadono oggi.}}",
+ "eventReminderNotificationTitle": "Promemoria evento",
+ "taskReminderNotificationTitle": "Promemoria attività",
+ "eventReminderNotificationBody": "L’evento inizierà a breve.",
+ "taskReminderNotificationBody": "L’attività scadrà a breve.",
+ "notificationOpenAction": "Apri",
+ "notificationDetailsHidden": "I dettagli sono nascosti dalle impostazioni sulla privacy.",
+ "previousMonth": "Mese precedente",
+ "nextMonth": "Mese successivo",
+ "openMonthView": "Apri vista mensile",
+ "previousYear": "Anno precedente",
+ "nextYear": "Anno successivo",
+ "openYearView": "Apri vista annuale",
+ "weekNumberTooltip": "Settimana {number}",
+ "resizeAllDayPanel": "Ridimensiona il pannello per l’intera giornata",
+ "scheduleItemCount": "{count, plural, =1{1 elemento} other{{count} elementi}}",
+ "readOnlyCalendar": "Questo calendario è di sola lettura.",
+ "selectTimeZone": "Seleziona fuso orario",
+ "searchLocations": "Cerca luoghi",
+ "noLocationsFound": "Nessun luogo trovato",
+ "deleteCalendarConfirmation": "Eliminare «{title}»?"
+}
diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb
new file mode 100644
index 0000000..06b002e
--- /dev/null
+++ b/lib/l10n/app_ja.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "ja",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Google と Microsoft のアカウントを接続して、カレンダーとタスクを同期します。",
+ "googlePermissionsConsentNotice": "Google の権限画面で、カレンダーとタスクの両方の権限を選択してください。",
+ "googlePermissionsRequiredRetry": "Google カレンダーと Google Tasks の権限が必要です。もう一度試して、両方のチェックボックスを選択してください。",
+ "finishSetup": "セットアップを完了",
+ "continueSetup": "続行",
+ "onboardingSetupTitle": "BusyMax をセットアップ",
+ "onboardingAccountsStepTitle": "アカウントを接続",
+ "onboardingAccountsStepDescription": "使用するすべての Google アカウントと Microsoft アカウントを追加してください。BusyMax は各アカウントのカレンダー、予定、タスクリスト、タスクを同期します。",
+ "onboardingPreferencesStepTitle": "システム設定を選択",
+ "onboardingPreferencesStepDescription": "スケジュールを開く前に、デスクトップでの動作、リマインダー、通知の詳細度、外観を設定します。",
+ "signInWithGoogle": "Google でサインイン",
+ "signInWithMicrosoft": "Microsoft でサインイン",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "このプロバイダーは設定されていません。",
+ "waitingForGoogleSignIn": "Google のサインインを待機しています...",
+ "waitingForMicrosoftSignIn": "Microsoft のサインインを待機しています...",
+ "microsoftSignInNotConfigured": "Microsoft のサインインが設定されていません。MICROSOFT_OAUTH_CLIENT_ID を設定してください。",
+ "cancel": "キャンセル",
+ "close": "閉じる",
+ "exit": "終了",
+ "options": "オプション",
+ "hide": "非表示",
+ "show": "表示",
+ "export": "エクスポート",
+ "save": "保存",
+ "settings": "設定",
+ "all": "すべて",
+ "calendarEvents": "予定",
+ "calendarTasks": "タスク",
+ "calendar": "カレンダー",
+ "calendars": "カレンダー",
+ "newEvent": "新しい予定",
+ "refreshCalendar": "カレンダーを更新",
+ "openInProvider": "サービスで開く",
+ "hideFromSchedule": "スケジュールから非表示",
+ "showInSchedule": "スケジュールに表示",
+ "noCalendarsSynced": "同期済みのカレンダーはまだありません。",
+ "allDay": "終日",
+ "moreItems": "他 {count} 件",
+ "noEventsOrTasks": "予定またはタスクはありません",
+ "scheduleLoading": "スケジュールを読み込んでいます...",
+ "scheduleUnavailable": "スケジュールを利用できません",
+ "scheduleNoSources": "表示できるカレンダーまたはタスクリストがありません",
+ "scheduleNoSourcesDescription": "設定で表示する項目を選択してから、更新してください。",
+ "scheduleSignInRequired": "アカウントを接続",
+ "scheduleSignInDescription": "カレンダーとタスクを同期するにはサインインしてください。",
+ "scheduleNoSearchResults": "一致する予定またはタスクはありません",
+ "scheduleNoSearchResultsDescription": "別の条件で検索するか、現在のフィルターを解除してください。",
+ "refresh": "更新",
+ "trayOpenBusyMax": "BusyMax を開く",
+ "agendaLoadMoreOverdue": "期限切れのタスクをさらに読み込む",
+ "agendaLoadMoreNoDate": "日付のないタスクをさらに読み込む",
+ "viewDay": "日",
+ "viewWeek": "週",
+ "viewMonth": "月",
+ "viewYear": "年",
+ "viewAgenda": "予定一覧",
+ "scheduleSettings": "スケジュール",
+ "scheduleDisplaySettings": "スケジュール表示",
+ "scheduleDisplayHoursDescription": "日表示と週表示では、最初にこの時間範囲が表示されます。必要に応じて、この範囲より前または後の項目も表示されるように範囲が広がります。",
+ "scheduleDayStartsAt": "一日の開始時刻",
+ "scheduleDayEndsAt": "一日の終了時刻",
+ "sourceCalendar": "カレンダー",
+ "sourceTaskList": "タスクリスト",
+ "createChoiceTitle": "作成",
+ "createEventAtTime": "予定",
+ "createTaskAtDate": "タスク",
+ "editEvent": "予定を編集",
+ "eventTitle": "予定のタイトル",
+ "location": "場所",
+ "timeSlot": "時間帯",
+ "startDateTime": "開始日時",
+ "endDateTime": "終了日時",
+ "doesNotRepeat": "繰り返さない",
+ "defaultReminder": "デフォルトのリマインダー",
+ "guests": "ゲスト",
+ "noGuests": "ゲストなし",
+ "description": "説明",
+ "availabilityShowAs": "空き時間情報 / 表示方法",
+ "busy": "予定あり",
+ "visibility": "公開設定",
+ "defaultVisibility": "デフォルトの公開設定",
+ "conference": "会議",
+ "noConference": "会議なし",
+ "providerCalendar": "プロバイダーのカレンダー",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "太字",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "斜体",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "下線",
+ "reminderMinutesBefore": "{minutes, plural, =1{1分前} other{{minutes}分前}}",
+ "reminderAtStart": "開始時",
+ "reminderHoursBefore": "{hours, plural, =1{1時間前} other{{hours}時間前}}",
+ "reminderDaysBefore": "{days, plural, =1{1日前} other{{days}日前}}",
+ "availabilityFree": "空き時間",
+ "availabilityTentative": "仮の予定",
+ "availabilityOutOfOffice": "外出中",
+ "availabilityWorkingElsewhere": "別の場所で勤務",
+ "visibilityDefault": "デフォルト",
+ "visibilityPublic": "一般公開",
+ "visibilityPrivate": "非公開",
+ "visibilityConfidential": "機密",
+ "sensitivityNormal": "標準",
+ "sensitivityPersonal": "個人用",
+ "tasks": "タスク",
+ "allTasks": "すべてのタスク",
+ "tasksInList": "{title} のタスク",
+ "taskLists": "タスクリスト",
+ "navigation": "ナビゲーション",
+ "mainMenu": "メインメニュー",
+ "keyboardShortcuts": "キーボードショートカット",
+ "shortcutGroupGeneral": "全般",
+ "shortcutKeyboardShortcutsDescription": "このショートカット一覧を表示",
+ "shortcutGroupNavigation": "ナビゲーション",
+ "shortcutNextPeriod": "次の期間",
+ "shortcutNextPeriodDescription": "週表示では次の週、月表示では次の月というように移動します",
+ "shortcutPreviousPeriod": "前の期間",
+ "shortcutPreviousPeriodDescription": "週表示では前の週、月表示では前の月というように移動します",
+ "shortcutJumpToToday": "今日に移動",
+ "shortcutGroupView": "表示",
+ "shortcutDayView": "日表示",
+ "shortcutWeekView": "週表示",
+ "shortcutMonthView": "月表示",
+ "shortcutYearView": "年表示",
+ "shortcutAgendaView": "予定一覧表示",
+ "shortcutGroupCreateAndEdit": "作成と編集",
+ "shortcutSaveItem": "予定またはタスクを保存",
+ "shortcutDeleteItem": "予定またはタスクを削除",
+ "shortcutGroupTaskEditing": "タスクの編集",
+ "shortcutCancelEditing": "編集をキャンセル",
+ "shortcutCancelEditingDescription": "タスクの編集または詳細を閉じる",
+ "aboutBusyMax": "BusyMax について",
+ "aboutBusyMaxDescription": "カレンダーとタスク",
+ "license": "ライセンス",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "ウェブサイト",
+ "sourceCode": "ソースコード",
+ "reportAnIssue": "問題を報告",
+ "sendFeedback": "フィードバックを送信",
+ "feedbackSubmit": "送信",
+ "feedbackCategory": "カテゴリー",
+ "feedbackSelectCategory": "カテゴリーを選択",
+ "feedbackCategoryProblem": "問題またはバグ",
+ "feedbackCategoryFeature": "機能のリクエスト",
+ "feedbackCategoryPrivacySecurity": "プライバシーまたはセキュリティに関する懸念",
+ "feedbackCategoryUsability": "使いやすさに関する懸念",
+ "feedbackCategoryOther": "その他",
+ "feedbackSubject": "件名",
+ "feedbackDetailedMessage": "詳しい内容",
+ "feedbackReplyEmail": "返信先メールアドレス(任意)",
+ "feedbackIncludeTechnicalDetails": "技術情報を含める",
+ "feedbackTechnicalDetailsDisclosure": "Linux オペレーティングシステムのバージョンとアプリのロケールのみが追加されます。ログ、アカウントデータ、ファイル名、その他の診断情報は含まれません。",
+ "feedbackCategoryRequired": "カテゴリーを選択してください。",
+ "feedbackSubjectLengthError": "件名は3文字以上120文字以下にしてください。",
+ "feedbackMessageLengthError": "メッセージは10文字以上5,000文字以下にしてください。",
+ "feedbackInvalidEmail": "有効なメールアドレスを入力してください。",
+ "feedbackConnectionError": "BusyStack に接続できませんでした。接続を確認して、もう一度お試しください。",
+ "feedbackTimeoutError": "リクエストがタイムアウトしました。フィードバックは消去されていません。もう一度お試しください。",
+ "feedbackRateLimitedError": "このネットワークから送信されたフィードバックが多すぎます。しばらく待ってから、もう一度お試しください。",
+ "feedbackRejectedError": "サーバーが送信を拒否しました。入力内容を確認して、もう一度お試しください。",
+ "feedbackServerError": "現在、BusyStack はフィードバックを受け付けられません。フィードバックは消去されていません。もう一度お試しください。",
+ "feedbackSuccess": "フィードバックを送信しました。参照番号: {id}",
+ "toggleSidebar": "サイドバーの表示を切り替え",
+ "showSidebar": "サイドバーパネルを表示",
+ "hideSidebar": "サイドバーパネルを非表示",
+ "accounts": "アカウント",
+ "currentAccount": "現在のアカウント",
+ "switchAccount": "アカウントを切り替え",
+ "addGoogleAccount": "Google アカウントを追加",
+ "addMicrosoftAccount": "Microsoft アカウントを追加",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "サインイン済み",
+ "removeAccount": "アカウントを削除…",
+ "removingAccount": "アカウントを削除しています…",
+ "removeAccountDescription": "同期を停止し、このアカウントのデータをこのデバイスから削除します。",
+ "removeAccountTitle": "BusyMax から {account} を削除しますか?",
+ "removeAccountConfirmation": "このデバイスにキャッシュされたタスク、カレンダー、予定、リマインダー、保留中のオフライン変更が削除されます。同期されていない変更は失われます。Google または Microsoft から削除されるデータはありません。",
+ "revokeGoogleAccess": "この Google アカウントへの BusyMax のアクセス権も取り消す",
+ "revokeGoogleAccessDescription": "再接続する前に、もう一度アクセスを許可する必要があります。",
+ "removeAccountAction": "アカウントを削除",
+ "removeAccountFailed": "アカウントの削除を完了できませんでした。もう一度お試しください。",
+ "accountRemovedGoogleRevokeFailed": "アカウントはこのデバイスから削除されましたが、BusyMax は Google アカウントへのアクセス権を取り消せませんでした。Google アカウントの設定から取り消すことができます。",
+ "newList": "新しいリスト",
+ "signInToViewTaskLists": "タスクリストを表示するにはサインインしてください。",
+ "noTaskListsSynced": "同期済みのタスクリストはまだありません。",
+ "listActions": "リストの操作",
+ "rename": "名前を変更",
+ "delete": "削除",
+ "renameList": "リスト名を変更",
+ "deleteList": "リストを削除",
+ "builtInMicrosoftList": "組み込み",
+ "builtInMicrosoftListCannotRenameDelete": "Microsoft To Do の組み込みリストは、名前の変更や削除ができません。",
+ "deleteListConfirmation": "Google Tasks から「{title}」を削除しますか?",
+ "deleteEvent": "予定を削除",
+ "title": "タイトル",
+ "create": "作成",
+ "newTask": "新しいタスク",
+ "clearCompleted": "完了済みを消去",
+ "refreshList": "リストを更新",
+ "refreshAll": "すべて更新",
+ "listRefreshed": "リストを更新しました。",
+ "allTasksRefreshed": "すべてのアカウントを更新しました。",
+ "exportedFile": "{path} にエクスポートしました",
+ "exportFailed": "エクスポートに失敗しました: {error}",
+ "refreshFailed": "更新に失敗しました: {error}",
+ "selectOrCreateTaskList": "開始するには、タスクリストを選択または作成してください。",
+ "signInToViewTasks": "タスクを表示するにはサインインしてください。",
+ "noTasks": "タスクはありません。",
+ "noTasksYet": "タスクはまだありません",
+ "noTasksYetMessage": "タスクを作成するか、アカウントを更新して始めましょう。",
+ "noTasksInList": "このリストにタスクはありません。",
+ "overdue": "期限超過",
+ "today": "今日",
+ "tomorrow": "明日",
+ "upcoming": "今後",
+ "noDate": "日付なし",
+ "completed": "完了",
+ "duePrefix": "期限: {date}",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "タスクの詳細",
+ "editTask": "タスクを編集",
+ "noTaskSelected": "タスクが選択されていません。",
+ "noTaskSelectedHelper": "詳細を表示して編集するタスクを選択してください。",
+ "taskUnavailable": "タスクを利用できません。",
+ "signInToEditTasks": "タスクを編集するにはサインインしてください。",
+ "refreshTask": "タスクを更新",
+ "primarySection": "基本情報",
+ "statusSection": "ステータス",
+ "openStatus": "未完了",
+ "doneStatus": "完了",
+ "notes": "メモ",
+ "dueDate": "期限日",
+ "clearDueDate": "期限日を消去",
+ "dueTime": "期限時刻",
+ "startDate": "開始日",
+ "startTime": "開始時刻",
+ "endDate": "終了日",
+ "endTime": "終了時刻",
+ "reminderDate": "リマインダーの日付",
+ "reminderTime": "リマインダーの時刻",
+ "reminder": "リマインダー",
+ "addReminder": "リマインダーを追加",
+ "addGuest": "ゲストを追加",
+ "addGuestEmail": "ゲストのメールアドレスを追加",
+ "removeReminder": "リマインダーを削除",
+ "off": "オフ",
+ "repeat": "繰り返し",
+ "repeatNone": "なし",
+ "noneValue": "なし",
+ "repeatDaily": "毎日",
+ "repeatWeekly": "毎週",
+ "repeatMonthly": "毎月",
+ "repeatYearly": "毎年",
+ "importance": "重要度",
+ "importanceLow": "低",
+ "importanceNormal": "標準",
+ "importanceHigh": "高",
+ "categories": "カテゴリー",
+ "scheduleSection": "スケジュール",
+ "dueGroup": "期限",
+ "startGroup": "開始",
+ "reminderGroup": "リマインダー",
+ "organizationSection": "整理",
+ "actionsSection": "操作",
+ "advancedSection": "詳細設定",
+ "addCategory": "カテゴリーを追加",
+ "list": "リスト",
+ "microsoftMoveUnsupported": "このバージョンでは、Microsoft To Do アカウントのリスト間でタスクを移動できません。",
+ "createSubtask": "サブタスクを作成",
+ "moveToTop": "一番上に移動",
+ "deleteTask": "タスクを削除",
+ "newSubtask": "新しいサブタスク",
+ "deleteTaskConfirmation": "Google Tasks から「{title}」を削除しますか?",
+ "metadata": "メタデータ",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "更新日時",
+ "parent": "親タスク",
+ "position": "位置",
+ "webLink": "ウェブリンク",
+ "assignment": "割り当て",
+ "localState": "ローカル状態",
+ "pendingSync": "同期待ち",
+ "synced": "同期済み",
+ "account": "アカウント",
+ "sync": "同期",
+ "manualFullSync": "手動ですべて同期",
+ "runInBackgroundWhenClosed": "ウィンドウを閉じてもバックグラウンドで実行を続ける",
+ "showTrayIcon": "トレイアイコンを表示",
+ "startMinimizedToTray": "トレイに最小化して起動",
+ "requiresTrayIcon": "トレイアイコンが必要です。",
+ "syncComplete": "同期が完了しました。",
+ "syncFailed": "同期に失敗しました: {error}",
+ "notifySyncFailures": "同期失敗時に通知",
+ "notifyConflicts": "競合時に通知",
+ "notifyDueToday": "今日が期限のタスクを通知",
+ "eventReminders": "予定のリマインダー",
+ "taskReminders": "タスクのリマインダー",
+ "notificationDetailLevel": "通知の詳細度",
+ "notificationDetailPrivate": "非公開",
+ "notificationDetailNormal": "標準",
+ "quietHours": "通知を停止する時間",
+ "quietHoursDescription": "この時間帯は通知を一時停止します。",
+ "quietHoursStart": "通知停止の開始時刻",
+ "quietHoursEnd": "通知停止の終了時刻",
+ "notifications": "通知",
+ "appearance": "外観",
+ "theme": "テーマ",
+ "themeSystem": "システム",
+ "themeLight": "ライト",
+ "themeDark": "ダーク",
+ "themeFamily": "テーマファミリー",
+ "themeFamilyYaru": "Ubuntu ネイティブ(Yaru)",
+ "localization": "言語と地域",
+ "currentLocale": "現在のロケール",
+ "privacy": "プライバシー",
+ "redactTaskContentInDiagnostics": "診断情報でタスクの内容を伏せる",
+ "developerDiagnostics": "開発者向け診断",
+ "diagnostics": "診断",
+ "apiInspectorDisabled": "API インスペクターを表示",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery リビジョン: {revision}",
+ "implementedMethods": "実装済みメソッド",
+ "supportsTasksScopes": "tasks および tasks.readonly スコープをサポート",
+ "requiresTasksScope": "tasks スコープが必要",
+ "blockedPendingOperations": "ブロックされた保留中の操作",
+ "signInToInspectPendingOperations": "保留中の操作を確認するにはサインインしてください。",
+ "noBlockedPendingOperations": "ブロックされた保留中の操作はありません。",
+ "operationActions": "操作への対応",
+ "pendingOpListId": "リスト={id}",
+ "pendingOpTaskId": "タスク={id}",
+ "pendingOpAttempts": "試行回数={count}",
+ "retry": "再試行",
+ "discard": "破棄",
+ "discardChangesAction": "破棄",
+ "discardChanges": "変更を破棄しますか?",
+ "discardChangesConfirmation": "このタスクの未保存の編集内容を破棄します。",
+ "retryCompleted": "再試行が完了しました。",
+ "discardPendingOperation": "保留中の操作を破棄しますか?",
+ "discardPendingOperationConfirmation": "ブロックされたローカル操作を削除します。次回の同期時に Google Tasks からデータが再取得されます。",
+ "pendingOperationDiscarded": "保留中の操作を破棄しました。",
+ "syncFailureNotificationTitle": "BusyMax の同期に失敗",
+ "syncFailureNotificationBody": "バックグラウンド同期に失敗しました。{message}",
+ "conflictNotificationTitle": "BusyMax の同期競合",
+ "conflictNotificationBody": "保留中のローカル変更がブロックされました。{summary}",
+ "dueTodayNotificationTitle": "今日が期限のタスク",
+ "dueTodayNotificationBody": "{count, plural, =1{今日が期限のタスクが1件あります。} other{今日が期限のタスクが{count}件あります。}}",
+ "eventReminderNotificationTitle": "予定のリマインダー",
+ "taskReminderNotificationTitle": "タスクのリマインダー",
+ "eventReminderNotificationBody": "予定がまもなく始まります。",
+ "taskReminderNotificationBody": "タスクの期限が近づいています。",
+ "notificationOpenAction": "開く",
+ "notificationDetailsHidden": "プライバシー設定により詳細は非表示です。",
+ "previousMonth": "前の月",
+ "nextMonth": "次の月",
+ "openMonthView": "月表示を開く",
+ "previousYear": "前の年",
+ "nextYear": "次の年",
+ "openYearView": "年表示を開く",
+ "weekNumberTooltip": "第{number}週",
+ "resizeAllDayPanel": "終日パネルのサイズを変更",
+ "scheduleItemCount": "{count, plural, =1{1件} other{{count}件}}",
+ "readOnlyCalendar": "このカレンダーは読み取り専用です。",
+ "selectTimeZone": "タイムゾーンを選択",
+ "searchLocations": "場所を検索",
+ "noLocationsFound": "場所が見つかりません",
+ "deleteCalendarConfirmation": "「{title}」を削除しますか?"
+}
diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb
new file mode 100644
index 0000000..183daaf
--- /dev/null
+++ b/lib/l10n/app_ko.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "ko",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Google 및 Microsoft 계정을 연결하여 캘린더와 할 일을 동기화하세요.",
+ "googlePermissionsConsentNotice": "Google 권한 화면에서 캘린더와 할 일 권한을 모두 선택하세요.",
+ "googlePermissionsRequiredRetry": "Google Calendar 및 Google Tasks 권한이 필요합니다. 다시 시도하여 두 체크박스를 모두 선택하세요.",
+ "finishSetup": "설정 완료",
+ "continueSetup": "계속",
+ "onboardingSetupTitle": "BusyMax 설정",
+ "onboardingAccountsStepTitle": "계정 연결",
+ "onboardingAccountsStepDescription": "사용할 Google 및 Microsoft 계정을 모두 추가하세요. BusyMax는 각 계정의 캘린더, 일정, 할 일 목록 및 할 일을 동기화합니다.",
+ "onboardingPreferencesStepTitle": "시스템 설정 선택",
+ "onboardingPreferencesStepDescription": "일정을 열기 전에 데스크톱 동작, 미리 알림, 알림 세부 수준 및 화면 모양을 설정하세요.",
+ "signInWithGoogle": "Google로 로그인",
+ "signInWithMicrosoft": "Microsoft로 로그인",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "이 서비스는 설정되어 있지 않습니다.",
+ "waitingForGoogleSignIn": "Google 로그인을 기다리는 중...",
+ "waitingForMicrosoftSignIn": "Microsoft 로그인을 기다리는 중...",
+ "microsoftSignInNotConfigured": "Microsoft 로그인이 구성되지 않았습니다. MICROSOFT_OAUTH_CLIENT_ID를 설정하세요.",
+ "cancel": "취소",
+ "close": "닫기",
+ "exit": "종료",
+ "options": "옵션",
+ "hide": "숨기기",
+ "show": "표시",
+ "export": "내보내기",
+ "save": "저장",
+ "settings": "설정",
+ "all": "모두",
+ "calendarEvents": "일정",
+ "calendarTasks": "할 일",
+ "calendar": "캘린더",
+ "calendars": "캘린더",
+ "newEvent": "새 일정",
+ "refreshCalendar": "캘린더 새로 고침",
+ "openInProvider": "서비스에서 열기",
+ "hideFromSchedule": "일정에서 숨기기",
+ "showInSchedule": "일정에 표시",
+ "noCalendarsSynced": "아직 동기화된 캘린더가 없습니다.",
+ "allDay": "하루 종일",
+ "moreItems": "+{count}개 더 보기",
+ "noEventsOrTasks": "일정 또는 할 일이 없습니다",
+ "scheduleLoading": "일정을 불러오는 중...",
+ "scheduleUnavailable": "일정을 사용할 수 없습니다",
+ "scheduleNoSources": "표시할 캘린더 또는 할 일 목록이 없습니다",
+ "scheduleNoSourcesDescription": "설정에서 표시할 항목을 선택한 다음 새로 고침하세요.",
+ "scheduleSignInRequired": "계정 연결",
+ "scheduleSignInDescription": "캘린더와 할 일을 동기화하려면 로그인하세요.",
+ "scheduleNoSearchResults": "일치하는 일정 또는 할 일이 없습니다",
+ "scheduleNoSearchResultsDescription": "다른 검색어를 사용하거나 현재 필터를 지우세요.",
+ "refresh": "새로 고침",
+ "trayOpenBusyMax": "BusyMax 열기",
+ "agendaLoadMoreOverdue": "기한이 지난 할 일 더 불러오기",
+ "agendaLoadMoreNoDate": "날짜 없는 할 일 더 불러오기",
+ "viewDay": "일",
+ "viewWeek": "주",
+ "viewMonth": "월",
+ "viewYear": "년",
+ "viewAgenda": "일정 목록",
+ "scheduleSettings": "일정",
+ "scheduleDisplaySettings": "일정 표시",
+ "scheduleDisplayHoursDescription": "일간 및 주간 보기는 처음에 이 시간 범위를 표시합니다. 필요한 경우 더 이르거나 늦은 항목에 맞춰 범위가 확장됩니다.",
+ "scheduleDayStartsAt": "하루 시작 시간",
+ "scheduleDayEndsAt": "하루 종료 시간",
+ "sourceCalendar": "캘린더",
+ "sourceTaskList": "할 일 목록",
+ "createChoiceTitle": "만들기",
+ "createEventAtTime": "일정",
+ "createTaskAtDate": "할 일",
+ "editEvent": "일정 편집",
+ "eventTitle": "일정 제목",
+ "location": "위치",
+ "timeSlot": "시간대",
+ "startDateTime": "시작 날짜/시간",
+ "endDateTime": "종료 날짜/시간",
+ "doesNotRepeat": "반복 안 함",
+ "defaultReminder": "기본 미리 알림",
+ "guests": "참석자",
+ "noGuests": "참석자 없음",
+ "description": "설명",
+ "availabilityShowAs": "일정 상태 / 표시 방식",
+ "busy": "바쁨",
+ "visibility": "공개 범위",
+ "defaultVisibility": "기본 공개 범위",
+ "conference": "회의",
+ "noConference": "회의 없음",
+ "providerCalendar": "서비스 캘린더",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "굵게",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "기울임꼴",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "밑줄",
+ "reminderMinutesBefore": "{minutes, plural, =1{1분 전} other{{minutes}분 전}}",
+ "reminderAtStart": "시작 시",
+ "reminderHoursBefore": "{hours, plural, =1{1시간 전} other{{hours}시간 전}}",
+ "reminderDaysBefore": "{days, plural, =1{1일 전} other{{days}일 전}}",
+ "availabilityFree": "한가함",
+ "availabilityTentative": "미정",
+ "availabilityOutOfOffice": "부재중",
+ "availabilityWorkingElsewhere": "다른 장소에서 근무",
+ "visibilityDefault": "기본값",
+ "visibilityPublic": "공개",
+ "visibilityPrivate": "비공개",
+ "visibilityConfidential": "기밀",
+ "sensitivityNormal": "일반",
+ "sensitivityPersonal": "개인",
+ "tasks": "할 일",
+ "allTasks": "모든 할 일",
+ "tasksInList": "{title}의 할 일",
+ "taskLists": "할 일 목록",
+ "navigation": "탐색",
+ "mainMenu": "주 메뉴",
+ "keyboardShortcuts": "키보드 단축키",
+ "shortcutGroupGeneral": "일반",
+ "shortcutKeyboardShortcutsDescription": "이 단축키 도움말 표시",
+ "shortcutGroupNavigation": "탐색",
+ "shortcutNextPeriod": "다음 기간",
+ "shortcutNextPeriodDescription": "주간 보기에서는 다음 주, 월간 보기에서는 다음 달로 이동하는 식입니다",
+ "shortcutPreviousPeriod": "이전 기간",
+ "shortcutPreviousPeriodDescription": "주간 보기에서는 이전 주, 월간 보기에서는 이전 달로 이동하는 식입니다",
+ "shortcutJumpToToday": "오늘로 이동",
+ "shortcutGroupView": "보기",
+ "shortcutDayView": "일간 보기",
+ "shortcutWeekView": "주간 보기",
+ "shortcutMonthView": "월간 보기",
+ "shortcutYearView": "연간 보기",
+ "shortcutAgendaView": "일정 목록 보기",
+ "shortcutGroupCreateAndEdit": "만들기 및 편집",
+ "shortcutSaveItem": "일정 또는 할 일 저장",
+ "shortcutDeleteItem": "일정 또는 할 일 삭제",
+ "shortcutGroupTaskEditing": "할 일 편집",
+ "shortcutCancelEditing": "편집 취소",
+ "shortcutCancelEditingDescription": "할 일 편집 또는 할 일 세부 정보 닫기",
+ "aboutBusyMax": "BusyMax 정보",
+ "aboutBusyMaxDescription": "캘린더와 할 일",
+ "license": "라이선스",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "웹사이트",
+ "sourceCode": "소스 코드",
+ "reportAnIssue": "문제 신고",
+ "sendFeedback": "의견 보내기",
+ "feedbackSubmit": "제출",
+ "feedbackCategory": "범주",
+ "feedbackSelectCategory": "범주 선택",
+ "feedbackCategoryProblem": "문제 또는 버그",
+ "feedbackCategoryFeature": "기능 요청",
+ "feedbackCategoryPrivacySecurity": "개인정보 보호 또는 보안 우려",
+ "feedbackCategoryUsability": "사용 편의성 문제",
+ "feedbackCategoryOther": "기타",
+ "feedbackSubject": "제목",
+ "feedbackDetailedMessage": "자세한 내용",
+ "feedbackReplyEmail": "답변 받을 이메일 주소(선택 사항)",
+ "feedbackIncludeTechnicalDetails": "기술 세부 정보 포함",
+ "feedbackTechnicalDetailsDisclosure": "Linux 운영 체제 버전과 앱 로캘만 추가됩니다. 로그, 계정 데이터, 파일 이름 또는 기타 진단 정보는 포함되지 않습니다.",
+ "feedbackCategoryRequired": "범주를 선택하세요.",
+ "feedbackSubjectLengthError": "제목은 3~120자여야 합니다.",
+ "feedbackMessageLengthError": "메시지는 10~5,000자여야 합니다.",
+ "feedbackInvalidEmail": "올바른 이메일 주소를 입력하세요.",
+ "feedbackConnectionError": "BusyStack에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요.",
+ "feedbackTimeoutError": "요청 시간이 초과되었습니다. 의견은 지워지지 않았습니다. 다시 시도하세요.",
+ "feedbackRateLimitedError": "이 네트워크에서 너무 많은 의견이 제출되었습니다. 잠시 기다린 후 다시 시도하세요.",
+ "feedbackRejectedError": "서버가 제출을 거부했습니다. 입력란을 검토하고 다시 시도하세요.",
+ "feedbackServerError": "현재 BusyStack에서 의견을 받을 수 없습니다. 의견은 지워지지 않았습니다. 다시 시도하세요.",
+ "feedbackSuccess": "의견을 보냈습니다. 참조: {id}",
+ "toggleSidebar": "사이드바 표시 전환",
+ "showSidebar": "사이드바 패널 표시",
+ "hideSidebar": "사이드바 패널 숨기기",
+ "accounts": "계정",
+ "currentAccount": "현재 계정",
+ "switchAccount": "계정 전환",
+ "addGoogleAccount": "Google 계정 추가",
+ "addMicrosoftAccount": "Microsoft 계정 추가",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "로그인됨",
+ "removeAccount": "계정 삭제…",
+ "removingAccount": "계정 삭제 중…",
+ "removeAccountDescription": "동기화를 중지하고 이 기기에서 이 계정의 데이터를 삭제합니다.",
+ "removeAccountTitle": "BusyMax에서 {account} 계정을 삭제할까요?",
+ "removeAccountConfirmation": "이 기기에서 캐시된 할 일, 캘린더, 일정, 미리 알림 및 보류 중인 오프라인 변경 사항이 삭제됩니다. 동기화되지 않은 변경 사항은 사라집니다. Google 또는 Microsoft에서는 아무것도 삭제되지 않습니다.",
+ "revokeGoogleAccess": "이 Google 계정에 대한 BusyMax의 액세스 권한도 취소",
+ "revokeGoogleAccessDescription": "다시 연결하기 전에 액세스 권한을 다시 부여해야 합니다.",
+ "removeAccountAction": "계정 삭제",
+ "removeAccountFailed": "계정 삭제를 완료할 수 없습니다. 다시 시도하세요.",
+ "accountRemovedGoogleRevokeFailed": "계정은 이 기기에서 삭제되었지만 BusyMax가 Google 계정 액세스 권한을 취소하지 못했습니다. Google 계정에서 직접 취소할 수 있습니다.",
+ "newList": "새 목록",
+ "signInToViewTaskLists": "할 일 목록을 보려면 로그인하세요.",
+ "noTaskListsSynced": "아직 동기화된 할 일 목록이 없습니다.",
+ "listActions": "목록 작업",
+ "rename": "이름 바꾸기",
+ "delete": "삭제",
+ "renameList": "목록 이름 바꾸기",
+ "deleteList": "목록 삭제",
+ "builtInMicrosoftList": "기본 제공",
+ "builtInMicrosoftListCannotRenameDelete": "Microsoft To Do의 기본 제공 목록은 이름을 바꾸거나 삭제할 수 없습니다.",
+ "deleteListConfirmation": "Google Tasks에서 “{title}” 목록을 삭제할까요?",
+ "deleteEvent": "일정 삭제",
+ "title": "제목",
+ "create": "만들기",
+ "newTask": "새 할 일",
+ "clearCompleted": "완료된 항목 지우기",
+ "refreshList": "목록 새로 고침",
+ "refreshAll": "모두 새로 고침",
+ "listRefreshed": "목록을 새로 고쳤습니다.",
+ "allTasksRefreshed": "모든 계정을 새로 고쳤습니다.",
+ "exportedFile": "{path}에 내보냈습니다",
+ "exportFailed": "내보내기 실패: {error}",
+ "refreshFailed": "새로 고침 실패: {error}",
+ "selectOrCreateTaskList": "시작하려면 할 일 목록을 선택하거나 만드세요.",
+ "signInToViewTasks": "할 일을 보려면 로그인하세요.",
+ "noTasks": "할 일이 없습니다.",
+ "noTasksYet": "아직 할 일이 없습니다",
+ "noTasksYetMessage": "할 일을 만들거나 계정을 새로 고쳐 시작하세요.",
+ "noTasksInList": "이 목록에 할 일이 없습니다.",
+ "overdue": "기한 지남",
+ "today": "오늘",
+ "tomorrow": "내일",
+ "upcoming": "예정",
+ "noDate": "날짜 없음",
+ "completed": "완료",
+ "duePrefix": "{date} 마감",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "할 일 세부 정보",
+ "editTask": "할 일 편집",
+ "noTaskSelected": "선택된 할 일이 없습니다.",
+ "noTaskSelectedHelper": "세부 정보를 보고 편집할 할 일을 선택하세요.",
+ "taskUnavailable": "할 일을 사용할 수 없습니다.",
+ "signInToEditTasks": "할 일을 편집하려면 로그인하세요.",
+ "refreshTask": "할 일 새로 고침",
+ "primarySection": "기본",
+ "statusSection": "상태",
+ "openStatus": "미완료",
+ "doneStatus": "완료",
+ "notes": "메모",
+ "dueDate": "마감일",
+ "clearDueDate": "마감일 지우기",
+ "dueTime": "마감 시간",
+ "startDate": "시작일",
+ "startTime": "시작 시간",
+ "endDate": "종료일",
+ "endTime": "종료 시간",
+ "reminderDate": "미리 알림 날짜",
+ "reminderTime": "미리 알림 시간",
+ "reminder": "미리 알림",
+ "addReminder": "미리 알림 추가",
+ "addGuest": "참석자 추가",
+ "addGuestEmail": "참석자 이메일 추가",
+ "removeReminder": "미리 알림 삭제",
+ "off": "끔",
+ "repeat": "반복",
+ "repeatNone": "없음",
+ "noneValue": "없음",
+ "repeatDaily": "매일",
+ "repeatWeekly": "매주",
+ "repeatMonthly": "매월",
+ "repeatYearly": "매년",
+ "importance": "중요도",
+ "importanceLow": "낮음",
+ "importanceNormal": "보통",
+ "importanceHigh": "높음",
+ "categories": "범주",
+ "scheduleSection": "일정",
+ "dueGroup": "마감",
+ "startGroup": "시작",
+ "reminderGroup": "미리 알림",
+ "organizationSection": "구성",
+ "actionsSection": "작업",
+ "advancedSection": "고급",
+ "addCategory": "범주 추가",
+ "list": "목록",
+ "microsoftMoveUnsupported": "이 버전에서는 Microsoft To Do 계정의 목록 간에 할 일을 이동할 수 없습니다.",
+ "createSubtask": "하위 할 일 만들기",
+ "moveToTop": "맨 위로 이동",
+ "deleteTask": "할 일 삭제",
+ "newSubtask": "새 하위 할 일",
+ "deleteTaskConfirmation": "Google Tasks에서 “{title}” 항목을 삭제할까요?",
+ "metadata": "메타데이터",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "업데이트됨",
+ "parent": "상위 할 일",
+ "position": "위치",
+ "webLink": "웹 링크",
+ "assignment": "할당",
+ "localState": "로컬 상태",
+ "pendingSync": "동기화 보류 중",
+ "synced": "동기화됨",
+ "account": "계정",
+ "sync": "동기화",
+ "manualFullSync": "수동 전체 동기화",
+ "runInBackgroundWhenClosed": "창을 닫아도 계속 실행",
+ "showTrayIcon": "트레이 아이콘 표시",
+ "startMinimizedToTray": "트레이에 최소화하여 시작",
+ "requiresTrayIcon": "트레이 아이콘이 필요합니다.",
+ "syncComplete": "동기화가 완료되었습니다.",
+ "syncFailed": "동기화 실패: {error}",
+ "notifySyncFailures": "동기화 실패 알림",
+ "notifyConflicts": "충돌 알림",
+ "notifyDueToday": "오늘 마감인 할 일 알림",
+ "eventReminders": "일정 미리 알림",
+ "taskReminders": "할 일 미리 알림",
+ "notificationDetailLevel": "알림 세부 수준",
+ "notificationDetailPrivate": "비공개",
+ "notificationDetailNormal": "일반",
+ "quietHours": "방해 금지 시간",
+ "quietHoursDescription": "이 시간 동안 알림을 일시 중지합니다.",
+ "quietHoursStart": "방해 금지 시작 시간",
+ "quietHoursEnd": "방해 금지 종료 시간",
+ "notifications": "알림",
+ "appearance": "화면 모양",
+ "theme": "테마",
+ "themeSystem": "시스템",
+ "themeLight": "라이트",
+ "themeDark": "다크",
+ "themeFamily": "테마 계열",
+ "themeFamilyYaru": "Ubuntu 기본 테마(Yaru)",
+ "localization": "언어 및 지역",
+ "currentLocale": "현재 로캘",
+ "privacy": "개인정보 보호",
+ "redactTaskContentInDiagnostics": "진단 정보에서 할 일 내용 숨기기",
+ "developerDiagnostics": "개발자 진단",
+ "diagnostics": "진단",
+ "apiInspectorDisabled": "API 검사기 표시",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery 리비전: {revision}",
+ "implementedMethods": "구현된 메서드",
+ "supportsTasksScopes": "tasks 및 tasks.readonly 범위 지원",
+ "requiresTasksScope": "tasks 범위 필요",
+ "blockedPendingOperations": "차단된 보류 작업",
+ "signInToInspectPendingOperations": "보류 작업을 확인하려면 로그인하세요.",
+ "noBlockedPendingOperations": "차단된 보류 작업이 없습니다.",
+ "operationActions": "작업별 조치",
+ "pendingOpListId": "목록={id}",
+ "pendingOpTaskId": "할 일={id}",
+ "pendingOpAttempts": "시도={count}",
+ "retry": "다시 시도",
+ "discard": "버리기",
+ "discardChangesAction": "변경 사항 버리기",
+ "discardChanges": "변경 사항을 버릴까요?",
+ "discardChangesConfirmation": "이 할 일에서 저장하지 않은 편집 내용을 버립니다.",
+ "retryCompleted": "다시 시도했습니다.",
+ "discardPendingOperation": "보류 작업을 버릴까요?",
+ "discardPendingOperationConfirmation": "차단된 로컬 작업을 삭제합니다. 다음 동기화에서 Google Tasks의 데이터를 새로 불러옵니다.",
+ "pendingOperationDiscarded": "보류 작업을 버렸습니다.",
+ "syncFailureNotificationTitle": "BusyMax 동기화 실패",
+ "syncFailureNotificationBody": "백그라운드 동기화에 실패했습니다. {message}",
+ "conflictNotificationTitle": "BusyMax 동기화 충돌",
+ "conflictNotificationBody": "보류 중인 로컬 변경 사항이 차단되었습니다. {summary}",
+ "dueTodayNotificationTitle": "오늘 마감인 할 일",
+ "dueTodayNotificationBody": "{count, plural, =1{오늘 마감인 할 일이 1개 있습니다.} other{오늘 마감인 할 일이 {count}개 있습니다.}}",
+ "eventReminderNotificationTitle": "일정 미리 알림",
+ "taskReminderNotificationTitle": "할 일 미리 알림",
+ "eventReminderNotificationBody": "일정이 곧 시작됩니다.",
+ "taskReminderNotificationBody": "할 일 마감이 얼마 남지 않았습니다.",
+ "notificationOpenAction": "열기",
+ "notificationDetailsHidden": "개인정보 보호 설정에 따라 세부 정보가 숨겨졌습니다.",
+ "previousMonth": "이전 달",
+ "nextMonth": "다음 달",
+ "openMonthView": "월간 보기 열기",
+ "previousYear": "이전 해",
+ "nextYear": "다음 해",
+ "openYearView": "연간 보기 열기",
+ "weekNumberTooltip": "{number}주차",
+ "resizeAllDayPanel": "종일 패널 크기 조절",
+ "scheduleItemCount": "{count, plural, =1{항목 1개} other{항목 {count}개}}",
+ "readOnlyCalendar": "이 캘린더는 읽기 전용입니다.",
+ "selectTimeZone": "시간대 선택",
+ "searchLocations": "위치 검색",
+ "noLocationsFound": "위치를 찾을 수 없습니다",
+ "deleteCalendarConfirmation": "“{title}” 캘린더를 삭제할까요?"
+}
diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb
new file mode 100644
index 0000000..d330459
--- /dev/null
+++ b/lib/l10n/app_pt.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "pt",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Ligue contas Google e Microsoft para sincronizar calendários e tarefas.",
+ "googlePermissionsConsentNotice": "No ecrã de autorizações da Google, selecione as autorizações do Calendário e das Tarefas.",
+ "googlePermissionsRequiredRetry": "As autorizações do Calendário Google e do Google Tasks são necessárias. Tente novamente e selecione ambas as caixas.",
+ "finishSetup": "Concluir configuração",
+ "continueSetup": "Continuar",
+ "onboardingSetupTitle": "Configurar o BusyMax",
+ "onboardingAccountsStepTitle": "Ligar contas",
+ "onboardingAccountsStepDescription": "Adicione todas as contas Google e Microsoft que pretende utilizar. O BusyMax sincroniza calendários, eventos, listas de tarefas e tarefas de cada conta.",
+ "onboardingPreferencesStepTitle": "Escolher definições do sistema",
+ "onboardingPreferencesStepDescription": "Configure o comportamento da aplicação no ambiente de trabalho, os lembretes, o nível de detalhe das notificações e o aspeto antes de abrir a agenda.",
+ "signInWithGoogle": "Iniciar sessão com a Google",
+ "signInWithMicrosoft": "Iniciar sessão com a Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "Este fornecedor não está configurado.",
+ "waitingForGoogleSignIn": "A aguardar o início de sessão da Google...",
+ "waitingForMicrosoftSignIn": "A aguardar o início de sessão da Microsoft...",
+ "microsoftSignInNotConfigured": "O início de sessão da Microsoft não está configurado. Defina MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "exit": "Sair",
+ "options": "Opções",
+ "hide": "Ocultar",
+ "show": "Mostrar",
+ "export": "Exportar",
+ "save": "Guardar",
+ "settings": "Definições",
+ "all": "Tudo",
+ "calendarEvents": "Eventos",
+ "calendarTasks": "Tarefas",
+ "calendar": "Calendário",
+ "calendars": "Calendários",
+ "newEvent": "Novo evento",
+ "refreshCalendar": "Atualizar calendário",
+ "openInProvider": "Abrir no serviço",
+ "hideFromSchedule": "Ocultar da agenda",
+ "showInSchedule": "Mostrar na agenda",
+ "noCalendarsSynced": "Ainda não há calendários sincronizados.",
+ "allDay": "Todo o dia",
+ "moreItems": "+{count} mais",
+ "noEventsOrTasks": "Sem eventos ou tarefas",
+ "scheduleLoading": "A carregar agenda...",
+ "scheduleUnavailable": "Agenda indisponível",
+ "scheduleNoSources": "Sem calendários ou listas de tarefas visíveis",
+ "scheduleNoSourcesDescription": "Escolha o que pretende mostrar nas Definições e atualize a agenda.",
+ "scheduleSignInRequired": "Ligar uma conta",
+ "scheduleSignInDescription": "Inicie sessão para sincronizar calendários e tarefas.",
+ "scheduleNoSearchResults": "Nenhum evento ou tarefa correspondente",
+ "scheduleNoSearchResultsDescription": "Experimente outra pesquisa ou limpe os filtros atuais.",
+ "refresh": "Atualizar",
+ "trayOpenBusyMax": "Abrir o BusyMax",
+ "agendaLoadMoreOverdue": "Carregar mais tarefas em atraso",
+ "agendaLoadMoreNoDate": "Carregar mais tarefas sem data",
+ "viewDay": "Dia",
+ "viewWeek": "Semana",
+ "viewMonth": "Mês",
+ "viewYear": "Ano",
+ "viewAgenda": "Agenda",
+ "scheduleSettings": "Agenda",
+ "scheduleDisplaySettings": "Apresentação da agenda",
+ "scheduleDisplayHoursDescription": "As vistas de dia e semana mostram inicialmente este intervalo horário. Os itens anteriores ou posteriores alargam-no quando necessário.",
+ "scheduleDayStartsAt": "O dia começa às",
+ "scheduleDayEndsAt": "O dia termina às",
+ "sourceCalendar": "Calendário",
+ "sourceTaskList": "Lista de tarefas",
+ "createChoiceTitle": "Criar",
+ "createEventAtTime": "Evento",
+ "createTaskAtDate": "Tarefa",
+ "editEvent": "Editar evento",
+ "eventTitle": "Título do evento",
+ "location": "Local",
+ "timeSlot": "Intervalo de tempo",
+ "startDateTime": "Data e hora de início",
+ "endDateTime": "Data e hora de fim",
+ "doesNotRepeat": "Não se repete",
+ "defaultReminder": "Lembrete predefinido",
+ "guests": "Convidados",
+ "noGuests": "Sem convidados",
+ "description": "Descrição",
+ "availabilityShowAs": "Disponibilidade / Mostrar como",
+ "busy": "Ocupado",
+ "visibility": "Visibilidade",
+ "defaultVisibility": "Visibilidade predefinida",
+ "conference": "Conferência",
+ "noConference": "Sem conferência",
+ "providerCalendar": "Calendário do fornecedor",
+ "formatBoldShortLabel": "N",
+ "formatBoldTooltip": "Negrito",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "Itálico",
+ "formatUnderlineShortLabel": "S",
+ "formatUnderlineTooltip": "Sublinhado",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 minuto antes} other{{minutes} minutos antes}}",
+ "reminderAtStart": "À hora de início",
+ "reminderHoursBefore": "{hours, plural, =1{1 hora antes} other{{hours} horas antes}}",
+ "reminderDaysBefore": "{days, plural, =1{1 dia antes} other{{days} dias antes}}",
+ "availabilityFree": "Livre",
+ "availabilityTentative": "Provisório",
+ "availabilityOutOfOffice": "Fora do escritório",
+ "availabilityWorkingElsewhere": "A trabalhar noutro local",
+ "visibilityDefault": "Predefinida",
+ "visibilityPublic": "Pública",
+ "visibilityPrivate": "Privada",
+ "visibilityConfidential": "Confidencial",
+ "sensitivityNormal": "Normal",
+ "sensitivityPersonal": "Pessoal",
+ "tasks": "Tarefas",
+ "allTasks": "Todas as tarefas",
+ "tasksInList": "Tarefas em {title}",
+ "taskLists": "Listas de tarefas",
+ "navigation": "Navegação",
+ "mainMenu": "Menu principal",
+ "keyboardShortcuts": "Atalhos de teclado",
+ "shortcutGroupGeneral": "Geral",
+ "shortcutKeyboardShortcutsDescription": "Mostrar esta referência de atalhos",
+ "shortcutGroupNavigation": "Navegação",
+ "shortcutNextPeriod": "Período seguinte",
+ "shortcutNextPeriodDescription": "Semana seguinte na vista semanal, mês seguinte na vista mensal e assim por diante",
+ "shortcutPreviousPeriod": "Período anterior",
+ "shortcutPreviousPeriodDescription": "Semana anterior na vista semanal, mês anterior na vista mensal e assim por diante",
+ "shortcutJumpToToday": "Ir para hoje",
+ "shortcutGroupView": "Vista",
+ "shortcutDayView": "Vista diária",
+ "shortcutWeekView": "Vista semanal",
+ "shortcutMonthView": "Vista mensal",
+ "shortcutYearView": "Vista anual",
+ "shortcutAgendaView": "Vista de agenda",
+ "shortcutGroupCreateAndEdit": "Criar e editar",
+ "shortcutSaveItem": "Guardar evento ou tarefa",
+ "shortcutDeleteItem": "Eliminar evento ou tarefa",
+ "shortcutGroupTaskEditing": "Edição de tarefas",
+ "shortcutCancelEditing": "Cancelar edição",
+ "shortcutCancelEditingDescription": "Fechar a edição ou os detalhes da tarefa",
+ "aboutBusyMax": "Acerca do BusyMax",
+ "aboutBusyMaxDescription": "Calendário e tarefas",
+ "license": "Licença",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Site",
+ "sourceCode": "Código-fonte",
+ "reportAnIssue": "Comunicar um problema",
+ "sendFeedback": "Enviar comentários",
+ "feedbackSubmit": "Enviar",
+ "feedbackCategory": "Categoria",
+ "feedbackSelectCategory": "Selecione uma categoria",
+ "feedbackCategoryProblem": "Problema ou erro",
+ "feedbackCategoryFeature": "Pedido de funcionalidade",
+ "feedbackCategoryPrivacySecurity": "Questão de privacidade ou segurança",
+ "feedbackCategoryUsability": "Problema de utilização",
+ "feedbackCategoryOther": "Outro",
+ "feedbackSubject": "Assunto",
+ "feedbackDetailedMessage": "Mensagem detalhada",
+ "feedbackReplyEmail": "Endereço de e-mail para resposta (opcional)",
+ "feedbackIncludeTechnicalDetails": "Incluir detalhes técnicos",
+ "feedbackTechnicalDetailsDisclosure": "Adiciona apenas a versão do sistema operativo Linux e a configuração regional da aplicação. Não são incluídos registos, dados de contas, nomes de ficheiros nem outros diagnósticos.",
+ "feedbackCategoryRequired": "Selecione uma categoria.",
+ "feedbackSubjectLengthError": "O assunto deve ter entre 3 e 120 carateres.",
+ "feedbackMessageLengthError": "A mensagem deve ter entre 10 e 5 000 carateres.",
+ "feedbackInvalidEmail": "Introduza um endereço de e-mail válido.",
+ "feedbackConnectionError": "Não foi possível ligar ao BusyStack. Verifique a ligação e tente novamente.",
+ "feedbackTimeoutError": "O pedido excedeu o tempo limite. Os seus comentários não foram apagados; tente novamente.",
+ "feedbackRateLimitedError": "Foram enviados demasiados comentários a partir desta rede. Aguarde e tente novamente.",
+ "feedbackRejectedError": "O servidor rejeitou o envio. Reveja os campos e tente novamente.",
+ "feedbackServerError": "O BusyStack não pode aceitar os seus comentários neste momento. Os seus comentários não foram apagados; tente novamente.",
+ "feedbackSuccess": "Comentários enviados. Referência: {id}",
+ "toggleSidebar": "Mostrar ou ocultar a barra lateral",
+ "showSidebar": "Mostrar painel lateral",
+ "hideSidebar": "Ocultar painel lateral",
+ "accounts": "Contas",
+ "currentAccount": "Conta atual",
+ "switchAccount": "Mudar de conta",
+ "addGoogleAccount": "Adicionar conta Google",
+ "addMicrosoftAccount": "Adicionar conta Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Sessão iniciada",
+ "removeAccount": "Remover conta…",
+ "removingAccount": "A remover conta…",
+ "removeAccountDescription": "Parar a sincronização e remover os dados desta conta deste dispositivo.",
+ "removeAccountTitle": "Remover {account} do BusyMax?",
+ "removeAccountConfirmation": "Esta ação elimina deste dispositivo as tarefas, os calendários, os eventos, os lembretes e as alterações offline pendentes em cache. As alterações não sincronizadas serão perdidas. Nada será eliminado da Google ou da Microsoft.",
+ "revokeGoogleAccess": "Revogar também o acesso do BusyMax a esta conta Google",
+ "revokeGoogleAccessDescription": "Terá de conceder acesso novamente antes de voltar a ligar a conta.",
+ "removeAccountAction": "Remover conta",
+ "removeAccountFailed": "Não foi possível concluir a remoção da conta. Tente novamente.",
+ "accountRemovedGoogleRevokeFailed": "A conta foi removida deste dispositivo, mas não foi possível revogar o acesso do BusyMax à sua conta Google. Pode revogar esse acesso na sua conta Google.",
+ "newList": "Nova lista",
+ "signInToViewTaskLists": "Inicie sessão para ver as listas de tarefas.",
+ "noTaskListsSynced": "Ainda não há listas de tarefas sincronizadas.",
+ "listActions": "Ações da lista",
+ "rename": "Mudar o nome",
+ "delete": "Eliminar",
+ "renameList": "Mudar o nome da lista",
+ "deleteList": "Eliminar lista",
+ "builtInMicrosoftList": "Incorporada",
+ "builtInMicrosoftListCannotRenameDelete": "As listas incorporadas do Microsoft To Do não podem ser renomeadas nem eliminadas.",
+ "deleteListConfirmation": "Eliminar «{title}» do Google Tasks?",
+ "deleteEvent": "Eliminar evento",
+ "title": "Título",
+ "create": "Criar",
+ "newTask": "Nova tarefa",
+ "clearCompleted": "Limpar tarefas concluídas",
+ "refreshList": "Atualizar lista",
+ "refreshAll": "Atualizar tudo",
+ "listRefreshed": "Lista atualizada.",
+ "allTasksRefreshed": "Todas as contas foram atualizadas.",
+ "exportedFile": "Exportado para {path}",
+ "exportFailed": "Falha ao exportar: {error}",
+ "refreshFailed": "Falha ao atualizar: {error}",
+ "selectOrCreateTaskList": "Selecione ou crie uma lista de tarefas para começar.",
+ "signInToViewTasks": "Inicie sessão para ver as tarefas.",
+ "noTasks": "Sem tarefas.",
+ "noTasksYet": "Ainda não há tarefas",
+ "noTasksYetMessage": "Crie uma tarefa ou atualize as suas contas para começar.",
+ "noTasksInList": "Não há tarefas nesta lista.",
+ "overdue": "Em atraso",
+ "today": "Hoje",
+ "tomorrow": "Amanhã",
+ "upcoming": "Próximas",
+ "noDate": "Sem data",
+ "completed": "Concluídas",
+ "duePrefix": "Prazo: {date}",
+ "dateTimeDisplay": "{date}, {time}",
+ "taskDetails": "Detalhes da tarefa",
+ "editTask": "Editar tarefa",
+ "noTaskSelected": "Nenhuma tarefa selecionada.",
+ "noTaskSelectedHelper": "Selecione uma tarefa para ver e editar os detalhes.",
+ "taskUnavailable": "Tarefa indisponível.",
+ "signInToEditTasks": "Inicie sessão para editar tarefas.",
+ "refreshTask": "Atualizar tarefa",
+ "primarySection": "Principal",
+ "statusSection": "Estado",
+ "openStatus": "Aberta",
+ "doneStatus": "Concluída",
+ "notes": "Notas",
+ "dueDate": "Data limite",
+ "clearDueDate": "Limpar data limite",
+ "dueTime": "Hora limite",
+ "startDate": "Data de início",
+ "startTime": "Hora de início",
+ "endDate": "Data de fim",
+ "endTime": "Hora de fim",
+ "reminderDate": "Data do lembrete",
+ "reminderTime": "Hora do lembrete",
+ "reminder": "Lembrete",
+ "addReminder": "Adicionar lembrete",
+ "addGuest": "Adicionar convidado",
+ "addGuestEmail": "Adicionar e-mail do convidado",
+ "removeReminder": "Remover lembrete",
+ "off": "Desativado",
+ "repeat": "Repetição",
+ "repeatNone": "Não repetir",
+ "noneValue": "Nenhum",
+ "repeatDaily": "Diariamente",
+ "repeatWeekly": "Semanalmente",
+ "repeatMonthly": "Mensalmente",
+ "repeatYearly": "Anualmente",
+ "importance": "Importância",
+ "importanceLow": "Baixa",
+ "importanceNormal": "Normal",
+ "importanceHigh": "Alta",
+ "categories": "Categorias",
+ "scheduleSection": "Agenda",
+ "dueGroup": "Prazo",
+ "startGroup": "Início",
+ "reminderGroup": "Lembrete",
+ "organizationSection": "Organização",
+ "actionsSection": "Ações",
+ "advancedSection": "Avançado",
+ "addCategory": "Adicionar categoria",
+ "list": "Lista",
+ "microsoftMoveUnsupported": "Nesta versão, não é possível mover tarefas entre listas em contas Microsoft To Do.",
+ "createSubtask": "Criar subtarefa",
+ "moveToTop": "Mover para o início",
+ "deleteTask": "Eliminar tarefa",
+ "newSubtask": "Nova subtarefa",
+ "deleteTaskConfirmation": "Eliminar «{title}» do Google Tasks?",
+ "metadata": "Metadados",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "Atualizado",
+ "parent": "Tarefa principal",
+ "position": "Posição",
+ "webLink": "Ligação Web",
+ "assignment": "Atribuição",
+ "localState": "Estado local",
+ "pendingSync": "Sincronização pendente",
+ "synced": "Sincronizado",
+ "account": "Conta",
+ "sync": "Sincronização",
+ "manualFullSync": "Sincronização completa manual",
+ "runInBackgroundWhenClosed": "Continuar em execução quando a janela for fechada",
+ "showTrayIcon": "Mostrar ícone na área de notificação",
+ "startMinimizedToTray": "Iniciar minimizado na área de notificação",
+ "requiresTrayIcon": "Requer o ícone da área de notificação.",
+ "syncComplete": "Sincronização concluída.",
+ "syncFailed": "Falha na sincronização: {error}",
+ "notifySyncFailures": "Notificações de falhas de sincronização",
+ "notifyConflicts": "Notificações de conflitos",
+ "notifyDueToday": "Notificações de tarefas com prazo para hoje",
+ "eventReminders": "Lembretes de eventos",
+ "taskReminders": "Lembretes de tarefas",
+ "notificationDetailLevel": "Nível de detalhe das notificações",
+ "notificationDetailPrivate": "Privado",
+ "notificationDetailNormal": "Normal",
+ "quietHours": "Período de silêncio",
+ "quietHoursDescription": "Pausar as notificações durante este período.",
+ "quietHoursStart": "Início do período de silêncio",
+ "quietHoursEnd": "Fim do período de silêncio",
+ "notifications": "Notificações",
+ "appearance": "Aspeto",
+ "theme": "Tema",
+ "themeSystem": "Sistema",
+ "themeLight": "Claro",
+ "themeDark": "Escuro",
+ "themeFamily": "Família de temas",
+ "themeFamilyYaru": "Tema nativo do Ubuntu (Yaru)",
+ "localization": "Localização",
+ "currentLocale": "Configuração regional atual",
+ "privacy": "Privacidade",
+ "redactTaskContentInDiagnostics": "Ocultar o conteúdo das tarefas nos diagnósticos",
+ "developerDiagnostics": "Diagnósticos de programador",
+ "diagnostics": "Diagnósticos",
+ "apiInspectorDisabled": "Mostrar inspetor da API",
+ "googleTasksApi": "API do Google Tasks",
+ "discoveryRevision": "Revisão de descoberta: {revision}",
+ "implementedMethods": "Métodos implementados",
+ "supportsTasksScopes": "Suporta os âmbitos de autorização tasks e tasks.readonly",
+ "requiresTasksScope": "Requer o âmbito de autorização tasks",
+ "blockedPendingOperations": "Operações pendentes bloqueadas",
+ "signInToInspectPendingOperations": "Inicie sessão para inspecionar as operações pendentes.",
+ "noBlockedPendingOperations": "Não há operações pendentes bloqueadas.",
+ "operationActions": "Ações da operação",
+ "pendingOpListId": "lista={id}",
+ "pendingOpTaskId": "tarefa={id}",
+ "pendingOpAttempts": "tentativas={count}",
+ "retry": "Tentar novamente",
+ "discard": "Descartar",
+ "discardChangesAction": "Descartar",
+ "discardChanges": "Descartar alterações?",
+ "discardChangesConfirmation": "Esta ação descarta as alterações não guardadas nesta tarefa.",
+ "retryCompleted": "Nova tentativa concluída.",
+ "discardPendingOperation": "Descartar operação pendente?",
+ "discardPendingOperationConfirmation": "Esta ação remove a operação local bloqueada. Na próxima sincronização, os dados serão novamente carregados do Google Tasks.",
+ "pendingOperationDiscarded": "Operação pendente descartada.",
+ "syncFailureNotificationTitle": "Falha na sincronização do BusyMax",
+ "syncFailureNotificationBody": "A sincronização em segundo plano falhou. {message}",
+ "conflictNotificationTitle": "Conflito de sincronização do BusyMax",
+ "conflictNotificationBody": "Uma alteração local pendente foi bloqueada. {summary}",
+ "dueTodayNotificationTitle": "Tarefas com prazo para hoje",
+ "dueTodayNotificationBody": "{count, plural, =1{Há uma tarefa com prazo para hoje.} other{Há {count} tarefas com prazo para hoje.}}",
+ "eventReminderNotificationTitle": "Lembrete de evento",
+ "taskReminderNotificationTitle": "Lembrete de tarefa",
+ "eventReminderNotificationBody": "O evento começa em breve.",
+ "taskReminderNotificationBody": "O prazo da tarefa aproxima-se.",
+ "notificationOpenAction": "Abrir",
+ "notificationDetailsHidden": "Os detalhes estão ocultos pelas definições de privacidade.",
+ "previousMonth": "Mês anterior",
+ "nextMonth": "Mês seguinte",
+ "openMonthView": "Abrir vista mensal",
+ "previousYear": "Ano anterior",
+ "nextYear": "Ano seguinte",
+ "openYearView": "Abrir vista anual",
+ "weekNumberTooltip": "Semana {number}",
+ "resizeAllDayPanel": "Redimensionar o painel de dia inteiro",
+ "scheduleItemCount": "{count, plural, =1{1 item} other{{count} itens}}",
+ "readOnlyCalendar": "Este calendário é só de leitura.",
+ "selectTimeZone": "Selecionar fuso horário",
+ "searchLocations": "Pesquisar locais",
+ "noLocationsFound": "Nenhum local encontrado",
+ "deleteCalendarConfirmation": "Eliminar «{title}»?"
+}
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
new file mode 100644
index 0000000..6184aa3
--- /dev/null
+++ b/lib/l10n/app_ru.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "ru",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Подключите аккаунты Google и Microsoft, чтобы синхронизировать календари и задачи.",
+ "googlePermissionsConsentNotice": "На экране запроса доступа Google установите флажки «Google Календарь» и «Google Задачи».",
+ "googlePermissionsRequiredRetry": "BusyMax требуется доступ к Google Календарю и Google Задачам. Повторите попытку и установите оба флажка.",
+ "finishSetup": "Завершить настройку",
+ "continueSetup": "Продолжить",
+ "onboardingSetupTitle": "Настройка BusyMax",
+ "onboardingAccountsStepTitle": "Подключите аккаунты",
+ "onboardingAccountsStepDescription": "Добавьте все аккаунты Google и Microsoft, которые хотите использовать. BusyMax синхронизирует календари, события, списки задач и задачи из каждого аккаунта.",
+ "onboardingPreferencesStepTitle": "Выберите системные параметры",
+ "onboardingPreferencesStepDescription": "Настройте поведение приложения на рабочем столе, напоминания, уровень детализации уведомлений и внешний вид, прежде чем открыть расписание.",
+ "signInWithGoogle": "Войти через Google",
+ "signInWithMicrosoft": "Войти через Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "Этот сервис не настроен.",
+ "waitingForGoogleSignIn": "Ожидание входа через Google...",
+ "waitingForMicrosoftSignIn": "Ожидание входа через Microsoft...",
+ "microsoftSignInNotConfigured": "Вход через Microsoft не настроен. Задайте MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Отмена",
+ "close": "Закрыть",
+ "exit": "Выйти",
+ "options": "Параметры",
+ "hide": "Скрыть",
+ "show": "Показать",
+ "export": "Экспортировать",
+ "save": "Сохранить",
+ "settings": "Настройки",
+ "all": "Все",
+ "calendarEvents": "События",
+ "calendarTasks": "Задачи",
+ "calendar": "Календарь",
+ "calendars": "Календари",
+ "newEvent": "Новое событие",
+ "refreshCalendar": "Обновить календарь",
+ "openInProvider": "Открыть в сервисе",
+ "hideFromSchedule": "Скрыть из расписания",
+ "showInSchedule": "Показывать в расписании",
+ "noCalendarsSynced": "Синхронизированных календарей пока нет.",
+ "allDay": "Весь день",
+ "moreItems": "+ ещё {count}",
+ "noEventsOrTasks": "Нет событий или задач",
+ "scheduleLoading": "Загрузка расписания...",
+ "scheduleUnavailable": "Расписание недоступно",
+ "scheduleNoSources": "Нет видимых календарей или списков задач",
+ "scheduleNoSourcesDescription": "Выберите в настройках, что нужно показывать, а затем обновите расписание.",
+ "scheduleSignInRequired": "Подключите аккаунт",
+ "scheduleSignInDescription": "Войдите, чтобы синхронизировать календари и задачи.",
+ "scheduleNoSearchResults": "Подходящих событий или задач нет",
+ "scheduleNoSearchResultsDescription": "Попробуйте изменить запрос или сбросить текущие фильтры.",
+ "refresh": "Обновить",
+ "trayOpenBusyMax": "Открыть BusyMax",
+ "agendaLoadMoreOverdue": "Загрузить ещё просроченные задачи",
+ "agendaLoadMoreNoDate": "Загрузить ещё задачи без даты",
+ "viewDay": "День",
+ "viewWeek": "Неделя",
+ "viewMonth": "Месяц",
+ "viewYear": "Год",
+ "viewAgenda": "Расписание",
+ "scheduleSettings": "Расписание",
+ "scheduleDisplaySettings": "Отображение расписания",
+ "scheduleDisplayHoursDescription": "В представлениях дня и недели изначально отображается этот период. Более ранние или поздние записи при необходимости расширяют его.",
+ "scheduleDayStartsAt": "Начало дня",
+ "scheduleDayEndsAt": "Конец дня",
+ "sourceCalendar": "Календарь",
+ "sourceTaskList": "Список задач",
+ "createChoiceTitle": "Создать",
+ "createEventAtTime": "Событие",
+ "createTaskAtDate": "Задача",
+ "editEvent": "Изменить событие",
+ "eventTitle": "Название события",
+ "location": "Место",
+ "timeSlot": "Интервал времени",
+ "startDateTime": "Дата и время начала",
+ "endDateTime": "Дата и время окончания",
+ "doesNotRepeat": "Не повторяется",
+ "defaultReminder": "Напоминание по умолчанию",
+ "guests": "Гости",
+ "noGuests": "Нет гостей",
+ "description": "Описание",
+ "availabilityShowAs": "Показывать как",
+ "busy": "Занят",
+ "visibility": "Видимость",
+ "defaultVisibility": "Видимость по умолчанию",
+ "conference": "Конференция",
+ "noConference": "Без конференции",
+ "providerCalendar": "Календарь сервиса",
+ "formatBoldShortLabel": "Ж",
+ "formatBoldTooltip": "Полужирный",
+ "formatItalicShortLabel": "К",
+ "formatItalicTooltip": "Курсив",
+ "formatUnderlineShortLabel": "Ч",
+ "formatUnderlineTooltip": "Подчёркнутый",
+ "reminderMinutesBefore": "{minutes, plural, one{За {minutes} минуту} few{За {minutes} минуты} many{За {minutes} минут} other{За {minutes} минуты}}",
+ "reminderAtStart": "В момент начала",
+ "reminderHoursBefore": "{hours, plural, one{За {hours} час} few{За {hours} часа} many{За {hours} часов} other{За {hours} часа}}",
+ "reminderDaysBefore": "{days, plural, one{За {days} день} few{За {days} дня} many{За {days} дней} other{За {days} дня}}",
+ "availabilityFree": "Свободен",
+ "availabilityTentative": "Под вопросом",
+ "availabilityOutOfOffice": "Нет на рабочем месте",
+ "availabilityWorkingElsewhere": "Работа в другом месте",
+ "visibilityDefault": "По умолчанию",
+ "visibilityPublic": "Общедоступное",
+ "visibilityPrivate": "Личное",
+ "visibilityConfidential": "Конфиденциальное",
+ "sensitivityNormal": "Обычная",
+ "sensitivityPersonal": "Личная",
+ "tasks": "Задачи",
+ "allTasks": "Все задачи",
+ "tasksInList": "Задачи в списке «{title}»",
+ "taskLists": "Списки задач",
+ "navigation": "Навигация",
+ "mainMenu": "Главное меню",
+ "keyboardShortcuts": "Сочетания клавиш",
+ "shortcutGroupGeneral": "Общие",
+ "shortcutKeyboardShortcutsDescription": "Показать эту справку по сочетаниям клавиш",
+ "shortcutGroupNavigation": "Навигация",
+ "shortcutNextPeriod": "Следующий период",
+ "shortcutNextPeriodDescription": "Следующая неделя в представлении недели, следующий месяц в представлении месяца и так далее",
+ "shortcutPreviousPeriod": "Предыдущий период",
+ "shortcutPreviousPeriodDescription": "Предыдущая неделя в представлении недели, предыдущий месяц в представлении месяца и так далее",
+ "shortcutJumpToToday": "Перейти к сегодняшнему дню",
+ "shortcutGroupView": "Представление",
+ "shortcutDayView": "Представление дня",
+ "shortcutWeekView": "Представление недели",
+ "shortcutMonthView": "Представление месяца",
+ "shortcutYearView": "Представление года",
+ "shortcutAgendaView": "Расписание",
+ "shortcutGroupCreateAndEdit": "Создание и редактирование",
+ "shortcutSaveItem": "Сохранить событие или задачу",
+ "shortcutDeleteItem": "Удалить событие или задачу",
+ "shortcutGroupTaskEditing": "Редактирование задач",
+ "shortcutCancelEditing": "Отменить редактирование",
+ "shortcutCancelEditingDescription": "Выйти из режима редактирования задачи или закрыть сведения о ней",
+ "aboutBusyMax": "О приложении BusyMax",
+ "aboutBusyMaxDescription": "Календарь и задачи",
+ "license": "Лицензия",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Веб-сайт",
+ "sourceCode": "Исходный код",
+ "reportAnIssue": "Сообщить о проблеме",
+ "sendFeedback": "Отправить отзыв",
+ "feedbackSubmit": "Отправить",
+ "feedbackCategory": "Категория",
+ "feedbackSelectCategory": "Выберите категорию",
+ "feedbackCategoryProblem": "Проблема или ошибка",
+ "feedbackCategoryFeature": "Запрос функции",
+ "feedbackCategoryPrivacySecurity": "Проблема конфиденциальности или безопасности",
+ "feedbackCategoryUsability": "Проблема удобства использования",
+ "feedbackCategoryOther": "Другое",
+ "feedbackSubject": "Тема",
+ "feedbackDetailedMessage": "Подробное сообщение",
+ "feedbackReplyEmail": "Адрес электронной почты для ответа (необязательно)",
+ "feedbackIncludeTechnicalDetails": "Включить технические сведения",
+ "feedbackTechnicalDetailsDisclosure": "Будут добавлены только версия Linux и выбранный язык приложения. Журналы, данные аккаунтов, имена файлов и другие диагностические сведения не добавляются.",
+ "feedbackCategoryRequired": "Выберите категорию.",
+ "feedbackSubjectLengthError": "Тема должна содержать от 3 до 120 символов.",
+ "feedbackMessageLengthError": "Сообщение должно содержать от 10 до 5 000 символов.",
+ "feedbackInvalidEmail": "Введите действительный адрес электронной почты.",
+ "feedbackConnectionError": "Не удалось подключиться к BusyStack. Проверьте подключение и повторите попытку.",
+ "feedbackTimeoutError": "Время ожидания запроса истекло. Текст отзыва сохранён. Повторите попытку.",
+ "feedbackRateLimitedError": "Из этой сети было отправлено слишком много отзывов. Подождите и повторите попытку.",
+ "feedbackRejectedError": "Сервер отклонил отправку. Проверьте поля и повторите попытку.",
+ "feedbackServerError": "BusyStack сейчас не может принять ваш отзыв. Текст отзыва сохранён. Повторите попытку.",
+ "feedbackSuccess": "Отзыв отправлен. Номер: {id}",
+ "toggleSidebar": "Показать или скрыть боковую панель",
+ "showSidebar": "Показать боковую панель",
+ "hideSidebar": "Скрыть боковую панель",
+ "accounts": "Аккаунты",
+ "currentAccount": "Текущий аккаунт",
+ "switchAccount": "Сменить аккаунт",
+ "addGoogleAccount": "Добавить аккаунт Google",
+ "addMicrosoftAccount": "Добавить аккаунт Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Выполнен вход",
+ "removeAccount": "Удалить аккаунт…",
+ "removingAccount": "Удаление аккаунта…",
+ "removeAccountDescription": "Остановить синхронизацию и удалить данные этого аккаунта с устройства.",
+ "removeAccountTitle": "Удалить {account} из BusyMax?",
+ "removeAccountConfirmation": "С этого устройства будут удалены кэшированные задачи, календари, события, напоминания и локальные изменения, ожидающие синхронизации. Несинхронизированные изменения будут потеряны. В Google и Microsoft ничего не будет удалено.",
+ "revokeGoogleAccess": "Также отозвать у BusyMax доступ к этому аккаунту Google",
+ "revokeGoogleAccessDescription": "Перед повторным подключением аккаунта потребуется снова предоставить доступ.",
+ "removeAccountAction": "Удалить аккаунт",
+ "removeAccountFailed": "Не удалось завершить удаление аккаунта. Повторите попытку.",
+ "accountRemovedGoogleRevokeFailed": "Аккаунт удалён с этого устройства, но отозвать доступ BusyMax к Google не удалось. Вы можете отозвать доступ в аккаунте Google.",
+ "newList": "Новый список",
+ "signInToViewTaskLists": "Войдите, чтобы просмотреть списки задач.",
+ "noTaskListsSynced": "Синхронизированных списков задач пока нет.",
+ "listActions": "Действия со списком",
+ "rename": "Переименовать",
+ "delete": "Удалить",
+ "renameList": "Переименовать список",
+ "deleteList": "Удалить список",
+ "builtInMicrosoftList": "Встроенный",
+ "builtInMicrosoftListCannotRenameDelete": "Встроенные списки Microsoft To Do нельзя переименовывать или удалять.",
+ "deleteListConfirmation": "Удалить «{title}» из Google Tasks?",
+ "deleteEvent": "Удалить событие",
+ "title": "Название",
+ "create": "Создать",
+ "newTask": "Новая задача",
+ "clearCompleted": "Удалить выполненные",
+ "refreshList": "Обновить список",
+ "refreshAll": "Обновить всё",
+ "listRefreshed": "Список обновлён.",
+ "allTasksRefreshed": "Все аккаунты обновлены.",
+ "exportedFile": "Экспортировано в {path}",
+ "exportFailed": "Не удалось экспортировать: {error}",
+ "refreshFailed": "Не удалось обновить: {error}",
+ "selectOrCreateTaskList": "Сначала выберите или создайте список задач.",
+ "signInToViewTasks": "Войдите, чтобы просмотреть задачи.",
+ "noTasks": "Задач нет.",
+ "noTasksYet": "Задач пока нет",
+ "noTasksYetMessage": "Создайте задачу или обновите аккаунты, чтобы начать.",
+ "noTasksInList": "В этом списке нет задач.",
+ "overdue": "Просроченные",
+ "today": "Сегодня",
+ "tomorrow": "Завтра",
+ "upcoming": "Предстоящие",
+ "noDate": "Без даты",
+ "completed": "Выполненные",
+ "duePrefix": "Срок: {date}",
+ "dateTimeDisplay": "{date}, {time}",
+ "taskDetails": "Сведения о задаче",
+ "editTask": "Изменить задачу",
+ "noTaskSelected": "Задача не выбрана.",
+ "noTaskSelectedHelper": "Выберите задачу, чтобы просмотреть и изменить её сведения.",
+ "taskUnavailable": "Задача недоступна.",
+ "signInToEditTasks": "Войдите, чтобы изменять задачи.",
+ "refreshTask": "Обновить задачу",
+ "primarySection": "Основные сведения",
+ "statusSection": "Состояние",
+ "openStatus": "Открыта",
+ "doneStatus": "Выполнена",
+ "notes": "Заметки",
+ "dueDate": "Срок",
+ "clearDueDate": "Удалить срок выполнения",
+ "dueTime": "Время выполнения",
+ "startDate": "Дата начала",
+ "startTime": "Время начала",
+ "endDate": "Дата окончания",
+ "endTime": "Время окончания",
+ "reminderDate": "Дата напоминания",
+ "reminderTime": "Время напоминания",
+ "reminder": "Напоминание",
+ "addReminder": "Добавить напоминание",
+ "addGuest": "Добавить гостя",
+ "addGuestEmail": "Добавить адрес электронной почты гостя",
+ "removeReminder": "Удалить напоминание",
+ "off": "Выкл.",
+ "repeat": "Повтор",
+ "repeatNone": "Не повторять",
+ "noneValue": "Нет",
+ "repeatDaily": "Ежедневно",
+ "repeatWeekly": "Еженедельно",
+ "repeatMonthly": "Ежемесячно",
+ "repeatYearly": "Ежегодно",
+ "importance": "Важность",
+ "importanceLow": "Низкая",
+ "importanceNormal": "Обычная",
+ "importanceHigh": "Высокая",
+ "categories": "Категории",
+ "scheduleSection": "Расписание",
+ "dueGroup": "Срок",
+ "startGroup": "Начало",
+ "reminderGroup": "Напоминание",
+ "organizationSection": "Организация",
+ "actionsSection": "Действия",
+ "advancedSection": "Дополнительно",
+ "addCategory": "Добавить категорию",
+ "list": "Список",
+ "microsoftMoveUnsupported": "В этой версии перенос между списками для аккаунтов Microsoft To Do не поддерживается.",
+ "createSubtask": "Создать подзадачу",
+ "moveToTop": "Переместить в самый верх",
+ "deleteTask": "Удалить задачу",
+ "newSubtask": "Новая подзадача",
+ "deleteTaskConfirmation": "Удалить «{title}» из Google Tasks?",
+ "metadata": "Метаданные",
+ "id": "Идентификатор",
+ "etag": "ETag",
+ "updated": "Обновлено",
+ "parent": "Родительская задача",
+ "position": "Позиция",
+ "webLink": "Веб-ссылка",
+ "assignment": "Назначение",
+ "localState": "Локальное состояние",
+ "pendingSync": "Ожидает синхронизации",
+ "synced": "Синхронизировано",
+ "account": "Аккаунт",
+ "sync": "Синхронизация",
+ "manualFullSync": "Полная синхронизация вручную",
+ "runInBackgroundWhenClosed": "Продолжать работу после закрытия окна",
+ "showTrayIcon": "Показывать значок в области уведомлений",
+ "startMinimizedToTray": "Запускать свёрнутым в область уведомлений",
+ "requiresTrayIcon": "Требуется значок в области уведомлений.",
+ "syncComplete": "Синхронизация завершена.",
+ "syncFailed": "Синхронизация не удалась: {error}",
+ "notifySyncFailures": "Уведомлять об ошибках синхронизации",
+ "notifyConflicts": "Уведомлять о конфликтах",
+ "notifyDueToday": "Уведомлять о задачах на сегодня",
+ "eventReminders": "Напоминания о событиях",
+ "taskReminders": "Напоминания о задачах",
+ "notificationDetailLevel": "Содержимое уведомлений",
+ "notificationDetailPrivate": "Скрывать подробности",
+ "notificationDetailNormal": "Показывать подробности",
+ "quietHours": "Период без уведомлений",
+ "quietHoursDescription": "Не показывать уведомления в это время.",
+ "quietHoursStart": "Начало периода",
+ "quietHoursEnd": "Конец периода",
+ "notifications": "Уведомления",
+ "appearance": "Внешний вид",
+ "theme": "Тема",
+ "themeSystem": "Системная",
+ "themeLight": "Светлая",
+ "themeDark": "Тёмная",
+ "themeFamily": "Семейство тем",
+ "themeFamilyYaru": "Стандартная тема Ubuntu (Yaru)",
+ "localization": "Язык",
+ "currentLocale": "Язык приложения",
+ "privacy": "Конфиденциальность",
+ "redactTaskContentInDiagnostics": "Скрывать содержимое задач в диагностике",
+ "developerDiagnostics": "Диагностика для разработчиков",
+ "diagnostics": "Диагностика",
+ "apiInspectorDisabled": "Показать инспектор API",
+ "googleTasksApi": "API Google Tasks",
+ "discoveryRevision": "Версия Discovery: {revision}",
+ "implementedMethods": "Реализованные методы",
+ "supportsTasksScopes": "Поддерживает области разрешений tasks и tasks.readonly",
+ "requiresTasksScope": "Требуется область разрешений tasks",
+ "blockedPendingOperations": "Заблокированные операции",
+ "signInToInspectPendingOperations": "Войдите, чтобы просмотреть ожидающие операции.",
+ "noBlockedPendingOperations": "Заблокированных операций нет.",
+ "operationActions": "Действия с операцией",
+ "pendingOpListId": "список={id}",
+ "pendingOpTaskId": "задача={id}",
+ "pendingOpAttempts": "попытки={count}",
+ "retry": "Повторить",
+ "discard": "Отменить",
+ "discardChangesAction": "Не сохранять",
+ "discardChanges": "Не сохранять изменения?",
+ "discardChangesConfirmation": "Несохранённые изменения этой задачи будут потеряны.",
+ "retryCompleted": "Повторная попытка завершена.",
+ "discardPendingOperation": "Удалить заблокированную операцию?",
+ "discardPendingOperationConfirmation": "Заблокированная локальная операция будет удалена. При следующей синхронизации данные будут заново загружены из Google Tasks.",
+ "pendingOperationDiscarded": "Заблокированная операция удалена.",
+ "syncFailureNotificationTitle": "Сбой синхронизации BusyMax",
+ "syncFailureNotificationBody": "Сбой фоновой синхронизации. {message}",
+ "conflictNotificationTitle": "Конфликт синхронизации BusyMax",
+ "conflictNotificationBody": "Локальное изменение не удалось синхронизировать. {summary}",
+ "dueTodayNotificationTitle": "Задачи на сегодня",
+ "dueTodayNotificationBody": "{count, plural, one{Сегодня нужно выполнить {count} задачу.} few{Сегодня нужно выполнить {count} задачи.} many{Сегодня нужно выполнить {count} задач.} other{Сегодня нужно выполнить {count} задачи.}}",
+ "eventReminderNotificationTitle": "Напоминание о событии",
+ "taskReminderNotificationTitle": "Напоминание о задаче",
+ "eventReminderNotificationBody": "Событие скоро начнётся.",
+ "taskReminderNotificationBody": "Срок выполнения задачи скоро наступит.",
+ "notificationOpenAction": "Открыть",
+ "notificationDetailsHidden": "Сведения скрыты настройками конфиденциальности.",
+ "previousMonth": "Предыдущий месяц",
+ "nextMonth": "Следующий месяц",
+ "openMonthView": "Открыть представление месяца",
+ "previousYear": "Предыдущий год",
+ "nextYear": "Следующий год",
+ "openYearView": "Открыть представление года",
+ "weekNumberTooltip": "Неделя {number}",
+ "resizeAllDayPanel": "Изменить размер панели «Весь день»",
+ "scheduleItemCount": "{count, plural, one{{count} запись} few{{count} записи} many{{count} записей} other{{count} записи}}",
+ "readOnlyCalendar": "Этот календарь доступен только для чтения.",
+ "selectTimeZone": "Выберите часовой пояс",
+ "searchLocations": "Поиск города",
+ "noLocationsFound": "Ничего не найдено",
+ "deleteCalendarConfirmation": "Удалить «{title}»?"
+}
diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb
new file mode 100644
index 0000000..1a0d6a5
--- /dev/null
+++ b/lib/l10n/app_vi.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "vi",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "Kết nối tài khoản Google và Microsoft để đồng bộ lịch và công việc.",
+ "googlePermissionsConsentNotice": "Trên màn hình cấp quyền của Google, hãy chọn cả quyền truy cập Lịch và Công việc.",
+ "googlePermissionsRequiredRetry": "Cần có quyền truy cập Google Calendar và Google Tasks. Vui lòng thử lại và chọn cả hai hộp kiểm.",
+ "finishSetup": "Hoàn tất thiết lập",
+ "continueSetup": "Tiếp tục",
+ "onboardingSetupTitle": "Thiết lập BusyMax",
+ "onboardingAccountsStepTitle": "Kết nối tài khoản",
+ "onboardingAccountsStepDescription": "Thêm tất cả tài khoản Google và Microsoft bạn muốn sử dụng. BusyMax đồng bộ lịch, sự kiện, danh sách công việc và công việc từ mỗi tài khoản.",
+ "onboardingPreferencesStepTitle": "Chọn cài đặt hệ thống",
+ "onboardingPreferencesStepDescription": "Thiết lập cách ứng dụng hoạt động trên máy tính, lời nhắc, mức độ chi tiết của thông báo và giao diện trước khi mở lịch biểu.",
+ "signInWithGoogle": "Đăng nhập bằng Google",
+ "signInWithMicrosoft": "Đăng nhập bằng Microsoft",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "Dịch vụ này chưa được cấu hình.",
+ "waitingForGoogleSignIn": "Đang chờ đăng nhập Google...",
+ "waitingForMicrosoftSignIn": "Đang chờ đăng nhập Microsoft...",
+ "microsoftSignInNotConfigured": "Tính năng đăng nhập Microsoft chưa được cấu hình. Hãy đặt MICROSOFT_OAUTH_CLIENT_ID.",
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "exit": "Thoát",
+ "options": "Tùy chọn",
+ "hide": "Ẩn",
+ "show": "Hiện",
+ "export": "Xuất",
+ "save": "Lưu",
+ "settings": "Cài đặt",
+ "all": "Tất cả",
+ "calendarEvents": "Sự kiện",
+ "calendarTasks": "Công việc",
+ "calendar": "Lịch",
+ "calendars": "Lịch",
+ "newEvent": "Sự kiện mới",
+ "refreshCalendar": "Làm mới lịch",
+ "openInProvider": "Mở trong dịch vụ",
+ "hideFromSchedule": "Ẩn khỏi lịch biểu",
+ "showInSchedule": "Hiện trong lịch biểu",
+ "noCalendarsSynced": "Chưa có lịch nào được đồng bộ.",
+ "allDay": "Cả ngày",
+ "moreItems": "+{count} mục khác",
+ "noEventsOrTasks": "Không có sự kiện hoặc công việc",
+ "scheduleLoading": "Đang tải lịch biểu...",
+ "scheduleUnavailable": "Lịch biểu không khả dụng",
+ "scheduleNoSources": "Không có lịch hoặc danh sách công việc nào đang hiển thị",
+ "scheduleNoSourcesDescription": "Chọn nội dung cần hiển thị trong Cài đặt, sau đó làm mới lịch biểu.",
+ "scheduleSignInRequired": "Kết nối tài khoản",
+ "scheduleSignInDescription": "Đăng nhập để đồng bộ lịch và công việc.",
+ "scheduleNoSearchResults": "Không có sự kiện hoặc công việc phù hợp",
+ "scheduleNoSearchResultsDescription": "Thử tìm kiếm khác hoặc xóa các bộ lọc hiện tại.",
+ "refresh": "Làm mới",
+ "trayOpenBusyMax": "Mở BusyMax",
+ "agendaLoadMoreOverdue": "Tải thêm công việc quá hạn",
+ "agendaLoadMoreNoDate": "Tải thêm công việc không có ngày",
+ "viewDay": "Ngày",
+ "viewWeek": "Tuần",
+ "viewMonth": "Tháng",
+ "viewYear": "Năm",
+ "viewAgenda": "Lịch biểu",
+ "scheduleSettings": "Lịch biểu",
+ "scheduleDisplaySettings": "Hiển thị lịch biểu",
+ "scheduleDisplayHoursDescription": "Chế độ xem Ngày và Tuần ban đầu hiển thị khoảng thời gian này. Các mục sớm hơn hoặc muộn hơn sẽ mở rộng khoảng hiển thị khi cần.",
+ "scheduleDayStartsAt": "Ngày bắt đầu lúc",
+ "scheduleDayEndsAt": "Ngày kết thúc lúc",
+ "sourceCalendar": "Lịch",
+ "sourceTaskList": "Danh sách công việc",
+ "createChoiceTitle": "Tạo",
+ "createEventAtTime": "Sự kiện",
+ "createTaskAtDate": "Công việc",
+ "editEvent": "Chỉnh sửa sự kiện",
+ "eventTitle": "Tiêu đề sự kiện",
+ "location": "Địa điểm",
+ "timeSlot": "Khoảng thời gian",
+ "startDateTime": "Ngày/giờ bắt đầu",
+ "endDateTime": "Ngày/giờ kết thúc",
+ "doesNotRepeat": "Không lặp lại",
+ "defaultReminder": "Lời nhắc mặc định",
+ "guests": "Khách mời",
+ "noGuests": "Không có khách mời",
+ "description": "Mô tả",
+ "availabilityShowAs": "Tình trạng rảnh/bận / Hiển thị là",
+ "busy": "Bận",
+ "visibility": "Chế độ hiển thị",
+ "defaultVisibility": "Chế độ hiển thị mặc định",
+ "conference": "Cuộc họp",
+ "noConference": "Không có cuộc họp",
+ "providerCalendar": "Lịch của dịch vụ",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "Đậm",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "Nghiêng",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "Gạch chân",
+ "reminderMinutesBefore": "{minutes, plural, =1{Trước 1 phút} other{Trước {minutes} phút}}",
+ "reminderAtStart": "Khi bắt đầu",
+ "reminderHoursBefore": "{hours, plural, =1{Trước 1 giờ} other{Trước {hours} giờ}}",
+ "reminderDaysBefore": "{days, plural, =1{Trước 1 ngày} other{Trước {days} ngày}}",
+ "availabilityFree": "Rảnh",
+ "availabilityTentative": "Dự kiến",
+ "availabilityOutOfOffice": "Vắng mặt",
+ "availabilityWorkingElsewhere": "Làm việc ở nơi khác",
+ "visibilityDefault": "Mặc định",
+ "visibilityPublic": "Công khai",
+ "visibilityPrivate": "Riêng tư",
+ "visibilityConfidential": "Bảo mật",
+ "sensitivityNormal": "Bình thường",
+ "sensitivityPersonal": "Cá nhân",
+ "tasks": "Công việc",
+ "allTasks": "Tất cả công việc",
+ "tasksInList": "Công việc trong {title}",
+ "taskLists": "Danh sách công việc",
+ "navigation": "Điều hướng",
+ "mainMenu": "Trình đơn chính",
+ "keyboardShortcuts": "Phím tắt",
+ "shortcutGroupGeneral": "Chung",
+ "shortcutKeyboardShortcutsDescription": "Hiển thị bảng tham khảo phím tắt này",
+ "shortcutGroupNavigation": "Điều hướng",
+ "shortcutNextPeriod": "Khoảng tiếp theo",
+ "shortcutNextPeriodDescription": "Tuần tiếp theo trong chế độ xem tuần, tháng tiếp theo trong chế độ xem tháng, v.v.",
+ "shortcutPreviousPeriod": "Khoảng trước đó",
+ "shortcutPreviousPeriodDescription": "Tuần trước trong chế độ xem tuần, tháng trước trong chế độ xem tháng, v.v.",
+ "shortcutJumpToToday": "Chuyển đến hôm nay",
+ "shortcutGroupView": "Chế độ xem",
+ "shortcutDayView": "Chế độ xem ngày",
+ "shortcutWeekView": "Chế độ xem tuần",
+ "shortcutMonthView": "Chế độ xem tháng",
+ "shortcutYearView": "Chế độ xem năm",
+ "shortcutAgendaView": "Chế độ xem lịch biểu",
+ "shortcutGroupCreateAndEdit": "Tạo và chỉnh sửa",
+ "shortcutSaveItem": "Lưu sự kiện hoặc công việc",
+ "shortcutDeleteItem": "Xóa sự kiện hoặc công việc",
+ "shortcutGroupTaskEditing": "Chỉnh sửa công việc",
+ "shortcutCancelEditing": "Hủy chỉnh sửa",
+ "shortcutCancelEditingDescription": "Đóng phần chỉnh sửa hoặc chi tiết công việc",
+ "aboutBusyMax": "Giới thiệu BusyMax",
+ "aboutBusyMaxDescription": "Lịch và công việc",
+ "license": "Giấy phép",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "Trang web",
+ "sourceCode": "Mã nguồn",
+ "reportAnIssue": "Báo cáo sự cố",
+ "sendFeedback": "Gửi phản hồi",
+ "feedbackSubmit": "Gửi",
+ "feedbackCategory": "Danh mục",
+ "feedbackSelectCategory": "Chọn một danh mục",
+ "feedbackCategoryProblem": "Sự cố hoặc lỗi",
+ "feedbackCategoryFeature": "Yêu cầu tính năng",
+ "feedbackCategoryPrivacySecurity": "Vấn đề về quyền riêng tư hoặc bảo mật",
+ "feedbackCategoryUsability": "Vấn đề về khả năng sử dụng",
+ "feedbackCategoryOther": "Khác",
+ "feedbackSubject": "Chủ đề",
+ "feedbackDetailedMessage": "Nội dung chi tiết",
+ "feedbackReplyEmail": "Địa chỉ email để nhận phản hồi (không bắt buộc)",
+ "feedbackIncludeTechnicalDetails": "Bao gồm chi tiết kỹ thuật",
+ "feedbackTechnicalDetailsDisclosure": "Chỉ thêm phiên bản hệ điều hành Linux và ngôn ngữ, khu vực của ứng dụng. Không bao gồm nhật ký, dữ liệu tài khoản, tên tệp hoặc thông tin chẩn đoán khác.",
+ "feedbackCategoryRequired": "Hãy chọn một danh mục.",
+ "feedbackSubjectLengthError": "Chủ đề phải có từ 3 đến 120 ký tự.",
+ "feedbackMessageLengthError": "Nội dung phải có từ 10 đến 5.000 ký tự.",
+ "feedbackInvalidEmail": "Nhập địa chỉ email hợp lệ.",
+ "feedbackConnectionError": "Không thể kết nối với BusyStack. Hãy kiểm tra kết nối và thử lại.",
+ "feedbackTimeoutError": "Yêu cầu đã hết thời gian chờ. Phản hồi của bạn chưa bị xóa; hãy thử lại.",
+ "feedbackRateLimitedError": "Đã gửi quá nhiều phản hồi từ mạng này. Vui lòng chờ rồi thử lại.",
+ "feedbackRejectedError": "Máy chủ đã từ chối nội dung gửi. Hãy kiểm tra các trường và thử lại.",
+ "feedbackServerError": "BusyStack hiện không thể nhận phản hồi của bạn. Phản hồi chưa bị xóa; hãy thử lại.",
+ "feedbackSuccess": "Đã gửi phản hồi. Mã tham chiếu: {id}",
+ "toggleSidebar": "Hiện hoặc ẩn thanh bên",
+ "showSidebar": "Hiện bảng bên",
+ "hideSidebar": "Ẩn bảng bên",
+ "accounts": "Tài khoản",
+ "currentAccount": "Tài khoản hiện tại",
+ "switchAccount": "Chuyển tài khoản",
+ "addGoogleAccount": "Thêm tài khoản Google",
+ "addMicrosoftAccount": "Thêm tài khoản Microsoft",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "Đã đăng nhập",
+ "removeAccount": "Xóa tài khoản…",
+ "removingAccount": "Đang xóa tài khoản…",
+ "removeAccountDescription": "Dừng đồng bộ và xóa dữ liệu của tài khoản này khỏi thiết bị.",
+ "removeAccountTitle": "Xóa {account} khỏi BusyMax?",
+ "removeAccountConfirmation": "Thao tác này sẽ xóa công việc, lịch, sự kiện, lời nhắc đã lưu trong bộ nhớ đệm và các thay đổi ngoại tuyến đang chờ khỏi thiết bị. Các thay đổi chưa đồng bộ sẽ bị mất. Không có dữ liệu nào bị xóa khỏi Google hoặc Microsoft.",
+ "revokeGoogleAccess": "Đồng thời thu hồi quyền truy cập của BusyMax vào tài khoản Google này",
+ "revokeGoogleAccessDescription": "Bạn sẽ cần cấp lại quyền truy cập trước khi kết nối lại.",
+ "removeAccountAction": "Xóa tài khoản",
+ "removeAccountFailed": "Không thể hoàn tất việc xóa tài khoản. Hãy thử lại.",
+ "accountRemovedGoogleRevokeFailed": "Tài khoản đã bị xóa khỏi thiết bị này, nhưng BusyMax không thể thu hồi quyền truy cập vào tài khoản Google. Bạn có thể thu hồi quyền trong phần cài đặt Tài khoản Google.",
+ "newList": "Danh sách mới",
+ "signInToViewTaskLists": "Đăng nhập để xem danh sách công việc.",
+ "noTaskListsSynced": "Chưa có danh sách công việc nào được đồng bộ.",
+ "listActions": "Thao tác với danh sách",
+ "rename": "Đổi tên",
+ "delete": "Xóa",
+ "renameList": "Đổi tên danh sách",
+ "deleteList": "Xóa danh sách",
+ "builtInMicrosoftList": "Tích hợp sẵn",
+ "builtInMicrosoftListCannotRenameDelete": "Không thể đổi tên hoặc xóa danh sách tích hợp sẵn của Microsoft To Do.",
+ "deleteListConfirmation": "Xóa “{title}” khỏi Google Tasks?",
+ "deleteEvent": "Xóa sự kiện",
+ "title": "Tiêu đề",
+ "create": "Tạo",
+ "newTask": "Công việc mới",
+ "clearCompleted": "Xóa các công việc đã hoàn thành",
+ "refreshList": "Làm mới danh sách",
+ "refreshAll": "Làm mới tất cả",
+ "listRefreshed": "Đã làm mới danh sách.",
+ "allTasksRefreshed": "Đã làm mới tất cả tài khoản.",
+ "exportedFile": "Đã xuất sang {path}",
+ "exportFailed": "Xuất không thành công: {error}",
+ "refreshFailed": "Làm mới không thành công: {error}",
+ "selectOrCreateTaskList": "Chọn hoặc tạo một danh sách công việc để bắt đầu.",
+ "signInToViewTasks": "Đăng nhập để xem công việc.",
+ "noTasks": "Không có công việc.",
+ "noTasksYet": "Chưa có công việc",
+ "noTasksYetMessage": "Tạo một công việc hoặc làm mới tài khoản để bắt đầu.",
+ "noTasksInList": "Không có công việc nào trong danh sách này.",
+ "overdue": "Quá hạn",
+ "today": "Hôm nay",
+ "tomorrow": "Ngày mai",
+ "upcoming": "Sắp tới",
+ "noDate": "Không có ngày",
+ "completed": "Đã hoàn thành",
+ "duePrefix": "Đến hạn {date}",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "Chi tiết công việc",
+ "editTask": "Chỉnh sửa công việc",
+ "noTaskSelected": "Chưa chọn công việc.",
+ "noTaskSelectedHelper": "Chọn một công việc để xem và chỉnh sửa chi tiết.",
+ "taskUnavailable": "Công việc không khả dụng.",
+ "signInToEditTasks": "Đăng nhập để chỉnh sửa công việc.",
+ "refreshTask": "Làm mới công việc",
+ "primarySection": "Chính",
+ "statusSection": "Trạng thái",
+ "openStatus": "Chưa hoàn thành",
+ "doneStatus": "Đã hoàn thành",
+ "notes": "Ghi chú",
+ "dueDate": "Ngày đến hạn",
+ "clearDueDate": "Xóa ngày đến hạn",
+ "dueTime": "Giờ đến hạn",
+ "startDate": "Ngày bắt đầu",
+ "startTime": "Giờ bắt đầu",
+ "endDate": "Ngày kết thúc",
+ "endTime": "Giờ kết thúc",
+ "reminderDate": "Ngày nhắc",
+ "reminderTime": "Giờ nhắc",
+ "reminder": "Lời nhắc",
+ "addReminder": "Thêm lời nhắc",
+ "addGuest": "Thêm khách mời",
+ "addGuestEmail": "Thêm email khách mời",
+ "removeReminder": "Xóa lời nhắc",
+ "off": "Tắt",
+ "repeat": "Lặp lại",
+ "repeatNone": "Không lặp lại",
+ "noneValue": "Không có",
+ "repeatDaily": "Hằng ngày",
+ "repeatWeekly": "Hằng tuần",
+ "repeatMonthly": "Hằng tháng",
+ "repeatYearly": "Hằng năm",
+ "importance": "Mức độ quan trọng",
+ "importanceLow": "Thấp",
+ "importanceNormal": "Bình thường",
+ "importanceHigh": "Cao",
+ "categories": "Danh mục",
+ "scheduleSection": "Lịch",
+ "dueGroup": "Đến hạn",
+ "startGroup": "Bắt đầu",
+ "reminderGroup": "Lời nhắc",
+ "organizationSection": "Sắp xếp",
+ "actionsSection": "Thao tác",
+ "advancedSection": "Nâng cao",
+ "addCategory": "Thêm danh mục",
+ "list": "Danh sách",
+ "microsoftMoveUnsupported": "Phiên bản này không hỗ trợ di chuyển công việc giữa các danh sách trong tài khoản Microsoft To Do.",
+ "createSubtask": "Tạo công việc con",
+ "moveToTop": "Chuyển lên đầu",
+ "deleteTask": "Xóa công việc",
+ "newSubtask": "Công việc con mới",
+ "deleteTaskConfirmation": "Xóa “{title}” khỏi Google Tasks?",
+ "metadata": "Siêu dữ liệu",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "Đã cập nhật",
+ "parent": "Công việc cha",
+ "position": "Vị trí",
+ "webLink": "Liên kết web",
+ "assignment": "Phân công",
+ "localState": "Trạng thái cục bộ",
+ "pendingSync": "Đang chờ đồng bộ",
+ "synced": "Đã đồng bộ",
+ "account": "Tài khoản",
+ "sync": "Đồng bộ",
+ "manualFullSync": "Đồng bộ toàn bộ thủ công",
+ "runInBackgroundWhenClosed": "Tiếp tục chạy khi đóng cửa sổ",
+ "showTrayIcon": "Hiện biểu tượng khay hệ thống",
+ "startMinimizedToTray": "Khởi động thu nhỏ vào khay hệ thống",
+ "requiresTrayIcon": "Yêu cầu biểu tượng khay hệ thống.",
+ "syncComplete": "Đồng bộ hoàn tất.",
+ "syncFailed": "Đồng bộ không thành công: {error}",
+ "notifySyncFailures": "Thông báo khi đồng bộ thất bại",
+ "notifyConflicts": "Thông báo khi có xung đột",
+ "notifyDueToday": "Thông báo công việc đến hạn hôm nay",
+ "eventReminders": "Lời nhắc sự kiện",
+ "taskReminders": "Lời nhắc công việc",
+ "notificationDetailLevel": "Mức độ chi tiết của thông báo",
+ "notificationDetailPrivate": "Riêng tư",
+ "notificationDetailNormal": "Bình thường",
+ "quietHours": "Giờ yên tĩnh",
+ "quietHoursDescription": "Tạm dừng thông báo trong khoảng thời gian này.",
+ "quietHoursStart": "Bắt đầu giờ yên tĩnh",
+ "quietHoursEnd": "Kết thúc giờ yên tĩnh",
+ "notifications": "Thông báo",
+ "appearance": "Giao diện",
+ "theme": "Chủ đề",
+ "themeSystem": "Hệ thống",
+ "themeLight": "Sáng",
+ "themeDark": "Tối",
+ "themeFamily": "Họ chủ đề",
+ "themeFamilyYaru": "Chủ đề Ubuntu nguyên bản (Yaru)",
+ "localization": "Ngôn ngữ và khu vực",
+ "currentLocale": "Ngôn ngữ và khu vực hiện tại",
+ "privacy": "Quyền riêng tư",
+ "redactTaskContentInDiagnostics": "Ẩn nội dung công việc trong thông tin chẩn đoán",
+ "developerDiagnostics": "Chẩn đoán dành cho nhà phát triển",
+ "diagnostics": "Chẩn đoán",
+ "apiInspectorDisabled": "Hiện trình kiểm tra API",
+ "googleTasksApi": "API Google Tasks",
+ "discoveryRevision": "Bản sửa đổi Discovery: {revision}",
+ "implementedMethods": "Phương thức đã triển khai",
+ "supportsTasksScopes": "Hỗ trợ phạm vi tasks và tasks.readonly",
+ "requiresTasksScope": "Yêu cầu phạm vi tasks",
+ "blockedPendingOperations": "Thao tác đang chờ bị chặn",
+ "signInToInspectPendingOperations": "Đăng nhập để kiểm tra các thao tác đang chờ.",
+ "noBlockedPendingOperations": "Không có thao tác đang chờ nào bị chặn.",
+ "operationActions": "Hành động cho thao tác",
+ "pendingOpListId": "danh_sách={id}",
+ "pendingOpTaskId": "công_việc={id}",
+ "pendingOpAttempts": "số_lần_thử={count}",
+ "retry": "Thử lại",
+ "discard": "Hủy bỏ",
+ "discardChangesAction": "Không lưu",
+ "discardChanges": "Hủy bỏ thay đổi?",
+ "discardChangesConfirmation": "Thao tác này sẽ hủy bỏ các chỉnh sửa chưa lưu đối với công việc.",
+ "retryCompleted": "Đã thử lại.",
+ "discardPendingOperation": "Hủy bỏ thao tác đang chờ?",
+ "discardPendingOperationConfirmation": "Thao tác này sẽ xóa thao tác cục bộ bị chặn. Lần đồng bộ tiếp theo sẽ tải lại dữ liệu từ Google Tasks.",
+ "pendingOperationDiscarded": "Đã hủy bỏ thao tác đang chờ.",
+ "syncFailureNotificationTitle": "Đồng bộ BusyMax không thành công",
+ "syncFailureNotificationBody": "Đồng bộ nền không thành công. {message}",
+ "conflictNotificationTitle": "Xung đột đồng bộ BusyMax",
+ "conflictNotificationBody": "Một thay đổi cục bộ đang chờ đã bị chặn. {summary}",
+ "dueTodayNotificationTitle": "Công việc đến hạn hôm nay",
+ "dueTodayNotificationBody": "{count, plural, =1{Có một công việc đến hạn hôm nay.} other{Có {count} công việc đến hạn hôm nay.}}",
+ "eventReminderNotificationTitle": "Lời nhắc sự kiện",
+ "taskReminderNotificationTitle": "Lời nhắc công việc",
+ "eventReminderNotificationBody": "Sự kiện sắp bắt đầu.",
+ "taskReminderNotificationBody": "Công việc sắp đến hạn.",
+ "notificationOpenAction": "Mở",
+ "notificationDetailsHidden": "Chi tiết bị ẩn theo cài đặt quyền riêng tư.",
+ "previousMonth": "Tháng trước",
+ "nextMonth": "Tháng sau",
+ "openMonthView": "Mở chế độ xem tháng",
+ "previousYear": "Năm trước",
+ "nextYear": "Năm sau",
+ "openYearView": "Mở chế độ xem năm",
+ "weekNumberTooltip": "Tuần {number}",
+ "resizeAllDayPanel": "Đổi kích thước bảng cả ngày",
+ "scheduleItemCount": "{count, plural, =1{1 mục} other{{count} mục}}",
+ "readOnlyCalendar": "Lịch này chỉ có thể đọc.",
+ "selectTimeZone": "Chọn múi giờ",
+ "searchLocations": "Tìm kiếm địa điểm",
+ "noLocationsFound": "Không tìm thấy địa điểm",
+ "deleteCalendarConfirmation": "Xóa “{title}”?"
+}
diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb
new file mode 100644
index 0000000..71eb8a8
--- /dev/null
+++ b/lib/l10n/app_zh.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "zh",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "连接 Google 和 Microsoft 帐户以同步日历和任务。",
+ "googlePermissionsConsentNotice": "在 Google 权限页面上,同时选择日历和任务权限。",
+ "googlePermissionsRequiredRetry": "必须授予 Google 日历和 Google Tasks 权限。请重试并选中两个复选框。",
+ "finishSetup": "完成设置",
+ "continueSetup": "继续",
+ "onboardingSetupTitle": "设置 BusyMax",
+ "onboardingAccountsStepTitle": "连接帐户",
+ "onboardingAccountsStepDescription": "添加您要使用的所有 Google 和 Microsoft 帐户。BusyMax 会同步每个帐户中的日历、日程、任务列表和任务。",
+ "onboardingPreferencesStepTitle": "选择系统设置",
+ "onboardingPreferencesStepDescription": "打开日程前,请设置桌面行为、提醒、通知详细程度和外观。",
+ "signInWithGoogle": "使用 Google 登录",
+ "signInWithMicrosoft": "使用 Microsoft 登录",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "尚未配置此服务。",
+ "waitingForGoogleSignIn": "正在等待 Google 登录...",
+ "waitingForMicrosoftSignIn": "正在等待 Microsoft 登录...",
+ "microsoftSignInNotConfigured": "尚未配置 Microsoft 登录。请设置 MICROSOFT_OAUTH_CLIENT_ID。",
+ "cancel": "取消",
+ "close": "关闭",
+ "exit": "退出",
+ "options": "选项",
+ "hide": "隐藏",
+ "show": "显示",
+ "export": "导出",
+ "save": "保存",
+ "settings": "设置",
+ "all": "全部",
+ "calendarEvents": "日程",
+ "calendarTasks": "任务",
+ "calendar": "日历",
+ "calendars": "日历",
+ "newEvent": "新建日程",
+ "refreshCalendar": "刷新日历",
+ "openInProvider": "在服务中打开",
+ "hideFromSchedule": "从日程中隐藏",
+ "showInSchedule": "在日程中显示",
+ "noCalendarsSynced": "尚未同步任何日历。",
+ "allDay": "全天",
+ "moreItems": "还有 {count} 项",
+ "noEventsOrTasks": "没有日程或任务",
+ "scheduleLoading": "正在加载日程...",
+ "scheduleUnavailable": "日程不可用",
+ "scheduleNoSources": "没有可见的日历或任务列表",
+ "scheduleNoSourcesDescription": "请在设置中选择要显示的内容,然后刷新。",
+ "scheduleSignInRequired": "连接帐户",
+ "scheduleSignInDescription": "登录以同步日历和任务。",
+ "scheduleNoSearchResults": "没有匹配的日程或任务",
+ "scheduleNoSearchResultsDescription": "请尝试其他搜索内容或清除当前筛选条件。",
+ "refresh": "刷新",
+ "trayOpenBusyMax": "打开 BusyMax",
+ "agendaLoadMoreOverdue": "加载更多逾期任务",
+ "agendaLoadMoreNoDate": "加载更多无日期任务",
+ "viewDay": "日",
+ "viewWeek": "周",
+ "viewMonth": "月",
+ "viewYear": "年",
+ "viewAgenda": "日程",
+ "scheduleSettings": "日程",
+ "scheduleDisplaySettings": "日程显示",
+ "scheduleDisplayHoursDescription": "日视图和周视图最初显示此时间范围。需要时,更早或更晚的项目会扩展该范围。",
+ "scheduleDayStartsAt": "每日开始时间",
+ "scheduleDayEndsAt": "每日结束时间",
+ "sourceCalendar": "日历",
+ "sourceTaskList": "任务列表",
+ "createChoiceTitle": "新建",
+ "createEventAtTime": "日程",
+ "createTaskAtDate": "任务",
+ "editEvent": "编辑日程",
+ "eventTitle": "日程标题",
+ "location": "地点",
+ "timeSlot": "时间段",
+ "startDateTime": "开始日期/时间",
+ "endDateTime": "结束日期/时间",
+ "doesNotRepeat": "不重复",
+ "defaultReminder": "默认提醒",
+ "guests": "参与者",
+ "noGuests": "没有参与者",
+ "description": "说明",
+ "availabilityShowAs": "空闲状态 / 显示为",
+ "busy": "忙碌",
+ "visibility": "可见性",
+ "defaultVisibility": "默认可见性",
+ "conference": "会议",
+ "noConference": "无会议",
+ "providerCalendar": "服务日历",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "粗体",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "斜体",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "下划线",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 分钟前} other{{minutes} 分钟前}}",
+ "reminderAtStart": "开始时",
+ "reminderHoursBefore": "{hours, plural, =1{1 小时前} other{{hours} 小时前}}",
+ "reminderDaysBefore": "{days, plural, =1{1 天前} other{{days} 天前}}",
+ "availabilityFree": "空闲",
+ "availabilityTentative": "暂定",
+ "availabilityOutOfOffice": "不在办公室",
+ "availabilityWorkingElsewhere": "在其他地点办公",
+ "visibilityDefault": "默认",
+ "visibilityPublic": "公开",
+ "visibilityPrivate": "私密",
+ "visibilityConfidential": "机密",
+ "sensitivityNormal": "普通",
+ "sensitivityPersonal": "个人",
+ "tasks": "任务",
+ "allTasks": "所有任务",
+ "tasksInList": "{title}中的任务",
+ "taskLists": "任务列表",
+ "navigation": "导航",
+ "mainMenu": "主菜单",
+ "keyboardShortcuts": "键盘快捷键",
+ "shortcutGroupGeneral": "常规",
+ "shortcutKeyboardShortcutsDescription": "显示快捷键参考表",
+ "shortcutGroupNavigation": "导航",
+ "shortcutNextPeriod": "下一时段",
+ "shortcutNextPeriodDescription": "在周视图中前往下一周,在月视图中前往下个月,依此类推",
+ "shortcutPreviousPeriod": "上一时段",
+ "shortcutPreviousPeriodDescription": "在周视图中前往上一周,在月视图中前往上个月,依此类推",
+ "shortcutJumpToToday": "跳转到今天",
+ "shortcutGroupView": "视图",
+ "shortcutDayView": "日视图",
+ "shortcutWeekView": "周视图",
+ "shortcutMonthView": "月视图",
+ "shortcutYearView": "年视图",
+ "shortcutAgendaView": "日程视图",
+ "shortcutGroupCreateAndEdit": "新建和编辑",
+ "shortcutSaveItem": "保存日程或任务",
+ "shortcutDeleteItem": "删除日程或任务",
+ "shortcutGroupTaskEditing": "任务编辑",
+ "shortcutCancelEditing": "取消编辑",
+ "shortcutCancelEditingDescription": "关闭任务编辑或任务详情",
+ "aboutBusyMax": "关于 BusyMax",
+ "aboutBusyMaxDescription": "日历和任务",
+ "license": "许可证",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "网站",
+ "sourceCode": "源代码",
+ "reportAnIssue": "报告问题",
+ "sendFeedback": "发送反馈",
+ "feedbackSubmit": "提交",
+ "feedbackCategory": "类别",
+ "feedbackSelectCategory": "选择类别",
+ "feedbackCategoryProblem": "问题或错误",
+ "feedbackCategoryFeature": "功能请求",
+ "feedbackCategoryPrivacySecurity": "隐私或安全问题",
+ "feedbackCategoryUsability": "易用性问题",
+ "feedbackCategoryOther": "其他",
+ "feedbackSubject": "主题",
+ "feedbackDetailedMessage": "详细信息",
+ "feedbackReplyEmail": "用于接收回复的电子邮件地址(可选)",
+ "feedbackIncludeTechnicalDetails": "包含技术详情",
+ "feedbackTechnicalDetailsDisclosure": "仅添加您的 Linux 操作系统版本和应用区域设置。不包含日志、帐户数据、文件名或其他诊断信息。",
+ "feedbackCategoryRequired": "请选择类别。",
+ "feedbackSubjectLengthError": "主题必须为 3 至 120 个字符。",
+ "feedbackMessageLengthError": "消息必须为 10 至 5,000 个字符。",
+ "feedbackInvalidEmail": "请输入有效的电子邮件地址。",
+ "feedbackConnectionError": "无法连接到 BusyStack。请检查连接,然后重试。",
+ "feedbackTimeoutError": "请求超时。您的反馈尚未清除,请重试。",
+ "feedbackRateLimitedError": "从此网络发送的反馈过多。请稍后再试。",
+ "feedbackRejectedError": "服务器拒绝了提交。请检查各字段,然后重试。",
+ "feedbackServerError": "BusyStack 目前无法接收您的反馈。您的反馈尚未清除,请重试。",
+ "feedbackSuccess": "反馈已发送。参考编号:{id}",
+ "toggleSidebar": "显示或隐藏侧边栏",
+ "showSidebar": "显示侧边栏面板",
+ "hideSidebar": "隐藏侧边栏面板",
+ "accounts": "帐户",
+ "currentAccount": "当前帐户",
+ "switchAccount": "切换帐户",
+ "addGoogleAccount": "添加 Google 帐户",
+ "addMicrosoftAccount": "添加 Microsoft 帐户",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "已登录",
+ "removeAccount": "移除帐户…",
+ "removingAccount": "正在移除帐户…",
+ "removeAccountDescription": "停止同步并从此设备移除此帐户的数据。",
+ "removeAccountTitle": "从 BusyMax 中移除 {account}?",
+ "removeAccountConfirmation": "这会从此设备删除缓存的任务、日历、日程、提醒和待处理的离线更改。未同步的更改将丢失。不会从 Google 或 Microsoft 删除任何内容。",
+ "revokeGoogleAccess": "同时撤销 BusyMax 对此 Google 帐户的访问权限",
+ "revokeGoogleAccessDescription": "重新连接之前,您需要再次授予访问权限。",
+ "removeAccountAction": "移除帐户",
+ "removeAccountFailed": "无法完成帐户移除。请重试。",
+ "accountRemovedGoogleRevokeFailed": "该帐户已从此设备移除,但无法撤销 BusyMax 对您的 Google 帐户的访问权限。您可以在 Google 帐户中手动撤销该权限。",
+ "newList": "新建列表",
+ "signInToViewTaskLists": "登录以查看任务列表。",
+ "noTaskListsSynced": "尚未同步任何任务列表。",
+ "listActions": "列表操作",
+ "rename": "重命名",
+ "delete": "删除",
+ "renameList": "重命名列表",
+ "deleteList": "删除列表",
+ "builtInMicrosoftList": "内置",
+ "builtInMicrosoftListCannotRenameDelete": "无法重命名或删除 Microsoft To Do 内置列表。",
+ "deleteListConfirmation": "从 Google Tasks 中删除“{title}”?",
+ "deleteEvent": "删除日程",
+ "title": "标题",
+ "create": "新建",
+ "newTask": "新建任务",
+ "clearCompleted": "清除已完成项",
+ "refreshList": "刷新列表",
+ "refreshAll": "全部刷新",
+ "listRefreshed": "列表已刷新。",
+ "allTasksRefreshed": "所有帐户均已刷新。",
+ "exportedFile": "已导出到 {path}",
+ "exportFailed": "导出失败:{error}",
+ "refreshFailed": "刷新失败:{error}",
+ "selectOrCreateTaskList": "请选择或创建任务列表以开始使用。",
+ "signInToViewTasks": "登录以查看任务。",
+ "noTasks": "没有任务。",
+ "noTasksYet": "还没有任务",
+ "noTasksYetMessage": "创建任务或刷新帐户以开始使用。",
+ "noTasksInList": "此列表中没有任务。",
+ "overdue": "已逾期",
+ "today": "今天",
+ "tomorrow": "明天",
+ "upcoming": "即将到期",
+ "noDate": "无日期",
+ "completed": "已完成",
+ "duePrefix": "{date} 到期",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "任务详情",
+ "editTask": "编辑任务",
+ "noTaskSelected": "未选择任务。",
+ "noTaskSelectedHelper": "选择任务以查看和编辑详情。",
+ "taskUnavailable": "任务不可用。",
+ "signInToEditTasks": "登录以编辑任务。",
+ "refreshTask": "刷新任务",
+ "primarySection": "主要信息",
+ "statusSection": "状态",
+ "openStatus": "未完成",
+ "doneStatus": "已完成",
+ "notes": "备注",
+ "dueDate": "截止日期",
+ "clearDueDate": "清除截止日期",
+ "dueTime": "截止时间",
+ "startDate": "开始日期",
+ "startTime": "开始时间",
+ "endDate": "结束日期",
+ "endTime": "结束时间",
+ "reminderDate": "提醒日期",
+ "reminderTime": "提醒时间",
+ "reminder": "提醒",
+ "addReminder": "添加提醒",
+ "addGuest": "添加参与者",
+ "addGuestEmail": "添加参与者电子邮件",
+ "removeReminder": "移除提醒",
+ "off": "关闭",
+ "repeat": "重复",
+ "repeatNone": "不重复",
+ "noneValue": "无",
+ "repeatDaily": "每天",
+ "repeatWeekly": "每周",
+ "repeatMonthly": "每月",
+ "repeatYearly": "每年",
+ "importance": "重要性",
+ "importanceLow": "低",
+ "importanceNormal": "普通",
+ "importanceHigh": "高",
+ "categories": "类别",
+ "scheduleSection": "日程",
+ "dueGroup": "截止",
+ "startGroup": "开始",
+ "reminderGroup": "提醒",
+ "organizationSection": "整理",
+ "actionsSection": "操作",
+ "advancedSection": "高级",
+ "addCategory": "添加类别",
+ "list": "列表",
+ "microsoftMoveUnsupported": "此版本不支持在 Microsoft To Do 帐户的列表之间移动任务。",
+ "createSubtask": "创建子任务",
+ "moveToTop": "移到顶部",
+ "deleteTask": "删除任务",
+ "newSubtask": "新建子任务",
+ "deleteTaskConfirmation": "从 Google Tasks 中删除“{title}”?",
+ "metadata": "元数据",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "更新时间",
+ "parent": "父任务",
+ "position": "位置",
+ "webLink": "网页链接",
+ "assignment": "分配",
+ "localState": "本地状态",
+ "pendingSync": "等待同步",
+ "synced": "已同步",
+ "account": "帐户",
+ "sync": "同步",
+ "manualFullSync": "手动完整同步",
+ "runInBackgroundWhenClosed": "窗口关闭后继续在后台运行",
+ "showTrayIcon": "显示托盘图标",
+ "startMinimizedToTray": "启动时最小化到托盘",
+ "requiresTrayIcon": "需要托盘图标。",
+ "syncComplete": "同步完成。",
+ "syncFailed": "同步失败:{error}",
+ "notifySyncFailures": "同步失败通知",
+ "notifyConflicts": "冲突通知",
+ "notifyDueToday": "今天到期任务通知",
+ "eventReminders": "日程提醒",
+ "taskReminders": "任务提醒",
+ "notificationDetailLevel": "通知详细程度",
+ "notificationDetailPrivate": "私密",
+ "notificationDetailNormal": "普通",
+ "quietHours": "免打扰时段",
+ "quietHoursDescription": "在此时段暂停通知。",
+ "quietHoursStart": "免打扰开始时间",
+ "quietHoursEnd": "免打扰结束时间",
+ "notifications": "通知",
+ "appearance": "外观",
+ "theme": "主题",
+ "themeSystem": "系统",
+ "themeLight": "浅色",
+ "themeDark": "深色",
+ "themeFamily": "主题系列",
+ "themeFamilyYaru": "Ubuntu 原生主题(Yaru)",
+ "localization": "语言和区域",
+ "currentLocale": "当前区域设置",
+ "privacy": "隐私",
+ "redactTaskContentInDiagnostics": "在诊断信息中隐藏任务内容",
+ "developerDiagnostics": "开发者诊断",
+ "diagnostics": "诊断",
+ "apiInspectorDisabled": "显示 API 检查器",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery 修订版:{revision}",
+ "implementedMethods": "已实现的方法",
+ "supportsTasksScopes": "支持 tasks 和 tasks.readonly 权限范围",
+ "requiresTasksScope": "需要 tasks 权限范围",
+ "blockedPendingOperations": "被阻止的待处理操作",
+ "signInToInspectPendingOperations": "登录以检查待处理操作。",
+ "noBlockedPendingOperations": "没有被阻止的待处理操作。",
+ "operationActions": "操作选项",
+ "pendingOpListId": "列表={id}",
+ "pendingOpTaskId": "任务={id}",
+ "pendingOpAttempts": "尝试次数={count}",
+ "retry": "重试",
+ "discard": "舍弃",
+ "discardChangesAction": "舍弃",
+ "discardChanges": "舍弃更改?",
+ "discardChangesConfirmation": "这将舍弃对此任务所做的未保存编辑。",
+ "retryCompleted": "重试完成。",
+ "discardPendingOperation": "舍弃待处理操作?",
+ "discardPendingOperationConfirmation": "这将移除被阻止的本地操作。下次同步时将从 Google Tasks 刷新数据。",
+ "pendingOperationDiscarded": "已舍弃待处理操作。",
+ "syncFailureNotificationTitle": "BusyMax 同步失败",
+ "syncFailureNotificationBody": "后台同步失败。{message}",
+ "conflictNotificationTitle": "BusyMax 同步冲突",
+ "conflictNotificationBody": "一项待处理的本地更改被阻止。{summary}",
+ "dueTodayNotificationTitle": "今天到期的任务",
+ "dueTodayNotificationBody": "{count, plural, =1{今天有 1 项任务到期。} other{今天有 {count} 项任务到期。}}",
+ "eventReminderNotificationTitle": "日程提醒",
+ "taskReminderNotificationTitle": "任务提醒",
+ "eventReminderNotificationBody": "日程即将开始。",
+ "taskReminderNotificationBody": "任务即将到期。",
+ "notificationOpenAction": "打开",
+ "notificationDetailsHidden": "根据隐私设置,详细信息已隐藏。",
+ "previousMonth": "上个月",
+ "nextMonth": "下个月",
+ "openMonthView": "打开月视图",
+ "previousYear": "上一年",
+ "nextYear": "下一年",
+ "openYearView": "打开年视图",
+ "weekNumberTooltip": "第 {number} 周",
+ "resizeAllDayPanel": "调整全天面板的大小",
+ "scheduleItemCount": "{count, plural, =1{1 项} other{{count} 项}}",
+ "readOnlyCalendar": "此日历为只读。",
+ "selectTimeZone": "选择时区",
+ "searchLocations": "搜索地点",
+ "noLocationsFound": "未找到地点",
+ "deleteCalendarConfirmation": "删除“{title}”?"
+}
diff --git a/lib/l10n/app_zh_Hans.arb b/lib/l10n/app_zh_Hans.arb
new file mode 100644
index 0000000..75338a1
--- /dev/null
+++ b/lib/l10n/app_zh_Hans.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "zh_Hans",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "连接 Google 和 Microsoft 帐户以同步日历和任务。",
+ "googlePermissionsConsentNotice": "在 Google 权限页面上,同时选择日历和任务权限。",
+ "googlePermissionsRequiredRetry": "必须授予 Google 日历和 Google Tasks 权限。请重试并选中两个复选框。",
+ "finishSetup": "完成设置",
+ "continueSetup": "继续",
+ "onboardingSetupTitle": "设置 BusyMax",
+ "onboardingAccountsStepTitle": "连接帐户",
+ "onboardingAccountsStepDescription": "添加您要使用的所有 Google 和 Microsoft 帐户。BusyMax 会同步每个帐户中的日历、日程、任务列表和任务。",
+ "onboardingPreferencesStepTitle": "选择系统设置",
+ "onboardingPreferencesStepDescription": "打开日程前,请设置桌面行为、提醒、通知详细程度和外观。",
+ "signInWithGoogle": "使用 Google 登录",
+ "signInWithMicrosoft": "使用 Microsoft 登录",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "尚未配置此服务。",
+ "waitingForGoogleSignIn": "正在等待 Google 登录...",
+ "waitingForMicrosoftSignIn": "正在等待 Microsoft 登录...",
+ "microsoftSignInNotConfigured": "尚未配置 Microsoft 登录。请设置 MICROSOFT_OAUTH_CLIENT_ID。",
+ "cancel": "取消",
+ "close": "关闭",
+ "exit": "退出",
+ "options": "选项",
+ "hide": "隐藏",
+ "show": "显示",
+ "export": "导出",
+ "save": "保存",
+ "settings": "设置",
+ "all": "全部",
+ "calendarEvents": "日程",
+ "calendarTasks": "任务",
+ "calendar": "日历",
+ "calendars": "日历",
+ "newEvent": "新建日程",
+ "refreshCalendar": "刷新日历",
+ "openInProvider": "在服务中打开",
+ "hideFromSchedule": "从日程中隐藏",
+ "showInSchedule": "在日程中显示",
+ "noCalendarsSynced": "尚未同步任何日历。",
+ "allDay": "全天",
+ "moreItems": "还有 {count} 项",
+ "noEventsOrTasks": "没有日程或任务",
+ "scheduleLoading": "正在加载日程...",
+ "scheduleUnavailable": "日程不可用",
+ "scheduleNoSources": "没有可见的日历或任务列表",
+ "scheduleNoSourcesDescription": "请在设置中选择要显示的内容,然后刷新。",
+ "scheduleSignInRequired": "连接帐户",
+ "scheduleSignInDescription": "登录以同步日历和任务。",
+ "scheduleNoSearchResults": "没有匹配的日程或任务",
+ "scheduleNoSearchResultsDescription": "请尝试其他搜索内容或清除当前筛选条件。",
+ "refresh": "刷新",
+ "trayOpenBusyMax": "打开 BusyMax",
+ "agendaLoadMoreOverdue": "加载更多逾期任务",
+ "agendaLoadMoreNoDate": "加载更多无日期任务",
+ "viewDay": "日",
+ "viewWeek": "周",
+ "viewMonth": "月",
+ "viewYear": "年",
+ "viewAgenda": "日程",
+ "scheduleSettings": "日程",
+ "scheduleDisplaySettings": "日程显示",
+ "scheduleDisplayHoursDescription": "日视图和周视图最初显示此时间范围。需要时,更早或更晚的项目会扩展该范围。",
+ "scheduleDayStartsAt": "每日开始时间",
+ "scheduleDayEndsAt": "每日结束时间",
+ "sourceCalendar": "日历",
+ "sourceTaskList": "任务列表",
+ "createChoiceTitle": "新建",
+ "createEventAtTime": "日程",
+ "createTaskAtDate": "任务",
+ "editEvent": "编辑日程",
+ "eventTitle": "日程标题",
+ "location": "地点",
+ "timeSlot": "时间段",
+ "startDateTime": "开始日期/时间",
+ "endDateTime": "结束日期/时间",
+ "doesNotRepeat": "不重复",
+ "defaultReminder": "默认提醒",
+ "guests": "参与者",
+ "noGuests": "没有参与者",
+ "description": "说明",
+ "availabilityShowAs": "空闲状态 / 显示为",
+ "busy": "忙碌",
+ "visibility": "可见性",
+ "defaultVisibility": "默认可见性",
+ "conference": "会议",
+ "noConference": "无会议",
+ "providerCalendar": "服务日历",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "粗体",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "斜体",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "下划线",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 分钟前} other{{minutes} 分钟前}}",
+ "reminderAtStart": "开始时",
+ "reminderHoursBefore": "{hours, plural, =1{1 小时前} other{{hours} 小时前}}",
+ "reminderDaysBefore": "{days, plural, =1{1 天前} other{{days} 天前}}",
+ "availabilityFree": "空闲",
+ "availabilityTentative": "暂定",
+ "availabilityOutOfOffice": "不在办公室",
+ "availabilityWorkingElsewhere": "在其他地点办公",
+ "visibilityDefault": "默认",
+ "visibilityPublic": "公开",
+ "visibilityPrivate": "私密",
+ "visibilityConfidential": "机密",
+ "sensitivityNormal": "普通",
+ "sensitivityPersonal": "个人",
+ "tasks": "任务",
+ "allTasks": "所有任务",
+ "tasksInList": "{title}中的任务",
+ "taskLists": "任务列表",
+ "navigation": "导航",
+ "mainMenu": "主菜单",
+ "keyboardShortcuts": "键盘快捷键",
+ "shortcutGroupGeneral": "常规",
+ "shortcutKeyboardShortcutsDescription": "显示快捷键参考表",
+ "shortcutGroupNavigation": "导航",
+ "shortcutNextPeriod": "下一时段",
+ "shortcutNextPeriodDescription": "在周视图中前往下一周,在月视图中前往下个月,依此类推",
+ "shortcutPreviousPeriod": "上一时段",
+ "shortcutPreviousPeriodDescription": "在周视图中前往上一周,在月视图中前往上个月,依此类推",
+ "shortcutJumpToToday": "跳转到今天",
+ "shortcutGroupView": "视图",
+ "shortcutDayView": "日视图",
+ "shortcutWeekView": "周视图",
+ "shortcutMonthView": "月视图",
+ "shortcutYearView": "年视图",
+ "shortcutAgendaView": "日程视图",
+ "shortcutGroupCreateAndEdit": "新建和编辑",
+ "shortcutSaveItem": "保存日程或任务",
+ "shortcutDeleteItem": "删除日程或任务",
+ "shortcutGroupTaskEditing": "任务编辑",
+ "shortcutCancelEditing": "取消编辑",
+ "shortcutCancelEditingDescription": "关闭任务编辑或任务详情",
+ "aboutBusyMax": "关于 BusyMax",
+ "aboutBusyMaxDescription": "日历和任务",
+ "license": "许可证",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "网站",
+ "sourceCode": "源代码",
+ "reportAnIssue": "报告问题",
+ "sendFeedback": "发送反馈",
+ "feedbackSubmit": "提交",
+ "feedbackCategory": "类别",
+ "feedbackSelectCategory": "选择类别",
+ "feedbackCategoryProblem": "问题或错误",
+ "feedbackCategoryFeature": "功能请求",
+ "feedbackCategoryPrivacySecurity": "隐私或安全问题",
+ "feedbackCategoryUsability": "易用性问题",
+ "feedbackCategoryOther": "其他",
+ "feedbackSubject": "主题",
+ "feedbackDetailedMessage": "详细信息",
+ "feedbackReplyEmail": "用于接收回复的电子邮件地址(可选)",
+ "feedbackIncludeTechnicalDetails": "包含技术详情",
+ "feedbackTechnicalDetailsDisclosure": "仅添加您的 Linux 操作系统版本和应用区域设置。不包含日志、帐户数据、文件名或其他诊断信息。",
+ "feedbackCategoryRequired": "请选择类别。",
+ "feedbackSubjectLengthError": "主题必须为 3 至 120 个字符。",
+ "feedbackMessageLengthError": "消息必须为 10 至 5,000 个字符。",
+ "feedbackInvalidEmail": "请输入有效的电子邮件地址。",
+ "feedbackConnectionError": "无法连接到 BusyStack。请检查连接,然后重试。",
+ "feedbackTimeoutError": "请求超时。您的反馈尚未清除,请重试。",
+ "feedbackRateLimitedError": "从此网络发送的反馈过多。请稍后再试。",
+ "feedbackRejectedError": "服务器拒绝了提交。请检查各字段,然后重试。",
+ "feedbackServerError": "BusyStack 目前无法接收您的反馈。您的反馈尚未清除,请重试。",
+ "feedbackSuccess": "反馈已发送。参考编号:{id}",
+ "toggleSidebar": "显示或隐藏侧边栏",
+ "showSidebar": "显示侧边栏面板",
+ "hideSidebar": "隐藏侧边栏面板",
+ "accounts": "帐户",
+ "currentAccount": "当前帐户",
+ "switchAccount": "切换帐户",
+ "addGoogleAccount": "添加 Google 帐户",
+ "addMicrosoftAccount": "添加 Microsoft 帐户",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "已登录",
+ "removeAccount": "移除帐户…",
+ "removingAccount": "正在移除帐户…",
+ "removeAccountDescription": "停止同步并从此设备移除此帐户的数据。",
+ "removeAccountTitle": "从 BusyMax 中移除 {account}?",
+ "removeAccountConfirmation": "这会从此设备删除缓存的任务、日历、日程、提醒和待处理的离线更改。未同步的更改将丢失。不会从 Google 或 Microsoft 删除任何内容。",
+ "revokeGoogleAccess": "同时撤销 BusyMax 对此 Google 帐户的访问权限",
+ "revokeGoogleAccessDescription": "重新连接之前,您需要再次授予访问权限。",
+ "removeAccountAction": "移除帐户",
+ "removeAccountFailed": "无法完成帐户移除。请重试。",
+ "accountRemovedGoogleRevokeFailed": "该帐户已从此设备移除,但无法撤销 BusyMax 对您的 Google 帐户的访问权限。您可以在 Google 帐户中手动撤销该权限。",
+ "newList": "新建列表",
+ "signInToViewTaskLists": "登录以查看任务列表。",
+ "noTaskListsSynced": "尚未同步任何任务列表。",
+ "listActions": "列表操作",
+ "rename": "重命名",
+ "delete": "删除",
+ "renameList": "重命名列表",
+ "deleteList": "删除列表",
+ "builtInMicrosoftList": "内置",
+ "builtInMicrosoftListCannotRenameDelete": "无法重命名或删除 Microsoft To Do 内置列表。",
+ "deleteListConfirmation": "从 Google Tasks 中删除“{title}”?",
+ "deleteEvent": "删除日程",
+ "title": "标题",
+ "create": "新建",
+ "newTask": "新建任务",
+ "clearCompleted": "清除已完成项",
+ "refreshList": "刷新列表",
+ "refreshAll": "全部刷新",
+ "listRefreshed": "列表已刷新。",
+ "allTasksRefreshed": "所有帐户均已刷新。",
+ "exportedFile": "已导出到 {path}",
+ "exportFailed": "导出失败:{error}",
+ "refreshFailed": "刷新失败:{error}",
+ "selectOrCreateTaskList": "请选择或创建任务列表以开始使用。",
+ "signInToViewTasks": "登录以查看任务。",
+ "noTasks": "没有任务。",
+ "noTasksYet": "还没有任务",
+ "noTasksYetMessage": "创建任务或刷新帐户以开始使用。",
+ "noTasksInList": "此列表中没有任务。",
+ "overdue": "已逾期",
+ "today": "今天",
+ "tomorrow": "明天",
+ "upcoming": "即将到期",
+ "noDate": "无日期",
+ "completed": "已完成",
+ "duePrefix": "{date} 到期",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "任务详情",
+ "editTask": "编辑任务",
+ "noTaskSelected": "未选择任务。",
+ "noTaskSelectedHelper": "选择任务以查看和编辑详情。",
+ "taskUnavailable": "任务不可用。",
+ "signInToEditTasks": "登录以编辑任务。",
+ "refreshTask": "刷新任务",
+ "primarySection": "主要信息",
+ "statusSection": "状态",
+ "openStatus": "未完成",
+ "doneStatus": "已完成",
+ "notes": "备注",
+ "dueDate": "截止日期",
+ "clearDueDate": "清除截止日期",
+ "dueTime": "截止时间",
+ "startDate": "开始日期",
+ "startTime": "开始时间",
+ "endDate": "结束日期",
+ "endTime": "结束时间",
+ "reminderDate": "提醒日期",
+ "reminderTime": "提醒时间",
+ "reminder": "提醒",
+ "addReminder": "添加提醒",
+ "addGuest": "添加参与者",
+ "addGuestEmail": "添加参与者电子邮件",
+ "removeReminder": "移除提醒",
+ "off": "关闭",
+ "repeat": "重复",
+ "repeatNone": "不重复",
+ "noneValue": "无",
+ "repeatDaily": "每天",
+ "repeatWeekly": "每周",
+ "repeatMonthly": "每月",
+ "repeatYearly": "每年",
+ "importance": "重要性",
+ "importanceLow": "低",
+ "importanceNormal": "普通",
+ "importanceHigh": "高",
+ "categories": "类别",
+ "scheduleSection": "日程",
+ "dueGroup": "截止",
+ "startGroup": "开始",
+ "reminderGroup": "提醒",
+ "organizationSection": "整理",
+ "actionsSection": "操作",
+ "advancedSection": "高级",
+ "addCategory": "添加类别",
+ "list": "列表",
+ "microsoftMoveUnsupported": "此版本不支持在 Microsoft To Do 帐户的列表之间移动任务。",
+ "createSubtask": "创建子任务",
+ "moveToTop": "移到顶部",
+ "deleteTask": "删除任务",
+ "newSubtask": "新建子任务",
+ "deleteTaskConfirmation": "从 Google Tasks 中删除“{title}”?",
+ "metadata": "元数据",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "更新时间",
+ "parent": "父任务",
+ "position": "位置",
+ "webLink": "网页链接",
+ "assignment": "分配",
+ "localState": "本地状态",
+ "pendingSync": "等待同步",
+ "synced": "已同步",
+ "account": "帐户",
+ "sync": "同步",
+ "manualFullSync": "手动完整同步",
+ "runInBackgroundWhenClosed": "窗口关闭后继续在后台运行",
+ "showTrayIcon": "显示托盘图标",
+ "startMinimizedToTray": "启动时最小化到托盘",
+ "requiresTrayIcon": "需要托盘图标。",
+ "syncComplete": "同步完成。",
+ "syncFailed": "同步失败:{error}",
+ "notifySyncFailures": "同步失败通知",
+ "notifyConflicts": "冲突通知",
+ "notifyDueToday": "今天到期任务通知",
+ "eventReminders": "日程提醒",
+ "taskReminders": "任务提醒",
+ "notificationDetailLevel": "通知详细程度",
+ "notificationDetailPrivate": "私密",
+ "notificationDetailNormal": "普通",
+ "quietHours": "免打扰时段",
+ "quietHoursDescription": "在此时段暂停通知。",
+ "quietHoursStart": "免打扰开始时间",
+ "quietHoursEnd": "免打扰结束时间",
+ "notifications": "通知",
+ "appearance": "外观",
+ "theme": "主题",
+ "themeSystem": "系统",
+ "themeLight": "浅色",
+ "themeDark": "深色",
+ "themeFamily": "主题系列",
+ "themeFamilyYaru": "Ubuntu 原生主题(Yaru)",
+ "localization": "语言和区域",
+ "currentLocale": "当前区域设置",
+ "privacy": "隐私",
+ "redactTaskContentInDiagnostics": "在诊断信息中隐藏任务内容",
+ "developerDiagnostics": "开发者诊断",
+ "diagnostics": "诊断",
+ "apiInspectorDisabled": "显示 API 检查器",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery 修订版:{revision}",
+ "implementedMethods": "已实现的方法",
+ "supportsTasksScopes": "支持 tasks 和 tasks.readonly 权限范围",
+ "requiresTasksScope": "需要 tasks 权限范围",
+ "blockedPendingOperations": "被阻止的待处理操作",
+ "signInToInspectPendingOperations": "登录以检查待处理操作。",
+ "noBlockedPendingOperations": "没有被阻止的待处理操作。",
+ "operationActions": "操作选项",
+ "pendingOpListId": "列表={id}",
+ "pendingOpTaskId": "任务={id}",
+ "pendingOpAttempts": "尝试次数={count}",
+ "retry": "重试",
+ "discard": "舍弃",
+ "discardChangesAction": "舍弃",
+ "discardChanges": "舍弃更改?",
+ "discardChangesConfirmation": "这将舍弃对此任务所做的未保存编辑。",
+ "retryCompleted": "重试完成。",
+ "discardPendingOperation": "舍弃待处理操作?",
+ "discardPendingOperationConfirmation": "这将移除被阻止的本地操作。下次同步时将从 Google Tasks 刷新数据。",
+ "pendingOperationDiscarded": "已舍弃待处理操作。",
+ "syncFailureNotificationTitle": "BusyMax 同步失败",
+ "syncFailureNotificationBody": "后台同步失败。{message}",
+ "conflictNotificationTitle": "BusyMax 同步冲突",
+ "conflictNotificationBody": "一项待处理的本地更改被阻止。{summary}",
+ "dueTodayNotificationTitle": "今天到期的任务",
+ "dueTodayNotificationBody": "{count, plural, =1{今天有 1 项任务到期。} other{今天有 {count} 项任务到期。}}",
+ "eventReminderNotificationTitle": "日程提醒",
+ "taskReminderNotificationTitle": "任务提醒",
+ "eventReminderNotificationBody": "日程即将开始。",
+ "taskReminderNotificationBody": "任务即将到期。",
+ "notificationOpenAction": "打开",
+ "notificationDetailsHidden": "根据隐私设置,详细信息已隐藏。",
+ "previousMonth": "上个月",
+ "nextMonth": "下个月",
+ "openMonthView": "打开月视图",
+ "previousYear": "上一年",
+ "nextYear": "下一年",
+ "openYearView": "打开年视图",
+ "weekNumberTooltip": "第 {number} 周",
+ "resizeAllDayPanel": "调整全天面板的大小",
+ "scheduleItemCount": "{count, plural, =1{1 项} other{{count} 项}}",
+ "readOnlyCalendar": "此日历为只读。",
+ "selectTimeZone": "选择时区",
+ "searchLocations": "搜索地点",
+ "noLocationsFound": "未找到地点",
+ "deleteCalendarConfirmation": "删除“{title}”?"
+}
diff --git a/lib/l10n/app_zh_Hant.arb b/lib/l10n/app_zh_Hant.arb
new file mode 100644
index 0000000..778d8cc
--- /dev/null
+++ b/lib/l10n/app_zh_Hant.arb
@@ -0,0 +1,374 @@
+{
+ "@@locale": "zh_Hant",
+ "appTitle": "BusyMax",
+ "connectGoogleAccount": "連結 Google 和 Microsoft 帳戶以同步行事曆和待辦事項。",
+ "googlePermissionsConsentNotice": "在 Google 權限畫面中,同時選取行事曆和待辦事項權限。",
+ "googlePermissionsRequiredRetry": "必須授予 Google 日曆和 Google Tasks 權限。請再試一次並勾選兩個核取方塊。",
+ "finishSetup": "完成設定",
+ "continueSetup": "繼續",
+ "onboardingSetupTitle": "設定 BusyMax",
+ "onboardingAccountsStepTitle": "連結帳戶",
+ "onboardingAccountsStepDescription": "新增您要使用的所有 Google 和 Microsoft 帳戶。BusyMax 會同步每個帳戶中的行事曆、活動、待辦清單和待辦事項。",
+ "onboardingPreferencesStepTitle": "選擇系統設定",
+ "onboardingPreferencesStepDescription": "開啟行程前,請設定桌面行為、提醒、通知詳細程度和外觀。",
+ "signInWithGoogle": "使用 Google 登入",
+ "signInWithMicrosoft": "使用 Microsoft 登入",
+ "googleTasksProvider": "Google Tasks",
+ "microsoftTodoProvider": "Microsoft To Do",
+ "providerNotConfigured": "尚未設定此服務。",
+ "waitingForGoogleSignIn": "正在等候 Google 登入...",
+ "waitingForMicrosoftSignIn": "正在等候 Microsoft 登入...",
+ "microsoftSignInNotConfigured": "尚未設定 Microsoft 登入。請設定 MICROSOFT_OAUTH_CLIENT_ID。",
+ "cancel": "取消",
+ "close": "關閉",
+ "exit": "結束",
+ "options": "選項",
+ "hide": "隱藏",
+ "show": "顯示",
+ "export": "匯出",
+ "save": "儲存",
+ "settings": "設定",
+ "all": "全部",
+ "calendarEvents": "活動",
+ "calendarTasks": "待辦事項",
+ "calendar": "行事曆",
+ "calendars": "行事曆",
+ "newEvent": "新增活動",
+ "refreshCalendar": "重新整理行事曆",
+ "openInProvider": "在服務中開啟",
+ "hideFromSchedule": "從行程中隱藏",
+ "showInSchedule": "在行程中顯示",
+ "noCalendarsSynced": "尚未同步任何行事曆。",
+ "allDay": "全天",
+ "moreItems": "還有 {count} 項",
+ "noEventsOrTasks": "沒有活動或待辦事項",
+ "scheduleLoading": "正在載入行程...",
+ "scheduleUnavailable": "無法使用行程",
+ "scheduleNoSources": "沒有可見的行事曆或待辦清單",
+ "scheduleNoSourcesDescription": "請在設定中選擇要顯示的內容,然後重新整理。",
+ "scheduleSignInRequired": "連結帳戶",
+ "scheduleSignInDescription": "登入以同步行事曆和待辦事項。",
+ "scheduleNoSearchResults": "沒有相符的活動或待辦事項",
+ "scheduleNoSearchResultsDescription": "請嘗試其他搜尋內容或清除目前的篩選條件。",
+ "refresh": "重新整理",
+ "trayOpenBusyMax": "開啟 BusyMax",
+ "agendaLoadMoreOverdue": "載入更多逾期待辦事項",
+ "agendaLoadMoreNoDate": "載入更多無日期待辦事項",
+ "viewDay": "日",
+ "viewWeek": "週",
+ "viewMonth": "月",
+ "viewYear": "年",
+ "viewAgenda": "行程",
+ "scheduleSettings": "行程",
+ "scheduleDisplaySettings": "行程顯示",
+ "scheduleDisplayHoursDescription": "日檢視和週檢視一開始會顯示此時間範圍。必要時,較早或較晚的項目會擴大此範圍。",
+ "scheduleDayStartsAt": "每日開始時間",
+ "scheduleDayEndsAt": "每日結束時間",
+ "sourceCalendar": "行事曆",
+ "sourceTaskList": "待辦清單",
+ "createChoiceTitle": "新增",
+ "createEventAtTime": "活動",
+ "createTaskAtDate": "待辦事項",
+ "editEvent": "編輯活動",
+ "eventTitle": "活動標題",
+ "location": "地點",
+ "timeSlot": "時段",
+ "startDateTime": "開始日期/時間",
+ "endDateTime": "結束日期/時間",
+ "doesNotRepeat": "不重複",
+ "defaultReminder": "預設提醒",
+ "guests": "參與者",
+ "noGuests": "沒有參與者",
+ "description": "說明",
+ "availabilityShowAs": "空閒狀態 / 顯示為",
+ "busy": "忙碌",
+ "visibility": "顯示設定",
+ "defaultVisibility": "預設顯示設定",
+ "conference": "會議",
+ "noConference": "無會議",
+ "providerCalendar": "服務行事曆",
+ "formatBoldShortLabel": "B",
+ "formatBoldTooltip": "粗體",
+ "formatItalicShortLabel": "I",
+ "formatItalicTooltip": "斜體",
+ "formatUnderlineShortLabel": "U",
+ "formatUnderlineTooltip": "底線",
+ "reminderMinutesBefore": "{minutes, plural, =1{1 分鐘前} other{{minutes} 分鐘前}}",
+ "reminderAtStart": "開始時",
+ "reminderHoursBefore": "{hours, plural, =1{1 小時前} other{{hours} 小時前}}",
+ "reminderDaysBefore": "{days, plural, =1{1 天前} other{{days} 天前}}",
+ "availabilityFree": "有空",
+ "availabilityTentative": "暫定",
+ "availabilityOutOfOffice": "不在辦公室",
+ "availabilityWorkingElsewhere": "在其他地點工作",
+ "visibilityDefault": "預設",
+ "visibilityPublic": "公開",
+ "visibilityPrivate": "私人",
+ "visibilityConfidential": "機密",
+ "sensitivityNormal": "一般",
+ "sensitivityPersonal": "個人",
+ "tasks": "待辦事項",
+ "allTasks": "所有待辦事項",
+ "tasksInList": "{title}中的待辦事項",
+ "taskLists": "待辦清單",
+ "navigation": "導覽",
+ "mainMenu": "主選單",
+ "keyboardShortcuts": "鍵盤快速鍵",
+ "shortcutGroupGeneral": "一般",
+ "shortcutKeyboardShortcutsDescription": "顯示快速鍵參考表",
+ "shortcutGroupNavigation": "導覽",
+ "shortcutNextPeriod": "下一時段",
+ "shortcutNextPeriodDescription": "在週檢視中前往下一週,在月檢視中前往下個月,依此類推",
+ "shortcutPreviousPeriod": "上一時段",
+ "shortcutPreviousPeriodDescription": "在週檢視中前往上一週,在月檢視中前往上個月,依此類推",
+ "shortcutJumpToToday": "跳至今天",
+ "shortcutGroupView": "檢視",
+ "shortcutDayView": "日檢視",
+ "shortcutWeekView": "週檢視",
+ "shortcutMonthView": "月檢視",
+ "shortcutYearView": "年檢視",
+ "shortcutAgendaView": "行程檢視",
+ "shortcutGroupCreateAndEdit": "新增和編輯",
+ "shortcutSaveItem": "儲存活動或待辦事項",
+ "shortcutDeleteItem": "刪除活動或待辦事項",
+ "shortcutGroupTaskEditing": "待辦事項編輯",
+ "shortcutCancelEditing": "取消編輯",
+ "shortcutCancelEditingDescription": "關閉待辦事項編輯或詳細資料",
+ "aboutBusyMax": "關於 BusyMax",
+ "aboutBusyMaxDescription": "行事曆與待辦事項",
+ "license": "授權",
+ "apacheLicenseName": "Apache License 2.0",
+ "website": "網站",
+ "sourceCode": "原始碼",
+ "reportAnIssue": "回報問題",
+ "sendFeedback": "傳送意見",
+ "feedbackSubmit": "提交",
+ "feedbackCategory": "類別",
+ "feedbackSelectCategory": "選擇類別",
+ "feedbackCategoryProblem": "問題或錯誤",
+ "feedbackCategoryFeature": "功能請求",
+ "feedbackCategoryPrivacySecurity": "隱私權或安全性疑慮",
+ "feedbackCategoryUsability": "易用性疑慮",
+ "feedbackCategoryOther": "其他",
+ "feedbackSubject": "主旨",
+ "feedbackDetailedMessage": "詳細訊息",
+ "feedbackReplyEmail": "回覆用電子郵件地址(選填)",
+ "feedbackIncludeTechnicalDetails": "包含技術詳細資料",
+ "feedbackTechnicalDetailsDisclosure": "只會加入您的 Linux 作業系統版本和應用程式語系。不會包含記錄、帳戶資料、檔案名稱或其他診斷資訊。",
+ "feedbackCategoryRequired": "請選擇類別。",
+ "feedbackSubjectLengthError": "主旨必須介於 3 到 120 個字元之間。",
+ "feedbackMessageLengthError": "訊息必須介於 10 到 5,000 個字元之間。",
+ "feedbackInvalidEmail": "請輸入有效的電子郵件地址。",
+ "feedbackConnectionError": "無法連線至 BusyStack。請檢查連線,然後再試一次。",
+ "feedbackTimeoutError": "要求逾時。您的意見尚未清除,請再試一次。",
+ "feedbackRateLimitedError": "此網路已傳送太多意見。請稍候再試。",
+ "feedbackRejectedError": "伺服器拒絕了提交內容。請檢查各欄位,然後再試一次。",
+ "feedbackServerError": "BusyStack 目前無法接收您的意見。您的意見尚未清除,請再試一次。",
+ "feedbackSuccess": "意見已傳送。參考編號:{id}",
+ "toggleSidebar": "顯示或隱藏側邊欄",
+ "showSidebar": "顯示側邊欄面板",
+ "hideSidebar": "隱藏側邊欄面板",
+ "accounts": "帳戶",
+ "currentAccount": "目前帳戶",
+ "switchAccount": "切換帳戶",
+ "addGoogleAccount": "新增 Google 帳戶",
+ "addMicrosoftAccount": "新增 Microsoft 帳戶",
+ "googleProvider": "Google",
+ "microsoftProvider": "Microsoft",
+ "signedInAccount": "已登入",
+ "removeAccount": "移除帳戶…",
+ "removingAccount": "正在移除帳戶…",
+ "removeAccountDescription": "停止同步並從此裝置移除此帳戶的資料。",
+ "removeAccountTitle": "要從 BusyMax 移除 {account} 嗎?",
+ "removeAccountConfirmation": "這會從此裝置刪除快取的待辦事項、行事曆、活動、提醒和待處理的離線變更。未同步的變更將會遺失。不會從 Google 或 Microsoft 刪除任何內容。",
+ "revokeGoogleAccess": "同時撤銷 BusyMax 對此 Google 帳戶的存取權",
+ "revokeGoogleAccessDescription": "重新連結前,您必須再次授予存取權。",
+ "removeAccountAction": "移除帳戶",
+ "removeAccountFailed": "無法完成帳戶移除。請再試一次。",
+ "accountRemovedGoogleRevokeFailed": "該帳戶已從此裝置移除,但無法撤銷 BusyMax 對您的 Google 帳戶的存取權。您可以在 Google 帳戶中手動撤銷該權限。",
+ "newList": "新增清單",
+ "signInToViewTaskLists": "登入以查看待辦清單。",
+ "noTaskListsSynced": "尚未同步任何待辦清單。",
+ "listActions": "清單動作",
+ "rename": "重新命名",
+ "delete": "刪除",
+ "renameList": "重新命名清單",
+ "deleteList": "刪除清單",
+ "builtInMicrosoftList": "內建",
+ "builtInMicrosoftListCannotRenameDelete": "無法重新命名或刪除 Microsoft To Do 內建清單。",
+ "deleteListConfirmation": "要從 Google Tasks 刪除「{title}」嗎?",
+ "deleteEvent": "刪除活動",
+ "title": "標題",
+ "create": "新增",
+ "newTask": "新增待辦事項",
+ "clearCompleted": "清除已完成項目",
+ "refreshList": "重新整理清單",
+ "refreshAll": "全部重新整理",
+ "listRefreshed": "清單已重新整理。",
+ "allTasksRefreshed": "所有帳戶都已重新整理。",
+ "exportedFile": "已匯出至 {path}",
+ "exportFailed": "匯出失敗:{error}",
+ "refreshFailed": "重新整理失敗:{error}",
+ "selectOrCreateTaskList": "請選擇或建立待辦清單以開始使用。",
+ "signInToViewTasks": "登入以查看待辦事項。",
+ "noTasks": "沒有待辦事項。",
+ "noTasksYet": "還沒有待辦事項",
+ "noTasksYetMessage": "建立待辦事項或重新整理帳戶以開始使用。",
+ "noTasksInList": "此清單中沒有待辦事項。",
+ "overdue": "已逾期",
+ "today": "今天",
+ "tomorrow": "明天",
+ "upcoming": "即將到期",
+ "noDate": "無日期",
+ "completed": "已完成",
+ "duePrefix": "{date} 到期",
+ "dateTimeDisplay": "{date} · {time}",
+ "taskDetails": "待辦事項詳細資料",
+ "editTask": "編輯待辦事項",
+ "noTaskSelected": "未選取待辦事項。",
+ "noTaskSelectedHelper": "選擇待辦事項以查看和編輯詳細資料。",
+ "taskUnavailable": "無法使用待辦事項。",
+ "signInToEditTasks": "登入以編輯待辦事項。",
+ "refreshTask": "重新整理待辦事項",
+ "primarySection": "主要資訊",
+ "statusSection": "狀態",
+ "openStatus": "未完成",
+ "doneStatus": "已完成",
+ "notes": "備註",
+ "dueDate": "到期日",
+ "clearDueDate": "清除到期日",
+ "dueTime": "到期時間",
+ "startDate": "開始日期",
+ "startTime": "開始時間",
+ "endDate": "結束日期",
+ "endTime": "結束時間",
+ "reminderDate": "提醒日期",
+ "reminderTime": "提醒時間",
+ "reminder": "提醒",
+ "addReminder": "新增提醒",
+ "addGuest": "新增參與者",
+ "addGuestEmail": "新增參與者電子郵件",
+ "removeReminder": "移除提醒",
+ "off": "關閉",
+ "repeat": "重複",
+ "repeatNone": "不重複",
+ "noneValue": "無",
+ "repeatDaily": "每天",
+ "repeatWeekly": "每週",
+ "repeatMonthly": "每月",
+ "repeatYearly": "每年",
+ "importance": "重要性",
+ "importanceLow": "低",
+ "importanceNormal": "一般",
+ "importanceHigh": "高",
+ "categories": "類別",
+ "scheduleSection": "行程",
+ "dueGroup": "到期",
+ "startGroup": "開始",
+ "reminderGroup": "提醒",
+ "organizationSection": "整理",
+ "actionsSection": "動作",
+ "advancedSection": "進階",
+ "addCategory": "新增類別",
+ "list": "清單",
+ "microsoftMoveUnsupported": "此版本不支援在 Microsoft To Do 帳戶的清單之間移動待辦事項。",
+ "createSubtask": "建立子待辦事項",
+ "moveToTop": "移至頂端",
+ "deleteTask": "刪除待辦事項",
+ "newSubtask": "新增子待辦事項",
+ "deleteTaskConfirmation": "要從 Google Tasks 刪除「{title}」嗎?",
+ "metadata": "中繼資料",
+ "id": "ID",
+ "etag": "ETag",
+ "updated": "更新時間",
+ "parent": "上層待辦事項",
+ "position": "位置",
+ "webLink": "網頁連結",
+ "assignment": "指派",
+ "localState": "本機狀態",
+ "pendingSync": "等候同步",
+ "synced": "已同步",
+ "account": "帳戶",
+ "sync": "同步",
+ "manualFullSync": "手動完整同步",
+ "runInBackgroundWhenClosed": "視窗關閉後繼續在背景執行",
+ "showTrayIcon": "顯示系統匣圖示",
+ "startMinimizedToTray": "啟動時最小化至系統匣",
+ "requiresTrayIcon": "需要系統匣圖示。",
+ "syncComplete": "同步完成。",
+ "syncFailed": "同步失敗:{error}",
+ "notifySyncFailures": "同步失敗通知",
+ "notifyConflicts": "衝突通知",
+ "notifyDueToday": "今天到期待辦事項通知",
+ "eventReminders": "活動提醒",
+ "taskReminders": "待辦事項提醒",
+ "notificationDetailLevel": "通知詳細程度",
+ "notificationDetailPrivate": "私人",
+ "notificationDetailNormal": "一般",
+ "quietHours": "勿擾時段",
+ "quietHoursDescription": "在此時段暫停通知。",
+ "quietHoursStart": "勿擾開始時間",
+ "quietHoursEnd": "勿擾結束時間",
+ "notifications": "通知",
+ "appearance": "外觀",
+ "theme": "主題",
+ "themeSystem": "系統",
+ "themeLight": "淺色",
+ "themeDark": "深色",
+ "themeFamily": "主題系列",
+ "themeFamilyYaru": "Ubuntu 原生主題(Yaru)",
+ "localization": "語言與地區",
+ "currentLocale": "目前語系",
+ "privacy": "隱私權",
+ "redactTaskContentInDiagnostics": "在診斷資訊中隱藏待辦事項內容",
+ "developerDiagnostics": "開發人員診斷",
+ "diagnostics": "診斷",
+ "apiInspectorDisabled": "顯示 API 檢查器",
+ "googleTasksApi": "Google Tasks API",
+ "discoveryRevision": "Discovery 修訂版本:{revision}",
+ "implementedMethods": "已實作的方法",
+ "supportsTasksScopes": "支援 tasks 和 tasks.readonly 權限範圍",
+ "requiresTasksScope": "需要 tasks 權限範圍",
+ "blockedPendingOperations": "遭封鎖的待處理作業",
+ "signInToInspectPendingOperations": "登入以檢查待處理作業。",
+ "noBlockedPendingOperations": "沒有遭封鎖的待處理作業。",
+ "operationActions": "操作選項",
+ "pendingOpListId": "清單={id}",
+ "pendingOpTaskId": "待辦事項={id}",
+ "pendingOpAttempts": "嘗試次數={count}",
+ "retry": "再試一次",
+ "discard": "捨棄",
+ "discardChangesAction": "捨棄",
+ "discardChanges": "要捨棄變更嗎?",
+ "discardChangesConfirmation": "這會捨棄此待辦事項中尚未儲存的編輯內容。",
+ "retryCompleted": "重試完成。",
+ "discardPendingOperation": "要捨棄待處理作業嗎?",
+ "discardPendingOperationConfirmation": "這會移除遭封鎖的本機作業。下次同步時將從 Google Tasks 重新整理資料。",
+ "pendingOperationDiscarded": "已捨棄待處理作業。",
+ "syncFailureNotificationTitle": "BusyMax 同步失敗",
+ "syncFailureNotificationBody": "背景同步失敗。{message}",
+ "conflictNotificationTitle": "BusyMax 同步衝突",
+ "conflictNotificationBody": "一項待處理的本機變更遭到封鎖。{summary}",
+ "dueTodayNotificationTitle": "今天到期的待辦事項",
+ "dueTodayNotificationBody": "{count, plural, =1{今天有 1 項待辦事項到期。} other{今天有 {count} 項待辦事項到期。}}",
+ "eventReminderNotificationTitle": "活動提醒",
+ "taskReminderNotificationTitle": "待辦事項提醒",
+ "eventReminderNotificationBody": "活動即將開始。",
+ "taskReminderNotificationBody": "待辦事項即將到期。",
+ "notificationOpenAction": "開啟",
+ "notificationDetailsHidden": "根據隱私權設定,詳細資料已隱藏。",
+ "previousMonth": "上個月",
+ "nextMonth": "下個月",
+ "openMonthView": "開啟月檢視",
+ "previousYear": "上一年",
+ "nextYear": "下一年",
+ "openYearView": "開啟年檢視",
+ "weekNumberTooltip": "第 {number} 週",
+ "resizeAllDayPanel": "調整全天面板大小",
+ "scheduleItemCount": "{count, plural, =1{1 項} other{{count} 項}}",
+ "readOnlyCalendar": "此行事曆為唯讀。",
+ "selectTimeZone": "選擇時區",
+ "searchLocations": "搜尋地點",
+ "noLocationsFound": "找不到地點",
+ "deleteCalendarConfirmation": "要刪除「{title}」嗎?"
+}
diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart
index 5795906..77b8b4c 100644
--- a/lib/l10n/generated/app_localizations.dart
+++ b/lib/l10n/generated/app_localizations.dart
@@ -1,3 +1,7 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
import 'dart:async';
import 'package:flutter/foundation.dart';
@@ -5,10 +9,22 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;
+import 'app_localizations_ar.dart';
import 'app_localizations_de.dart';
import 'app_localizations_en.dart';
import 'app_localizations_es.dart';
+import 'app_localizations_et.dart';
+import 'app_localizations_fa.dart';
+import 'app_localizations_fi.dart';
import 'app_localizations_fr.dart';
+import 'app_localizations_hi.dart';
+import 'app_localizations_it.dart';
+import 'app_localizations_ja.dart';
+import 'app_localizations_ko.dart';
+import 'app_localizations_pt.dart';
+import 'app_localizations_ru.dart';
+import 'app_localizations_vi.dart';
+import 'app_localizations_zh.dart';
// ignore_for_file: type=lint
@@ -96,10 +112,24 @@ abstract class AppLocalizations {
/// A list of this localizations delegate's supported locales.
static const List supportedLocales = [
+ Locale('ar'),
Locale('de'),
Locale('en'),
Locale('es'),
+ Locale('et'),
+ Locale('fa'),
+ Locale('fi'),
Locale('fr'),
+ Locale('hi'),
+ Locale('it'),
+ Locale('ja'),
+ Locale('ko'),
+ Locale('pt'),
+ Locale('ru'),
+ Locale('vi'),
+ Locale('zh'),
+ Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
+ Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'),
];
/// No description provided for @appTitle.
@@ -339,7 +369,7 @@ abstract class AppLocalizations {
/// No description provided for @allDay.
///
/// In en, this message translates to:
- /// **'All Day'**
+ /// **'All day'**
String get allDay;
/// No description provided for @moreItems.
@@ -354,125 +384,65 @@ abstract class AppLocalizations {
/// **'No events or tasks'**
String get noEventsOrTasks;
- /// No description provided for @trayAgendaLoading.
- ///
- /// In en, this message translates to:
- /// **'Loading agenda...'**
- String get trayAgendaLoading;
-
- /// No description provided for @trayAgendaSignInRequired.
- ///
- /// In en, this message translates to:
- /// **'Sign in to show agenda.'**
- String get trayAgendaSignInRequired;
-
- /// No description provided for @trayAgendaNoSources.
- ///
- /// In en, this message translates to:
- /// **'No visible calendars or task lists.'**
- String get trayAgendaNoSources;
-
- /// No description provided for @trayAgendaOpenBusyMax.
- ///
- /// In en, this message translates to:
- /// **'Open app'**
- String get trayAgendaOpenBusyMax;
-
- /// No description provided for @trayAgendaRefresh.
- ///
- /// In en, this message translates to:
- /// **'Refresh'**
- String get trayAgendaRefresh;
-
- /// No description provided for @trayAgendaError.
+ /// No description provided for @scheduleLoading.
///
/// In en, this message translates to:
- /// **'Agenda unavailable'**
- String get trayAgendaError;
+ /// **'Loading schedule...'**
+ String get scheduleLoading;
- /// No description provided for @compactAgendaTitle.
+ /// No description provided for @scheduleUnavailable.
///
/// In en, this message translates to:
- /// **'Agenda'**
- String get compactAgendaTitle;
+ /// **'Schedule unavailable'**
+ String get scheduleUnavailable;
- /// No description provided for @compactAgendaSubtitle.
+ /// No description provided for @scheduleNoSources.
///
/// In en, this message translates to:
- /// **'Upcoming'**
- String get compactAgendaSubtitle;
+ /// **'No visible calendars or task lists'**
+ String get scheduleNoSources;
- /// No description provided for @compactAgendaOverdue.
+ /// No description provided for @scheduleNoSourcesDescription.
///
/// In en, this message translates to:
- /// **'Overdue'**
- String get compactAgendaOverdue;
+ /// **'Choose what to show in Settings, then refresh.'**
+ String get scheduleNoSourcesDescription;
- /// No description provided for @compactAgendaClear.
+ /// No description provided for @scheduleSignInRequired.
///
/// In en, this message translates to:
- /// **'Clear for now'**
- String get compactAgendaClear;
+ /// **'Connect an account'**
+ String get scheduleSignInRequired;
- /// No description provided for @compactAgendaOpenBusyMax.
+ /// No description provided for @scheduleSignInDescription.
///
/// In en, this message translates to:
- /// **'Open BusyMax'**
- String get compactAgendaOpenBusyMax;
+ /// **'Sign in to sync calendars and tasks.'**
+ String get scheduleSignInDescription;
- /// No description provided for @compactAgendaHide.
+ /// No description provided for @scheduleNoSearchResults.
///
/// In en, this message translates to:
- /// **'Hide'**
- String get compactAgendaHide;
+ /// **'No matching events or tasks'**
+ String get scheduleNoSearchResults;
- /// No description provided for @compactAgendaNewTask.
+ /// No description provided for @scheduleNoSearchResultsDescription.
///
/// In en, this message translates to:
- /// **'New task'**
- String get compactAgendaNewTask;
+ /// **'Try a different search or clear the current filters.'**
+ String get scheduleNoSearchResultsDescription;
- /// No description provided for @compactAgendaRetry.
- ///
- /// In en, this message translates to:
- /// **'Retry'**
- String get compactAgendaRetry;
-
- /// No description provided for @compactAgendaRefresh.
+ /// No description provided for @refresh.
///
/// In en, this message translates to:
/// **'Refresh'**
- String get compactAgendaRefresh;
-
- /// No description provided for @compactAgendaAllDay.
- ///
- /// In en, this message translates to:
- /// **'All day'**
- String get compactAgendaAllDay;
+ String get refresh;
- /// No description provided for @compactAgendaDueToday.
+ /// No description provided for @trayOpenBusyMax.
///
/// In en, this message translates to:
- /// **'Due today'**
- String get compactAgendaDueToday;
-
- /// No description provided for @compactAgendaDueTomorrow.
- ///
- /// In en, this message translates to:
- /// **'Due tomorrow'**
- String get compactAgendaDueTomorrow;
-
- /// No description provided for @compactAgendaDueOn.
- ///
- /// In en, this message translates to:
- /// **'Due {date}'**
- String compactAgendaDueOn(String date);
-
- /// No description provided for @compactAgendaMoreOverdue.
- ///
- /// In en, this message translates to:
- /// **'Load more overdue tasks'**
- String get compactAgendaMoreOverdue;
+ /// **'Open BusyMax'**
+ String get trayOpenBusyMax;
/// No description provided for @agendaLoadMoreOverdue.
///
@@ -597,7 +567,7 @@ abstract class AppLocalizations {
/// No description provided for @timeSlot.
///
/// In en, this message translates to:
- /// **'Time Slot'**
+ /// **'Time slot'**
String get timeSlot;
/// No description provided for @startDateTime.
@@ -684,6 +654,126 @@ abstract class AppLocalizations {
/// **'Provider calendar'**
String get providerCalendar;
+ /// No description provided for @formatBoldShortLabel.
+ ///
+ /// In en, this message translates to:
+ /// **'B'**
+ String get formatBoldShortLabel;
+
+ /// No description provided for @formatBoldTooltip.
+ ///
+ /// In en, this message translates to:
+ /// **'Bold'**
+ String get formatBoldTooltip;
+
+ /// No description provided for @formatItalicShortLabel.
+ ///
+ /// In en, this message translates to:
+ /// **'I'**
+ String get formatItalicShortLabel;
+
+ /// No description provided for @formatItalicTooltip.
+ ///
+ /// In en, this message translates to:
+ /// **'Italic'**
+ String get formatItalicTooltip;
+
+ /// No description provided for @formatUnderlineShortLabel.
+ ///
+ /// In en, this message translates to:
+ /// **'U'**
+ String get formatUnderlineShortLabel;
+
+ /// No description provided for @formatUnderlineTooltip.
+ ///
+ /// In en, this message translates to:
+ /// **'Underline'**
+ String get formatUnderlineTooltip;
+
+ /// No description provided for @reminderMinutesBefore.
+ ///
+ /// In en, this message translates to:
+ /// **'{minutes, plural, =1{1 minute before} other{{minutes} minutes before}}'**
+ String reminderMinutesBefore(int minutes);
+
+ /// No description provided for @reminderAtStart.
+ ///
+ /// In en, this message translates to:
+ /// **'At start'**
+ String get reminderAtStart;
+
+ /// No description provided for @reminderHoursBefore.
+ ///
+ /// In en, this message translates to:
+ /// **'{hours, plural, =1{1 hour before} other{{hours} hours before}}'**
+ String reminderHoursBefore(int hours);
+
+ /// No description provided for @reminderDaysBefore.
+ ///
+ /// In en, this message translates to:
+ /// **'{days, plural, =1{1 day before} other{{days} days before}}'**
+ String reminderDaysBefore(int days);
+
+ /// No description provided for @availabilityFree.
+ ///
+ /// In en, this message translates to:
+ /// **'Free'**
+ String get availabilityFree;
+
+ /// No description provided for @availabilityTentative.
+ ///
+ /// In en, this message translates to:
+ /// **'Tentative'**
+ String get availabilityTentative;
+
+ /// No description provided for @availabilityOutOfOffice.
+ ///
+ /// In en, this message translates to:
+ /// **'Out of office'**
+ String get availabilityOutOfOffice;
+
+ /// No description provided for @availabilityWorkingElsewhere.
+ ///
+ /// In en, this message translates to:
+ /// **'Working elsewhere'**
+ String get availabilityWorkingElsewhere;
+
+ /// No description provided for @visibilityDefault.
+ ///
+ /// In en, this message translates to:
+ /// **'Default'**
+ String get visibilityDefault;
+
+ /// No description provided for @visibilityPublic.
+ ///
+ /// In en, this message translates to:
+ /// **'Public'**
+ String get visibilityPublic;
+
+ /// No description provided for @visibilityPrivate.
+ ///
+ /// In en, this message translates to:
+ /// **'Private'**
+ String get visibilityPrivate;
+
+ /// No description provided for @visibilityConfidential.
+ ///
+ /// In en, this message translates to:
+ /// **'Confidential'**
+ String get visibilityConfidential;
+
+ /// No description provided for @sensitivityNormal.
+ ///
+ /// In en, this message translates to:
+ /// **'Normal'**
+ String get sensitivityNormal;
+
+ /// No description provided for @sensitivityPersonal.
+ ///
+ /// In en, this message translates to:
+ /// **'Personal'**
+ String get sensitivityPersonal;
+
/// No description provided for @tasks.
///
/// In en, this message translates to:
@@ -846,35 +936,29 @@ abstract class AppLocalizations {
/// **'Close task editing or task details'**
String get shortcutCancelEditingDescription;
- /// No description provided for @shortcutGroupCompactAgenda.
- ///
- /// In en, this message translates to:
- /// **'Compact agenda'**
- String get shortcutGroupCompactAgenda;
-
- /// No description provided for @shortcutRefreshCompactAgendaDescription.
+ /// No description provided for @aboutBusyMax.
///
/// In en, this message translates to:
- /// **'Refresh the compact agenda window'**
- String get shortcutRefreshCompactAgendaDescription;
+ /// **'About BusyMax'**
+ String get aboutBusyMax;
- /// No description provided for @shortcutHideCompactAgendaDescription.
+ /// No description provided for @aboutBusyMaxDescription.
///
/// In en, this message translates to:
- /// **'Hide the compact agenda window'**
- String get shortcutHideCompactAgendaDescription;
+ /// **'Calendar and tasks'**
+ String get aboutBusyMaxDescription;
- /// No description provided for @aboutBusyMax.
+ /// No description provided for @license.
///
/// In en, this message translates to:
- /// **'About BusyMax'**
- String get aboutBusyMax;
+ /// **'License'**
+ String get license;
- /// No description provided for @aboutBusyMaxDescription.
+ /// No description provided for @apacheLicenseName.
///
/// In en, this message translates to:
- /// **'ToDo and Calendar'**
- String get aboutBusyMaxDescription;
+ /// **'Apache License 2.0'**
+ String get apacheLicenseName;
/// No description provided for @website.
///
@@ -882,6 +966,12 @@ abstract class AppLocalizations {
/// **'Website'**
String get website;
+ /// No description provided for @sourceCode.
+ ///
+ /// In en, this message translates to:
+ /// **'Source code'**
+ String get sourceCode;
+
/// No description provided for @reportAnIssue.
///
/// In en, this message translates to:
@@ -1038,6 +1128,18 @@ abstract class AppLocalizations {
/// **'Toggle Sidebar'**
String get toggleSidebar;
+ /// No description provided for @showSidebar.
+ ///
+ /// In en, this message translates to:
+ /// **'Show sidebar panel'**
+ String get showSidebar;
+
+ /// No description provided for @hideSidebar.
+ ///
+ /// In en, this message translates to:
+ /// **'Hide sidebar panel'**
+ String get hideSidebar;
+
/// No description provided for @accounts.
///
/// In en, this message translates to:
@@ -1086,29 +1188,65 @@ abstract class AppLocalizations {
/// **'Signed in'**
String get signedInAccount;
- /// No description provided for @signOutThisAccount.
+ /// No description provided for @removeAccount.
+ ///
+ /// In en, this message translates to:
+ /// **'Remove account…'**
+ String get removeAccount;
+
+ /// No description provided for @removingAccount.
+ ///
+ /// In en, this message translates to:
+ /// **'Removing account…'**
+ String get removingAccount;
+
+ /// No description provided for @removeAccountDescription.
+ ///
+ /// In en, this message translates to:
+ /// **'Stop syncing and remove this account’s data from this device.'**
+ String get removeAccountDescription;
+
+ /// No description provided for @removeAccountTitle.
+ ///
+ /// In en, this message translates to:
+ /// **'Remove {account} from BusyMax?'**
+ String removeAccountTitle(String account);
+
+ /// No description provided for @removeAccountConfirmation.
///
/// In en, this message translates to:
- /// **'Sign out this account'**
- String get signOutThisAccount;
+ /// **'This deletes cached tasks, calendars, events, reminders, and pending offline changes from this device. Unsynced changes will be lost. Nothing will be deleted from Google or Microsoft.'**
+ String get removeAccountConfirmation;
- /// No description provided for @revokeThisAccount.
+ /// No description provided for @revokeGoogleAccess.
///
/// In en, this message translates to:
- /// **'Revoke this account'**
- String get revokeThisAccount;
+ /// **'Also revoke BusyMax’s access to this Google Account'**
+ String get revokeGoogleAccess;
- /// No description provided for @disconnectThisAccount.
+ /// No description provided for @revokeGoogleAccessDescription.
///
/// In en, this message translates to:
- /// **'Disconnect this account'**
- String get disconnectThisAccount;
+ /// **'You will need to grant access again before reconnecting.'**
+ String get revokeGoogleAccessDescription;
- /// No description provided for @deleteLocalDataForThisAccount.
+ /// No description provided for @removeAccountAction.
///
/// In en, this message translates to:
- /// **'Delete local data for this account'**
- String get deleteLocalDataForThisAccount;
+ /// **'Remove account'**
+ String get removeAccountAction;
+
+ /// No description provided for @removeAccountFailed.
+ ///
+ /// In en, this message translates to:
+ /// **'Could not finish removing the account. Try again.'**
+ String get removeAccountFailed;
+
+ /// No description provided for @accountRemovedGoogleRevokeFailed.
+ ///
+ /// In en, this message translates to:
+ /// **'The account was removed from this device, but BusyMax could not revoke Google access. You can revoke it from your Google Account.'**
+ String get accountRemovedGoogleRevokeFailed;
/// No description provided for @newList.
///
@@ -1332,36 +1470,6 @@ abstract class AppLocalizations {
/// **'{date} · {time}'**
String dateTimeDisplay(String date, String time);
- /// No description provided for @searchTasks.
- ///
- /// In en, this message translates to:
- /// **'Search tasks'**
- String get searchTasks;
-
- /// No description provided for @advancedFilters.
- ///
- /// In en, this message translates to:
- /// **'Advanced filters'**
- String get advancedFilters;
-
- /// No description provided for @showCompleted.
- ///
- /// In en, this message translates to:
- /// **'Show completed'**
- String get showCompleted;
-
- /// No description provided for @showHidden.
- ///
- /// In en, this message translates to:
- /// **'Show hidden'**
- String get showHidden;
-
- /// No description provided for @showAssigned.
- ///
- /// In en, this message translates to:
- /// **'Show assigned'**
- String get showAssigned;
-
/// No description provided for @taskDetails.
///
/// In en, this message translates to:
@@ -1758,41 +1866,41 @@ abstract class AppLocalizations {
/// **'Account'**
String get account;
- /// No description provided for @signOut.
+ /// No description provided for @sync.
///
/// In en, this message translates to:
- /// **'Sign out'**
- String get signOut;
+ /// **'Sync'**
+ String get sync;
- /// No description provided for @revokeGoogleAuthorization.
+ /// No description provided for @manualFullSync.
///
/// In en, this message translates to:
- /// **'Revoke Google authorization'**
- String get revokeGoogleAuthorization;
+ /// **'Manual full sync'**
+ String get manualFullSync;
- /// No description provided for @deleteLocalData.
+ /// No description provided for @runInBackgroundWhenClosed.
///
/// In en, this message translates to:
- /// **'Delete local data'**
- String get deleteLocalData;
+ /// **'Continue running when the window is closed'**
+ String get runInBackgroundWhenClosed;
- /// No description provided for @deleteLocalDataConfirmation.
+ /// No description provided for @showTrayIcon.
///
/// In en, this message translates to:
- /// **'This removes the local account, synced tasks, and pending offline changes from this device.'**
- String get deleteLocalDataConfirmation;
+ /// **'Show tray icon'**
+ String get showTrayIcon;
- /// No description provided for @sync.
+ /// No description provided for @startMinimizedToTray.
///
/// In en, this message translates to:
- /// **'Sync'**
- String get sync;
+ /// **'Start minimized to the tray'**
+ String get startMinimizedToTray;
- /// No description provided for @manualFullSync.
+ /// No description provided for @requiresTrayIcon.
///
/// In en, this message translates to:
- /// **'Manual full sync'**
- String get manualFullSync;
+ /// **'Requires the tray icon.'**
+ String get requiresTrayIcon;
/// No description provided for @syncComplete.
///
@@ -1824,6 +1932,60 @@ abstract class AppLocalizations {
/// **'Due-today notifications'**
String get notifyDueToday;
+ /// No description provided for @eventReminders.
+ ///
+ /// In en, this message translates to:
+ /// **'Event reminders'**
+ String get eventReminders;
+
+ /// No description provided for @taskReminders.
+ ///
+ /// In en, this message translates to:
+ /// **'Task reminders'**
+ String get taskReminders;
+
+ /// No description provided for @notificationDetailLevel.
+ ///
+ /// In en, this message translates to:
+ /// **'Notification detail level'**
+ String get notificationDetailLevel;
+
+ /// No description provided for @notificationDetailPrivate.
+ ///
+ /// In en, this message translates to:
+ /// **'Private'**
+ String get notificationDetailPrivate;
+
+ /// No description provided for @notificationDetailNormal.
+ ///
+ /// In en, this message translates to:
+ /// **'Normal'**
+ String get notificationDetailNormal;
+
+ /// No description provided for @quietHours.
+ ///
+ /// In en, this message translates to:
+ /// **'Quiet hours'**
+ String get quietHours;
+
+ /// No description provided for @quietHoursDescription.
+ ///
+ /// In en, this message translates to:
+ /// **'Pause notifications during this period.'**
+ String get quietHoursDescription;
+
+ /// No description provided for @quietHoursStart.
+ ///
+ /// In en, this message translates to:
+ /// **'Quiet hours start'**
+ String get quietHoursStart;
+
+ /// No description provided for @quietHoursEnd.
+ ///
+ /// In en, this message translates to:
+ /// **'Quiet hours end'**
+ String get quietHoursEnd;
+
/// No description provided for @notifications.
///
/// In en, this message translates to:
@@ -1896,12 +2058,6 @@ abstract class AppLocalizations {
/// **'Redact task content in diagnostics'**
String get redactTaskContentInDiagnostics;
- /// No description provided for @detailedNotifications.
- ///
- /// In en, this message translates to:
- /// **'Detailed notification text'**
- String get detailedNotifications;
-
/// No description provided for @developerDiagnostics.
///
/// In en, this message translates to:
@@ -2004,6 +2160,12 @@ abstract class AppLocalizations {
/// **'Discard'**
String get discard;
+ /// Destructive confirmation button that throws away unsaved edits. Translate it distinctly from Cancel.
+ ///
+ /// In en, this message translates to:
+ /// **'Discard'**
+ String get discardChangesAction;
+
/// No description provided for @discardChanges.
///
/// In en, this message translates to:
@@ -2076,11 +2238,125 @@ abstract class AppLocalizations {
/// **'{count, plural, =1{One task is due today.} other{{count} tasks are due today.}}'**
String dueTodayNotificationBody(int count);
+ /// No description provided for @eventReminderNotificationTitle.
+ ///
+ /// In en, this message translates to:
+ /// **'Event reminder'**
+ String get eventReminderNotificationTitle;
+
+ /// No description provided for @taskReminderNotificationTitle.
+ ///
+ /// In en, this message translates to:
+ /// **'Task reminder'**
+ String get taskReminderNotificationTitle;
+
+ /// No description provided for @eventReminderNotificationBody.
+ ///
+ /// In en, this message translates to:
+ /// **'Event starts soon.'**
+ String get eventReminderNotificationBody;
+
+ /// No description provided for @taskReminderNotificationBody.
+ ///
+ /// In en, this message translates to:
+ /// **'Task is due soon.'**
+ String get taskReminderNotificationBody;
+
+ /// No description provided for @notificationOpenAction.
+ ///
+ /// In en, this message translates to:
+ /// **'Open'**
+ String get notificationOpenAction;
+
/// No description provided for @notificationDetailsHidden.
///
/// In en, this message translates to:
/// **'Details are hidden by privacy settings.'**
String get notificationDetailsHidden;
+
+ /// No description provided for @previousMonth.
+ ///
+ /// In en, this message translates to:
+ /// **'Previous month'**
+ String get previousMonth;
+
+ /// No description provided for @nextMonth.
+ ///
+ /// In en, this message translates to:
+ /// **'Next month'**
+ String get nextMonth;
+
+ /// No description provided for @openMonthView.
+ ///
+ /// In en, this message translates to:
+ /// **'Open month view'**
+ String get openMonthView;
+
+ /// No description provided for @previousYear.
+ ///
+ /// In en, this message translates to:
+ /// **'Previous year'**
+ String get previousYear;
+
+ /// No description provided for @nextYear.
+ ///
+ /// In en, this message translates to:
+ /// **'Next year'**
+ String get nextYear;
+
+ /// No description provided for @openYearView.
+ ///
+ /// In en, this message translates to:
+ /// **'Open year view'**
+ String get openYearView;
+
+ /// No description provided for @weekNumberTooltip.
+ ///
+ /// In en, this message translates to:
+ /// **'Week {number}'**
+ String weekNumberTooltip(int number);
+
+ /// No description provided for @resizeAllDayPanel.
+ ///
+ /// In en, this message translates to:
+ /// **'Resize the all-day panel'**
+ String get resizeAllDayPanel;
+
+ /// No description provided for @scheduleItemCount.
+ ///
+ /// In en, this message translates to:
+ /// **'{count, plural, =1{1 item} other{{count} items}}'**
+ String scheduleItemCount(int count);
+
+ /// No description provided for @readOnlyCalendar.
+ ///
+ /// In en, this message translates to:
+ /// **'This calendar is read-only.'**
+ String get readOnlyCalendar;
+
+ /// No description provided for @selectTimeZone.
+ ///
+ /// In en, this message translates to:
+ /// **'Select Timezone'**
+ String get selectTimeZone;
+
+ /// No description provided for @searchLocations.
+ ///
+ /// In en, this message translates to:
+ /// **'Search locations'**
+ String get searchLocations;
+
+ /// No description provided for @noLocationsFound.
+ ///
+ /// In en, this message translates to:
+ /// **'No locations found'**
+ String get noLocationsFound;
+
+ /// No description provided for @deleteCalendarConfirmation.
+ ///
+ /// In en, this message translates to:
+ /// **'Delete \"{title}\"?'**
+ String deleteCalendarConfirmation(String title);
}
class _AppLocalizationsDelegate
@@ -2093,24 +2369,78 @@ class _AppLocalizationsDelegate
}
@override
- bool isSupported(Locale locale) =>
- ['de', 'en', 'es', 'fr'].contains(locale.languageCode);
+ bool isSupported(Locale locale) => [
+ 'ar',
+ 'de',
+ 'en',
+ 'es',
+ 'et',
+ 'fa',
+ 'fi',
+ 'fr',
+ 'hi',
+ 'it',
+ 'ja',
+ 'ko',
+ 'pt',
+ 'ru',
+ 'vi',
+ 'zh',
+ ].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
+ // Lookup logic when language+script codes are specified.
+ switch (locale.languageCode) {
+ case 'zh':
+ {
+ switch (locale.scriptCode) {
+ case 'Hans':
+ return AppLocalizationsZhHans();
+ case 'Hant':
+ return AppLocalizationsZhHant();
+ }
+ break;
+ }
+ }
+
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
+ case 'ar':
+ return AppLocalizationsAr();
case 'de':
return AppLocalizationsDe();
case 'en':
return AppLocalizationsEn();
case 'es':
return AppLocalizationsEs();
+ case 'et':
+ return AppLocalizationsEt();
+ case 'fa':
+ return AppLocalizationsFa();
+ case 'fi':
+ return AppLocalizationsFi();
case 'fr':
return AppLocalizationsFr();
+ case 'hi':
+ return AppLocalizationsHi();
+ case 'it':
+ return AppLocalizationsIt();
+ case 'ja':
+ return AppLocalizationsJa();
+ case 'ko':
+ return AppLocalizationsKo();
+ case 'pt':
+ return AppLocalizationsPt();
+ case 'ru':
+ return AppLocalizationsRu();
+ case 'vi':
+ return AppLocalizationsVi();
+ case 'zh':
+ return AppLocalizationsZh();
}
throw FlutterError(
diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart
new file mode 100644
index 0000000..f65376c
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_ar.dart
@@ -0,0 +1,1263 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Arabic (`ar`).
+class AppLocalizationsAr extends AppLocalizations {
+ AppLocalizationsAr([String locale = 'ar']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'اربط حسابات Google وMicrosoft لمزامنة التقويمات والمهام.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'في شاشة أذونات Google، حدّد أذونات التقويم والمهام معًا.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'أذونات تقويم Google وGoogle Tasks مطلوبة. حاول مرة أخرى وحدّد مربعي الاختيار.';
+
+ @override
+ String get finishSetup => 'إنهاء الإعداد';
+
+ @override
+ String get continueSetup => 'متابعة';
+
+ @override
+ String get onboardingSetupTitle => 'إعداد BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'ربط الحسابات';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'أضف جميع حسابات Google وMicrosoft التي تريد استخدامها. يزامن BusyMax التقويمات والأحداث وقوائم المهام والمهام من كل حساب.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'اختيار إعدادات النظام';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'اضبط سلوك التطبيق على سطح المكتب والتذكيرات ومستوى تفاصيل الإشعارات والمظهر قبل فتح جدولك.';
+
+ @override
+ String get signInWithGoogle => 'تسجيل الدخول باستخدام Google';
+
+ @override
+ String get signInWithMicrosoft => 'تسجيل الدخول باستخدام Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'هذه الخدمة غير مهيأة.';
+
+ @override
+ String get waitingForGoogleSignIn => 'في انتظار تسجيل الدخول إلى Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn =>
+ 'في انتظار تسجيل الدخول إلى Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'تسجيل الدخول إلى Microsoft غير مهيأ. اضبط MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'إلغاء';
+
+ @override
+ String get close => 'إغلاق';
+
+ @override
+ String get exit => 'خروج';
+
+ @override
+ String get options => 'خيارات';
+
+ @override
+ String get hide => 'إخفاء';
+
+ @override
+ String get show => 'إظهار';
+
+ @override
+ String get export => 'تصدير';
+
+ @override
+ String get save => 'حفظ';
+
+ @override
+ String get settings => 'الإعدادات';
+
+ @override
+ String get all => 'الكل';
+
+ @override
+ String get calendarEvents => 'الأحداث';
+
+ @override
+ String get calendarTasks => 'المهام';
+
+ @override
+ String get calendar => 'التقويم';
+
+ @override
+ String get calendars => 'التقويمات';
+
+ @override
+ String get newEvent => 'حدث جديد';
+
+ @override
+ String get refreshCalendar => 'تحديث التقويم';
+
+ @override
+ String get openInProvider => 'فتح في الخدمة';
+
+ @override
+ String get hideFromSchedule => 'إخفاء من الجدول';
+
+ @override
+ String get showInSchedule => 'إظهار في الجدول';
+
+ @override
+ String get noCalendarsSynced => 'لم تتم مزامنة أي تقويمات بعد.';
+
+ @override
+ String get allDay => 'طوال اليوم';
+
+ @override
+ String moreItems(int count) {
+ return '+$count عناصر أخرى';
+ }
+
+ @override
+ String get noEventsOrTasks => 'لا توجد أحداث أو مهام';
+
+ @override
+ String get scheduleLoading => 'جارٍ تحميل الجدول...';
+
+ @override
+ String get scheduleUnavailable => 'الجدول غير متاح';
+
+ @override
+ String get scheduleNoSources => 'لا توجد تقويمات أو قوائم مهام ظاهرة';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'اختر ما تريد إظهاره في الإعدادات، ثم حدّث الجدول.';
+
+ @override
+ String get scheduleSignInRequired => 'ربط حساب';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'سجّل الدخول لمزامنة التقويمات والمهام.';
+
+ @override
+ String get scheduleNoSearchResults => 'لا توجد أحداث أو مهام مطابقة';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'جرّب بحثًا مختلفًا أو امسح عوامل التصفية الحالية.';
+
+ @override
+ String get refresh => 'تحديث';
+
+ @override
+ String get trayOpenBusyMax => 'فتح BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'تحميل المزيد من المهام المتأخرة';
+
+ @override
+ String get agendaLoadMoreNoDate => 'تحميل المزيد من المهام بلا تاريخ';
+
+ @override
+ String get viewDay => 'يوم';
+
+ @override
+ String get viewWeek => 'أسبوع';
+
+ @override
+ String get viewMonth => 'شهر';
+
+ @override
+ String get viewYear => 'سنة';
+
+ @override
+ String get viewAgenda => 'جدول الأعمال';
+
+ @override
+ String get scheduleSettings => 'الجدول';
+
+ @override
+ String get scheduleDisplaySettings => 'عرض الجدول';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'تفتح طريقتا عرض اليوم والأسبوع ضمن هذه الساعات. توسّع العناصر المبكرة والمتأخرة النطاق عند الحاجة.';
+
+ @override
+ String get scheduleDayStartsAt => 'يبدأ اليوم في';
+
+ @override
+ String get scheduleDayEndsAt => 'ينتهي اليوم في';
+
+ @override
+ String get sourceCalendar => 'التقويم';
+
+ @override
+ String get sourceTaskList => 'قائمة المهام';
+
+ @override
+ String get createChoiceTitle => 'إنشاء';
+
+ @override
+ String get createEventAtTime => 'حدث';
+
+ @override
+ String get createTaskAtDate => 'مهمة';
+
+ @override
+ String get editEvent => 'تعديل الحدث';
+
+ @override
+ String get eventTitle => 'عنوان الحدث';
+
+ @override
+ String get location => 'الموقع';
+
+ @override
+ String get timeSlot => 'الفترة الزمنية';
+
+ @override
+ String get startDateTime => 'تاريخ/وقت البدء';
+
+ @override
+ String get endDateTime => 'تاريخ/وقت الانتهاء';
+
+ @override
+ String get doesNotRepeat => 'لا يتكرر';
+
+ @override
+ String get defaultReminder => 'التذكير الافتراضي';
+
+ @override
+ String get guests => 'المدعوون';
+
+ @override
+ String get noGuests => 'لا يوجد مدعوون';
+
+ @override
+ String get description => 'الوصف';
+
+ @override
+ String get availabilityShowAs => 'التوفر / إظهار كـ';
+
+ @override
+ String get busy => 'مشغول';
+
+ @override
+ String get visibility => 'إمكانية العرض';
+
+ @override
+ String get defaultVisibility => 'إمكانية العرض الافتراضية';
+
+ @override
+ String get conference => 'اجتماع';
+
+ @override
+ String get noConference => 'لا يوجد اجتماع';
+
+ @override
+ String get providerCalendar => 'تقويم الخدمة';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => 'عريض';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'مائل';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'تحته خط';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: 'قبل $minutes دقيقة',
+ many: 'قبل $minutes دقيقة',
+ few: 'قبل $minutes دقائق',
+ two: 'قبل دقيقتين',
+ one: 'قبل دقيقة واحدة',
+ zero: 'عند البدء',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'عند البدء';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: 'قبل $hours ساعة',
+ many: 'قبل $hours ساعة',
+ few: 'قبل $hours ساعات',
+ two: 'قبل ساعتين',
+ one: 'قبل ساعة واحدة',
+ zero: 'عند البدء',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: 'قبل $days يوم',
+ many: 'قبل $days يومًا',
+ few: 'قبل $days أيام',
+ two: 'قبل يومين',
+ one: 'قبل يوم واحد',
+ zero: 'في اليوم نفسه',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'متاح';
+
+ @override
+ String get availabilityTentative => 'مبدئي';
+
+ @override
+ String get availabilityOutOfOffice => 'خارج المكتب';
+
+ @override
+ String get availabilityWorkingElsewhere => 'العمل من مكان آخر';
+
+ @override
+ String get visibilityDefault => 'افتراضي';
+
+ @override
+ String get visibilityPublic => 'عام';
+
+ @override
+ String get visibilityPrivate => 'خاص';
+
+ @override
+ String get visibilityConfidential => 'سري';
+
+ @override
+ String get sensitivityNormal => 'عادي';
+
+ @override
+ String get sensitivityPersonal => 'شخصي';
+
+ @override
+ String get tasks => 'المهام';
+
+ @override
+ String get allTasks => 'كل المهام';
+
+ @override
+ String tasksInList(String title) {
+ return 'المهام في $title';
+ }
+
+ @override
+ String get taskLists => 'قوائم المهام';
+
+ @override
+ String get navigation => 'التنقل';
+
+ @override
+ String get mainMenu => 'القائمة الرئيسية';
+
+ @override
+ String get keyboardShortcuts => 'اختصارات لوحة المفاتيح';
+
+ @override
+ String get shortcutGroupGeneral => 'عام';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'إظهار مرجع الاختصارات هذا';
+
+ @override
+ String get shortcutGroupNavigation => 'التنقل';
+
+ @override
+ String get shortcutNextPeriod => 'الفترة التالية';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'الأسبوع التالي في عرض الأسبوع، والشهر التالي في عرض الشهر، وهكذا';
+
+ @override
+ String get shortcutPreviousPeriod => 'الفترة السابقة';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'الأسبوع السابق في عرض الأسبوع، والشهر السابق في عرض الشهر، وهكذا';
+
+ @override
+ String get shortcutJumpToToday => 'الانتقال إلى اليوم';
+
+ @override
+ String get shortcutGroupView => 'العرض';
+
+ @override
+ String get shortcutDayView => 'عرض اليوم';
+
+ @override
+ String get shortcutWeekView => 'عرض الأسبوع';
+
+ @override
+ String get shortcutMonthView => 'عرض الشهر';
+
+ @override
+ String get shortcutYearView => 'عرض السنة';
+
+ @override
+ String get shortcutAgendaView => 'عرض جدول الأعمال';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'الإنشاء والتعديل';
+
+ @override
+ String get shortcutSaveItem => 'حفظ الحدث أو المهمة';
+
+ @override
+ String get shortcutDeleteItem => 'حذف الحدث أو المهمة';
+
+ @override
+ String get shortcutGroupTaskEditing => 'تعديل المهام';
+
+ @override
+ String get shortcutCancelEditing => 'إلغاء التعديل';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'إغلاق تعديل المهمة أو تفاصيلها';
+
+ @override
+ String get aboutBusyMax => 'حول BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'التقويم والمهام';
+
+ @override
+ String get license => 'الترخيص';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'الموقع الإلكتروني';
+
+ @override
+ String get sourceCode => 'الشيفرة المصدرية';
+
+ @override
+ String get reportAnIssue => 'الإبلاغ عن مشكلة';
+
+ @override
+ String get sendFeedback => 'إرسال الملاحظات';
+
+ @override
+ String get feedbackSubmit => 'إرسال';
+
+ @override
+ String get feedbackCategory => 'الفئة';
+
+ @override
+ String get feedbackSelectCategory => 'اختر فئة';
+
+ @override
+ String get feedbackCategoryProblem => 'مشكلة أو خلل';
+
+ @override
+ String get feedbackCategoryFeature => 'طلب ميزة';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'مشكلة تتعلق بالخصوصية أو الأمان';
+
+ @override
+ String get feedbackCategoryUsability => 'مشكلة في سهولة الاستخدام';
+
+ @override
+ String get feedbackCategoryOther => 'أخرى';
+
+ @override
+ String get feedbackSubject => 'الموضوع';
+
+ @override
+ String get feedbackDetailedMessage => 'رسالة مفصّلة';
+
+ @override
+ String get feedbackReplyEmail => 'البريد الإلكتروني للرد (اختياري)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'تضمين التفاصيل التقنية';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'يضيف فقط إصدار نظام التشغيل Linux ولغة التطبيق ومنطقته. لا يتم تضمين أي سجلات أو بيانات حسابات أو أسماء ملفات أو معلومات تشخيصية أخرى.';
+
+ @override
+ String get feedbackCategoryRequired => 'اختر فئة.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'يجب أن يتراوح الموضوع بين 3 و120 حرفًا.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'يجب أن تتراوح الرسالة بين 10 و5,000 حرف.';
+
+ @override
+ String get feedbackInvalidEmail => 'أدخل عنوان بريد إلكتروني صالحًا.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'تعذر الاتصال بـ BusyStack. تحقق من اتصالك وحاول مرة أخرى.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'انتهت مهلة الطلب. لم تُمسح ملاحظاتك؛ حاول مرة أخرى.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'أُرسلت ملاحظات كثيرة جدًا من هذه الشبكة. انتظر وحاول مرة أخرى.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'رفض الخادم الإرسال. راجع الحقول وحاول مرة أخرى.';
+
+ @override
+ String get feedbackServerError =>
+ 'يتعذر على BusyStack قبول ملاحظاتك الآن. لم تُمسح ملاحظاتك؛ حاول مرة أخرى.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'تم إرسال الملاحظات. المرجع: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'إظهار الشريط الجانبي أو إخفاؤه';
+
+ @override
+ String get showSidebar => 'إظهار اللوحة الجانبية';
+
+ @override
+ String get hideSidebar => 'إخفاء اللوحة الجانبية';
+
+ @override
+ String get accounts => 'الحسابات';
+
+ @override
+ String get currentAccount => 'الحساب الحالي';
+
+ @override
+ String get switchAccount => 'تبديل الحساب';
+
+ @override
+ String get addGoogleAccount => 'إضافة حساب Google';
+
+ @override
+ String get addMicrosoftAccount => 'إضافة حساب Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'تم تسجيل الدخول';
+
+ @override
+ String get removeAccount => 'إزالة الحساب…';
+
+ @override
+ String get removingAccount => 'جارٍ إزالة الحساب…';
+
+ @override
+ String get removeAccountDescription =>
+ 'إيقاف المزامنة وإزالة بيانات هذا الحساب من هذا الجهاز.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'إزالة $account من BusyMax؟';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'سيؤدي ذلك إلى حذف المهام والتقويمات والأحداث والتذكيرات والتغييرات غير المتصلة المعلّقة المخزّنة مؤقتًا من هذا الجهاز. ستُفقد التغييرات غير المتزامنة. لن يُحذف أي شيء من Google أو Microsoft.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'إلغاء وصول BusyMax إلى حساب Google هذا أيضًا';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'ستحتاج إلى منح الوصول مرة أخرى قبل إعادة الاتصال.';
+
+ @override
+ String get removeAccountAction => 'إزالة الحساب';
+
+ @override
+ String get removeAccountFailed => 'تعذر إكمال إزالة الحساب. حاول مرة أخرى.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'تمت إزالة الحساب من هذا الجهاز، لكن تعذر على BusyMax إلغاء الوصول إلى Google. يمكنك إلغاء الوصول من حسابك على Google.';
+
+ @override
+ String get newList => 'قائمة جديدة';
+
+ @override
+ String get signInToViewTaskLists => 'سجّل الدخول لعرض قوائم المهام.';
+
+ @override
+ String get noTaskListsSynced => 'لم تتم مزامنة أي قوائم مهام بعد.';
+
+ @override
+ String get listActions => 'إجراءات القائمة';
+
+ @override
+ String get rename => 'إعادة تسمية';
+
+ @override
+ String get delete => 'حذف';
+
+ @override
+ String get renameList => 'إعادة تسمية القائمة';
+
+ @override
+ String get deleteList => 'حذف القائمة';
+
+ @override
+ String get builtInMicrosoftList => 'مدمجة';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'لا يمكن إعادة تسمية قوائم Microsoft To Do المدمجة أو حذفها.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'حذف «$title» من Google Tasks؟';
+ }
+
+ @override
+ String get deleteEvent => 'حذف الحدث';
+
+ @override
+ String get title => 'العنوان';
+
+ @override
+ String get create => 'إنشاء';
+
+ @override
+ String get newTask => 'مهمة جديدة';
+
+ @override
+ String get clearCompleted => 'مسح المهام المكتملة';
+
+ @override
+ String get refreshList => 'تحديث القائمة';
+
+ @override
+ String get refreshAll => 'تحديث الكل';
+
+ @override
+ String get listRefreshed => 'تم تحديث القائمة.';
+
+ @override
+ String get allTasksRefreshed => 'تم تحديث جميع الحسابات.';
+
+ @override
+ String exportedFile(String path) {
+ return 'تم التصدير إلى $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'فشل التصدير: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'فشل التحديث: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => 'اختر قائمة مهام أو أنشئ واحدة للبدء.';
+
+ @override
+ String get signInToViewTasks => 'سجّل الدخول لعرض المهام.';
+
+ @override
+ String get noTasks => 'لا توجد مهام.';
+
+ @override
+ String get noTasksYet => 'لا توجد مهام بعد';
+
+ @override
+ String get noTasksYetMessage => 'أنشئ مهمة أو حدّث حساباتك للبدء.';
+
+ @override
+ String get noTasksInList => 'لا توجد مهام في هذه القائمة.';
+
+ @override
+ String get overdue => 'متأخرة';
+
+ @override
+ String get today => 'اليوم';
+
+ @override
+ String get tomorrow => 'غدًا';
+
+ @override
+ String get upcoming => 'القادمة';
+
+ @override
+ String get noDate => 'بلا تاريخ';
+
+ @override
+ String get completed => 'مكتملة';
+
+ @override
+ String duePrefix(String date) {
+ return 'مستحقة في $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'تفاصيل المهمة';
+
+ @override
+ String get editTask => 'تعديل المهمة';
+
+ @override
+ String get noTaskSelected => 'لم يتم تحديد مهمة.';
+
+ @override
+ String get noTaskSelectedHelper => 'حدّد مهمة لعرض تفاصيلها وتعديلها.';
+
+ @override
+ String get taskUnavailable => 'المهمة غير متاحة.';
+
+ @override
+ String get signInToEditTasks => 'سجّل الدخول لتعديل المهام.';
+
+ @override
+ String get refreshTask => 'تحديث المهمة';
+
+ @override
+ String get primarySection => 'أساسي';
+
+ @override
+ String get statusSection => 'الحالة';
+
+ @override
+ String get openStatus => 'مفتوحة';
+
+ @override
+ String get doneStatus => 'منجزة';
+
+ @override
+ String get notes => 'ملاحظات';
+
+ @override
+ String get dueDate => 'تاريخ الاستحقاق';
+
+ @override
+ String get clearDueDate => 'مسح تاريخ الاستحقاق';
+
+ @override
+ String get dueTime => 'وقت الاستحقاق';
+
+ @override
+ String get startDate => 'تاريخ البدء';
+
+ @override
+ String get startTime => 'وقت البدء';
+
+ @override
+ String get endDate => 'تاريخ الانتهاء';
+
+ @override
+ String get endTime => 'وقت الانتهاء';
+
+ @override
+ String get reminderDate => 'تاريخ التذكير';
+
+ @override
+ String get reminderTime => 'وقت التذكير';
+
+ @override
+ String get reminder => 'تذكير';
+
+ @override
+ String get addReminder => 'إضافة تذكير';
+
+ @override
+ String get addGuest => 'إضافة مدعو';
+
+ @override
+ String get addGuestEmail => 'إضافة بريد المدعو الإلكتروني';
+
+ @override
+ String get removeReminder => 'إزالة التذكير';
+
+ @override
+ String get off => 'إيقاف';
+
+ @override
+ String get repeat => 'التكرار';
+
+ @override
+ String get repeatNone => 'بلا تكرار';
+
+ @override
+ String get noneValue => 'لا شيء';
+
+ @override
+ String get repeatDaily => 'يوميًا';
+
+ @override
+ String get repeatWeekly => 'أسبوعيًا';
+
+ @override
+ String get repeatMonthly => 'شهريًا';
+
+ @override
+ String get repeatYearly => 'سنويًا';
+
+ @override
+ String get importance => 'الأهمية';
+
+ @override
+ String get importanceLow => 'منخفضة';
+
+ @override
+ String get importanceNormal => 'عادية';
+
+ @override
+ String get importanceHigh => 'مرتفعة';
+
+ @override
+ String get categories => 'الفئات';
+
+ @override
+ String get scheduleSection => 'الجدول';
+
+ @override
+ String get dueGroup => 'الاستحقاق';
+
+ @override
+ String get startGroup => 'البدء';
+
+ @override
+ String get reminderGroup => 'التذكير';
+
+ @override
+ String get organizationSection => 'التنظيم';
+
+ @override
+ String get actionsSection => 'الإجراءات';
+
+ @override
+ String get advancedSection => 'متقدم';
+
+ @override
+ String get addCategory => 'إضافة فئة';
+
+ @override
+ String get list => 'القائمة';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'نقل المهام بين القوائم غير مدعوم لحسابات Microsoft To Do في هذا الإصدار.';
+
+ @override
+ String get createSubtask => 'إنشاء مهمة فرعية';
+
+ @override
+ String get moveToTop => 'نقل إلى الأعلى';
+
+ @override
+ String get deleteTask => 'حذف المهمة';
+
+ @override
+ String get newSubtask => 'مهمة فرعية جديدة';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'حذف «$title» من Google Tasks؟';
+ }
+
+ @override
+ String get metadata => 'البيانات الوصفية';
+
+ @override
+ String get id => 'المعرّف';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'آخر تحديث';
+
+ @override
+ String get parent => 'المهمة الأصلية';
+
+ @override
+ String get position => 'الموضع';
+
+ @override
+ String get webLink => 'رابط الويب';
+
+ @override
+ String get assignment => 'التعيين';
+
+ @override
+ String get localState => 'الحالة المحلية';
+
+ @override
+ String get pendingSync => 'في انتظار المزامنة';
+
+ @override
+ String get synced => 'تمت المزامنة';
+
+ @override
+ String get account => 'الحساب';
+
+ @override
+ String get sync => 'المزامنة';
+
+ @override
+ String get manualFullSync => 'مزامنة كاملة يدويًا';
+
+ @override
+ String get runInBackgroundWhenClosed => 'متابعة التشغيل عند إغلاق النافذة';
+
+ @override
+ String get showTrayIcon => 'إظهار أيقونة شريط النظام';
+
+ @override
+ String get startMinimizedToTray => 'البدء مصغّرًا في شريط النظام';
+
+ @override
+ String get requiresTrayIcon => 'يتطلب أيقونة شريط النظام.';
+
+ @override
+ String get syncComplete => 'اكتملت المزامنة.';
+
+ @override
+ String syncFailed(String error) {
+ return 'فشلت المزامنة: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'إشعارات عند فشل المزامنة';
+
+ @override
+ String get notifyConflicts => 'إشعارات عند حدوث تعارضات';
+
+ @override
+ String get notifyDueToday => 'إشعارات المهام المستحقة اليوم';
+
+ @override
+ String get eventReminders => 'تذكيرات الأحداث';
+
+ @override
+ String get taskReminders => 'تذكيرات المهام';
+
+ @override
+ String get notificationDetailLevel => 'مستوى تفاصيل الإشعارات';
+
+ @override
+ String get notificationDetailPrivate => 'خاص';
+
+ @override
+ String get notificationDetailNormal => 'عادي';
+
+ @override
+ String get quietHours => 'ساعات الهدوء';
+
+ @override
+ String get quietHoursDescription => 'إيقاف الإشعارات مؤقتًا خلال هذه الفترة.';
+
+ @override
+ String get quietHoursStart => 'بداية ساعات الهدوء';
+
+ @override
+ String get quietHoursEnd => 'نهاية ساعات الهدوء';
+
+ @override
+ String get notifications => 'الإشعارات';
+
+ @override
+ String get appearance => 'المظهر';
+
+ @override
+ String get theme => 'السمة';
+
+ @override
+ String get themeSystem => 'النظام';
+
+ @override
+ String get themeLight => 'فاتحة';
+
+ @override
+ String get themeDark => 'داكنة';
+
+ @override
+ String get themeFamily => 'عائلة السمات';
+
+ @override
+ String get themeFamilyYaru => 'سمة Ubuntu الأصلية (Yaru)';
+
+ @override
+ String get localization => 'اللغة والمنطقة';
+
+ @override
+ String get currentLocale => 'اللغة والمنطقة الحالية';
+
+ @override
+ String get privacy => 'الخصوصية';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'إخفاء محتوى المهام في معلومات التشخيص';
+
+ @override
+ String get developerDiagnostics => 'تشخيصات المطور';
+
+ @override
+ String get diagnostics => 'التشخيصات';
+
+ @override
+ String get apiInspectorDisabled => 'إظهار فاحص API';
+
+ @override
+ String get googleTasksApi => 'واجهة Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'مراجعة Discovery: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'الطرق المنفذة';
+
+ @override
+ String get supportsTasksScopes => 'يدعم نطاقَي tasks وtasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'يتطلب نطاق tasks';
+
+ @override
+ String get blockedPendingOperations => 'العمليات المعلّقة المحظورة';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'سجّل الدخول لفحص العمليات المعلّقة.';
+
+ @override
+ String get noBlockedPendingOperations => 'لا توجد عمليات معلّقة محظورة.';
+
+ @override
+ String get operationActions => 'إجراءات العملية';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'القائمة=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'المهمة=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'المحاولات=$count';
+ }
+
+ @override
+ String get retry => 'إعادة المحاولة';
+
+ @override
+ String get discard => 'تجاهل';
+
+ @override
+ String get discardChangesAction => 'تجاهل التغييرات';
+
+ @override
+ String get discardChanges => 'تجاهل التغييرات؟';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'سيؤدي ذلك إلى تجاهل التعديلات غير المحفوظة على هذه المهمة.';
+
+ @override
+ String get retryCompleted => 'اكتملت إعادة المحاولة.';
+
+ @override
+ String get discardPendingOperation => 'تجاهل العملية المعلّقة؟';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'سيؤدي ذلك إلى إزالة العملية المحلية المحظورة. ستُحدّث البيانات من Google Tasks في المزامنة التالية.';
+
+ @override
+ String get pendingOperationDiscarded => 'تم تجاهل العملية المعلّقة.';
+
+ @override
+ String get syncFailureNotificationTitle => 'فشلت مزامنة BusyMax';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'فشلت المزامنة في الخلفية. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'تعارض في مزامنة BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'تم حظر تغيير محلي معلّق. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'المهام المستحقة اليوم';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'هناك $count مهمة مستحقة اليوم.',
+ many: 'هناك $count مهمة مستحقة اليوم.',
+ few: 'هناك $count مهام مستحقة اليوم.',
+ two: 'هناك مهمتان مستحقتان اليوم.',
+ one: 'هناك مهمة واحدة مستحقة اليوم.',
+ zero: 'لا توجد مهام مستحقة اليوم.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'تذكير بحدث';
+
+ @override
+ String get taskReminderNotificationTitle => 'تذكير بمهمة';
+
+ @override
+ String get eventReminderNotificationBody => 'سيبدأ الحدث قريبًا.';
+
+ @override
+ String get taskReminderNotificationBody => 'ستحلّ مهلة المهمة قريبًا.';
+
+ @override
+ String get notificationOpenAction => 'فتح';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'التفاصيل مخفية وفقًا لإعدادات الخصوصية.';
+
+ @override
+ String get previousMonth => 'الشهر السابق';
+
+ @override
+ String get nextMonth => 'الشهر التالي';
+
+ @override
+ String get openMonthView => 'فتح عرض الشهر';
+
+ @override
+ String get previousYear => 'السنة السابقة';
+
+ @override
+ String get nextYear => 'السنة التالية';
+
+ @override
+ String get openYearView => 'فتح عرض السنة';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'الأسبوع $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'تغيير حجم لوحة اليوم الكامل';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count عنصر',
+ many: '$count عنصرًا',
+ few: '$count عناصر',
+ two: 'عنصران',
+ one: 'عنصر واحد',
+ zero: 'لا عناصر',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'هذا التقويم للقراءة فقط.';
+
+ @override
+ String get selectTimeZone => 'اختيار المنطقة الزمنية';
+
+ @override
+ String get searchLocations => 'البحث عن مواقع';
+
+ @override
+ String get noLocationsFound => 'لم يتم العثور على مواقع';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'حذف «$title»؟';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart
index c758ce0..0060526 100644
--- a/lib/l10n/generated/app_localizations_de.dart
+++ b/lib/l10n/generated/app_localizations_de.dart
@@ -1,3 +1,7 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -21,7 +25,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get googlePermissionsRequiredRetry =>
- 'Google Calendar- und Google Tasks-Berechtigungen sind erforderlich. Versuchen Sie es erneut und wählen Sie beide Kontrollkästchen aus.';
+ 'Die Berechtigungen für Google Kalender und Google Tasks sind erforderlich. Versuchen Sie es erneut und aktivieren Sie beide Kontrollkästchen.';
@override
String get finishSetup => 'Einrichtung abschließen';
@@ -136,75 +140,45 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String moreItems(int count) {
- return '+$count weitere';
+ return '+$count mehr';
}
@override
String get noEventsOrTasks => 'Keine Termine oder Aufgaben';
@override
- String get trayAgendaLoading => 'Agenda wird geladen...';
-
- @override
- String get trayAgendaSignInRequired =>
- 'Melden Sie sich an, um die Agenda anzuzeigen.';
-
- @override
- String get trayAgendaNoSources =>
- 'Keine sichtbaren Kalender oder Aufgabenlisten.';
-
- @override
- String get trayAgendaOpenBusyMax => 'App öffnen';
-
- @override
- String get trayAgendaRefresh => 'Aktualisieren';
+ String get scheduleLoading => 'Zeitplan wird geladen...';
@override
- String get trayAgendaError => 'Agenda nicht verfügbar';
+ String get scheduleUnavailable => 'Zeitplan nicht verfügbar';
@override
- String get compactAgendaTitle => 'Agenda';
+ String get scheduleNoSources =>
+ 'Keine sichtbaren Kalender oder Aufgabenlisten';
@override
- String get compactAgendaSubtitle => 'Anstehend';
+ String get scheduleNoSourcesDescription =>
+ 'Wählen Sie in den Einstellungen aus, was angezeigt werden soll, und aktualisieren Sie anschließend den Zeitplan.';
@override
- String get compactAgendaOverdue => 'Überfällig';
+ String get scheduleSignInRequired => 'Konto verbinden';
@override
- String get compactAgendaClear => 'Im Moment frei';
+ String get scheduleSignInDescription =>
+ 'Melden Sie sich an, um Kalender und Aufgaben zu synchronisieren.';
@override
- String get compactAgendaOpenBusyMax => 'BusyMax öffnen';
+ String get scheduleNoSearchResults => 'Keine passenden Termine oder Aufgaben';
@override
- String get compactAgendaHide => 'Ausblenden';
+ String get scheduleNoSearchResultsDescription =>
+ 'Versuchen Sie es mit einer anderen Suche oder setzen Sie die aktuellen Filter zurück.';
@override
- String get compactAgendaNewTask => 'Neue Aufgabe';
-
- @override
- String get compactAgendaRetry => 'Erneut versuchen';
-
- @override
- String get compactAgendaRefresh => 'Aktualisieren';
-
- @override
- String get compactAgendaAllDay => 'Ganztägig';
-
- @override
- String get compactAgendaDueToday => 'Heute fällig';
-
- @override
- String get compactAgendaDueTomorrow => 'Morgen fällig';
-
- @override
- String compactAgendaDueOn(String date) {
- return 'Fällig $date';
- }
+ String get refresh => 'Aktualisieren';
@override
- String get compactAgendaMoreOverdue => 'Weitere überfällige Aufgaben laden';
+ String get trayOpenBusyMax => 'BusyMax öffnen';
@override
String get agendaLoadMoreOverdue => 'Weitere überfällige Aufgaben laden';
@@ -235,7 +209,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get scheduleDisplayHoursDescription =>
- 'Tages- und Wochenansicht öffnen innerhalb dieser Zeiten. Frühe und späte Einträge erweitern den Bereich bei Bedarf.';
+ 'In der Tages- und Wochenansicht wird zunächst dieser Zeitraum angezeigt. Frühere oder spätere Einträge erweitern ihn bei Bedarf.';
@override
String get scheduleDayStartsAt => 'Tag beginnt um';
@@ -312,6 +286,90 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get providerCalendar => 'Anbieterkalender';
+ @override
+ String get formatBoldShortLabel => 'F';
+
+ @override
+ String get formatBoldTooltip => 'Fett';
+
+ @override
+ String get formatItalicShortLabel => 'K';
+
+ @override
+ String get formatItalicTooltip => 'Kursiv';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'Unterstrichen';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes Minuten vorher',
+ one: '1 Minute vorher',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'Zum Startzeitpunkt';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours Stunden vorher',
+ one: '1 Stunde vorher',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days Tage vorher',
+ one: '1 Tag vorher',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Frei';
+
+ @override
+ String get availabilityTentative => 'Mit Vorbehalt';
+
+ @override
+ String get availabilityOutOfOffice => 'Abwesend';
+
+ @override
+ String get availabilityWorkingElsewhere => 'An einem anderen Ort tätig';
+
+ @override
+ String get visibilityDefault => 'Standard';
+
+ @override
+ String get visibilityPublic => 'Öffentlich';
+
+ @override
+ String get visibilityPrivate => 'Privat';
+
+ @override
+ String get visibilityConfidential => 'Vertraulich';
+
+ @override
+ String get sensitivityNormal => 'Normal';
+
+ @override
+ String get sensitivityPersonal => 'Persönlich';
+
@override
String get tasks => 'Aufgaben';
@@ -360,7 +418,7 @@ class AppLocalizationsDe extends AppLocalizations {
'Vorherige Woche in der Wochenansicht, vorheriger Monat in der Monatsansicht usw.';
@override
- String get shortcutJumpToToday => 'Zu Heute springen';
+ String get shortcutJumpToToday => 'Zum heutigen Tag springen';
@override
String get shortcutGroupView => 'Ansicht';
@@ -400,24 +458,22 @@ class AppLocalizationsDe extends AppLocalizations {
'Aufgabenbearbeitung oder Aufgabendetails schließen';
@override
- String get shortcutGroupCompactAgenda => 'Kompakte Agenda';
+ String get aboutBusyMax => 'Über BusyMax';
@override
- String get shortcutRefreshCompactAgendaDescription =>
- 'Das kompakte Agenda-Fenster aktualisieren';
+ String get aboutBusyMaxDescription => 'Kalender und Aufgaben';
@override
- String get shortcutHideCompactAgendaDescription =>
- 'Das kompakte Agenda-Fenster ausblenden';
+ String get license => 'Lizenz';
@override
- String get aboutBusyMax => 'Über BusyMax';
+ String get apacheLicenseName => 'Apache License 2.0';
@override
- String get aboutBusyMaxDescription => 'ToDo und Kalender';
+ String get website => 'Website';
@override
- String get website => 'Website';
+ String get sourceCode => 'Quellcode';
@override
String get reportAnIssue => 'Problem melden';
@@ -458,7 +514,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get feedbackDetailedMessage => 'Ausführliche Nachricht';
@override
- String get feedbackReplyEmail => 'E-Mail-Adresse für Antwort (optional)';
+ String get feedbackReplyEmail => 'E-Mail-Adresse für Antworten (optional)';
@override
String get feedbackIncludeTechnicalDetails => 'Technische Details hinzufügen';
@@ -510,6 +566,12 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get toggleSidebar => 'Seitenleiste umschalten';
+ @override
+ String get showSidebar => 'Seitenbereich anzeigen';
+
+ @override
+ String get hideSidebar => 'Seitenbereich ausblenden';
+
@override
String get accounts => 'Konten';
@@ -535,17 +597,42 @@ class AppLocalizationsDe extends AppLocalizations {
String get signedInAccount => 'Angemeldet';
@override
- String get signOutThisAccount => 'Dieses Konto abmelden';
+ String get removeAccount => 'Konto entfernen…';
@override
- String get revokeThisAccount => 'Dieses Konto widerrufen';
+ String get removingAccount => 'Konto wird entfernt…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Synchronisierung beenden und die Daten dieses Kontos von diesem Gerät entfernen.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return '$account aus BusyMax entfernen?';
+ }
@override
- String get disconnectThisAccount => 'Dieses Konto trennen';
+ String get removeAccountConfirmation =>
+ 'Dadurch werden zwischengespeicherte Aufgaben, Kalender, Termine, Erinnerungen und ausstehende Offline-Änderungen von diesem Gerät gelöscht. Nicht synchronisierte Änderungen gehen verloren. Bei Google oder Microsoft wird nichts gelöscht.';
@override
- String get deleteLocalDataForThisAccount =>
- 'Lokale Daten für dieses Konto löschen';
+ String get revokeGoogleAccess =>
+ 'BusyMax-Zugriff auf dieses Google-Konto ebenfalls widerrufen';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Vor einer erneuten Verbindung müssen Sie den Zugriff wieder gewähren.';
+
+ @override
+ String get removeAccountAction => 'Konto entfernen';
+
+ @override
+ String get removeAccountFailed =>
+ 'Das Konto konnte nicht vollständig entfernt werden. Versuchen Sie es erneut.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Das Konto wurde von diesem Gerät entfernt, aber BusyMax konnte den Google-Zugriff nicht widerrufen. Sie können ihn in Ihrem Google-Konto widerrufen.';
@override
String get newList => 'Neue Liste';
@@ -585,7 +672,7 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
- String get deleteEvent => 'Ereignis löschen';
+ String get deleteEvent => 'Termin löschen';
@override
String get title => 'Titel';
@@ -628,7 +715,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get selectOrCreateTaskList =>
- 'Wählen oder erstellen Sie eine Aufgabenliste.';
+ 'Wählen oder erstellen Sie zunächst eine Aufgabenliste.';
@override
String get signInToViewTasks => 'Melden Sie sich an, um Aufgaben zu sehen.';
@@ -641,7 +728,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get noTasksYetMessage =>
- 'Erstellen Sie eine Aufgabe oder aktualisieren Sie Ihre Konten.';
+ 'Erstellen Sie eine Aufgabe oder aktualisieren Sie Ihre Konten, um loszulegen.';
@override
String get noTasksInList => 'Keine Aufgaben in dieser Liste.';
@@ -674,21 +761,6 @@ class AppLocalizationsDe extends AppLocalizations {
return '$date, $time';
}
- @override
- String get searchTasks => 'Aufgaben suchen';
-
- @override
- String get advancedFilters => 'Erweiterte Filter';
-
- @override
- String get showCompleted => 'Erledigte anzeigen';
-
- @override
- String get showHidden => 'Ausgeblendete anzeigen';
-
- @override
- String get showAssigned => 'Zugewiesene anzeigen';
-
@override
String get taskDetails => 'Aufgabendetails';
@@ -843,7 +915,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get createSubtask => 'Unteraufgabe erstellen';
@override
- String get moveToTop => 'Nach oben verschieben';
+ String get moveToTop => 'Ganz nach oben verschieben';
@override
String get deleteTask => 'Aufgabe löschen';
@@ -869,7 +941,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get updated => 'Aktualisiert';
@override
- String get parent => 'Übergeordnet';
+ String get parent => 'Übergeordnete Aufgabe';
@override
String get position => 'Position';
@@ -893,23 +965,25 @@ class AppLocalizationsDe extends AppLocalizations {
String get account => 'Konto';
@override
- String get signOut => 'Abmelden';
+ String get sync => 'Synchronisierung';
@override
- String get revokeGoogleAuthorization => 'Google-Autorisierung widerrufen';
+ String get manualFullSync => 'Manuelle vollständige Synchronisierung';
@override
- String get deleteLocalData => 'Lokale Daten löschen';
+ String get runInBackgroundWhenClosed =>
+ 'Nach dem Schließen des Fensters weiter ausführen';
@override
- String get deleteLocalDataConfirmation =>
- 'Dies entfernt das lokale Konto, synchronisierte Aufgaben und ausstehende Offline-Änderungen von diesem Gerät.';
+ String get showTrayIcon => 'Symbol im Benachrichtigungsbereich anzeigen';
@override
- String get sync => 'Synchronisierung';
+ String get startMinimizedToTray =>
+ 'Minimiert im Benachrichtigungsbereich starten';
@override
- String get manualFullSync => 'Manuelle vollständige Synchronisierung';
+ String get requiresTrayIcon =>
+ 'Erfordert das Symbol im Benachrichtigungsbereich.';
@override
String get syncComplete => 'Synchronisierung abgeschlossen.';
@@ -929,6 +1003,34 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get notifyDueToday => 'Benachrichtigungen für heute fällige Aufgaben';
+ @override
+ String get eventReminders => 'Terminerinnerungen';
+
+ @override
+ String get taskReminders => 'Aufgabenerinnerungen';
+
+ @override
+ String get notificationDetailLevel => 'Detailgrad der Benachrichtigungen';
+
+ @override
+ String get notificationDetailPrivate => 'Privat';
+
+ @override
+ String get notificationDetailNormal => 'Normal';
+
+ @override
+ String get quietHours => 'Ruhezeiten';
+
+ @override
+ String get quietHoursDescription =>
+ 'Benachrichtigungen während dieses Zeitraums pausieren.';
+
+ @override
+ String get quietHoursStart => 'Beginn der Ruhezeit';
+
+ @override
+ String get quietHoursEnd => 'Ende der Ruhezeit';
+
@override
String get notifications => 'Benachrichtigungen';
@@ -936,7 +1038,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get appearance => 'Darstellung';
@override
- String get theme => 'Theme';
+ String get theme => 'Design';
@override
String get themeSystem => 'System';
@@ -948,10 +1050,10 @@ class AppLocalizationsDe extends AppLocalizations {
String get themeDark => 'Dunkel';
@override
- String get themeFamily => 'Theme-Familie';
+ String get themeFamily => 'Designfamilie';
@override
- String get themeFamilyYaru => 'Natives Ubuntu (Yaru)';
+ String get themeFamilyYaru => 'Natives Ubuntu-Design (Yaru)';
@override
String get localization => 'Lokalisierung';
@@ -966,9 +1068,6 @@ class AppLocalizationsDe extends AppLocalizations {
String get redactTaskContentInDiagnostics =>
'Aufgabeninhalte in Diagnosen schwärzen';
- @override
- String get detailedNotifications => 'Detaillierte Benachrichtigungstexte';
-
@override
String get developerDiagnostics => 'Entwicklerdiagnose';
@@ -991,10 +1090,10 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get supportsTasksScopes =>
- 'Unterstützt tasks- und tasks.readonly-Berechtigungen';
+ 'Unterstützt die Berechtigungsbereiche tasks und tasks.readonly';
@override
- String get requiresTasksScope => 'Benötigt tasks-Berechtigung';
+ String get requiresTasksScope => 'Erfordert den Berechtigungsbereich tasks';
@override
String get blockedPendingOperations => 'Blockierte ausstehende Vorgänge';
@@ -1031,6 +1130,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get discard => 'Verwerfen';
+ @override
+ String get discardChangesAction => 'Verwerfen';
+
@override
String get discardChanges => 'Änderungen verwerfen?';
@@ -1046,7 +1148,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get discardPendingOperationConfirmation =>
- 'Dies entfernt den blockierten lokalen Vorgang. Die nächste Synchronisierung aktualisiert von Google Tasks.';
+ 'Dadurch wird der blockierte lokale Vorgang entfernt. Bei der nächsten Synchronisierung werden die Daten aus Google Tasks neu geladen.';
@override
String get pendingOperationDiscarded => 'Ausstehender Vorgang verworfen.';
@@ -1082,7 +1184,77 @@ class AppLocalizationsDe extends AppLocalizations {
return '$_temp0';
}
+ @override
+ String get eventReminderNotificationTitle => 'Terminerinnerung';
+
+ @override
+ String get taskReminderNotificationTitle => 'Aufgabenerinnerung';
+
+ @override
+ String get eventReminderNotificationBody => 'Der Termin beginnt bald.';
+
+ @override
+ String get taskReminderNotificationBody => 'Die Aufgabe ist bald fällig.';
+
+ @override
+ String get notificationOpenAction => 'Öffnen';
+
@override
String get notificationDetailsHidden =>
'Details werden durch Datenschutzeinstellungen ausgeblendet.';
+
+ @override
+ String get previousMonth => 'Vorheriger Monat';
+
+ @override
+ String get nextMonth => 'Nächster Monat';
+
+ @override
+ String get openMonthView => 'Monatsansicht öffnen';
+
+ @override
+ String get previousYear => 'Vorheriges Jahr';
+
+ @override
+ String get nextYear => 'Nächstes Jahr';
+
+ @override
+ String get openYearView => 'Jahresansicht öffnen';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Woche $number';
+ }
+
+ @override
+ String get resizeAllDayPanel =>
+ 'Ganztägigen Bereich vergrößern oder verkleinern';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count Einträge',
+ one: '1 Eintrag',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Dieser Kalender ist schreibgeschützt.';
+
+ @override
+ String get selectTimeZone => 'Zeitzone auswählen';
+
+ @override
+ String get searchLocations => 'Orte suchen';
+
+ @override
+ String get noLocationsFound => 'Keine Orte gefunden';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '\"$title\" löschen?';
+ }
}
diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart
index 684be92..e858e70 100644
--- a/lib/l10n/generated/app_localizations_en.dart
+++ b/lib/l10n/generated/app_localizations_en.dart
@@ -1,3 +1,7 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -132,7 +136,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get noCalendarsSynced => 'No calendars synced yet.';
@override
- String get allDay => 'All Day';
+ String get allDay => 'All day';
@override
String moreItems(int count) {
@@ -143,66 +147,37 @@ class AppLocalizationsEn extends AppLocalizations {
String get noEventsOrTasks => 'No events or tasks';
@override
- String get trayAgendaLoading => 'Loading agenda...';
-
- @override
- String get trayAgendaSignInRequired => 'Sign in to show agenda.';
-
- @override
- String get trayAgendaNoSources => 'No visible calendars or task lists.';
-
- @override
- String get trayAgendaOpenBusyMax => 'Open app';
-
- @override
- String get trayAgendaRefresh => 'Refresh';
+ String get scheduleLoading => 'Loading schedule...';
@override
- String get trayAgendaError => 'Agenda unavailable';
+ String get scheduleUnavailable => 'Schedule unavailable';
@override
- String get compactAgendaTitle => 'Agenda';
+ String get scheduleNoSources => 'No visible calendars or task lists';
@override
- String get compactAgendaSubtitle => 'Upcoming';
+ String get scheduleNoSourcesDescription =>
+ 'Choose what to show in Settings, then refresh.';
@override
- String get compactAgendaOverdue => 'Overdue';
+ String get scheduleSignInRequired => 'Connect an account';
@override
- String get compactAgendaClear => 'Clear for now';
+ String get scheduleSignInDescription =>
+ 'Sign in to sync calendars and tasks.';
@override
- String get compactAgendaOpenBusyMax => 'Open BusyMax';
+ String get scheduleNoSearchResults => 'No matching events or tasks';
@override
- String get compactAgendaHide => 'Hide';
+ String get scheduleNoSearchResultsDescription =>
+ 'Try a different search or clear the current filters.';
@override
- String get compactAgendaNewTask => 'New task';
-
- @override
- String get compactAgendaRetry => 'Retry';
-
- @override
- String get compactAgendaRefresh => 'Refresh';
-
- @override
- String get compactAgendaAllDay => 'All day';
-
- @override
- String get compactAgendaDueToday => 'Due today';
-
- @override
- String get compactAgendaDueTomorrow => 'Due tomorrow';
-
- @override
- String compactAgendaDueOn(String date) {
- return 'Due $date';
- }
+ String get refresh => 'Refresh';
@override
- String get compactAgendaMoreOverdue => 'Load more overdue tasks';
+ String get trayOpenBusyMax => 'Open BusyMax';
@override
String get agendaLoadMoreOverdue => 'Load more overdue tasks';
@@ -266,7 +241,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get location => 'Location';
@override
- String get timeSlot => 'Time Slot';
+ String get timeSlot => 'Time slot';
@override
String get startDateTime => 'Start date/time';
@@ -310,6 +285,90 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get providerCalendar => 'Provider calendar';
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => 'Bold';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'Italic';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'Underline';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minutes before',
+ one: '1 minute before',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'At start';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours hours before',
+ one: '1 hour before',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days days before',
+ one: '1 day before',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Free';
+
+ @override
+ String get availabilityTentative => 'Tentative';
+
+ @override
+ String get availabilityOutOfOffice => 'Out of office';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Working elsewhere';
+
+ @override
+ String get visibilityDefault => 'Default';
+
+ @override
+ String get visibilityPublic => 'Public';
+
+ @override
+ String get visibilityPrivate => 'Private';
+
+ @override
+ String get visibilityConfidential => 'Confidential';
+
+ @override
+ String get sensitivityNormal => 'Normal';
+
+ @override
+ String get sensitivityPersonal => 'Personal';
+
@override
String get tasks => 'Tasks';
@@ -398,24 +457,22 @@ class AppLocalizationsEn extends AppLocalizations {
'Close task editing or task details';
@override
- String get shortcutGroupCompactAgenda => 'Compact agenda';
+ String get aboutBusyMax => 'About BusyMax';
@override
- String get shortcutRefreshCompactAgendaDescription =>
- 'Refresh the compact agenda window';
+ String get aboutBusyMaxDescription => 'Calendar and tasks';
@override
- String get shortcutHideCompactAgendaDescription =>
- 'Hide the compact agenda window';
+ String get license => 'License';
@override
- String get aboutBusyMax => 'About BusyMax';
+ String get apacheLicenseName => 'Apache License 2.0';
@override
- String get aboutBusyMaxDescription => 'ToDo and Calendar';
+ String get website => 'Website';
@override
- String get website => 'Website';
+ String get sourceCode => 'Source code';
@override
String get reportAnIssue => 'Report an issue';
@@ -505,6 +562,12 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get toggleSidebar => 'Toggle Sidebar';
+ @override
+ String get showSidebar => 'Show sidebar panel';
+
+ @override
+ String get hideSidebar => 'Hide sidebar panel';
+
@override
String get accounts => 'Accounts';
@@ -530,17 +593,42 @@ class AppLocalizationsEn extends AppLocalizations {
String get signedInAccount => 'Signed in';
@override
- String get signOutThisAccount => 'Sign out this account';
+ String get removeAccount => 'Remove account…';
@override
- String get revokeThisAccount => 'Revoke this account';
+ String get removingAccount => 'Removing account…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Stop syncing and remove this account’s data from this device.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Remove $account from BusyMax?';
+ }
@override
- String get disconnectThisAccount => 'Disconnect this account';
+ String get removeAccountConfirmation =>
+ 'This deletes cached tasks, calendars, events, reminders, and pending offline changes from this device. Unsynced changes will be lost. Nothing will be deleted from Google or Microsoft.';
@override
- String get deleteLocalDataForThisAccount =>
- 'Delete local data for this account';
+ String get revokeGoogleAccess =>
+ 'Also revoke BusyMax’s access to this Google Account';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'You will need to grant access again before reconnecting.';
+
+ @override
+ String get removeAccountAction => 'Remove account';
+
+ @override
+ String get removeAccountFailed =>
+ 'Could not finish removing the account. Try again.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'The account was removed from this device, but BusyMax could not revoke Google access. You can revoke it from your Google Account.';
@override
String get newList => 'New list';
@@ -667,21 +755,6 @@ class AppLocalizationsEn extends AppLocalizations {
return '$date · $time';
}
- @override
- String get searchTasks => 'Search tasks';
-
- @override
- String get advancedFilters => 'Advanced filters';
-
- @override
- String get showCompleted => 'Show completed';
-
- @override
- String get showHidden => 'Show hidden';
-
- @override
- String get showAssigned => 'Show assigned';
-
@override
String get taskDetails => 'Task details';
@@ -884,23 +957,23 @@ class AppLocalizationsEn extends AppLocalizations {
String get account => 'Account';
@override
- String get signOut => 'Sign out';
+ String get sync => 'Sync';
@override
- String get revokeGoogleAuthorization => 'Revoke Google authorization';
+ String get manualFullSync => 'Manual full sync';
@override
- String get deleteLocalData => 'Delete local data';
+ String get runInBackgroundWhenClosed =>
+ 'Continue running when the window is closed';
@override
- String get deleteLocalDataConfirmation =>
- 'This removes the local account, synced tasks, and pending offline changes from this device.';
+ String get showTrayIcon => 'Show tray icon';
@override
- String get sync => 'Sync';
+ String get startMinimizedToTray => 'Start minimized to the tray';
@override
- String get manualFullSync => 'Manual full sync';
+ String get requiresTrayIcon => 'Requires the tray icon.';
@override
String get syncComplete => 'Sync complete.';
@@ -919,6 +992,33 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get notifyDueToday => 'Due-today notifications';
+ @override
+ String get eventReminders => 'Event reminders';
+
+ @override
+ String get taskReminders => 'Task reminders';
+
+ @override
+ String get notificationDetailLevel => 'Notification detail level';
+
+ @override
+ String get notificationDetailPrivate => 'Private';
+
+ @override
+ String get notificationDetailNormal => 'Normal';
+
+ @override
+ String get quietHours => 'Quiet hours';
+
+ @override
+ String get quietHoursDescription => 'Pause notifications during this period.';
+
+ @override
+ String get quietHoursStart => 'Quiet hours start';
+
+ @override
+ String get quietHoursEnd => 'Quiet hours end';
+
@override
String get notifications => 'Notifications';
@@ -956,9 +1056,6 @@ class AppLocalizationsEn extends AppLocalizations {
String get redactTaskContentInDiagnostics =>
'Redact task content in diagnostics';
- @override
- String get detailedNotifications => 'Detailed notification text';
-
@override
String get developerDiagnostics => 'Developer diagnostics';
@@ -1019,6 +1116,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get discard => 'Discard';
+ @override
+ String get discardChangesAction => 'Discard';
+
@override
String get discardChanges => 'Discard changes?';
@@ -1069,7 +1169,76 @@ class AppLocalizationsEn extends AppLocalizations {
return '$_temp0';
}
+ @override
+ String get eventReminderNotificationTitle => 'Event reminder';
+
+ @override
+ String get taskReminderNotificationTitle => 'Task reminder';
+
+ @override
+ String get eventReminderNotificationBody => 'Event starts soon.';
+
+ @override
+ String get taskReminderNotificationBody => 'Task is due soon.';
+
+ @override
+ String get notificationOpenAction => 'Open';
+
@override
String get notificationDetailsHidden =>
'Details are hidden by privacy settings.';
+
+ @override
+ String get previousMonth => 'Previous month';
+
+ @override
+ String get nextMonth => 'Next month';
+
+ @override
+ String get openMonthView => 'Open month view';
+
+ @override
+ String get previousYear => 'Previous year';
+
+ @override
+ String get nextYear => 'Next year';
+
+ @override
+ String get openYearView => 'Open year view';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Week $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Resize the all-day panel';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count items',
+ one: '1 item',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'This calendar is read-only.';
+
+ @override
+ String get selectTimeZone => 'Select Timezone';
+
+ @override
+ String get searchLocations => 'Search locations';
+
+ @override
+ String get noLocationsFound => 'No locations found';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Delete \"$title\"?';
+ }
}
diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart
index 519ff32..6a0da5f 100644
--- a/lib/l10n/generated/app_localizations_es.dart
+++ b/lib/l10n/generated/app_localizations_es.dart
@@ -1,3 +1,7 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -44,7 +48,7 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get onboardingPreferencesStepDescription =>
- 'Configura el comportamiento de escritorio, recordatorios, detalle de notificaciones y apariencia antes de abrir tu agenda.';
+ 'Configura el comportamiento de la aplicación en el escritorio, los recordatorios, el nivel de detalle de las notificaciones y la apariencia antes de abrir tu agenda.';
@override
String get signInWithGoogle => 'Iniciar sesión con Google';
@@ -122,7 +126,7 @@ class AppLocalizationsEs extends AppLocalizations {
String get refreshCalendar => 'Actualizar calendario';
@override
- String get openInProvider => 'Abrir en proveedor';
+ String get openInProvider => 'Abrir en el proveedor';
@override
String get hideFromSchedule => 'Ocultar de la agenda';
@@ -145,68 +149,38 @@ class AppLocalizationsEs extends AppLocalizations {
String get noEventsOrTasks => 'No hay eventos ni tareas';
@override
- String get trayAgendaLoading => 'Cargando agenda...';
-
- @override
- String get trayAgendaSignInRequired =>
- 'Inicia sesión para mostrar la agenda.';
-
- @override
- String get trayAgendaNoSources =>
- 'No hay calendarios ni listas de tareas visibles.';
-
- @override
- String get trayAgendaOpenBusyMax => 'Abrir app';
-
- @override
- String get trayAgendaRefresh => 'Actualizar';
+ String get scheduleLoading => 'Cargando la agenda...';
@override
- String get trayAgendaError => 'Agenda no disponible';
+ String get scheduleUnavailable => 'Agenda no disponible';
@override
- String get compactAgendaTitle => 'Agenda';
+ String get scheduleNoSources =>
+ 'No hay calendarios ni listas de tareas visibles';
@override
- String get compactAgendaSubtitle => 'Próximamente';
+ String get scheduleNoSourcesDescription =>
+ 'Elige qué mostrar en Configuración y, después, actualiza la agenda.';
@override
- String get compactAgendaOverdue => 'Vencidas';
+ String get scheduleSignInRequired => 'Conectar una cuenta';
@override
- String get compactAgendaClear => 'Libre por ahora';
+ String get scheduleSignInDescription =>
+ 'Inicia sesión para sincronizar calendarios y tareas.';
@override
- String get compactAgendaOpenBusyMax => 'Abrir BusyMax';
+ String get scheduleNoSearchResults => 'No hay eventos ni tareas coincidentes';
@override
- String get compactAgendaHide => 'Ocultar';
+ String get scheduleNoSearchResultsDescription =>
+ 'Prueba con otra búsqueda o borra los filtros actuales.';
@override
- String get compactAgendaNewTask => 'Nueva tarea';
-
- @override
- String get compactAgendaRetry => 'Reintentar';
-
- @override
- String get compactAgendaRefresh => 'Actualizar';
-
- @override
- String get compactAgendaAllDay => 'Todo el día';
-
- @override
- String get compactAgendaDueToday => 'Vence hoy';
-
- @override
- String get compactAgendaDueTomorrow => 'Vence mañana';
-
- @override
- String compactAgendaDueOn(String date) {
- return 'Vence $date';
- }
+ String get refresh => 'Actualizar';
@override
- String get compactAgendaMoreOverdue => 'Cargar más tareas vencidas';
+ String get trayOpenBusyMax => 'Abrir BusyMax';
@override
String get agendaLoadMoreOverdue => 'Cargar más tareas vencidas';
@@ -237,7 +211,7 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get scheduleDisplayHoursDescription =>
- 'Las vistas Día y Semana se abren dentro de este horario. Los elementos tempranos y tardíos amplían el intervalo si hace falta.';
+ 'Las vistas de día y semana muestran inicialmente este intervalo horario. Los elementos anteriores o posteriores lo amplían cuando es necesario.';
@override
String get scheduleDayStartsAt => 'El día empieza a las';
@@ -314,6 +288,90 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get providerCalendar => 'Calendario del proveedor';
+ @override
+ String get formatBoldShortLabel => 'N';
+
+ @override
+ String get formatBoldTooltip => 'Negrita';
+
+ @override
+ String get formatItalicShortLabel => 'C';
+
+ @override
+ String get formatItalicTooltip => 'Cursiva';
+
+ @override
+ String get formatUnderlineShortLabel => 'S';
+
+ @override
+ String get formatUnderlineTooltip => 'Subrayado';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minutos antes',
+ one: '1 minuto antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'A la hora de inicio';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours horas antes',
+ one: '1 hora antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days días antes',
+ one: '1 día antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Libre';
+
+ @override
+ String get availabilityTentative => 'Provisional';
+
+ @override
+ String get availabilityOutOfOffice => 'Fuera de la oficina';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Trabajando en otro lugar';
+
+ @override
+ String get visibilityDefault => 'Predeterminada';
+
+ @override
+ String get visibilityPublic => 'Pública';
+
+ @override
+ String get visibilityPrivate => 'Privada';
+
+ @override
+ String get visibilityConfidential => 'Confidencial';
+
+ @override
+ String get sensitivityNormal => 'Normal';
+
+ @override
+ String get sensitivityPersonal => 'Personal';
+
@override
String get tasks => 'Tareas';
@@ -362,7 +420,7 @@ class AppLocalizationsEs extends AppLocalizations {
'Semana anterior en la vista semanal, mes anterior en la vista mensual, etc.';
@override
- String get shortcutJumpToToday => 'Ir a hoy';
+ String get shortcutJumpToToday => 'Ir a la fecha de hoy';
@override
String get shortcutGroupView => 'Vista';
@@ -402,24 +460,22 @@ class AppLocalizationsEs extends AppLocalizations {
'Cerrar la edición o los detalles de la tarea';
@override
- String get shortcutGroupCompactAgenda => 'Agenda compacta';
+ String get aboutBusyMax => 'Acerca de BusyMax';
@override
- String get shortcutRefreshCompactAgendaDescription =>
- 'Actualizar la ventana de agenda compacta';
+ String get aboutBusyMaxDescription => 'Calendario y tareas';
@override
- String get shortcutHideCompactAgendaDescription =>
- 'Ocultar la ventana de agenda compacta';
+ String get license => 'Licencia';
@override
- String get aboutBusyMax => 'Acerca de BusyMax';
+ String get apacheLicenseName => 'Apache License 2.0';
@override
- String get aboutBusyMaxDescription => 'ToDo y calendario';
+ String get website => 'Sitio web';
@override
- String get website => 'Sitio web';
+ String get sourceCode => 'Código fuente';
@override
String get reportAnIssue => 'Informar de un problema';
@@ -459,7 +515,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get feedbackDetailedMessage => 'Mensaje detallado';
@override
- String get feedbackReplyEmail => 'Correo electrónico de respuesta (opcional)';
+ String get feedbackReplyEmail =>
+ 'Correo electrónico para recibir una respuesta (opcional)';
@override
String get feedbackIncludeTechnicalDetails => 'Incluir detalles técnicos';
@@ -489,7 +546,7 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get feedbackTimeoutError =>
- 'La solicitud agotó el tiempo de espera. Tus comentarios no se han borrado; inténtalo de nuevo.';
+ 'Se agotó el tiempo de espera de la solicitud. Tus comentarios no se han borrado; inténtalo de nuevo.';
@override
String get feedbackRateLimitedError =>
@@ -509,7 +566,13 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
- String get toggleSidebar => 'Alternar barra lateral';
+ String get toggleSidebar => 'Mostrar u ocultar la barra lateral';
+
+ @override
+ String get showSidebar => 'Mostrar panel lateral';
+
+ @override
+ String get hideSidebar => 'Ocultar panel lateral';
@override
String get accounts => 'Cuentas';
@@ -536,17 +599,42 @@ class AppLocalizationsEs extends AppLocalizations {
String get signedInAccount => 'Sesión iniciada';
@override
- String get signOutThisAccount => 'Cerrar sesión de esta cuenta';
+ String get removeAccount => 'Eliminar cuenta…';
@override
- String get revokeThisAccount => 'Revocar esta cuenta';
+ String get removingAccount => 'Eliminando cuenta…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Detener la sincronización y eliminar de este dispositivo los datos de esta cuenta.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return '¿Eliminar $account de BusyMax?';
+ }
@override
- String get disconnectThisAccount => 'Desconectar esta cuenta';
+ String get removeAccountConfirmation =>
+ 'Esto elimina de este dispositivo las tareas, los calendarios, los eventos, los recordatorios y los cambios sin conexión pendientes almacenados en caché. Los cambios no sincronizados se perderán. No se eliminará nada de Google ni Microsoft.';
@override
- String get deleteLocalDataForThisAccount =>
- 'Eliminar datos locales de esta cuenta';
+ String get revokeGoogleAccess =>
+ 'Revocar también el acceso de BusyMax a esta cuenta de Google';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Tendrás que volver a conceder acceso antes de reconectar la cuenta.';
+
+ @override
+ String get removeAccountAction => 'Eliminar cuenta';
+
+ @override
+ String get removeAccountFailed =>
+ 'No se pudo terminar de eliminar la cuenta. Inténtalo de nuevo.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'La cuenta se eliminó de este dispositivo, pero BusyMax no pudo revocar su acceso a tu cuenta de Google. Puedes revocarlo desde tu cuenta de Google.';
@override
String get newList => 'Nueva lista';
@@ -628,7 +716,8 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
- String get selectOrCreateTaskList => 'Selecciona o crea una lista de tareas.';
+ String get selectOrCreateTaskList =>
+ 'Selecciona o crea una lista de tareas para empezar.';
@override
String get signInToViewTasks => 'Inicia sesión para ver las tareas.';
@@ -674,21 +763,6 @@ class AppLocalizationsEs extends AppLocalizations {
return '$date, $time';
}
- @override
- String get searchTasks => 'Buscar tareas';
-
- @override
- String get advancedFilters => 'Filtros avanzados';
-
- @override
- String get showCompleted => 'Mostrar completadas';
-
- @override
- String get showHidden => 'Mostrar ocultas';
-
- @override
- String get showAssigned => 'Mostrar asignadas';
-
@override
String get taskDetails => 'Detalles de la tarea';
@@ -836,13 +910,13 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get microsoftMoveUnsupported =>
- 'Mover tareas entre listas no es compatible con las cuentas de Microsoft To Do en esta versión.';
+ 'En esta versión, no se pueden mover tareas entre listas en cuentas de Microsoft To Do.';
@override
String get createSubtask => 'Crear subtarea';
@override
- String get moveToTop => 'Mover arriba';
+ String get moveToTop => 'Mover al principio';
@override
String get deleteTask => 'Eliminar tarea';
@@ -868,7 +942,7 @@ class AppLocalizationsEs extends AppLocalizations {
String get updated => 'Actualizada';
@override
- String get parent => 'Padre';
+ String get parent => 'Tarea principal';
@override
String get position => 'Posición';
@@ -892,23 +966,24 @@ class AppLocalizationsEs extends AppLocalizations {
String get account => 'Cuenta';
@override
- String get signOut => 'Cerrar sesión';
+ String get sync => 'Sincronización';
@override
- String get revokeGoogleAuthorization => 'Revocar autorización de Google';
+ String get manualFullSync => 'Sincronización completa manual';
@override
- String get deleteLocalData => 'Eliminar datos locales';
+ String get runInBackgroundWhenClosed =>
+ 'Seguir ejecutándose al cerrar la ventana';
@override
- String get deleteLocalDataConfirmation =>
- 'Esto elimina de este dispositivo la cuenta local, las tareas sincronizadas y los cambios sin conexión pendientes.';
+ String get showTrayIcon => 'Mostrar el icono en la bandeja del sistema';
@override
- String get sync => 'Sincronización';
+ String get startMinimizedToTray =>
+ 'Iniciar minimizado en la bandeja del sistema';
@override
- String get manualFullSync => 'Sincronización completa manual';
+ String get requiresTrayIcon => 'Requiere el icono de la bandeja del sistema.';
@override
String get syncComplete => 'Sincronización completa.';
@@ -926,7 +1001,36 @@ class AppLocalizationsEs extends AppLocalizations {
String get notifyConflicts => 'Notificaciones de conflictos';
@override
- String get notifyDueToday => 'Notificaciones de tareas para hoy';
+ String get notifyDueToday => 'Notificaciones de tareas que vencen hoy';
+
+ @override
+ String get eventReminders => 'Recordatorios de eventos';
+
+ @override
+ String get taskReminders => 'Recordatorios de tareas';
+
+ @override
+ String get notificationDetailLevel =>
+ 'Nivel de detalle de las notificaciones';
+
+ @override
+ String get notificationDetailPrivate => 'Privado';
+
+ @override
+ String get notificationDetailNormal => 'Normal';
+
+ @override
+ String get quietHours => 'Horario de silencio';
+
+ @override
+ String get quietHoursDescription =>
+ 'Pausar las notificaciones durante este período.';
+
+ @override
+ String get quietHoursStart => 'Inicio del horario de silencio';
+
+ @override
+ String get quietHoursEnd => 'Fin del horario de silencio';
@override
String get notifications => 'Notificaciones';
@@ -947,10 +1051,10 @@ class AppLocalizationsEs extends AppLocalizations {
String get themeDark => 'Oscuro';
@override
- String get themeFamily => 'Familia de tema';
+ String get themeFamily => 'Familia de temas';
@override
- String get themeFamilyYaru => 'Ubuntu nativo (Yaru)';
+ String get themeFamilyYaru => 'Tema nativo de Ubuntu (Yaru)';
@override
String get localization => 'Localización';
@@ -965,9 +1069,6 @@ class AppLocalizationsEs extends AppLocalizations {
String get redactTaskContentInDiagnostics =>
'Ocultar contenido de tareas en diagnósticos';
- @override
- String get detailedNotifications => 'Texto detallado en notificaciones';
-
@override
String get developerDiagnostics => 'Diagnósticos de desarrollo';
@@ -1007,7 +1108,7 @@ class AppLocalizationsEs extends AppLocalizations {
'No hay operaciones pendientes bloqueadas.';
@override
- String get operationActions => 'Acciones de operación';
+ String get operationActions => 'Acciones de la operación';
@override
String pendingOpListId(String id) {
@@ -1030,6 +1131,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get discard => 'Descartar';
+ @override
+ String get discardChangesAction => 'Descartar';
+
@override
String get discardChanges => '¿Descartar cambios?';
@@ -1045,7 +1149,7 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get discardPendingOperationConfirmation =>
- 'Esto elimina la operación local bloqueada. La próxima sincronización actualizará desde Google Tasks.';
+ 'Esto elimina la operación local bloqueada. En la próxima sincronización, se volverán a cargar los datos desde Google Tasks.';
@override
String get pendingOperationDiscarded => 'Operación pendiente descartada.';
@@ -1082,7 +1186,76 @@ class AppLocalizationsEs extends AppLocalizations {
return '$_temp0';
}
+ @override
+ String get eventReminderNotificationTitle => 'Recordatorio de evento';
+
+ @override
+ String get taskReminderNotificationTitle => 'Recordatorio de tarea';
+
+ @override
+ String get eventReminderNotificationBody => 'El evento empieza pronto.';
+
+ @override
+ String get taskReminderNotificationBody => 'La tarea vence pronto.';
+
+ @override
+ String get notificationOpenAction => 'Abrir';
+
@override
String get notificationDetailsHidden =>
'Los detalles están ocultos por la configuración de privacidad.';
+
+ @override
+ String get previousMonth => 'Mes anterior';
+
+ @override
+ String get nextMonth => 'Mes siguiente';
+
+ @override
+ String get openMonthView => 'Abrir la vista mensual';
+
+ @override
+ String get previousYear => 'Año anterior';
+
+ @override
+ String get nextYear => 'Año siguiente';
+
+ @override
+ String get openYearView => 'Abrir la vista anual';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Semana $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Cambiar el tamaño del panel de todo el día';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count elementos',
+ one: '1 elemento',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Este calendario es de solo lectura.';
+
+ @override
+ String get selectTimeZone => 'Seleccionar zona horaria';
+
+ @override
+ String get searchLocations => 'Buscar ubicaciones';
+
+ @override
+ String get noLocationsFound => 'No se encontraron ubicaciones';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '¿Eliminar \"$title\"?';
+ }
}
diff --git a/lib/l10n/generated/app_localizations_et.dart b/lib/l10n/generated/app_localizations_et.dart
new file mode 100644
index 0000000..cba33c2
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_et.dart
@@ -0,0 +1,1251 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Estonian (`et`).
+class AppLocalizationsEt extends AppLocalizations {
+ AppLocalizationsEt([String locale = 'et']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Ühendage Google\'i ja Microsofti kontod kalendrite ja ülesannete sünkroonimiseks.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Valige Google\'i õiguste kuval nii kalendri kui ka ülesannete õigused.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Google Calendari ja Google Tasksi õigused on nõutavad. Proovige uuesti ja märkige mõlemad ruudud.';
+
+ @override
+ String get finishSetup => 'Lõpeta seadistamine';
+
+ @override
+ String get continueSetup => 'Jätka';
+
+ @override
+ String get onboardingSetupTitle => 'BusyMaxi seadistamine';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Kontode ühendamine';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Lisage kõik Google\'i ja Microsofti kontod, mida soovite kasutada. BusyMax sünkroonib iga konto kalendrid, sündmused, ülesandeloendid ja ülesanded.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'Süsteemiseadete valimine';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Enne ajakava avamist määrake töölauakäitumine, meeldetuletused, teavituste üksikasjalikkus ja välimus.';
+
+ @override
+ String get signInWithGoogle => 'Logi Google\'iga sisse';
+
+ @override
+ String get signInWithMicrosoft => 'Logi Microsoftiga sisse';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'See teenusepakkuja pole seadistatud.';
+
+ @override
+ String get waitingForGoogleSignIn => 'Google\'isse sisselogimise ootel...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'Microsofti sisselogimise ootel...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Microsofti sisselogimine pole seadistatud. Määrake MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Tühista';
+
+ @override
+ String get close => 'Sulge';
+
+ @override
+ String get exit => 'Välju';
+
+ @override
+ String get options => 'Valikud';
+
+ @override
+ String get hide => 'Peida';
+
+ @override
+ String get show => 'Kuva';
+
+ @override
+ String get export => 'Ekspordi';
+
+ @override
+ String get save => 'Salvesta';
+
+ @override
+ String get settings => 'Seaded';
+
+ @override
+ String get all => 'Kõik';
+
+ @override
+ String get calendarEvents => 'Sündmused';
+
+ @override
+ String get calendarTasks => 'Ülesanded';
+
+ @override
+ String get calendar => 'Kalender';
+
+ @override
+ String get calendars => 'Kalendrid';
+
+ @override
+ String get newEvent => 'Uus sündmus';
+
+ @override
+ String get refreshCalendar => 'Värskenda kalendrit';
+
+ @override
+ String get openInProvider => 'Ava teenuses';
+
+ @override
+ String get hideFromSchedule => 'Peida ajakavast';
+
+ @override
+ String get showInSchedule => 'Kuva ajakavas';
+
+ @override
+ String get noCalendarsSynced => 'Ühtegi kalendrit pole veel sünkroonitud.';
+
+ @override
+ String get allDay => 'Kogu päev';
+
+ @override
+ String moreItems(int count) {
+ return '+$count veel';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Sündmusi ega ülesandeid pole';
+
+ @override
+ String get scheduleLoading => 'Ajakava laadimine...';
+
+ @override
+ String get scheduleUnavailable => 'Ajakava pole saadaval';
+
+ @override
+ String get scheduleNoSources =>
+ 'Nähtavaid kalendreid ega ülesandeloendeid pole';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Valige seadetes, mida kuvada, ja seejärel värskendage.';
+
+ @override
+ String get scheduleSignInRequired => 'Ühendage konto';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Kalendrite ja ülesannete sünkroonimiseks logige sisse.';
+
+ @override
+ String get scheduleNoSearchResults =>
+ 'Sobivaid sündmusi ega ülesandeid ei leitud';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Proovige teistsugust otsingut või eemaldage praegused filtrid.';
+
+ @override
+ String get refresh => 'Värskenda';
+
+ @override
+ String get trayOpenBusyMax => 'Ava BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Laadi veel tähtaja ületanud ülesandeid';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Laadi veel kuupäevata ülesandeid';
+
+ @override
+ String get viewDay => 'Päev';
+
+ @override
+ String get viewWeek => 'Nädal';
+
+ @override
+ String get viewMonth => 'Kuu';
+
+ @override
+ String get viewYear => 'Aasta';
+
+ @override
+ String get viewAgenda => 'Päevakava';
+
+ @override
+ String get scheduleSettings => 'Ajakava';
+
+ @override
+ String get scheduleDisplaySettings => 'Ajakava kuvamine';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'Päeva- ja nädalavaade avanevad nende kellaaegade piires. Vajaduse korral laiendavad varasemad ja hilisemad kirjed vahemikku.';
+
+ @override
+ String get scheduleDayStartsAt => 'Päev algab';
+
+ @override
+ String get scheduleDayEndsAt => 'Päev lõpeb';
+
+ @override
+ String get sourceCalendar => 'Kalender';
+
+ @override
+ String get sourceTaskList => 'Ülesandeloend';
+
+ @override
+ String get createChoiceTitle => 'Loo';
+
+ @override
+ String get createEventAtTime => 'Sündmus';
+
+ @override
+ String get createTaskAtDate => 'Ülesanne';
+
+ @override
+ String get editEvent => 'Muuda sündmust';
+
+ @override
+ String get eventTitle => 'Sündmuse pealkiri';
+
+ @override
+ String get location => 'Asukoht';
+
+ @override
+ String get timeSlot => 'Ajavahemik';
+
+ @override
+ String get startDateTime => 'Alguskuupäev ja -kellaaeg';
+
+ @override
+ String get endDateTime => 'Lõppkuupäev ja -kellaaeg';
+
+ @override
+ String get doesNotRepeat => 'Ei kordu';
+
+ @override
+ String get defaultReminder => 'Vaikemeeldetuletus';
+
+ @override
+ String get guests => 'Külalised';
+
+ @override
+ String get noGuests => 'Külalisi pole';
+
+ @override
+ String get description => 'Kirjeldus';
+
+ @override
+ String get availabilityShowAs => 'Hõivatus / Kuva kui';
+
+ @override
+ String get busy => 'Hõivatud';
+
+ @override
+ String get visibility => 'Nähtavus';
+
+ @override
+ String get defaultVisibility => 'Vaikimisi nähtavus';
+
+ @override
+ String get conference => 'Konverents';
+
+ @override
+ String get noConference => 'Konverentsi pole';
+
+ @override
+ String get providerCalendar => 'Teenuse kalender';
+
+ @override
+ String get formatBoldShortLabel => 'R';
+
+ @override
+ String get formatBoldTooltip => 'Rasvane';
+
+ @override
+ String get formatItalicShortLabel => 'K';
+
+ @override
+ String get formatItalicTooltip => 'Kursiiv';
+
+ @override
+ String get formatUnderlineShortLabel => 'A';
+
+ @override
+ String get formatUnderlineTooltip => 'Allajoonitud';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minutit varem',
+ one: '1 minut varem',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'Algusajal';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours tundi varem',
+ one: '1 tund varem',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days päeva varem',
+ one: '1 päev varem',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Vaba';
+
+ @override
+ String get availabilityTentative => 'Esialgne';
+
+ @override
+ String get availabilityOutOfOffice => 'Kontorist väljas';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Töötab mujal';
+
+ @override
+ String get visibilityDefault => 'Vaikimisi';
+
+ @override
+ String get visibilityPublic => 'Avalik';
+
+ @override
+ String get visibilityPrivate => 'Privaatne';
+
+ @override
+ String get visibilityConfidential => 'Konfidentsiaalne';
+
+ @override
+ String get sensitivityNormal => 'Tavaline';
+
+ @override
+ String get sensitivityPersonal => 'Isiklik';
+
+ @override
+ String get tasks => 'Ülesanded';
+
+ @override
+ String get allTasks => 'Kõik ülesanded';
+
+ @override
+ String tasksInList(String title) {
+ return 'Loendi „$title” ülesanded';
+ }
+
+ @override
+ String get taskLists => 'Ülesandeloendid';
+
+ @override
+ String get navigation => 'Navigeerimine';
+
+ @override
+ String get mainMenu => 'Peamenüü';
+
+ @override
+ String get keyboardShortcuts => 'Klaviatuuri otseteed';
+
+ @override
+ String get shortcutGroupGeneral => 'Üldine';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Kuva klaviatuuri otseteede loend';
+
+ @override
+ String get shortcutGroupNavigation => 'Navigeerimine';
+
+ @override
+ String get shortcutNextPeriod => 'Järgmine periood';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Nädalavaates järgmine nädal, kuuvaates järgmine kuu jne';
+
+ @override
+ String get shortcutPreviousPeriod => 'Eelmine periood';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Nädalavaates eelmine nädal, kuuvaates eelmine kuu jne';
+
+ @override
+ String get shortcutJumpToToday => 'Mine tänasele kuupäevale';
+
+ @override
+ String get shortcutGroupView => 'Vaade';
+
+ @override
+ String get shortcutDayView => 'Päevavaade';
+
+ @override
+ String get shortcutWeekView => 'Nädalavaade';
+
+ @override
+ String get shortcutMonthView => 'Kuuvaade';
+
+ @override
+ String get shortcutYearView => 'Aastavaade';
+
+ @override
+ String get shortcutAgendaView => 'Päevakavavaade';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Loomine ja muutmine';
+
+ @override
+ String get shortcutSaveItem => 'Salvesta sündmus või ülesanne';
+
+ @override
+ String get shortcutDeleteItem => 'Kustuta sündmus või ülesanne';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Ülesande muutmine';
+
+ @override
+ String get shortcutCancelEditing => 'Tühista muutmine';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Sulge ülesande muutmine või ülesande üksikasjad';
+
+ @override
+ String get aboutBusyMax => 'Teave BusyMaxi kohta';
+
+ @override
+ String get aboutBusyMaxDescription => 'Kalender ja ülesanded';
+
+ @override
+ String get license => 'Litsents';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Veebisait';
+
+ @override
+ String get sourceCode => 'Lähtekood';
+
+ @override
+ String get reportAnIssue => 'Teata probleemist';
+
+ @override
+ String get sendFeedback => 'Saada tagasisidet';
+
+ @override
+ String get feedbackSubmit => 'Saada';
+
+ @override
+ String get feedbackCategory => 'Kategooria';
+
+ @override
+ String get feedbackSelectCategory => 'Valige kategooria';
+
+ @override
+ String get feedbackCategoryProblem => 'Probleem või viga';
+
+ @override
+ String get feedbackCategoryFeature => 'Funktsioonisoov';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => 'Privaatsus- või turbeprobleem';
+
+ @override
+ String get feedbackCategoryUsability => 'Kasutatavusprobleem';
+
+ @override
+ String get feedbackCategoryOther => 'Muu';
+
+ @override
+ String get feedbackSubject => 'Teema';
+
+ @override
+ String get feedbackDetailedMessage => 'Üksikasjalik sõnum';
+
+ @override
+ String get feedbackReplyEmail => 'Vastamise e-posti aadress (valikuline)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Lisa tehnilised üksikasjad';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Lisatakse ainult teie Linuxi operatsioonisüsteemi versioon ning rakenduse keel ja piirkonnaseaded. Logisid, kontoandmeid, failinimesid ega muid diagnostikaandmeid ei lisata.';
+
+ @override
+ String get feedbackCategoryRequired => 'Valige kategooria.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'Teema peab olema 3–120 tähemärki pikk.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'Sõnum peab olema 10–5000 tähemärki pikk.';
+
+ @override
+ String get feedbackInvalidEmail => 'Sisestage kehtiv e-posti aadress.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'BusyStackiga ei saanud ühendust luua. Kontrollige ühendust ja proovige uuesti.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'Päring aegus. Teie tagasisidet ei kustutatud; proovige uuesti.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Sellest võrgust on saadetud liiga palju tagasisidet. Oodake ja proovige uuesti.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'Server lükkas saatmise tagasi. Kontrollige välju ja proovige uuesti.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack ei saa praegu teie tagasisidet vastu võtta. Teie tagasisidet ei kustutatud; proovige uuesti.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Tagasiside saadetud. Viide: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Kuva või peida külgriba';
+
+ @override
+ String get showSidebar => 'Kuva külgpaneel';
+
+ @override
+ String get hideSidebar => 'Peida külgpaneel';
+
+ @override
+ String get accounts => 'Kontod';
+
+ @override
+ String get currentAccount => 'Praegune konto';
+
+ @override
+ String get switchAccount => 'Vaheta kontot';
+
+ @override
+ String get addGoogleAccount => 'Lisa Google\'i konto';
+
+ @override
+ String get addMicrosoftAccount => 'Lisa Microsofti konto';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Sisse logitud';
+
+ @override
+ String get removeAccount => 'Eemalda konto…';
+
+ @override
+ String get removingAccount => 'Konto eemaldamine…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Lõpeta sünkroonimine ja eemalda selle konto andmed seadmest.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Kas eemaldada $account BusyMaxist?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'See kustutab seadmest vahemällu salvestatud ülesanded, kalendrid, sündmused, meeldetuletused ja sünkroonimist ootavad võrguühenduseta muudatused. Sünkroonimata muudatused lähevad kaotsi. Google\'ist ega Microsoftist midagi ei kustutata.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Tühista ka BusyMaxi juurdepääs sellele Google\'i kontole';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Enne uuesti ühendamist peate juurdepääsu uuesti andma.';
+
+ @override
+ String get removeAccountAction => 'Eemalda konto';
+
+ @override
+ String get removeAccountFailed =>
+ 'Konto eemaldamist ei saanud lõpetada. Proovige uuesti.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Konto eemaldati sellest seadmest, kuid BusyMaxi juurdepääsu teie Google\'i kontole ei saanud tühistada. Saate selle oma Google\'i kontol käsitsi tühistada.';
+
+ @override
+ String get newList => 'Uus loend';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'Ülesandeloendite vaatamiseks logige sisse.';
+
+ @override
+ String get noTaskListsSynced =>
+ 'Ühtegi ülesandeloendit pole veel sünkroonitud.';
+
+ @override
+ String get listActions => 'Loendi toimingud';
+
+ @override
+ String get rename => 'Nimeta ümber';
+
+ @override
+ String get delete => 'Kustuta';
+
+ @override
+ String get renameList => 'Nimeta loend ümber';
+
+ @override
+ String get deleteList => 'Kustuta loend';
+
+ @override
+ String get builtInMicrosoftList => 'Sisseehitatud';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Microsoft To Do sisseehitatud loendeid ei saa ümber nimetada ega kustutada.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Kas kustutada „$title” Google Tasksist?';
+ }
+
+ @override
+ String get deleteEvent => 'Kustuta sündmus';
+
+ @override
+ String get title => 'Pealkiri';
+
+ @override
+ String get create => 'Loo';
+
+ @override
+ String get newTask => 'Uus ülesanne';
+
+ @override
+ String get clearCompleted => 'Eemalda lõpetatud ülesanded';
+
+ @override
+ String get refreshList => 'Värskenda loendit';
+
+ @override
+ String get refreshAll => 'Värskenda kõiki';
+
+ @override
+ String get listRefreshed => 'Loend on värskendatud.';
+
+ @override
+ String get allTasksRefreshed => 'Kõik kontod on värskendatud.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Eksporditud asukohta $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Eksportimine nurjus: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Värskendamine nurjus: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Alustamiseks valige või looge ülesandeloend.';
+
+ @override
+ String get signInToViewTasks => 'Ülesannete vaatamiseks logige sisse.';
+
+ @override
+ String get noTasks => 'Ülesandeid pole.';
+
+ @override
+ String get noTasksYet => 'Ülesandeid veel pole';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Alustamiseks looge ülesanne või värskendage kontosid.';
+
+ @override
+ String get noTasksInList => 'Selles loendis pole ülesandeid.';
+
+ @override
+ String get overdue => 'Tähtaja ületanud';
+
+ @override
+ String get today => 'Täna';
+
+ @override
+ String get tomorrow => 'Homme';
+
+ @override
+ String get upcoming => 'Tulekul';
+
+ @override
+ String get noDate => 'Kuupäevata';
+
+ @override
+ String get completed => 'Lõpetatud';
+
+ @override
+ String duePrefix(String date) {
+ return 'Tähtaeg $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'Ülesande üksikasjad';
+
+ @override
+ String get editTask => 'Muuda ülesannet';
+
+ @override
+ String get noTaskSelected => 'Ülesannet pole valitud.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Üksikasjade vaatamiseks ja muutmiseks valige ülesanne.';
+
+ @override
+ String get taskUnavailable => 'Ülesanne pole saadaval.';
+
+ @override
+ String get signInToEditTasks => 'Ülesannete muutmiseks logige sisse.';
+
+ @override
+ String get refreshTask => 'Värskenda ülesannet';
+
+ @override
+ String get primarySection => 'Põhiteave';
+
+ @override
+ String get statusSection => 'Olek';
+
+ @override
+ String get openStatus => 'Pooleli';
+
+ @override
+ String get doneStatus => 'Valmis';
+
+ @override
+ String get notes => 'Märkmed';
+
+ @override
+ String get dueDate => 'Tähtaeg';
+
+ @override
+ String get clearDueDate => 'Eemalda tähtaeg';
+
+ @override
+ String get dueTime => 'Tähtaja kellaaeg';
+
+ @override
+ String get startDate => 'Alguskuupäev';
+
+ @override
+ String get startTime => 'Alguskellaaeg';
+
+ @override
+ String get endDate => 'Lõppkuupäev';
+
+ @override
+ String get endTime => 'Lõppkellaaeg';
+
+ @override
+ String get reminderDate => 'Meeldetuletuse kuupäev';
+
+ @override
+ String get reminderTime => 'Meeldetuletuse kellaaeg';
+
+ @override
+ String get reminder => 'Meeldetuletus';
+
+ @override
+ String get addReminder => 'Lisa meeldetuletus';
+
+ @override
+ String get addGuest => 'Lisa külaline';
+
+ @override
+ String get addGuestEmail => 'Lisa külalise e-posti aadress';
+
+ @override
+ String get removeReminder => 'Eemalda meeldetuletus';
+
+ @override
+ String get off => 'Väljas';
+
+ @override
+ String get repeat => 'Kordus';
+
+ @override
+ String get repeatNone => 'Ei kordu';
+
+ @override
+ String get noneValue => 'Puudub';
+
+ @override
+ String get repeatDaily => 'Iga päev';
+
+ @override
+ String get repeatWeekly => 'Iga nädal';
+
+ @override
+ String get repeatMonthly => 'Iga kuu';
+
+ @override
+ String get repeatYearly => 'Iga aasta';
+
+ @override
+ String get importance => 'Tähtsus';
+
+ @override
+ String get importanceLow => 'Madal';
+
+ @override
+ String get importanceNormal => 'Tavaline';
+
+ @override
+ String get importanceHigh => 'Kõrge';
+
+ @override
+ String get categories => 'Kategooriad';
+
+ @override
+ String get scheduleSection => 'Ajakava';
+
+ @override
+ String get dueGroup => 'Tähtaeg';
+
+ @override
+ String get startGroup => 'Algus';
+
+ @override
+ String get reminderGroup => 'Meeldetuletus';
+
+ @override
+ String get organizationSection => 'Korraldus';
+
+ @override
+ String get actionsSection => 'Toimingud';
+
+ @override
+ String get advancedSection => 'Täpsemad seaded';
+
+ @override
+ String get addCategory => 'Lisa kategooria';
+
+ @override
+ String get list => 'Loend';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'Selles versioonis ei toetata Microsoft To Do kontodel ülesannete teisaldamist loendite vahel.';
+
+ @override
+ String get createSubtask => 'Loo alamülesanne';
+
+ @override
+ String get moveToTop => 'Teisalda kõige üles';
+
+ @override
+ String get deleteTask => 'Kustuta ülesanne';
+
+ @override
+ String get newSubtask => 'Uus alamülesanne';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Kas kustutada „$title” Google Tasksist?';
+ }
+
+ @override
+ String get metadata => 'Metaandmed';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Uuendatud';
+
+ @override
+ String get parent => 'Ülemülesanne';
+
+ @override
+ String get position => 'Asukoht';
+
+ @override
+ String get webLink => 'Veebilink';
+
+ @override
+ String get assignment => 'Määramine';
+
+ @override
+ String get localState => 'Kohalik olek';
+
+ @override
+ String get pendingSync => 'Sünkroonimise ootel';
+
+ @override
+ String get synced => 'Sünkroonitud';
+
+ @override
+ String get account => 'Konto';
+
+ @override
+ String get sync => 'Sünkroonimine';
+
+ @override
+ String get manualFullSync => 'Käsitsi täielik sünkroonimine';
+
+ @override
+ String get runInBackgroundWhenClosed =>
+ 'Jätka töötamist, kui aken on suletud';
+
+ @override
+ String get showTrayIcon => 'Kuva süsteemisalve ikoon';
+
+ @override
+ String get startMinimizedToTray => 'Käivita minimeerituna süsteemisalves';
+
+ @override
+ String get requiresTrayIcon => 'Nõuab süsteemisalve ikooni.';
+
+ @override
+ String get syncComplete => 'Sünkroonimine on lõpetatud.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Sünkroonimine nurjus: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'Teavitused sünkroonimise nurjumisel';
+
+ @override
+ String get notifyConflicts => 'Teavitused konfliktide korral';
+
+ @override
+ String get notifyDueToday => 'Täna tähtuvate ülesannete teavitused';
+
+ @override
+ String get eventReminders => 'Sündmuste meeldetuletused';
+
+ @override
+ String get taskReminders => 'Ülesannete meeldetuletused';
+
+ @override
+ String get notificationDetailLevel => 'Teavituste üksikasjalikkus';
+
+ @override
+ String get notificationDetailPrivate => 'Privaatne';
+
+ @override
+ String get notificationDetailNormal => 'Tavaline';
+
+ @override
+ String get quietHours => 'Vaikne aeg';
+
+ @override
+ String get quietHoursDescription => 'Peata teavitused selleks ajavahemikuks.';
+
+ @override
+ String get quietHoursStart => 'Vaikse aja algus';
+
+ @override
+ String get quietHoursEnd => 'Vaikse aja lõpp';
+
+ @override
+ String get notifications => 'Teavitused';
+
+ @override
+ String get appearance => 'Välimus';
+
+ @override
+ String get theme => 'Kujundus';
+
+ @override
+ String get themeSystem => 'Süsteem';
+
+ @override
+ String get themeLight => 'Hele';
+
+ @override
+ String get themeDark => 'Tume';
+
+ @override
+ String get themeFamily => 'Kujunduse perekond';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu algupärane kujundus (Yaru)';
+
+ @override
+ String get localization => 'Keel ja piirkond';
+
+ @override
+ String get currentLocale => 'Praegune lokaat';
+
+ @override
+ String get privacy => 'Privaatsus';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Peida diagnostikas ülesannete sisu';
+
+ @override
+ String get developerDiagnostics => 'Arendaja diagnostika';
+
+ @override
+ String get diagnostics => 'Diagnostika';
+
+ @override
+ String get apiInspectorDisabled => 'Kuva API-inspektor';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery versioon: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Rakendatud meetodid';
+
+ @override
+ String get supportsTasksScopes =>
+ 'Toetab õiguse ulatusi tasks ja tasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'Nõuab õiguse ulatust tasks';
+
+ @override
+ String get blockedPendingOperations => 'Blokeeritud ootel toimingud';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Ootel toimingute kontrollimiseks logige sisse.';
+
+ @override
+ String get noBlockedPendingOperations => 'Blokeeritud ootel toiminguid pole.';
+
+ @override
+ String get operationActions => 'Toimingu tegevused';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'loend=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'ülesanne=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'katseid=$count';
+ }
+
+ @override
+ String get retry => 'Proovi uuesti';
+
+ @override
+ String get discard => 'Hülga';
+
+ @override
+ String get discardChangesAction => 'Hülga';
+
+ @override
+ String get discardChanges => 'Kas hüljata muudatused?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'See hülgab ülesande salvestamata muudatused.';
+
+ @override
+ String get retryCompleted => 'Uuesti proovimine lõpetatud.';
+
+ @override
+ String get discardPendingOperation => 'Kas hüljata ootel toiming?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'See eemaldab blokeeritud kohaliku toimingu. Järgmine sünkroonimine laadib andmed Google Tasksist uuesti.';
+
+ @override
+ String get pendingOperationDiscarded => 'Ootel toiming hüljatud.';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMaxi sünkroonimine nurjus';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'Taustal sünkroonimine nurjus. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMaxi sünkroonimiskonflikt';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Ootel kohalik muudatus blokeeriti. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Täna tähtuvad ülesanded';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count ülesannet tähtub täna.',
+ one: 'Üks ülesanne tähtub täna.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Sündmuse meeldetuletus';
+
+ @override
+ String get taskReminderNotificationTitle => 'Ülesande meeldetuletus';
+
+ @override
+ String get eventReminderNotificationBody => 'Sündmus algab varsti.';
+
+ @override
+ String get taskReminderNotificationBody => 'Ülesande tähtaeg on varsti.';
+
+ @override
+ String get notificationOpenAction => 'Ava';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'Üksikasjad on privaatsusseadete tõttu peidetud.';
+
+ @override
+ String get previousMonth => 'Eelmine kuu';
+
+ @override
+ String get nextMonth => 'Järgmine kuu';
+
+ @override
+ String get openMonthView => 'Ava kuuvaade';
+
+ @override
+ String get previousYear => 'Eelmine aasta';
+
+ @override
+ String get nextYear => 'Järgmine aasta';
+
+ @override
+ String get openYearView => 'Ava aastavaade';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Nädal $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Muuda kogu päeva paneeli suurust';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count kirjet',
+ one: '1 kirje',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'See kalender on kirjutuskaitstud.';
+
+ @override
+ String get selectTimeZone => 'Valige ajavöönd';
+
+ @override
+ String get searchLocations => 'Otsi asukohti';
+
+ @override
+ String get noLocationsFound => 'Asukohti ei leitud';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Kas kustutada „$title”?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart
new file mode 100644
index 0000000..447985d
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_fa.dart
@@ -0,0 +1,1286 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Persian (`fa`).
+class AppLocalizationsFa extends AppLocalizations {
+ AppLocalizationsFa([String locale = 'fa']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'حسابهای Google و Microsoft را متصل کنید تا تقویمها و کارها همگام شوند.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'در صفحهٔ مجوزهای Google، مجوزهای تقویم و کارها را هر دو انتخاب کنید.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'مجوزهای Google Calendar و Google Tasks لازم هستند. دوباره تلاش کنید و هر دو کادر را علامت بزنید.';
+
+ @override
+ String get finishSetup => 'پایان راهاندازی';
+
+ @override
+ String get continueSetup => 'ادامه';
+
+ @override
+ String get onboardingSetupTitle => 'راهاندازی BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'اتصال حسابها';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'همهٔ حسابهای Google و Microsoft موردنظرتان را اضافه کنید. BusyMax تقویمها، رویدادها، فهرستهای کار و کارهای هر حساب را همگام میکند.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'انتخاب تنظیمات سیستم';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'پیش از باز کردن برنامه، رفتار برنامه روی میزکار، یادآورها، سطح جزئیات اعلانها و ظاهر را تنظیم کنید.';
+
+ @override
+ String get signInWithGoogle => 'ورود با Google';
+
+ @override
+ String get signInWithMicrosoft => 'ورود با Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'این سرویس پیکربندی نشده است.';
+
+ @override
+ String get waitingForGoogleSignIn => 'در انتظار ورود به Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'در انتظار ورود به Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'ورود به Microsoft پیکربندی نشده است. MICROSOFT_OAUTH_CLIENT_ID را تنظیم کنید.';
+
+ @override
+ String get cancel => 'لغو';
+
+ @override
+ String get close => 'بستن';
+
+ @override
+ String get exit => 'خروج';
+
+ @override
+ String get options => 'گزینهها';
+
+ @override
+ String get hide => 'پنهان کردن';
+
+ @override
+ String get show => 'نمایش';
+
+ @override
+ String get export => 'خروجی گرفتن';
+
+ @override
+ String get save => 'ذخیره';
+
+ @override
+ String get settings => 'تنظیمات';
+
+ @override
+ String get all => 'همه';
+
+ @override
+ String get calendarEvents => 'رویدادها';
+
+ @override
+ String get calendarTasks => 'کارها';
+
+ @override
+ String get calendar => 'تقویم';
+
+ @override
+ String get calendars => 'تقویمها';
+
+ @override
+ String get newEvent => 'رویداد جدید';
+
+ @override
+ String get refreshCalendar => 'تازهسازی تقویم';
+
+ @override
+ String get openInProvider => 'باز کردن در سرویس';
+
+ @override
+ String get hideFromSchedule => 'پنهان کردن از برنامه';
+
+ @override
+ String get showInSchedule => 'نمایش در برنامه';
+
+ @override
+ String get noCalendarsSynced => 'هنوز هیچ تقویمی همگام نشده است.';
+
+ @override
+ String get allDay => 'تمام روز';
+
+ @override
+ String moreItems(int count) {
+ final intl.NumberFormat countNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String countString = countNumberFormat.format(count);
+
+ return '+$countString مورد دیگر';
+ }
+
+ @override
+ String get noEventsOrTasks => 'هیچ رویداد یا کاری وجود ندارد';
+
+ @override
+ String get scheduleLoading => 'در حال بارگیری برنامه...';
+
+ @override
+ String get scheduleUnavailable => 'برنامه در دسترس نیست';
+
+ @override
+ String get scheduleNoSources =>
+ 'هیچ تقویم یا فهرست کار قابل نمایشی وجود ندارد';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'در تنظیمات انتخاب کنید چه چیزهایی نمایش داده شوند، سپس برنامه را تازهسازی کنید.';
+
+ @override
+ String get scheduleSignInRequired => 'اتصال حساب';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'برای همگامسازی تقویمها و کارها وارد شوید.';
+
+ @override
+ String get scheduleNoSearchResults => 'هیچ رویداد یا کار منطبقی وجود ندارد';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'جستوجوی دیگری را امتحان کنید یا پالایههای فعلی را پاک کنید.';
+
+ @override
+ String get refresh => 'تازهسازی';
+
+ @override
+ String get trayOpenBusyMax => 'باز کردن BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'بارگیری کارهای عقبافتادهٔ بیشتر';
+
+ @override
+ String get agendaLoadMoreNoDate => 'بارگیری کارهای بدون تاریخ بیشتر';
+
+ @override
+ String get viewDay => 'روز';
+
+ @override
+ String get viewWeek => 'هفته';
+
+ @override
+ String get viewMonth => 'ماه';
+
+ @override
+ String get viewYear => 'سال';
+
+ @override
+ String get viewAgenda => 'برنامه';
+
+ @override
+ String get scheduleSettings => 'برنامه';
+
+ @override
+ String get scheduleDisplaySettings => 'نمایش برنامه';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'نماهای روز و هفته ابتدا این بازهٔ زمانی را نشان میدهند. موارد زودتر یا دیرتر در صورت نیاز این بازه را گسترش میدهند.';
+
+ @override
+ String get scheduleDayStartsAt => 'شروع روز از';
+
+ @override
+ String get scheduleDayEndsAt => 'پایان روز در';
+
+ @override
+ String get sourceCalendar => 'تقویم';
+
+ @override
+ String get sourceTaskList => 'فهرست کار';
+
+ @override
+ String get createChoiceTitle => 'ایجاد';
+
+ @override
+ String get createEventAtTime => 'رویداد';
+
+ @override
+ String get createTaskAtDate => 'کار';
+
+ @override
+ String get editEvent => 'ویرایش رویداد';
+
+ @override
+ String get eventTitle => 'عنوان رویداد';
+
+ @override
+ String get location => 'مکان';
+
+ @override
+ String get timeSlot => 'بازهٔ زمانی';
+
+ @override
+ String get startDateTime => 'تاریخ/زمان شروع';
+
+ @override
+ String get endDateTime => 'تاریخ/زمان پایان';
+
+ @override
+ String get doesNotRepeat => 'تکرار نمیشود';
+
+ @override
+ String get defaultReminder => 'یادآور پیشفرض';
+
+ @override
+ String get guests => 'مهمانان';
+
+ @override
+ String get noGuests => 'بدون مهمان';
+
+ @override
+ String get description => 'توضیحات';
+
+ @override
+ String get availabilityShowAs => 'وضعیت دسترسی / نمایش بهعنوان';
+
+ @override
+ String get busy => 'مشغول';
+
+ @override
+ String get visibility => 'قابلیت مشاهده';
+
+ @override
+ String get defaultVisibility => 'قابلیت مشاهدهٔ پیشفرض';
+
+ @override
+ String get conference => 'جلسه';
+
+ @override
+ String get noConference => 'بدون جلسه';
+
+ @override
+ String get providerCalendar => 'تقویم سرویس';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => 'پررنگ';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'مورب';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'زیرخط';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ final intl.NumberFormat minutesNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String minutesString = minutesNumberFormat.format(minutes);
+
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutesString دقیقه قبل',
+ one: 'یک دقیقه قبل',
+ zero: 'هنگام شروع',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'هنگام شروع';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ final intl.NumberFormat hoursNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String hoursString = hoursNumberFormat.format(hours);
+
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hoursString ساعت قبل',
+ one: 'یک ساعت قبل',
+ zero: 'هنگام شروع',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ final intl.NumberFormat daysNumberFormat = intl.NumberFormat.decimalPattern(
+ localeName,
+ );
+ final String daysString = daysNumberFormat.format(days);
+
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$daysString روز قبل',
+ one: 'یک روز قبل',
+ zero: 'همان روز',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'آزاد';
+
+ @override
+ String get availabilityTentative => 'احتمالی';
+
+ @override
+ String get availabilityOutOfOffice => 'خارج از دفتر';
+
+ @override
+ String get availabilityWorkingElsewhere => 'مشغول به کار در مکانی دیگر';
+
+ @override
+ String get visibilityDefault => 'پیشفرض';
+
+ @override
+ String get visibilityPublic => 'عمومی';
+
+ @override
+ String get visibilityPrivate => 'خصوصی';
+
+ @override
+ String get visibilityConfidential => 'محرمانه';
+
+ @override
+ String get sensitivityNormal => 'عادی';
+
+ @override
+ String get sensitivityPersonal => 'شخصی';
+
+ @override
+ String get tasks => 'کارها';
+
+ @override
+ String get allTasks => 'همهٔ کارها';
+
+ @override
+ String tasksInList(String title) {
+ return 'کارهای $title';
+ }
+
+ @override
+ String get taskLists => 'فهرستهای کار';
+
+ @override
+ String get navigation => 'پیمایش';
+
+ @override
+ String get mainMenu => 'منوی اصلی';
+
+ @override
+ String get keyboardShortcuts => 'میانبرهای صفحهکلید';
+
+ @override
+ String get shortcutGroupGeneral => 'عمومی';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'نمایش این راهنمای میانبرها';
+
+ @override
+ String get shortcutGroupNavigation => 'پیمایش';
+
+ @override
+ String get shortcutNextPeriod => 'بازهٔ بعدی';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'هفتهٔ بعد در نمای هفته، ماه بعد در نمای ماه و به همین ترتیب';
+
+ @override
+ String get shortcutPreviousPeriod => 'بازهٔ قبلی';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'هفتهٔ قبل در نمای هفته، ماه قبل در نمای ماه و به همین ترتیب';
+
+ @override
+ String get shortcutJumpToToday => 'رفتن به امروز';
+
+ @override
+ String get shortcutGroupView => 'نما';
+
+ @override
+ String get shortcutDayView => 'نمای روز';
+
+ @override
+ String get shortcutWeekView => 'نمای هفته';
+
+ @override
+ String get shortcutMonthView => 'نمای ماه';
+
+ @override
+ String get shortcutYearView => 'نمای سال';
+
+ @override
+ String get shortcutAgendaView => 'نمای برنامه';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'ایجاد و ویرایش';
+
+ @override
+ String get shortcutSaveItem => 'ذخیرهٔ رویداد یا کار';
+
+ @override
+ String get shortcutDeleteItem => 'حذف رویداد یا کار';
+
+ @override
+ String get shortcutGroupTaskEditing => 'ویرایش کار';
+
+ @override
+ String get shortcutCancelEditing => 'لغو ویرایش';
+
+ @override
+ String get shortcutCancelEditingDescription => 'بستن ویرایش یا جزئیات کار';
+
+ @override
+ String get aboutBusyMax => 'دربارهٔ BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'تقویم و کارها';
+
+ @override
+ String get license => 'مجوز';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'وبسایت';
+
+ @override
+ String get sourceCode => 'کد منبع';
+
+ @override
+ String get reportAnIssue => 'گزارش مشکل';
+
+ @override
+ String get sendFeedback => 'ارسال بازخورد';
+
+ @override
+ String get feedbackSubmit => 'ارسال';
+
+ @override
+ String get feedbackCategory => 'دستهبندی';
+
+ @override
+ String get feedbackSelectCategory => 'یک دستهبندی انتخاب کنید';
+
+ @override
+ String get feedbackCategoryProblem => 'مشکل یا اشکال';
+
+ @override
+ String get feedbackCategoryFeature => 'درخواست قابلیت';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'نگرانی دربارهٔ حریم خصوصی یا امنیت';
+
+ @override
+ String get feedbackCategoryUsability => 'نگرانی دربارهٔ کاربردپذیری';
+
+ @override
+ String get feedbackCategoryOther => 'سایر';
+
+ @override
+ String get feedbackSubject => 'موضوع';
+
+ @override
+ String get feedbackDetailedMessage => 'پیام با جزئیات';
+
+ @override
+ String get feedbackReplyEmail => 'نشانی ایمیل برای پاسخ (اختیاری)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'افزودن جزئیات فنی';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'فقط نسخهٔ سیستمعامل Linux و تنظیمات منطقهای برنامه افزوده میشود. هیچ گزارش، دادهٔ حساب، نام پرونده یا اطلاعات تشخیصی دیگری افزوده نمیشود.';
+
+ @override
+ String get feedbackCategoryRequired => 'یک دستهبندی انتخاب کنید.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'موضوع باید بین ۳ تا ۱۲۰ نویسه باشد.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'پیام باید بین ۱۰ تا ۵٬۰۰۰ نویسه باشد.';
+
+ @override
+ String get feedbackInvalidEmail => 'یک نشانی ایمیل معتبر وارد کنید.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'اتصال به BusyStack ممکن نشد. اتصال خود را بررسی و دوباره تلاش کنید.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'مهلت درخواست پایان یافت. بازخورد شما پاک نشده است؛ دوباره تلاش کنید.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'بازخوردهای بیش از حدی از این شبکه ارسال شده است. کمی صبر کنید و دوباره تلاش کنید.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'سرور ارسال را رد کرد. فیلدها را بررسی و دوباره تلاش کنید.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack اکنون نمیتواند بازخورد شما را بپذیرد. بازخورد شما پاک نشده است؛ دوباره تلاش کنید.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'بازخورد ارسال شد. شناسهٔ پیگیری: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'نمایش یا پنهان کردن نوار کناری';
+
+ @override
+ String get showSidebar => 'نمایش پنل کناری';
+
+ @override
+ String get hideSidebar => 'پنهان کردن پنل کناری';
+
+ @override
+ String get accounts => 'حسابها';
+
+ @override
+ String get currentAccount => 'حساب فعلی';
+
+ @override
+ String get switchAccount => 'تعویض حساب';
+
+ @override
+ String get addGoogleAccount => 'افزودن حساب Google';
+
+ @override
+ String get addMicrosoftAccount => 'افزودن حساب Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'وارد شده';
+
+ @override
+ String get removeAccount => 'حذف حساب…';
+
+ @override
+ String get removingAccount => 'در حال حذف حساب…';
+
+ @override
+ String get removeAccountDescription =>
+ 'همگامسازی را متوقف و دادههای این حساب را از این دستگاه حذف کنید.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'حذف $account از BusyMax؟';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'با این کار، کارها، تقویمها، رویدادها، یادآورها و تغییرات آفلاین در انتظار از حافظهٔ نهان این دستگاه حذف میشوند. تغییرات همگامنشده از دست میروند. هیچ چیزی از Google یا Microsoft حذف نمیشود.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'دسترسی BusyMax به این حساب Google نیز لغو شود';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'پیش از اتصال دوباره باید دسترسی را دوباره اعطا کنید.';
+
+ @override
+ String get removeAccountAction => 'حذف حساب';
+
+ @override
+ String get removeAccountFailed => 'حذف حساب کامل نشد. دوباره تلاش کنید.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'حساب از این دستگاه حذف شد، اما BusyMax نتوانست دسترسی Google را لغو کند. میتوانید آن را از حساب Google خود لغو کنید.';
+
+ @override
+ String get newList => 'فهرست جدید';
+
+ @override
+ String get signInToViewTaskLists => 'برای دیدن فهرستهای کار وارد شوید.';
+
+ @override
+ String get noTaskListsSynced => 'هنوز هیچ فهرست کاری همگام نشده است.';
+
+ @override
+ String get listActions => 'عملیات فهرست';
+
+ @override
+ String get rename => 'تغییر نام';
+
+ @override
+ String get delete => 'حذف';
+
+ @override
+ String get renameList => 'تغییر نام فهرست';
+
+ @override
+ String get deleteList => 'حذف فهرست';
+
+ @override
+ String get builtInMicrosoftList => 'داخلی';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'فهرستهای داخلی Microsoft To Do را نمیتوان تغییر نام داد یا حذف کرد.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return '«$title» از Google Tasks حذف شود؟';
+ }
+
+ @override
+ String get deleteEvent => 'حذف رویداد';
+
+ @override
+ String get title => 'عنوان';
+
+ @override
+ String get create => 'ایجاد';
+
+ @override
+ String get newTask => 'کار جدید';
+
+ @override
+ String get clearCompleted => 'پاک کردن کارهای انجامشده';
+
+ @override
+ String get refreshList => 'تازهسازی فهرست';
+
+ @override
+ String get refreshAll => 'تازهسازی همه';
+
+ @override
+ String get listRefreshed => 'فهرست تازهسازی شد.';
+
+ @override
+ String get allTasksRefreshed => 'همهٔ حسابها تازهسازی شدند.';
+
+ @override
+ String exportedFile(String path) {
+ return 'در $path خروجی گرفته شد';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'خروجی گرفتن ناموفق بود: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'تازهسازی ناموفق بود: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'برای شروع، یک فهرست کار انتخاب یا ایجاد کنید.';
+
+ @override
+ String get signInToViewTasks => 'برای دیدن کارها وارد شوید.';
+
+ @override
+ String get noTasks => 'هیچ کاری وجود ندارد.';
+
+ @override
+ String get noTasksYet => 'هنوز کاری وجود ندارد';
+
+ @override
+ String get noTasksYetMessage =>
+ 'برای شروع یک کار ایجاد کنید یا حسابهایتان را تازهسازی کنید.';
+
+ @override
+ String get noTasksInList => 'هیچ کاری در این فهرست وجود ندارد.';
+
+ @override
+ String get overdue => 'گذشته از موعد';
+
+ @override
+ String get today => 'امروز';
+
+ @override
+ String get tomorrow => 'فردا';
+
+ @override
+ String get upcoming => 'پیش رو';
+
+ @override
+ String get noDate => 'بدون تاریخ';
+
+ @override
+ String get completed => 'انجامشده';
+
+ @override
+ String duePrefix(String date) {
+ return 'سررسید: $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'جزئیات کار';
+
+ @override
+ String get editTask => 'ویرایش کار';
+
+ @override
+ String get noTaskSelected => 'هیچ کاری انتخاب نشده است.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'برای دیدن و ویرایش جزئیات، کاری را انتخاب کنید.';
+
+ @override
+ String get taskUnavailable => 'کار در دسترس نیست.';
+
+ @override
+ String get signInToEditTasks => 'برای ویرایش کارها وارد شوید.';
+
+ @override
+ String get refreshTask => 'تازهسازی کار';
+
+ @override
+ String get primarySection => 'اصلی';
+
+ @override
+ String get statusSection => 'وضعیت';
+
+ @override
+ String get openStatus => 'باز';
+
+ @override
+ String get doneStatus => 'انجامشده';
+
+ @override
+ String get notes => 'یادداشتها';
+
+ @override
+ String get dueDate => 'تاریخ سررسید';
+
+ @override
+ String get clearDueDate => 'پاک کردن تاریخ سررسید';
+
+ @override
+ String get dueTime => 'زمان سررسید';
+
+ @override
+ String get startDate => 'تاریخ شروع';
+
+ @override
+ String get startTime => 'زمان شروع';
+
+ @override
+ String get endDate => 'تاریخ پایان';
+
+ @override
+ String get endTime => 'زمان پایان';
+
+ @override
+ String get reminderDate => 'تاریخ یادآور';
+
+ @override
+ String get reminderTime => 'زمان یادآور';
+
+ @override
+ String get reminder => 'یادآور';
+
+ @override
+ String get addReminder => 'افزودن یادآور';
+
+ @override
+ String get addGuest => 'افزودن مهمان';
+
+ @override
+ String get addGuestEmail => 'افزودن ایمیل مهمان';
+
+ @override
+ String get removeReminder => 'حذف یادآور';
+
+ @override
+ String get off => 'خاموش';
+
+ @override
+ String get repeat => 'تکرار';
+
+ @override
+ String get repeatNone => 'بدون تکرار';
+
+ @override
+ String get noneValue => 'هیچکدام';
+
+ @override
+ String get repeatDaily => 'روزانه';
+
+ @override
+ String get repeatWeekly => 'هفتگی';
+
+ @override
+ String get repeatMonthly => 'ماهانه';
+
+ @override
+ String get repeatYearly => 'سالانه';
+
+ @override
+ String get importance => 'اهمیت';
+
+ @override
+ String get importanceLow => 'کم';
+
+ @override
+ String get importanceNormal => 'عادی';
+
+ @override
+ String get importanceHigh => 'زیاد';
+
+ @override
+ String get categories => 'دستهها';
+
+ @override
+ String get scheduleSection => 'برنامه';
+
+ @override
+ String get dueGroup => 'سررسید';
+
+ @override
+ String get startGroup => 'شروع';
+
+ @override
+ String get reminderGroup => 'یادآور';
+
+ @override
+ String get organizationSection => 'سازماندهی';
+
+ @override
+ String get actionsSection => 'عملیات';
+
+ @override
+ String get advancedSection => 'پیشرفته';
+
+ @override
+ String get addCategory => 'افزودن دسته';
+
+ @override
+ String get list => 'فهرست';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'در این نسخه، جابهجایی کارها بین فهرستهای حساب Microsoft To Do پشتیبانی نمیشود.';
+
+ @override
+ String get createSubtask => 'ایجاد زیرکار';
+
+ @override
+ String get moveToTop => 'انتقال به بالاترین جایگاه';
+
+ @override
+ String get deleteTask => 'حذف کار';
+
+ @override
+ String get newSubtask => 'زیرکار جدید';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return '«$title» از Google Tasks حذف شود؟';
+ }
+
+ @override
+ String get metadata => 'فراداده';
+
+ @override
+ String get id => 'شناسه';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'بهروزشده';
+
+ @override
+ String get parent => 'کار والد';
+
+ @override
+ String get position => 'جایگاه';
+
+ @override
+ String get webLink => 'پیوند وب';
+
+ @override
+ String get assignment => 'واگذاری';
+
+ @override
+ String get localState => 'وضعیت محلی';
+
+ @override
+ String get pendingSync => 'در انتظار همگامسازی';
+
+ @override
+ String get synced => 'همگامشده';
+
+ @override
+ String get account => 'حساب';
+
+ @override
+ String get sync => 'همگامسازی';
+
+ @override
+ String get manualFullSync => 'همگامسازی کامل دستی';
+
+ @override
+ String get runInBackgroundWhenClosed => 'ادامهٔ اجرا پس از بسته شدن پنجره';
+
+ @override
+ String get showTrayIcon => 'نمایش نماد سینی سیستم';
+
+ @override
+ String get startMinimizedToTray => 'شروع بهصورت کوچکشده در سینی سیستم';
+
+ @override
+ String get requiresTrayIcon => 'به نماد سینی سیستم نیاز دارد.';
+
+ @override
+ String get syncComplete => 'همگامسازی کامل شد.';
+
+ @override
+ String syncFailed(String error) {
+ return 'همگامسازی ناموفق بود: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'اعلان هنگام شکست همگامسازی';
+
+ @override
+ String get notifyConflicts => 'اعلان هنگام تداخل';
+
+ @override
+ String get notifyDueToday => 'اعلان کارهای دارای سررسید امروز';
+
+ @override
+ String get eventReminders => 'یادآورهای رویداد';
+
+ @override
+ String get taskReminders => 'یادآورهای کار';
+
+ @override
+ String get notificationDetailLevel => 'سطح جزئیات اعلان';
+
+ @override
+ String get notificationDetailPrivate => 'خصوصی';
+
+ @override
+ String get notificationDetailNormal => 'عادی';
+
+ @override
+ String get quietHours => 'ساعات سکوت';
+
+ @override
+ String get quietHoursDescription =>
+ 'اعلانها را در این بازه موقتاً متوقف کنید.';
+
+ @override
+ String get quietHoursStart => 'شروع ساعات سکوت';
+
+ @override
+ String get quietHoursEnd => 'پایان ساعات سکوت';
+
+ @override
+ String get notifications => 'اعلانها';
+
+ @override
+ String get appearance => 'ظاهر';
+
+ @override
+ String get theme => 'پوسته';
+
+ @override
+ String get themeSystem => 'سیستم';
+
+ @override
+ String get themeLight => 'روشن';
+
+ @override
+ String get themeDark => 'تیره';
+
+ @override
+ String get themeFamily => 'خانوادهٔ پوسته';
+
+ @override
+ String get themeFamilyYaru => 'پوستهٔ بومی Ubuntu (Yaru)';
+
+ @override
+ String get localization => 'زبان و منطقه';
+
+ @override
+ String get currentLocale => 'زبان و منطقهٔ فعلی';
+
+ @override
+ String get privacy => 'حریم خصوصی';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'پنهان کردن محتوای کارها در اطلاعات تشخیصی';
+
+ @override
+ String get developerDiagnostics => 'تشخیصهای توسعهدهنده';
+
+ @override
+ String get diagnostics => 'اطلاعات تشخیصی';
+
+ @override
+ String get apiInspectorDisabled => 'نمایش بازرس API';
+
+ @override
+ String get googleTasksApi => 'رابط Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'بازبینی Discovery: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'روشهای پیادهسازیشده';
+
+ @override
+ String get supportsTasksScopes =>
+ 'از محدودههای tasks و tasks.readonly پشتیبانی میکند';
+
+ @override
+ String get requiresTasksScope => 'به محدودهٔ tasks نیاز دارد';
+
+ @override
+ String get blockedPendingOperations => 'عملیات در انتظار مسدودشده';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'برای بررسی عملیات در انتظار وارد شوید.';
+
+ @override
+ String get noBlockedPendingOperations =>
+ 'هیچ عملیات در انتظار مسدودشدهای وجود ندارد.';
+
+ @override
+ String get operationActions => 'اقدامات عملیات';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'فهرست=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'کار=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ final intl.NumberFormat countNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String countString = countNumberFormat.format(count);
+
+ return 'تلاشها=$countString';
+ }
+
+ @override
+ String get retry => 'تلاش دوباره';
+
+ @override
+ String get discard => 'کنار گذاشتن';
+
+ @override
+ String get discardChangesAction => 'ذخیره نشود';
+
+ @override
+ String get discardChanges => 'تغییرات کنار گذاشته شوند؟';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'با این کار ویرایشهای ذخیرهنشدهٔ این کار کنار گذاشته میشوند.';
+
+ @override
+ String get retryCompleted => 'تلاش دوباره کامل شد.';
+
+ @override
+ String get discardPendingOperation => 'عملیات در انتظار کنار گذاشته شود؟';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'با این کار عملیات محلی مسدودشده حذف میشود. در همگامسازی بعدی، دادهها از Google Tasks تازهسازی میشوند.';
+
+ @override
+ String get pendingOperationDiscarded => 'عملیات در انتظار کنار گذاشته شد.';
+
+ @override
+ String get syncFailureNotificationTitle => 'همگامسازی BusyMax ناموفق بود';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'همگامسازی پسزمینه ناموفق بود. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'تداخل همگامسازی BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'یک تغییر محلی در انتظار مسدود شد. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'کارهای دارای سررسید امروز';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ final intl.NumberFormat countNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String countString = countNumberFormat.format(count);
+
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'امروز $countString کار سررسید دارند.',
+ one: 'امروز یک کار سررسید دارد.',
+ zero: 'امروز هیچ کاری سررسید ندارد.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'یادآور رویداد';
+
+ @override
+ String get taskReminderNotificationTitle => 'یادآور کار';
+
+ @override
+ String get eventReminderNotificationBody => 'رویداد بهزودی شروع میشود.';
+
+ @override
+ String get taskReminderNotificationBody => 'سررسید کار نزدیک است.';
+
+ @override
+ String get notificationOpenAction => 'باز کردن';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'جزئیات بهدلیل تنظیمات حریم خصوصی پنهان شدهاند.';
+
+ @override
+ String get previousMonth => 'ماه قبل';
+
+ @override
+ String get nextMonth => 'ماه بعد';
+
+ @override
+ String get openMonthView => 'باز کردن نمای ماه';
+
+ @override
+ String get previousYear => 'سال قبل';
+
+ @override
+ String get nextYear => 'سال بعد';
+
+ @override
+ String get openYearView => 'باز کردن نمای سال';
+
+ @override
+ String weekNumberTooltip(int number) {
+ final intl.NumberFormat numberNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String numberString = numberNumberFormat.format(number);
+
+ return 'هفتهٔ $numberString';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'تغییر اندازهٔ پنل تمامروز';
+
+ @override
+ String scheduleItemCount(int count) {
+ final intl.NumberFormat countNumberFormat =
+ intl.NumberFormat.decimalPattern(localeName);
+ final String countString = countNumberFormat.format(count);
+
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$countString مورد',
+ one: 'یک مورد',
+ zero: 'هیچ موردی',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'این تقویم فقطخواندنی است.';
+
+ @override
+ String get selectTimeZone => 'انتخاب منطقهٔ زمانی';
+
+ @override
+ String get searchLocations => 'جستوجوی مکانها';
+
+ @override
+ String get noLocationsFound => 'مکانی پیدا نشد';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '«$title» حذف شود؟';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_fi.dart b/lib/l10n/generated/app_localizations_fi.dart
new file mode 100644
index 0000000..5f5a3ee
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_fi.dart
@@ -0,0 +1,1256 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Finnish (`fi`).
+class AppLocalizationsFi extends AppLocalizations {
+ AppLocalizationsFi([String locale = 'fi']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Yhdistä Google- ja Microsoft-tilit kalenterien ja tehtävien synkronointia varten.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Valitse Googlen käyttöoikeusnäkymässä sekä Kalenteri- että Tehtävät-käyttöoikeudet.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Google Kalenterin ja Google Tasksin käyttöoikeudet vaaditaan. Yritä uudelleen ja valitse molemmat valintaruudut.';
+
+ @override
+ String get finishSetup => 'Viimeistele määritys';
+
+ @override
+ String get continueSetup => 'Jatka';
+
+ @override
+ String get onboardingSetupTitle => 'Määritä BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Yhdistä tilit';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Lisää kaikki haluamasi Google- ja Microsoft-tilit. BusyMax synkronoi kunkin tilin kalenterit, tapahtumat, tehtäväluettelot ja tehtävät.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'Valitse järjestelmäasetukset';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Määritä sovelluksen toiminta työpöydällä, muistutukset, ilmoitusten yksityiskohtaisuus ja ulkoasu ennen aikataulun avaamista.';
+
+ @override
+ String get signInWithGoogle => 'Kirjaudu Google-tilillä';
+
+ @override
+ String get signInWithMicrosoft => 'Kirjaudu Microsoft-tilillä';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured =>
+ 'Tätä palveluntarjoajaa ei ole määritetty.';
+
+ @override
+ String get waitingForGoogleSignIn => 'Odotetaan Google-kirjautumista...';
+
+ @override
+ String get waitingForMicrosoftSignIn =>
+ 'Odotetaan Microsoft-kirjautumista...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Microsoft-kirjautumista ei ole määritetty. Aseta MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Peruuta';
+
+ @override
+ String get close => 'Sulje';
+
+ @override
+ String get exit => 'Lopeta';
+
+ @override
+ String get options => 'Valinnat';
+
+ @override
+ String get hide => 'Piilota';
+
+ @override
+ String get show => 'Näytä';
+
+ @override
+ String get export => 'Vie';
+
+ @override
+ String get save => 'Tallenna';
+
+ @override
+ String get settings => 'Asetukset';
+
+ @override
+ String get all => 'Kaikki';
+
+ @override
+ String get calendarEvents => 'Tapahtumat';
+
+ @override
+ String get calendarTasks => 'Tehtävät';
+
+ @override
+ String get calendar => 'Kalenteri';
+
+ @override
+ String get calendars => 'Kalenterit';
+
+ @override
+ String get newEvent => 'Uusi tapahtuma';
+
+ @override
+ String get refreshCalendar => 'Päivitä kalenteri';
+
+ @override
+ String get openInProvider => 'Avaa palvelussa';
+
+ @override
+ String get hideFromSchedule => 'Piilota aikataulusta';
+
+ @override
+ String get showInSchedule => 'Näytä aikataulussa';
+
+ @override
+ String get noCalendarsSynced => 'Kalentereita ei ole vielä synkronoitu.';
+
+ @override
+ String get allDay => 'Koko päivä';
+
+ @override
+ String moreItems(int count) {
+ return '+$count muuta';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Ei tapahtumia tai tehtäviä';
+
+ @override
+ String get scheduleLoading => 'Ladataan aikataulua...';
+
+ @override
+ String get scheduleUnavailable => 'Aikataulu ei ole käytettävissä';
+
+ @override
+ String get scheduleNoSources =>
+ 'Ei näkyviä kalentereita tai tehtäväluetteloita';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Valitse asetuksissa, mitä näytetään, ja päivitä sitten näkymä.';
+
+ @override
+ String get scheduleSignInRequired => 'Yhdistä tili';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Kirjaudu sisään synkronoidaksesi kalenterit ja tehtävät.';
+
+ @override
+ String get scheduleNoSearchResults => 'Ei vastaavia tapahtumia tai tehtäviä';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Kokeile toista hakua tai tyhjennä nykyiset suodattimet.';
+
+ @override
+ String get refresh => 'Päivitä';
+
+ @override
+ String get trayOpenBusyMax => 'Avaa BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Lataa lisää myöhässä olevia tehtäviä';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Lataa lisää päiväämättömiä tehtäviä';
+
+ @override
+ String get viewDay => 'Päivä';
+
+ @override
+ String get viewWeek => 'Viikko';
+
+ @override
+ String get viewMonth => 'Kuukausi';
+
+ @override
+ String get viewYear => 'Vuosi';
+
+ @override
+ String get viewAgenda => 'Agenda';
+
+ @override
+ String get scheduleSettings => 'Aikataulu';
+
+ @override
+ String get scheduleDisplaySettings => 'Aikataulun näyttö';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'Päivä- ja viikkonäkymät näyttävät aluksi tämän aikavälin. Aikaisemmat ja myöhemmät kohteet laajentavat sitä tarvittaessa.';
+
+ @override
+ String get scheduleDayStartsAt => 'Päivä alkaa';
+
+ @override
+ String get scheduleDayEndsAt => 'Päivä päättyy';
+
+ @override
+ String get sourceCalendar => 'Kalenteri';
+
+ @override
+ String get sourceTaskList => 'Tehtäväluettelo';
+
+ @override
+ String get createChoiceTitle => 'Luo';
+
+ @override
+ String get createEventAtTime => 'Tapahtuma';
+
+ @override
+ String get createTaskAtDate => 'Tehtävä';
+
+ @override
+ String get editEvent => 'Muokkaa tapahtumaa';
+
+ @override
+ String get eventTitle => 'Tapahtuman nimi';
+
+ @override
+ String get location => 'Sijainti';
+
+ @override
+ String get timeSlot => 'Ajankohta';
+
+ @override
+ String get startDateTime => 'Alkamispäivä ja -aika';
+
+ @override
+ String get endDateTime => 'Päättymispäivä ja -aika';
+
+ @override
+ String get doesNotRepeat => 'Ei toistu';
+
+ @override
+ String get defaultReminder => 'Oletusmuistutus';
+
+ @override
+ String get guests => 'Vieraat';
+
+ @override
+ String get noGuests => 'Ei vieraita';
+
+ @override
+ String get description => 'Kuvaus';
+
+ @override
+ String get availabilityShowAs => 'Saatavuus / Näytä tilana';
+
+ @override
+ String get busy => 'Varattu';
+
+ @override
+ String get visibility => 'Näkyvyys';
+
+ @override
+ String get defaultVisibility => 'Oletusnäkyvyys';
+
+ @override
+ String get conference => 'Verkkokokous';
+
+ @override
+ String get noConference => 'Ei verkkokokousta';
+
+ @override
+ String get providerCalendar => 'Palveluntarjoajan kalenteri';
+
+ @override
+ String get formatBoldShortLabel => 'L';
+
+ @override
+ String get formatBoldTooltip => 'Lihavointi';
+
+ @override
+ String get formatItalicShortLabel => 'K';
+
+ @override
+ String get formatItalicTooltip => 'Kursivointi';
+
+ @override
+ String get formatUnderlineShortLabel => 'A';
+
+ @override
+ String get formatUnderlineTooltip => 'Alleviivaus';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minuuttia ennen',
+ one: '1 minuutti ennen',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'Alkamishetkellä';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours tuntia ennen',
+ one: '1 tunti ennen',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days päivää ennen',
+ one: '1 päivä ennen',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Vapaa';
+
+ @override
+ String get availabilityTentative => 'Alustava';
+
+ @override
+ String get availabilityOutOfOffice => 'Poissa toimistolta';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Työskentelee muualla';
+
+ @override
+ String get visibilityDefault => 'Oletus';
+
+ @override
+ String get visibilityPublic => 'Julkinen';
+
+ @override
+ String get visibilityPrivate => 'Yksityinen';
+
+ @override
+ String get visibilityConfidential => 'Luottamuksellinen';
+
+ @override
+ String get sensitivityNormal => 'Normaali';
+
+ @override
+ String get sensitivityPersonal => 'Henkilökohtainen';
+
+ @override
+ String get tasks => 'Tehtävät';
+
+ @override
+ String get allTasks => 'Kaikki tehtävät';
+
+ @override
+ String tasksInList(String title) {
+ return 'Luettelon $title tehtävät';
+ }
+
+ @override
+ String get taskLists => 'Tehtäväluettelot';
+
+ @override
+ String get navigation => 'Siirtyminen';
+
+ @override
+ String get mainMenu => 'Päävalikko';
+
+ @override
+ String get keyboardShortcuts => 'Pikanäppäimet';
+
+ @override
+ String get shortcutGroupGeneral => 'Yleiset';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Näytä tämä pikanäppäinluettelo';
+
+ @override
+ String get shortcutGroupNavigation => 'Siirtyminen';
+
+ @override
+ String get shortcutNextPeriod => 'Seuraava ajanjakso';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Seuraava viikko viikkonäkymässä, seuraava kuukausi kuukausinäkymässä ja niin edelleen';
+
+ @override
+ String get shortcutPreviousPeriod => 'Edellinen ajanjakso';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Edellinen viikko viikkonäkymässä, edellinen kuukausi kuukausinäkymässä ja niin edelleen';
+
+ @override
+ String get shortcutJumpToToday => 'Siirry tähän päivään';
+
+ @override
+ String get shortcutGroupView => 'Näkymä';
+
+ @override
+ String get shortcutDayView => 'Päivänäkymä';
+
+ @override
+ String get shortcutWeekView => 'Viikkonäkymä';
+
+ @override
+ String get shortcutMonthView => 'Kuukausinäkymä';
+
+ @override
+ String get shortcutYearView => 'Vuosinäkymä';
+
+ @override
+ String get shortcutAgendaView => 'Agendanäkymä';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Luominen ja muokkaaminen';
+
+ @override
+ String get shortcutSaveItem => 'Tallenna tapahtuma tai tehtävä';
+
+ @override
+ String get shortcutDeleteItem => 'Poista tapahtuma tai tehtävä';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Tehtävien muokkaaminen';
+
+ @override
+ String get shortcutCancelEditing => 'Peruuta muokkaaminen';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Sulje tehtävän muokkaus tai tehtävän tiedot';
+
+ @override
+ String get aboutBusyMax => 'Tietoja BusyMaxista';
+
+ @override
+ String get aboutBusyMaxDescription => 'Kalenteri ja tehtävät';
+
+ @override
+ String get license => 'Lisenssi';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Verkkosivusto';
+
+ @override
+ String get sourceCode => 'Lähdekoodi';
+
+ @override
+ String get reportAnIssue => 'Ilmoita ongelmasta';
+
+ @override
+ String get sendFeedback => 'Lähetä palautetta';
+
+ @override
+ String get feedbackSubmit => 'Lähetä';
+
+ @override
+ String get feedbackCategory => 'Luokka';
+
+ @override
+ String get feedbackSelectCategory => 'Valitse luokka';
+
+ @override
+ String get feedbackCategoryProblem => 'Ongelma tai virhe';
+
+ @override
+ String get feedbackCategoryFeature => 'Ominaisuuspyyntö';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'Tietosuojaan tai tietoturvaan liittyvä huoli';
+
+ @override
+ String get feedbackCategoryUsability => 'Käytettävyyshuoli';
+
+ @override
+ String get feedbackCategoryOther => 'Muu';
+
+ @override
+ String get feedbackSubject => 'Aihe';
+
+ @override
+ String get feedbackDetailedMessage => 'Yksityiskohtainen viesti';
+
+ @override
+ String get feedbackReplyEmail =>
+ 'Sähköpostiosoite vastausta varten (valinnainen)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Sisällytä tekniset tiedot';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Lisää vain Linux-käyttöjärjestelmäsi version ja sovelluksen alueasetuksen. Lokeja, tilitietoja, tiedostonimiä tai muita diagnostiikkatietoja ei lisätä.';
+
+ @override
+ String get feedbackCategoryRequired => 'Valitse luokka.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'Aiheen pituuden on oltava 3–120 merkkiä.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'Viestin pituuden on oltava 10–5 000 merkkiä.';
+
+ @override
+ String get feedbackInvalidEmail => 'Anna kelvollinen sähköpostiosoite.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'BusyStackiin ei saatu yhteyttä. Tarkista yhteys ja yritä uudelleen.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'Pyyntö aikakatkaistiin. Palautettasi ei ole tyhjennetty. Yritä uudelleen.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Tästä verkosta on lähetetty liian monta palautetta. Odota ja yritä uudelleen.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'Palvelin hylkäsi lähetyksen. Tarkista kentät ja yritä uudelleen.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack ei voi vastaanottaa palautettasi juuri nyt. Palautettasi ei ole tyhjennetty. Yritä uudelleen.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Palaute lähetetty. Viite: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Näytä tai piilota sivupalkki';
+
+ @override
+ String get showSidebar => 'Näytä sivupaneeli';
+
+ @override
+ String get hideSidebar => 'Piilota sivupaneeli';
+
+ @override
+ String get accounts => 'Tilit';
+
+ @override
+ String get currentAccount => 'Nykyinen tili';
+
+ @override
+ String get switchAccount => 'Vaihda tiliä';
+
+ @override
+ String get addGoogleAccount => 'Lisää Google-tili';
+
+ @override
+ String get addMicrosoftAccount => 'Lisää Microsoft-tili';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Kirjautunut';
+
+ @override
+ String get removeAccount => 'Poista tili…';
+
+ @override
+ String get removingAccount => 'Poistetaan tiliä…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Lopeta synkronointi ja poista tämän tilin tiedot tältä laitteelta.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Poistetaanko $account BusyMaxista?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'Tämä poistaa välimuistissa olevat tehtävät, kalenterit, tapahtumat, muistutukset ja odottavat offline-muutokset tältä laitteelta. Synkronoimattomat muutokset menetetään. Mitään ei poisteta Googlesta tai Microsoftista.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Peruuta myös BusyMaxin käyttöoikeus tähän Google-tiliin';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Käyttöoikeus on myönnettävä uudelleen ennen tilin yhdistämistä.';
+
+ @override
+ String get removeAccountAction => 'Poista tili';
+
+ @override
+ String get removeAccountFailed =>
+ 'Tilin poistamista ei voitu viimeistellä. Yritä uudelleen.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Tili poistettiin tältä laitteelta, mutta BusyMax ei voinut peruuttaa Google-käyttöoikeutta. Voit peruuttaa sen Google-tililtäsi.';
+
+ @override
+ String get newList => 'Uusi luettelo';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'Kirjaudu sisään nähdäksesi tehtäväluettelot.';
+
+ @override
+ String get noTaskListsSynced =>
+ 'Tehtäväluetteloita ei ole vielä synkronoitu.';
+
+ @override
+ String get listActions => 'Luettelon toiminnot';
+
+ @override
+ String get rename => 'Nimeä uudelleen';
+
+ @override
+ String get delete => 'Poista';
+
+ @override
+ String get renameList => 'Nimeä luettelo uudelleen';
+
+ @override
+ String get deleteList => 'Poista luettelo';
+
+ @override
+ String get builtInMicrosoftList => 'Sisäänrakennettu';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Microsoft To Do -sovelluksen sisäänrakennettuja luetteloita ei voi nimetä uudelleen tai poistaa.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Poistetaanko \"$title\" Google Tasksista?';
+ }
+
+ @override
+ String get deleteEvent => 'Poista tapahtuma';
+
+ @override
+ String get title => 'Nimi';
+
+ @override
+ String get create => 'Luo';
+
+ @override
+ String get newTask => 'Uusi tehtävä';
+
+ @override
+ String get clearCompleted => 'Tyhjennä valmiit';
+
+ @override
+ String get refreshList => 'Päivitä luettelo';
+
+ @override
+ String get refreshAll => 'Päivitä kaikki';
+
+ @override
+ String get listRefreshed => 'Luettelo päivitetty.';
+
+ @override
+ String get allTasksRefreshed => 'Kaikki tilit päivitetty.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Viety kohteeseen $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Vienti epäonnistui: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Päivitys epäonnistui: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Valitse tai luo tehtäväluettelo aloittaaksesi.';
+
+ @override
+ String get signInToViewTasks => 'Kirjaudu sisään nähdäksesi tehtävät.';
+
+ @override
+ String get noTasks => 'Ei tehtäviä.';
+
+ @override
+ String get noTasksYet => 'Ei vielä tehtäviä';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Luo tehtävä tai päivitä tilisi aloittaaksesi.';
+
+ @override
+ String get noTasksInList => 'Tässä luettelossa ei ole tehtäviä.';
+
+ @override
+ String get overdue => 'Myöhässä';
+
+ @override
+ String get today => 'Tänään';
+
+ @override
+ String get tomorrow => 'Huomenna';
+
+ @override
+ String get upcoming => 'Tulossa';
+
+ @override
+ String get noDate => 'Ei päivämäärää';
+
+ @override
+ String get completed => 'Valmiit';
+
+ @override
+ String duePrefix(String date) {
+ return 'Eräpäivä $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date klo $time';
+ }
+
+ @override
+ String get taskDetails => 'Tehtävän tiedot';
+
+ @override
+ String get editTask => 'Muokkaa tehtävää';
+
+ @override
+ String get noTaskSelected => 'Tehtävää ei ole valittu.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Valitse tehtävä nähdäksesi ja muokataksesi sen tietoja.';
+
+ @override
+ String get taskUnavailable => 'Tehtävä ei ole käytettävissä.';
+
+ @override
+ String get signInToEditTasks => 'Kirjaudu sisään muokataksesi tehtäviä.';
+
+ @override
+ String get refreshTask => 'Päivitä tehtävä';
+
+ @override
+ String get primarySection => 'Ensisijaiset tiedot';
+
+ @override
+ String get statusSection => 'Tila';
+
+ @override
+ String get openStatus => 'Avoin';
+
+ @override
+ String get doneStatus => 'Valmis';
+
+ @override
+ String get notes => 'Muistiinpanot';
+
+ @override
+ String get dueDate => 'Eräpäivä';
+
+ @override
+ String get clearDueDate => 'Tyhjennä eräpäivä';
+
+ @override
+ String get dueTime => 'Erääntymisaika';
+
+ @override
+ String get startDate => 'Alkamispäivä';
+
+ @override
+ String get startTime => 'Alkamisaika';
+
+ @override
+ String get endDate => 'Päättymispäivä';
+
+ @override
+ String get endTime => 'Päättymisaika';
+
+ @override
+ String get reminderDate => 'Muistutuspäivä';
+
+ @override
+ String get reminderTime => 'Muistutusaika';
+
+ @override
+ String get reminder => 'Muistutus';
+
+ @override
+ String get addReminder => 'Lisää muistutus';
+
+ @override
+ String get addGuest => 'Lisää vieras';
+
+ @override
+ String get addGuestEmail => 'Lisää vieraan sähköpostiosoite';
+
+ @override
+ String get removeReminder => 'Poista muistutus';
+
+ @override
+ String get off => 'Ei käytössä';
+
+ @override
+ String get repeat => 'Toisto';
+
+ @override
+ String get repeatNone => 'Ei toistoa';
+
+ @override
+ String get noneValue => 'Ei mitään';
+
+ @override
+ String get repeatDaily => 'Päivittäin';
+
+ @override
+ String get repeatWeekly => 'Viikoittain';
+
+ @override
+ String get repeatMonthly => 'Kuukausittain';
+
+ @override
+ String get repeatYearly => 'Vuosittain';
+
+ @override
+ String get importance => 'Tärkeys';
+
+ @override
+ String get importanceLow => 'Pieni';
+
+ @override
+ String get importanceNormal => 'Normaali';
+
+ @override
+ String get importanceHigh => 'Suuri';
+
+ @override
+ String get categories => 'Luokat';
+
+ @override
+ String get scheduleSection => 'Aikataulu';
+
+ @override
+ String get dueGroup => 'Eräpäivä';
+
+ @override
+ String get startGroup => 'Alku';
+
+ @override
+ String get reminderGroup => 'Muistutus';
+
+ @override
+ String get organizationSection => 'Järjestely';
+
+ @override
+ String get actionsSection => 'Toiminnot';
+
+ @override
+ String get advancedSection => 'Lisäasetukset';
+
+ @override
+ String get addCategory => 'Lisää luokka';
+
+ @override
+ String get list => 'Luettelo';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'Luettelosta toiseen siirtämistä ei tueta Microsoft To Do -tileillä tässä versiossa.';
+
+ @override
+ String get createSubtask => 'Luo alitehtävä';
+
+ @override
+ String get moveToTop => 'Siirrä ylimmäksi';
+
+ @override
+ String get deleteTask => 'Poista tehtävä';
+
+ @override
+ String get newSubtask => 'Uusi alitehtävä';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Poistetaanko \"$title\" Google Tasksista?';
+ }
+
+ @override
+ String get metadata => 'Metatiedot';
+
+ @override
+ String get id => 'Tunnus';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Päivitetty';
+
+ @override
+ String get parent => 'Ylätehtävä';
+
+ @override
+ String get position => 'Sijainti';
+
+ @override
+ String get webLink => 'Verkkolinkki';
+
+ @override
+ String get assignment => 'Määritys';
+
+ @override
+ String get localState => 'Paikallinen tila';
+
+ @override
+ String get pendingSync => 'Odottaa synkronointia';
+
+ @override
+ String get synced => 'Synkronoitu';
+
+ @override
+ String get account => 'Tili';
+
+ @override
+ String get sync => 'Synkronointi';
+
+ @override
+ String get manualFullSync => 'Manuaalinen täysi synkronointi';
+
+ @override
+ String get runInBackgroundWhenClosed =>
+ 'Jatka toimintaa, kun ikkuna suljetaan';
+
+ @override
+ String get showTrayIcon => 'Näytä ilmoitusalueen kuvake';
+
+ @override
+ String get startMinimizedToTray => 'Käynnistä pienennettynä ilmoitusalueelle';
+
+ @override
+ String get requiresTrayIcon => 'Vaatii ilmoitusalueen kuvakkeen.';
+
+ @override
+ String get syncComplete => 'Synkronointi valmis.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Synkronointi epäonnistui: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'Ilmoita synkronointivirheistä';
+
+ @override
+ String get notifyConflicts => 'Ilmoita ristiriidoista';
+
+ @override
+ String get notifyDueToday => 'Ilmoita tänään erääntyvistä';
+
+ @override
+ String get eventReminders => 'Tapahtumamuistutukset';
+
+ @override
+ String get taskReminders => 'Tehtävämuistutukset';
+
+ @override
+ String get notificationDetailLevel => 'Ilmoitusten yksityiskohtaisuus';
+
+ @override
+ String get notificationDetailPrivate => 'Yksityinen';
+
+ @override
+ String get notificationDetailNormal => 'Normaali';
+
+ @override
+ String get quietHours => 'Hiljainen aika';
+
+ @override
+ String get quietHoursDescription =>
+ 'Keskeytä ilmoitukset tällä ajanjaksolla.';
+
+ @override
+ String get quietHoursStart => 'Hiljaisen ajan alku';
+
+ @override
+ String get quietHoursEnd => 'Hiljaisen ajan loppu';
+
+ @override
+ String get notifications => 'Ilmoitukset';
+
+ @override
+ String get appearance => 'Ulkoasu';
+
+ @override
+ String get theme => 'Teema';
+
+ @override
+ String get themeSystem => 'Järjestelmä';
+
+ @override
+ String get themeLight => 'Vaalea';
+
+ @override
+ String get themeDark => 'Tumma';
+
+ @override
+ String get themeFamily => 'Teemaperhe';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntun oma (Yaru)';
+
+ @override
+ String get localization => 'Lokalisointi';
+
+ @override
+ String get currentLocale => 'Nykyinen alueasetus';
+
+ @override
+ String get privacy => 'Tietosuoja';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Peitä tehtävien sisältö diagnostiikassa';
+
+ @override
+ String get developerDiagnostics => 'Kehittäjän diagnostiikka';
+
+ @override
+ String get diagnostics => 'Diagnostiikka';
+
+ @override
+ String get apiInspectorDisabled => 'Näytä API-tarkastaja';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery-versio: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Toteutetut metodit';
+
+ @override
+ String get supportsTasksScopes =>
+ 'Tukee tasks- ja tasks.readonly-käyttöoikeusalueita';
+
+ @override
+ String get requiresTasksScope => 'Vaatii tasks-käyttöoikeusalueen';
+
+ @override
+ String get blockedPendingOperations => 'Estetyt odottavat toiminnot';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Kirjaudu sisään tarkastellaksesi odottavia toimintoja.';
+
+ @override
+ String get noBlockedPendingOperations => 'Ei estettyjä odottavia toimintoja.';
+
+ @override
+ String get operationActions => 'Toiminnot';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'luettelo=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'tehtävä=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'yritykset=$count';
+ }
+
+ @override
+ String get retry => 'Yritä uudelleen';
+
+ @override
+ String get discard => 'Hylkää';
+
+ @override
+ String get discardChangesAction => 'Hylkää';
+
+ @override
+ String get discardChanges => 'Hylätäänkö muutokset?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'Tämä hylkää tehtävän tallentamattomat muutokset.';
+
+ @override
+ String get retryCompleted => 'Uudelleenyritys suoritettu.';
+
+ @override
+ String get discardPendingOperation => 'Hylätäänkö odottava toiminto?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'Tämä poistaa estetyn paikallisen toiminnon. Seuraava synkronointi päivittää tiedot Google Tasksista.';
+
+ @override
+ String get pendingOperationDiscarded => 'Odottava toiminto hylätty.';
+
+ @override
+ String get syncFailureNotificationTitle =>
+ 'BusyMaxin synkronointi epäonnistui';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'Taustasynkronointi epäonnistui. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMaxin synkronointiristiriita';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Odottava paikallinen muutos estettiin. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Tänään erääntyvät tehtävät';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count tehtävää erääntyy tänään.',
+ one: 'Yksi tehtävä erääntyy tänään.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Tapahtumamuistutus';
+
+ @override
+ String get taskReminderNotificationTitle => 'Tehtävämuistutus';
+
+ @override
+ String get eventReminderNotificationBody => 'Tapahtuma alkaa pian.';
+
+ @override
+ String get taskReminderNotificationBody => 'Tehtävän määräaika lähestyy.';
+
+ @override
+ String get notificationOpenAction => 'Avaa';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'Yksityiskohdat on piilotettu tietosuoja-asetusten vuoksi.';
+
+ @override
+ String get previousMonth => 'Edellinen kuukausi';
+
+ @override
+ String get nextMonth => 'Seuraava kuukausi';
+
+ @override
+ String get openMonthView => 'Avaa kuukausinäkymä';
+
+ @override
+ String get previousYear => 'Edellinen vuosi';
+
+ @override
+ String get nextYear => 'Seuraava vuosi';
+
+ @override
+ String get openYearView => 'Avaa vuosinäkymä';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Viikko $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Muuta koko päivän paneelin kokoa';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count kohdetta',
+ one: '1 kohde',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Tämä kalenteri on kirjoitussuojattu.';
+
+ @override
+ String get selectTimeZone => 'Valitse aikavyöhyke';
+
+ @override
+ String get searchLocations => 'Hae sijainteja';
+
+ @override
+ String get noLocationsFound => 'Sijainteja ei löytynyt';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Poistetaanko \"$title\"?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart
index 302b989..17b96a0 100644
--- a/lib/l10n/generated/app_localizations_fr.dart
+++ b/lib/l10n/generated/app_localizations_fr.dart
@@ -1,3 +1,7 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -44,7 +48,7 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get onboardingPreferencesStepDescription =>
- 'Réglez le comportement du bureau, les rappels, le détail des notifications et l’apparence avant d’ouvrir votre planning.';
+ 'Réglez le comportement de l’application sur le bureau, les rappels, le niveau de détail des notifications et l’apparence avant d’ouvrir votre planning.';
@override
String get signInWithGoogle => 'Se connecter avec Google';
@@ -121,7 +125,7 @@ class AppLocalizationsFr extends AppLocalizations {
String get refreshCalendar => 'Actualiser le calendrier';
@override
- String get openInProvider => 'Ouvrir chez le fournisseur';
+ String get openInProvider => 'Ouvrir dans le service';
@override
String get hideFromSchedule => 'Masquer du planning';
@@ -144,68 +148,38 @@ class AppLocalizationsFr extends AppLocalizations {
String get noEventsOrTasks => 'Aucun événement ni tâche';
@override
- String get trayAgendaLoading => 'Chargement de l’agenda...';
-
- @override
- String get trayAgendaSignInRequired =>
- 'Connectez-vous pour afficher l’agenda.';
-
- @override
- String get trayAgendaNoSources =>
- 'Aucun calendrier ni liste de tâches visible.';
-
- @override
- String get trayAgendaOpenBusyMax => 'Ouvrir l’app';
-
- @override
- String get trayAgendaRefresh => 'Actualiser';
+ String get scheduleLoading => 'Chargement du planning...';
@override
- String get trayAgendaError => 'Agenda indisponible';
+ String get scheduleUnavailable => 'Planning indisponible';
@override
- String get compactAgendaTitle => 'Agenda';
+ String get scheduleNoSources => 'Aucun calendrier ni liste de tâches visible';
@override
- String get compactAgendaSubtitle => 'À venir';
+ String get scheduleNoSourcesDescription =>
+ 'Choisissez les éléments à afficher dans les paramètres, puis actualisez.';
@override
- String get compactAgendaOverdue => 'En retard';
+ String get scheduleSignInRequired => 'Connecter un compte';
@override
- String get compactAgendaClear => 'Libre pour le moment';
+ String get scheduleSignInDescription =>
+ 'Connectez-vous pour synchroniser vos calendriers et vos tâches.';
@override
- String get compactAgendaOpenBusyMax => 'Ouvrir BusyMax';
+ String get scheduleNoSearchResults =>
+ 'Aucun événement ni aucune tâche ne correspond';
@override
- String get compactAgendaHide => 'Masquer';
+ String get scheduleNoSearchResultsDescription =>
+ 'Essayez une autre recherche ou effacez les filtres actuels.';
@override
- String get compactAgendaNewTask => 'Nouvelle tâche';
-
- @override
- String get compactAgendaRetry => 'Réessayer';
-
- @override
- String get compactAgendaRefresh => 'Actualiser';
-
- @override
- String get compactAgendaAllDay => 'Toute la journée';
-
- @override
- String get compactAgendaDueToday => 'Échéance aujourd’hui';
-
- @override
- String get compactAgendaDueTomorrow => 'Échéance demain';
-
- @override
- String compactAgendaDueOn(String date) {
- return 'Échéance $date';
- }
+ String get refresh => 'Actualiser';
@override
- String get compactAgendaMoreOverdue => 'Charger plus de tâches en retard';
+ String get trayOpenBusyMax => 'Ouvrir BusyMax';
@override
String get agendaLoadMoreOverdue => 'Charger plus de tâches en retard';
@@ -236,7 +210,7 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get scheduleDisplayHoursDescription =>
- 'Les vues Jour et Semaine s’ouvrent dans cette plage horaire. Les éléments tôt ou tardifs l’élargissent si nécessaire.';
+ 'Les vues Jour et Semaine s’ouvrent dans cette plage horaire. Les éléments situés avant ou après cette plage l’étendent si nécessaire.';
@override
String get scheduleDayStartsAt => 'La journée commence à';
@@ -313,6 +287,90 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get providerCalendar => 'Calendrier du fournisseur';
+ @override
+ String get formatBoldShortLabel => 'G';
+
+ @override
+ String get formatBoldTooltip => 'Gras';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'Italique';
+
+ @override
+ String get formatUnderlineShortLabel => 'S';
+
+ @override
+ String get formatUnderlineTooltip => 'Souligné';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minutes avant',
+ one: '1 minute avant',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'À l’heure de début';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours heures avant',
+ one: '1 heure avant',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days jours avant',
+ one: '1 jour avant',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Disponible';
+
+ @override
+ String get availabilityTentative => 'Provisoire';
+
+ @override
+ String get availabilityOutOfOffice => 'Absent du bureau';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Travail ailleurs';
+
+ @override
+ String get visibilityDefault => 'Par défaut';
+
+ @override
+ String get visibilityPublic => 'Publique';
+
+ @override
+ String get visibilityPrivate => 'Privée';
+
+ @override
+ String get visibilityConfidential => 'Confidentielle';
+
+ @override
+ String get sensitivityNormal => 'Normale';
+
+ @override
+ String get sensitivityPersonal => 'Personnelle';
+
@override
String get tasks => 'Tâches';
@@ -361,7 +419,7 @@ class AppLocalizationsFr extends AppLocalizations {
'Semaine précédente en vue semaine, mois précédent en vue mois, etc.';
@override
- String get shortcutJumpToToday => 'Aller à aujourd\'hui';
+ String get shortcutJumpToToday => 'Aller à la date du jour';
@override
String get shortcutGroupView => 'Affichage';
@@ -401,24 +459,22 @@ class AppLocalizationsFr extends AppLocalizations {
'Fermer la modification ou les détails de la tâche';
@override
- String get shortcutGroupCompactAgenda => 'Agenda compact';
+ String get aboutBusyMax => 'À propos de BusyMax';
@override
- String get shortcutRefreshCompactAgendaDescription =>
- 'Actualiser la fenêtre d\'agenda compact';
+ String get aboutBusyMaxDescription => 'Calendrier et tâches';
@override
- String get shortcutHideCompactAgendaDescription =>
- 'Masquer la fenêtre d\'agenda compact';
+ String get license => 'Licence';
@override
- String get aboutBusyMax => 'À propos de BusyMax';
+ String get apacheLicenseName => 'Apache License 2.0';
@override
- String get aboutBusyMaxDescription => 'ToDo et calendrier';
+ String get website => 'Site web';
@override
- String get website => 'Site web';
+ String get sourceCode => 'Code source';
@override
String get reportAnIssue => 'Signaler un problème';
@@ -510,6 +566,12 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get toggleSidebar => 'Afficher/masquer la barre latérale';
+ @override
+ String get showSidebar => 'Afficher le panneau latéral';
+
+ @override
+ String get hideSidebar => 'Masquer le panneau latéral';
+
@override
String get accounts => 'Comptes';
@@ -535,17 +597,42 @@ class AppLocalizationsFr extends AppLocalizations {
String get signedInAccount => 'Connecté';
@override
- String get signOutThisAccount => 'Déconnecter ce compte';
+ String get removeAccount => 'Supprimer le compte…';
@override
- String get revokeThisAccount => 'Révoquer ce compte';
+ String get removingAccount => 'Suppression du compte…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Arrêter la synchronisation et supprimer les données de ce compte de cet appareil.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Supprimer $account de BusyMax ?';
+ }
@override
- String get disconnectThisAccount => 'Dissocier ce compte';
+ String get removeAccountConfirmation =>
+ 'Cette action supprime de cet appareil les tâches, calendriers, événements, rappels et modifications hors ligne en attente mis en cache. Les modifications non synchronisées seront perdues. Aucune donnée ne sera supprimée de Google ou Microsoft.';
@override
- String get deleteLocalDataForThisAccount =>
- 'Supprimer les données locales de ce compte';
+ String get revokeGoogleAccess =>
+ 'Révoquer également l’accès de BusyMax à ce compte Google';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Vous devrez accorder à nouveau l’accès avant de reconnecter le compte.';
+
+ @override
+ String get removeAccountAction => 'Supprimer le compte';
+
+ @override
+ String get removeAccountFailed =>
+ 'Impossible de terminer la suppression du compte. Réessayez.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Le compte a été supprimé de cet appareil, mais BusyMax n’a pas pu révoquer son accès à votre compte Google. Vous pouvez révoquer cet accès depuis votre compte Google.';
@override
String get newList => 'Nouvelle liste';
@@ -597,7 +684,7 @@ class AppLocalizationsFr extends AppLocalizations {
String get newTask => 'Nouvelle tâche';
@override
- String get clearCompleted => 'Effacer les terminées';
+ String get clearCompleted => 'Effacer les tâches terminées';
@override
String get refreshList => 'Actualiser la liste';
@@ -628,7 +715,7 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get selectOrCreateTaskList =>
- 'Sélectionnez ou créez une liste de tâches.';
+ 'Sélectionnez ou créez une liste de tâches pour commencer.';
@override
String get signInToViewTasks => 'Connectez-vous pour voir les tâches.';
@@ -674,21 +761,6 @@ class AppLocalizationsFr extends AppLocalizations {
return '$date à $time';
}
- @override
- String get searchTasks => 'Rechercher des tâches';
-
- @override
- String get advancedFilters => 'Filtres avancés';
-
- @override
- String get showCompleted => 'Afficher les terminées';
-
- @override
- String get showHidden => 'Afficher les masquées';
-
- @override
- String get showAssigned => 'Afficher les assignées';
-
@override
String get taskDetails => 'Détails de la tâche';
@@ -842,7 +914,7 @@ class AppLocalizationsFr extends AppLocalizations {
String get createSubtask => 'Créer une sous-tâche';
@override
- String get moveToTop => 'Déplacer en haut';
+ String get moveToTop => 'Déplacer tout en haut';
@override
String get deleteTask => 'Supprimer la tâche';
@@ -868,7 +940,7 @@ class AppLocalizationsFr extends AppLocalizations {
String get updated => 'Mis à jour';
@override
- String get parent => 'Parent';
+ String get parent => 'Tâche parente';
@override
String get position => 'Position';
@@ -877,7 +949,7 @@ class AppLocalizationsFr extends AppLocalizations {
String get webLink => 'Lien web';
@override
- String get assignment => 'Assignation';
+ String get assignment => 'Attribution';
@override
String get localState => 'État local';
@@ -892,23 +964,25 @@ class AppLocalizationsFr extends AppLocalizations {
String get account => 'Compte';
@override
- String get signOut => 'Se déconnecter';
+ String get sync => 'Synchronisation';
@override
- String get revokeGoogleAuthorization => 'Révoquer l’autorisation Google';
+ String get manualFullSync => 'Synchronisation complète manuelle';
@override
- String get deleteLocalData => 'Supprimer les données locales';
+ String get runInBackgroundWhenClosed =>
+ 'Continuer à s’exécuter après la fermeture de la fenêtre';
@override
- String get deleteLocalDataConfirmation =>
- 'Cela supprime de cet appareil le compte local, les tâches synchronisées et les changements hors ligne en attente.';
+ String get showTrayIcon => 'Afficher l’icône dans la zone de notification';
@override
- String get sync => 'Synchronisation';
+ String get startMinimizedToTray =>
+ 'Démarrer réduit dans la zone de notification';
@override
- String get manualFullSync => 'Synchronisation complète manuelle';
+ String get requiresTrayIcon =>
+ 'Nécessite l’icône de la zone de notification.';
@override
String get syncComplete => 'Synchronisation terminée.';
@@ -927,6 +1001,34 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get notifyDueToday => 'Notifications des tâches dues aujourd’hui';
+ @override
+ String get eventReminders => 'Rappels d’événements';
+
+ @override
+ String get taskReminders => 'Rappels de tâches';
+
+ @override
+ String get notificationDetailLevel => 'Niveau de détail des notifications';
+
+ @override
+ String get notificationDetailPrivate => 'Privé';
+
+ @override
+ String get notificationDetailNormal => 'Normal';
+
+ @override
+ String get quietHours => 'Période de silence';
+
+ @override
+ String get quietHoursDescription =>
+ 'Mettre les notifications en pause pendant cette période.';
+
+ @override
+ String get quietHoursStart => 'Début de la période de silence';
+
+ @override
+ String get quietHoursEnd => 'Fin de la période de silence';
+
@override
String get notifications => 'Notifications';
@@ -946,10 +1048,10 @@ class AppLocalizationsFr extends AppLocalizations {
String get themeDark => 'Sombre';
@override
- String get themeFamily => 'Famille de thème';
+ String get themeFamily => 'Famille de thèmes';
@override
- String get themeFamilyYaru => 'Ubuntu natif (Yaru)';
+ String get themeFamilyYaru => 'Thème natif d’Ubuntu (Yaru)';
@override
String get localization => 'Localisation';
@@ -964,9 +1066,6 @@ class AppLocalizationsFr extends AppLocalizations {
String get redactTaskContentInDiagnostics =>
'Masquer le contenu des tâches dans les diagnostics';
- @override
- String get detailedNotifications => 'Texte de notification détaillé';
-
@override
String get developerDiagnostics => 'Diagnostics développeur';
@@ -1027,27 +1126,30 @@ class AppLocalizationsFr extends AppLocalizations {
String get retry => 'Réessayer';
@override
- String get discard => 'Ignorer';
+ String get discard => 'Abandonner';
@override
- String get discardChanges => 'Ignorer les modifications ?';
+ String get discardChangesAction => 'Abandonner';
+
+ @override
+ String get discardChanges => 'Abandonner les modifications ?';
@override
String get discardChangesConfirmation =>
- 'Cela ignore les modifications non enregistrées de cette tâche.';
+ 'Les modifications non enregistrées apportées à cette tâche seront perdues.';
@override
String get retryCompleted => 'Nouvelle tentative terminée.';
@override
- String get discardPendingOperation => 'Ignorer l’opération en attente ?';
+ String get discardPendingOperation => 'Abandonner l’opération en attente ?';
@override
String get discardPendingOperationConfirmation =>
- 'Cela supprime l’opération locale bloquée. La prochaine synchronisation actualisera depuis Google Tasks.';
+ 'Cette action supprime l’opération locale bloquée. Lors de la prochaine synchronisation, les données seront rechargées depuis Google Tasks.';
@override
- String get pendingOperationDiscarded => 'Opération en attente ignorée.';
+ String get pendingOperationDiscarded => 'Opération en attente abandonnée.';
@override
String get syncFailureNotificationTitle =>
@@ -1080,7 +1182,78 @@ class AppLocalizationsFr extends AppLocalizations {
return '$_temp0';
}
+ @override
+ String get eventReminderNotificationTitle => 'Rappel d’événement';
+
+ @override
+ String get taskReminderNotificationTitle => 'Rappel de tâche';
+
+ @override
+ String get eventReminderNotificationBody => 'L’événement commence bientôt.';
+
+ @override
+ String get taskReminderNotificationBody =>
+ 'La tâche arrive bientôt à échéance.';
+
+ @override
+ String get notificationOpenAction => 'Ouvrir';
+
@override
String get notificationDetailsHidden =>
'Les détails sont masqués par les paramètres de confidentialité.';
+
+ @override
+ String get previousMonth => 'Mois précédent';
+
+ @override
+ String get nextMonth => 'Mois suivant';
+
+ @override
+ String get openMonthView => 'Ouvrir la vue mensuelle';
+
+ @override
+ String get previousYear => 'Année précédente';
+
+ @override
+ String get nextYear => 'Année suivante';
+
+ @override
+ String get openYearView => 'Ouvrir la vue annuelle';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Semaine $number';
+ }
+
+ @override
+ String get resizeAllDayPanel =>
+ 'Redimensionner le volet des événements sur toute la journée';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count éléments',
+ one: '1 élément',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Ce calendrier est en lecture seule.';
+
+ @override
+ String get selectTimeZone => 'Sélectionner le fuseau horaire';
+
+ @override
+ String get searchLocations => 'Rechercher des lieux';
+
+ @override
+ String get noLocationsFound => 'Aucun lieu trouvé';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Supprimer « $title » ?';
+ }
}
diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart
new file mode 100644
index 0000000..71cb781
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_hi.dart
@@ -0,0 +1,1250 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Hindi (`hi`).
+class AppLocalizationsHi extends AppLocalizations {
+ AppLocalizationsHi([String locale = 'hi']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'कैलेंडर और कार्य सिंक करने के लिए Google और Microsoft खाते कनेक्ट करें।';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Google अनुमति स्क्रीन पर, कैलेंडर और कार्य दोनों अनुमतियाँ चुनें।';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Google Calendar और Google Tasks की अनुमतियाँ आवश्यक हैं। फिर से कोशिश करें और दोनों चेकबॉक्स चुनें।';
+
+ @override
+ String get finishSetup => 'सेटअप पूरा करें';
+
+ @override
+ String get continueSetup => 'जारी रखें';
+
+ @override
+ String get onboardingSetupTitle => 'BusyMax सेट अप करें';
+
+ @override
+ String get onboardingAccountsStepTitle => 'खाते कनेक्ट करें';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'वे सभी Google और Microsoft खाते जोड़ें जिन्हें आप उपयोग करना चाहते हैं। BusyMax प्रत्येक खाते के कैलेंडर, ईवेंट, कार्य सूचियाँ और कार्य सिंक करता है।';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'सिस्टम सेटिंग्स चुनें';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'अपना शेड्यूल खोलने से पहले डेस्कटॉप व्यवहार, रिमाइंडर, सूचनाओं के विवरण का स्तर और दिखावट सेट करें।';
+
+ @override
+ String get signInWithGoogle => 'Google से साइन इन करें';
+
+ @override
+ String get signInWithMicrosoft => 'Microsoft से साइन इन करें';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'यह प्रदाता कॉन्फ़िगर नहीं किया गया है।';
+
+ @override
+ String get waitingForGoogleSignIn =>
+ 'Google साइन-इन की प्रतीक्षा हो रही है...';
+
+ @override
+ String get waitingForMicrosoftSignIn =>
+ 'Microsoft साइन-इन की प्रतीक्षा हो रही है...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Microsoft साइन-इन कॉन्फ़िगर नहीं है। MICROSOFT_OAUTH_CLIENT_ID सेट करें।';
+
+ @override
+ String get cancel => 'रद्द करें';
+
+ @override
+ String get close => 'बंद करें';
+
+ @override
+ String get exit => 'बाहर निकलें';
+
+ @override
+ String get options => 'विकल्प';
+
+ @override
+ String get hide => 'छिपाएँ';
+
+ @override
+ String get show => 'दिखाएँ';
+
+ @override
+ String get export => 'निर्यात करें';
+
+ @override
+ String get save => 'सहेजें';
+
+ @override
+ String get settings => 'सेटिंग्स';
+
+ @override
+ String get all => 'सभी';
+
+ @override
+ String get calendarEvents => 'ईवेंट';
+
+ @override
+ String get calendarTasks => 'कार्य';
+
+ @override
+ String get calendar => 'कैलेंडर';
+
+ @override
+ String get calendars => 'कैलेंडर';
+
+ @override
+ String get newEvent => 'नया ईवेंट';
+
+ @override
+ String get refreshCalendar => 'कैलेंडर रीफ़्रेश करें';
+
+ @override
+ String get openInProvider => 'सेवा में खोलें';
+
+ @override
+ String get hideFromSchedule => 'शेड्यूल से छिपाएँ';
+
+ @override
+ String get showInSchedule => 'शेड्यूल में दिखाएँ';
+
+ @override
+ String get noCalendarsSynced => 'अभी तक कोई कैलेंडर सिंक नहीं हुआ है।';
+
+ @override
+ String get allDay => 'पूरे दिन';
+
+ @override
+ String moreItems(int count) {
+ return '+$count और';
+ }
+
+ @override
+ String get noEventsOrTasks => 'कोई ईवेंट या कार्य नहीं';
+
+ @override
+ String get scheduleLoading => 'शेड्यूल लोड हो रहा है...';
+
+ @override
+ String get scheduleUnavailable => 'शेड्यूल उपलब्ध नहीं है';
+
+ @override
+ String get scheduleNoSources =>
+ 'कोई दिखाई देने वाला कैलेंडर या कार्य सूची नहीं';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'सेटिंग्स में चुनें कि क्या दिखाना है, फिर रीफ़्रेश करें।';
+
+ @override
+ String get scheduleSignInRequired => 'खाता कनेक्ट करें';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'कैलेंडर और कार्य सिंक करने के लिए साइन इन करें।';
+
+ @override
+ String get scheduleNoSearchResults => 'कोई मिलता-जुलता ईवेंट या कार्य नहीं';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'कोई दूसरी खोज आज़माएँ या मौजूदा फ़िल्टर हटाएँ।';
+
+ @override
+ String get refresh => 'रीफ़्रेश करें';
+
+ @override
+ String get trayOpenBusyMax => 'BusyMax खोलें';
+
+ @override
+ String get agendaLoadMoreOverdue =>
+ 'समय-सीमा पार कर चुके अतिरिक्त कार्य लोड करें';
+
+ @override
+ String get agendaLoadMoreNoDate => 'बिना तारीख वाले और कार्य लोड करें';
+
+ @override
+ String get viewDay => 'दिन';
+
+ @override
+ String get viewWeek => 'सप्ताह';
+
+ @override
+ String get viewMonth => 'महीना';
+
+ @override
+ String get viewYear => 'वर्ष';
+
+ @override
+ String get viewAgenda => 'कार्यसूची';
+
+ @override
+ String get scheduleSettings => 'शेड्यूल';
+
+ @override
+ String get scheduleDisplaySettings => 'शेड्यूल प्रदर्शन';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'दिन और सप्ताह दृश्य शुरू में यह समयावधि दिखाते हैं। आवश्यकता होने पर पहले या बाद के आइटम इस सीमा को बढ़ाते हैं।';
+
+ @override
+ String get scheduleDayStartsAt => 'दिन शुरू होता है';
+
+ @override
+ String get scheduleDayEndsAt => 'दिन समाप्त होता है';
+
+ @override
+ String get sourceCalendar => 'कैलेंडर';
+
+ @override
+ String get sourceTaskList => 'कार्य सूची';
+
+ @override
+ String get createChoiceTitle => 'बनाएँ';
+
+ @override
+ String get createEventAtTime => 'ईवेंट';
+
+ @override
+ String get createTaskAtDate => 'कार्य';
+
+ @override
+ String get editEvent => 'ईवेंट संपादित करें';
+
+ @override
+ String get eventTitle => 'ईवेंट का शीर्षक';
+
+ @override
+ String get location => 'स्थान';
+
+ @override
+ String get timeSlot => 'समयावधि';
+
+ @override
+ String get startDateTime => 'शुरू होने की तारीख/समय';
+
+ @override
+ String get endDateTime => 'समाप्त होने की तारीख/समय';
+
+ @override
+ String get doesNotRepeat => 'दोहराया नहीं जाता';
+
+ @override
+ String get defaultReminder => 'डिफ़ॉल्ट रिमाइंडर';
+
+ @override
+ String get guests => 'अतिथि';
+
+ @override
+ String get noGuests => 'कोई अतिथि नहीं';
+
+ @override
+ String get description => 'विवरण';
+
+ @override
+ String get availabilityShowAs => 'उपलब्धता / इस रूप में दिखाएँ';
+
+ @override
+ String get busy => 'व्यस्त';
+
+ @override
+ String get visibility => 'दृश्यता';
+
+ @override
+ String get defaultVisibility => 'डिफ़ॉल्ट दृश्यता';
+
+ @override
+ String get conference => 'कॉन्फ़्रेंस';
+
+ @override
+ String get noConference => 'कोई कॉन्फ़्रेंस नहीं';
+
+ @override
+ String get providerCalendar => 'प्रदाता कैलेंडर';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => 'बोल्ड';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'इटैलिक';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'रेखांकित';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes मिनट पहले',
+ one: '1 मिनट पहले',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'शुरू होने पर';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours घंटे पहले',
+ one: '1 घंटा पहले',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days दिन पहले',
+ one: '1 दिन पहले',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'खाली';
+
+ @override
+ String get availabilityTentative => 'अस्थायी';
+
+ @override
+ String get availabilityOutOfOffice => 'कार्यालय से बाहर';
+
+ @override
+ String get availabilityWorkingElsewhere => 'किसी अन्य स्थान पर कार्यरत';
+
+ @override
+ String get visibilityDefault => 'डिफ़ॉल्ट';
+
+ @override
+ String get visibilityPublic => 'सार्वजनिक';
+
+ @override
+ String get visibilityPrivate => 'निजी';
+
+ @override
+ String get visibilityConfidential => 'गोपनीय';
+
+ @override
+ String get sensitivityNormal => 'सामान्य';
+
+ @override
+ String get sensitivityPersonal => 'व्यक्तिगत';
+
+ @override
+ String get tasks => 'कार्य';
+
+ @override
+ String get allTasks => 'सभी कार्य';
+
+ @override
+ String tasksInList(String title) {
+ return '$title में कार्य';
+ }
+
+ @override
+ String get taskLists => 'कार्य सूचियाँ';
+
+ @override
+ String get navigation => 'नेविगेशन';
+
+ @override
+ String get mainMenu => 'मुख्य मेन्यू';
+
+ @override
+ String get keyboardShortcuts => 'कीबोर्ड शॉर्टकट';
+
+ @override
+ String get shortcutGroupGeneral => 'सामान्य';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => 'यह शॉर्टकट संदर्भ दिखाएँ';
+
+ @override
+ String get shortcutGroupNavigation => 'नेविगेशन';
+
+ @override
+ String get shortcutNextPeriod => 'अगली अवधि';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'सप्ताह दृश्य में अगला सप्ताह, महीने के दृश्य में अगला महीना, इत्यादि';
+
+ @override
+ String get shortcutPreviousPeriod => 'पिछली अवधि';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'सप्ताह दृश्य में पिछला सप्ताह, महीने के दृश्य में पिछला महीना, इत्यादि';
+
+ @override
+ String get shortcutJumpToToday => 'आज की तारीख पर जाएँ';
+
+ @override
+ String get shortcutGroupView => 'दृश्य';
+
+ @override
+ String get shortcutDayView => 'दिन का दृश्य';
+
+ @override
+ String get shortcutWeekView => 'सप्ताह का दृश्य';
+
+ @override
+ String get shortcutMonthView => 'महीने का दृश्य';
+
+ @override
+ String get shortcutYearView => 'वर्ष का दृश्य';
+
+ @override
+ String get shortcutAgendaView => 'कार्यसूची दृश्य';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'बनाएँ और संपादित करें';
+
+ @override
+ String get shortcutSaveItem => 'ईवेंट या कार्य सहेजें';
+
+ @override
+ String get shortcutDeleteItem => 'ईवेंट या कार्य मिटाएँ';
+
+ @override
+ String get shortcutGroupTaskEditing => 'कार्य संपादन';
+
+ @override
+ String get shortcutCancelEditing => 'संपादन रद्द करें';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'कार्य संपादन या कार्य विवरण बंद करें';
+
+ @override
+ String get aboutBusyMax => 'BusyMax के बारे में';
+
+ @override
+ String get aboutBusyMaxDescription => 'कैलेंडर और कार्य';
+
+ @override
+ String get license => 'लाइसेंस';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'वेबसाइट';
+
+ @override
+ String get sourceCode => 'स्रोत कोड';
+
+ @override
+ String get reportAnIssue => 'समस्या की रिपोर्ट करें';
+
+ @override
+ String get sendFeedback => 'प्रतिक्रिया भेजें';
+
+ @override
+ String get feedbackSubmit => 'सबमिट करें';
+
+ @override
+ String get feedbackCategory => 'श्रेणी';
+
+ @override
+ String get feedbackSelectCategory => 'श्रेणी चुनें';
+
+ @override
+ String get feedbackCategoryProblem => 'समस्या या बग';
+
+ @override
+ String get feedbackCategoryFeature => 'सुविधा का अनुरोध';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'गोपनीयता या सुरक्षा संबंधी चिंता';
+
+ @override
+ String get feedbackCategoryUsability => 'उपयोगिता संबंधी चिंता';
+
+ @override
+ String get feedbackCategoryOther => 'अन्य';
+
+ @override
+ String get feedbackSubject => 'विषय';
+
+ @override
+ String get feedbackDetailedMessage => 'विस्तृत संदेश';
+
+ @override
+ String get feedbackReplyEmail => 'जवाब के लिए ईमेल (वैकल्पिक)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'तकनीकी विवरण शामिल करें';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'केवल आपके Linux ऑपरेटिंग सिस्टम का संस्करण और ऐप की भाषा व क्षेत्रीय सेटिंग जोड़ी जाती है। लॉग, खाता डेटा, फ़ाइल नाम या अन्य निदान जानकारी शामिल नहीं की जाती।';
+
+ @override
+ String get feedbackCategoryRequired => 'श्रेणी चुनें।';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'विषय 3 से 120 वर्णों के बीच होना चाहिए।';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'संदेश 10 से 5,000 वर्णों के बीच होना चाहिए।';
+
+ @override
+ String get feedbackInvalidEmail => 'मान्य ईमेल पता दर्ज करें।';
+
+ @override
+ String get feedbackConnectionError =>
+ 'BusyStack से कनेक्ट नहीं हो सका। अपना कनेक्शन जाँचें और फिर कोशिश करें।';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'अनुरोध का समय समाप्त हो गया। आपकी प्रतिक्रिया हटाई नहीं गई है; फिर से कोशिश करें।';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'इस नेटवर्क से बहुत अधिक प्रतिक्रियाएँ भेजी गई हैं। प्रतीक्षा करें और फिर कोशिश करें।';
+
+ @override
+ String get feedbackRejectedError =>
+ 'सर्वर ने सबमिशन अस्वीकार कर दिया। फ़ील्ड की समीक्षा करें और फिर कोशिश करें।';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack अभी आपकी प्रतिक्रिया स्वीकार नहीं कर सका। आपकी प्रतिक्रिया हटाई नहीं गई है; फिर से कोशिश करें।';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'प्रतिक्रिया भेज दी गई। संदर्भ: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'साइडबार दिखाएँ या छिपाएँ';
+
+ @override
+ String get showSidebar => 'साइडबार पैनल दिखाएँ';
+
+ @override
+ String get hideSidebar => 'साइडबार पैनल छिपाएँ';
+
+ @override
+ String get accounts => 'खाते';
+
+ @override
+ String get currentAccount => 'मौजूदा खाता';
+
+ @override
+ String get switchAccount => 'खाता बदलें';
+
+ @override
+ String get addGoogleAccount => 'Google खाता जोड़ें';
+
+ @override
+ String get addMicrosoftAccount => 'Microsoft खाता जोड़ें';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'साइन इन है';
+
+ @override
+ String get removeAccount => 'खाता हटाएँ…';
+
+ @override
+ String get removingAccount => 'खाता हटाया जा रहा है…';
+
+ @override
+ String get removeAccountDescription =>
+ 'सिंक करना बंद करें और इस डिवाइस से इस खाते का डेटा हटाएँ।';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'BusyMax से $account हटाएँ?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'इससे कैश किए गए कार्य, कैलेंडर, ईवेंट, रिमाइंडर और लंबित ऑफ़लाइन बदलाव इस डिवाइस से मिट जाएँगे। सिंक न किए गए बदलाव खो जाएँगे। Google या Microsoft से कुछ भी नहीं मिटेगा।';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'इस Google खाते से BusyMax की पहुँच भी रद्द करें';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'दोबारा कनेक्ट करने से पहले आपको फिर से पहुँच देनी होगी।';
+
+ @override
+ String get removeAccountAction => 'खाता हटाएँ';
+
+ @override
+ String get removeAccountFailed =>
+ 'खाता हटाना पूरा नहीं हो सका। फिर से कोशिश करें।';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'खाता इस डिवाइस से हटा दिया गया, लेकिन BusyMax की Google खाते तक पहुँच रद्द नहीं की जा सकी। आप यह पहुँच अपने Google खाते से रद्द कर सकते हैं।';
+
+ @override
+ String get newList => 'नई सूची';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'कार्य सूचियाँ देखने के लिए साइन इन करें।';
+
+ @override
+ String get noTaskListsSynced => 'अभी तक कोई कार्य सूची सिंक नहीं हुई है।';
+
+ @override
+ String get listActions => 'सूची की कार्रवाइयाँ';
+
+ @override
+ String get rename => 'नाम बदलें';
+
+ @override
+ String get delete => 'मिटाएँ';
+
+ @override
+ String get renameList => 'सूची का नाम बदलें';
+
+ @override
+ String get deleteList => 'सूची मिटाएँ';
+
+ @override
+ String get builtInMicrosoftList => 'अंतर्निहित';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Microsoft To Do की अंतर्निहित सूचियों का नाम बदला या उन्हें मिटाया नहीं जा सकता।';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Google Tasks से “$title” मिटाएँ?';
+ }
+
+ @override
+ String get deleteEvent => 'ईवेंट मिटाएँ';
+
+ @override
+ String get title => 'शीर्षक';
+
+ @override
+ String get create => 'बनाएँ';
+
+ @override
+ String get newTask => 'नया कार्य';
+
+ @override
+ String get clearCompleted => 'पूरे हुए कार्य हटाएँ';
+
+ @override
+ String get refreshList => 'सूची रीफ़्रेश करें';
+
+ @override
+ String get refreshAll => 'सभी रीफ़्रेश करें';
+
+ @override
+ String get listRefreshed => 'सूची रीफ़्रेश हो गई।';
+
+ @override
+ String get allTasksRefreshed => 'सभी खाते रीफ़्रेश हो गए।';
+
+ @override
+ String exportedFile(String path) {
+ return '$path में निर्यात किया गया';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'निर्यात विफल: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'रीफ़्रेश विफल: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'शुरू करने के लिए कार्य सूची चुनें या बनाएँ।';
+
+ @override
+ String get signInToViewTasks => 'कार्य देखने के लिए साइन इन करें।';
+
+ @override
+ String get noTasks => 'कोई कार्य नहीं।';
+
+ @override
+ String get noTasksYet => 'अभी तक कोई कार्य नहीं';
+
+ @override
+ String get noTasksYetMessage =>
+ 'शुरू करने के लिए कार्य बनाएँ या अपने खाते रीफ़्रेश करें।';
+
+ @override
+ String get noTasksInList => 'इस सूची में कोई कार्य नहीं है।';
+
+ @override
+ String get overdue => 'समय सीमा बीत चुकी';
+
+ @override
+ String get today => 'आज';
+
+ @override
+ String get tomorrow => 'कल';
+
+ @override
+ String get upcoming => 'आगामी';
+
+ @override
+ String get noDate => 'कोई तारीख नहीं';
+
+ @override
+ String get completed => 'पूर्ण';
+
+ @override
+ String duePrefix(String date) {
+ return '$date को देय';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'कार्य का विवरण';
+
+ @override
+ String get editTask => 'कार्य संपादित करें';
+
+ @override
+ String get noTaskSelected => 'कोई कार्य नहीं चुना गया।';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'विवरण देखने और संपादित करने के लिए कोई कार्य चुनें।';
+
+ @override
+ String get taskUnavailable => 'कार्य उपलब्ध नहीं है।';
+
+ @override
+ String get signInToEditTasks => 'कार्य संपादित करने के लिए साइन इन करें।';
+
+ @override
+ String get refreshTask => 'कार्य रीफ़्रेश करें';
+
+ @override
+ String get primarySection => 'मुख्य';
+
+ @override
+ String get statusSection => 'स्थिति';
+
+ @override
+ String get openStatus => 'खुला';
+
+ @override
+ String get doneStatus => 'पूर्ण';
+
+ @override
+ String get notes => 'नोट्स';
+
+ @override
+ String get dueDate => 'देय तारीख';
+
+ @override
+ String get clearDueDate => 'देय तारीख हटाएँ';
+
+ @override
+ String get dueTime => 'देय समय';
+
+ @override
+ String get startDate => 'शुरू होने की तारीख';
+
+ @override
+ String get startTime => 'शुरू होने का समय';
+
+ @override
+ String get endDate => 'समाप्ति तारीख';
+
+ @override
+ String get endTime => 'समाप्ति समय';
+
+ @override
+ String get reminderDate => 'रिमाइंडर की तारीख';
+
+ @override
+ String get reminderTime => 'रिमाइंडर का समय';
+
+ @override
+ String get reminder => 'रिमाइंडर';
+
+ @override
+ String get addReminder => 'रिमाइंडर जोड़ें';
+
+ @override
+ String get addGuest => 'अतिथि जोड़ें';
+
+ @override
+ String get addGuestEmail => 'अतिथि का ईमेल जोड़ें';
+
+ @override
+ String get removeReminder => 'रिमाइंडर हटाएँ';
+
+ @override
+ String get off => 'बंद';
+
+ @override
+ String get repeat => 'दोहराएँ';
+
+ @override
+ String get repeatNone => 'कभी नहीं';
+
+ @override
+ String get noneValue => 'कोई नहीं';
+
+ @override
+ String get repeatDaily => 'प्रतिदिन';
+
+ @override
+ String get repeatWeekly => 'हर सप्ताह';
+
+ @override
+ String get repeatMonthly => 'हर महीने';
+
+ @override
+ String get repeatYearly => 'हर वर्ष';
+
+ @override
+ String get importance => 'महत्त्व';
+
+ @override
+ String get importanceLow => 'कम';
+
+ @override
+ String get importanceNormal => 'सामान्य';
+
+ @override
+ String get importanceHigh => 'उच्च';
+
+ @override
+ String get categories => 'श्रेणियाँ';
+
+ @override
+ String get scheduleSection => 'शेड्यूल';
+
+ @override
+ String get dueGroup => 'देय';
+
+ @override
+ String get startGroup => 'शुरुआत';
+
+ @override
+ String get reminderGroup => 'रिमाइंडर';
+
+ @override
+ String get organizationSection => 'व्यवस्था';
+
+ @override
+ String get actionsSection => 'कार्रवाइयाँ';
+
+ @override
+ String get advancedSection => 'उन्नत';
+
+ @override
+ String get addCategory => 'श्रेणी जोड़ें';
+
+ @override
+ String get list => 'सूची';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'इस संस्करण में Microsoft To Do खातों के लिए सूचियों के बीच कार्य ले जाना समर्थित नहीं है।';
+
+ @override
+ String get createSubtask => 'उपकार्य बनाएँ';
+
+ @override
+ String get moveToTop => 'सबसे ऊपर ले जाएँ';
+
+ @override
+ String get deleteTask => 'कार्य मिटाएँ';
+
+ @override
+ String get newSubtask => 'नया उपकार्य';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Google Tasks से “$title” मिटाएँ?';
+ }
+
+ @override
+ String get metadata => 'मेटाडेटा';
+
+ @override
+ String get id => 'आईडी';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'अपडेट किया गया';
+
+ @override
+ String get parent => 'मूल कार्य';
+
+ @override
+ String get position => 'स्थान';
+
+ @override
+ String get webLink => 'वेब लिंक';
+
+ @override
+ String get assignment => 'असाइनमेंट';
+
+ @override
+ String get localState => 'स्थानीय स्थिति';
+
+ @override
+ String get pendingSync => 'सिंक लंबित';
+
+ @override
+ String get synced => 'सिंक किया गया';
+
+ @override
+ String get account => 'खाता';
+
+ @override
+ String get sync => 'सिंक';
+
+ @override
+ String get manualFullSync => 'मैन्युअल पूर्ण सिंक';
+
+ @override
+ String get runInBackgroundWhenClosed => 'विंडो बंद होने पर भी चलते रहें';
+
+ @override
+ String get showTrayIcon => 'ट्रे आइकन दिखाएँ';
+
+ @override
+ String get startMinimizedToTray => 'ट्रे में मिनिमाइज़ होकर शुरू करें';
+
+ @override
+ String get requiresTrayIcon => 'ट्रे आइकन आवश्यक है।';
+
+ @override
+ String get syncComplete => 'सिंक पूरा हुआ।';
+
+ @override
+ String syncFailed(String error) {
+ return 'सिंक विफल: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'सिंक विफल होने की सूचनाएँ';
+
+ @override
+ String get notifyConflicts => 'टकराव की सूचनाएँ';
+
+ @override
+ String get notifyDueToday => 'आज देय कार्यों की सूचनाएँ';
+
+ @override
+ String get eventReminders => 'ईवेंट रिमाइंडर';
+
+ @override
+ String get taskReminders => 'कार्य रिमाइंडर';
+
+ @override
+ String get notificationDetailLevel => 'सूचनाओं के विवरण का स्तर';
+
+ @override
+ String get notificationDetailPrivate => 'निजी';
+
+ @override
+ String get notificationDetailNormal => 'सामान्य';
+
+ @override
+ String get quietHours => 'शांत समय';
+
+ @override
+ String get quietHoursDescription => 'इस अवधि के दौरान सूचनाएँ रोकें।';
+
+ @override
+ String get quietHoursStart => 'शांत समय की शुरुआत';
+
+ @override
+ String get quietHoursEnd => 'शांत समय की समाप्ति';
+
+ @override
+ String get notifications => 'सूचनाएँ';
+
+ @override
+ String get appearance => 'दिखावट';
+
+ @override
+ String get theme => 'थीम';
+
+ @override
+ String get themeSystem => 'सिस्टम';
+
+ @override
+ String get themeLight => 'हल्की';
+
+ @override
+ String get themeDark => 'गहरी';
+
+ @override
+ String get themeFamily => 'थीम परिवार';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu की मूल थीम (Yaru)';
+
+ @override
+ String get localization => 'स्थानीयकरण';
+
+ @override
+ String get currentLocale => 'मौजूदा भाषा और क्षेत्रीय सेटिंग';
+
+ @override
+ String get privacy => 'गोपनीयता';
+
+ @override
+ String get redactTaskContentInDiagnostics => 'निदान में कार्य सामग्री छिपाएँ';
+
+ @override
+ String get developerDiagnostics => 'डेवलपर निदान';
+
+ @override
+ String get diagnostics => 'निदान';
+
+ @override
+ String get apiInspectorDisabled => 'API इंस्पेक्टर दिखाएँ';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'डिस्कवरी संशोधन: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'लागू की गई विधियाँ';
+
+ @override
+ String get supportsTasksScopes => 'tasks और tasks.readonly स्कोप समर्थित हैं';
+
+ @override
+ String get requiresTasksScope => 'tasks स्कोप आवश्यक है';
+
+ @override
+ String get blockedPendingOperations => 'अवरुद्ध लंबित कार्रवाइयाँ';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'लंबित कार्रवाइयाँ देखने के लिए साइन इन करें।';
+
+ @override
+ String get noBlockedPendingOperations =>
+ 'कोई अवरुद्ध लंबित कार्रवाई नहीं है।';
+
+ @override
+ String get operationActions => 'कार्रवाई के विकल्प';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'सूची=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'कार्य=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'प्रयास=$count';
+ }
+
+ @override
+ String get retry => 'फिर से कोशिश करें';
+
+ @override
+ String get discard => 'खारिज करें';
+
+ @override
+ String get discardChangesAction => 'बदलाव छोड़ें';
+
+ @override
+ String get discardChanges => 'बदलाव खारिज करें?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'इससे इस कार्य में किए गए सहेजे न गए बदलाव खारिज हो जाएँगे।';
+
+ @override
+ String get retryCompleted => 'दोबारा प्रयास पूरा हुआ।';
+
+ @override
+ String get discardPendingOperation => 'लंबित कार्रवाई खारिज करें?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'इससे अवरुद्ध स्थानीय कार्रवाई हट जाती है। अगला सिंक Google Tasks से डेटा रीफ़्रेश करेगा।';
+
+ @override
+ String get pendingOperationDiscarded => 'लंबित कार्रवाई खारिज कर दी गई।';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax सिंक विफल';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'बैकग्राउंड सिंक विफल हुआ। $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax सिंक में टकराव';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'एक लंबित स्थानीय बदलाव अवरुद्ध हो गया। $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'आज देय कार्य';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'आज $count कार्य देय हैं।',
+ one: 'आज एक कार्य देय है।',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'ईवेंट रिमाइंडर';
+
+ @override
+ String get taskReminderNotificationTitle => 'कार्य रिमाइंडर';
+
+ @override
+ String get eventReminderNotificationBody => 'ईवेंट जल्द शुरू होगा।';
+
+ @override
+ String get taskReminderNotificationBody => 'कार्य जल्द देय है।';
+
+ @override
+ String get notificationOpenAction => 'खोलें';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'गोपनीयता सेटिंग्स के कारण विवरण छिपे हुए हैं।';
+
+ @override
+ String get previousMonth => 'पिछला महीना';
+
+ @override
+ String get nextMonth => 'अगला महीना';
+
+ @override
+ String get openMonthView => 'महीने का दृश्य खोलें';
+
+ @override
+ String get previousYear => 'पिछला वर्ष';
+
+ @override
+ String get nextYear => 'अगला वर्ष';
+
+ @override
+ String get openYearView => 'वर्ष का दृश्य खोलें';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'सप्ताह $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'पूरे दिन वाले पैनल का आकार बदलें';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count आइटम',
+ one: '1 आइटम',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'यह कैलेंडर केवल पढ़ने योग्य है।';
+
+ @override
+ String get selectTimeZone => 'समय क्षेत्र चुनें';
+
+ @override
+ String get searchLocations => 'स्थान खोजें';
+
+ @override
+ String get noLocationsFound => 'कोई स्थान नहीं मिला';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '“$title” मिटाएँ?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart
new file mode 100644
index 0000000..426438b
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_it.dart
@@ -0,0 +1,1262 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Italian (`it`).
+class AppLocalizationsIt extends AppLocalizations {
+ AppLocalizationsIt([String locale = 'it']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Collega gli account Google e Microsoft per sincronizzare calendari e attività.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Nella schermata delle autorizzazioni di Google, seleziona sia l’autorizzazione per il calendario sia quella per le attività.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Sono necessarie le autorizzazioni per Google Calendar e Google Tasks. Riprova e seleziona entrambe le caselle.';
+
+ @override
+ String get finishSetup => 'Completa la configurazione';
+
+ @override
+ String get continueSetup => 'Continua';
+
+ @override
+ String get onboardingSetupTitle => 'Configura BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Collega gli account';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Aggiungi tutti gli account Google e Microsoft che vuoi utilizzare. BusyMax sincronizza calendari, eventi, elenchi di attività e attività di ogni account.';
+
+ @override
+ String get onboardingPreferencesStepTitle =>
+ 'Scegli le impostazioni di sistema';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Prima di aprire l’agenda, configura il comportamento sul desktop, i promemoria, il livello di dettaglio delle notifiche e l’aspetto.';
+
+ @override
+ String get signInWithGoogle => 'Accedi con Google';
+
+ @override
+ String get signInWithMicrosoft => 'Accedi con Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'Questo servizio non è configurato.';
+
+ @override
+ String get waitingForGoogleSignIn => 'In attesa dell’accesso a Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn =>
+ 'In attesa dell’accesso a Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'L’accesso a Microsoft non è configurato. Imposta MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Annulla';
+
+ @override
+ String get close => 'Chiudi';
+
+ @override
+ String get exit => 'Esci';
+
+ @override
+ String get options => 'Opzioni';
+
+ @override
+ String get hide => 'Nascondi';
+
+ @override
+ String get show => 'Mostra';
+
+ @override
+ String get export => 'Esporta';
+
+ @override
+ String get save => 'Salva';
+
+ @override
+ String get settings => 'Impostazioni';
+
+ @override
+ String get all => 'Tutto';
+
+ @override
+ String get calendarEvents => 'Eventi';
+
+ @override
+ String get calendarTasks => 'Attività';
+
+ @override
+ String get calendar => 'Calendario';
+
+ @override
+ String get calendars => 'Calendari';
+
+ @override
+ String get newEvent => 'Nuovo evento';
+
+ @override
+ String get refreshCalendar => 'Aggiorna calendario';
+
+ @override
+ String get openInProvider => 'Apri nel servizio';
+
+ @override
+ String get hideFromSchedule => 'Nascondi dall’agenda';
+
+ @override
+ String get showInSchedule => 'Mostra nell’agenda';
+
+ @override
+ String get noCalendarsSynced => 'Nessun calendario ancora sincronizzato.';
+
+ @override
+ String get allDay => 'Tutto il giorno';
+
+ @override
+ String moreItems(int count) {
+ return '+$count in più';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Nessun evento o attività';
+
+ @override
+ String get scheduleLoading => 'Caricamento agenda...';
+
+ @override
+ String get scheduleUnavailable => 'Agenda non disponibile';
+
+ @override
+ String get scheduleNoSources =>
+ 'Nessun calendario o elenco di attività visibile';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Scegli cosa mostrare nelle Impostazioni, quindi aggiorna l’agenda.';
+
+ @override
+ String get scheduleSignInRequired => 'Collega un account';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Accedi per sincronizzare calendari e attività.';
+
+ @override
+ String get scheduleNoSearchResults =>
+ 'Nessun evento o attività corrispondente';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Prova una ricerca diversa o cancella i filtri attuali.';
+
+ @override
+ String get refresh => 'Aggiorna';
+
+ @override
+ String get trayOpenBusyMax => 'Apri BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Carica altre attività scadute';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Carica altre attività senza data';
+
+ @override
+ String get viewDay => 'Giorno';
+
+ @override
+ String get viewWeek => 'Settimana';
+
+ @override
+ String get viewMonth => 'Mese';
+
+ @override
+ String get viewYear => 'Anno';
+
+ @override
+ String get viewAgenda => 'Agenda';
+
+ @override
+ String get scheduleSettings => 'Agenda';
+
+ @override
+ String get scheduleDisplaySettings => 'Visualizzazione agenda';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'Le viste Giorno e Settimana mostrano inizialmente questo intervallo orario. Gli elementi precedenti o successivi lo estendono quando necessario.';
+
+ @override
+ String get scheduleDayStartsAt => 'Inizio giornata';
+
+ @override
+ String get scheduleDayEndsAt => 'Fine giornata';
+
+ @override
+ String get sourceCalendar => 'Calendario';
+
+ @override
+ String get sourceTaskList => 'Elenco di attività';
+
+ @override
+ String get createChoiceTitle => 'Crea';
+
+ @override
+ String get createEventAtTime => 'Evento';
+
+ @override
+ String get createTaskAtDate => 'Attività';
+
+ @override
+ String get editEvent => 'Modifica evento';
+
+ @override
+ String get eventTitle => 'Titolo dell’evento';
+
+ @override
+ String get location => 'Luogo';
+
+ @override
+ String get timeSlot => 'Fascia oraria';
+
+ @override
+ String get startDateTime => 'Data/ora di inizio';
+
+ @override
+ String get endDateTime => 'Data/ora di fine';
+
+ @override
+ String get doesNotRepeat => 'Non si ripete';
+
+ @override
+ String get defaultReminder => 'Promemoria predefinito';
+
+ @override
+ String get guests => 'Invitati';
+
+ @override
+ String get noGuests => 'Nessun invitato';
+
+ @override
+ String get description => 'Descrizione';
+
+ @override
+ String get availabilityShowAs => 'Disponibilità / Mostra come';
+
+ @override
+ String get busy => 'Occupato';
+
+ @override
+ String get visibility => 'Visibilità';
+
+ @override
+ String get defaultVisibility => 'Visibilità predefinita';
+
+ @override
+ String get conference => 'Conferenza';
+
+ @override
+ String get noConference => 'Nessuna conferenza';
+
+ @override
+ String get providerCalendar => 'Calendario del servizio';
+
+ @override
+ String get formatBoldShortLabel => 'G';
+
+ @override
+ String get formatBoldTooltip => 'Grassetto';
+
+ @override
+ String get formatItalicShortLabel => 'C';
+
+ @override
+ String get formatItalicTooltip => 'Corsivo';
+
+ @override
+ String get formatUnderlineShortLabel => 'S';
+
+ @override
+ String get formatUnderlineTooltip => 'Sottolineato';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minuti prima',
+ one: '1 minuto prima',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'All’inizio';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours ore prima',
+ one: '1 ora prima',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days giorni prima',
+ one: '1 giorno prima',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Libero';
+
+ @override
+ String get availabilityTentative => 'Provvisorio';
+
+ @override
+ String get availabilityOutOfOffice => 'Fuori sede';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Lavora altrove';
+
+ @override
+ String get visibilityDefault => 'Predefinita';
+
+ @override
+ String get visibilityPublic => 'Pubblica';
+
+ @override
+ String get visibilityPrivate => 'Privata';
+
+ @override
+ String get visibilityConfidential => 'Riservata';
+
+ @override
+ String get sensitivityNormal => 'Normale';
+
+ @override
+ String get sensitivityPersonal => 'Personale';
+
+ @override
+ String get tasks => 'Attività';
+
+ @override
+ String get allTasks => 'Tutte le attività';
+
+ @override
+ String tasksInList(String title) {
+ return 'Attività in $title';
+ }
+
+ @override
+ String get taskLists => 'Elenchi di attività';
+
+ @override
+ String get navigation => 'Navigazione';
+
+ @override
+ String get mainMenu => 'Menu principale';
+
+ @override
+ String get keyboardShortcuts => 'Scorciatoie da tastiera';
+
+ @override
+ String get shortcutGroupGeneral => 'Generali';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Mostra questo elenco di scorciatoie';
+
+ @override
+ String get shortcutGroupNavigation => 'Navigazione';
+
+ @override
+ String get shortcutNextPeriod => 'Periodo successivo';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Settimana successiva nella vista settimanale, mese successivo nella vista mensile e così via';
+
+ @override
+ String get shortcutPreviousPeriod => 'Periodo precedente';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Settimana precedente nella vista settimanale, mese precedente nella vista mensile e così via';
+
+ @override
+ String get shortcutJumpToToday => 'Vai alla data odierna';
+
+ @override
+ String get shortcutGroupView => 'Vista';
+
+ @override
+ String get shortcutDayView => 'Vista giornaliera';
+
+ @override
+ String get shortcutWeekView => 'Vista settimanale';
+
+ @override
+ String get shortcutMonthView => 'Vista mensile';
+
+ @override
+ String get shortcutYearView => 'Vista annuale';
+
+ @override
+ String get shortcutAgendaView => 'Vista agenda';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Creazione e modifica';
+
+ @override
+ String get shortcutSaveItem => 'Salva evento o attività';
+
+ @override
+ String get shortcutDeleteItem => 'Elimina evento o attività';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Modifica delle attività';
+
+ @override
+ String get shortcutCancelEditing => 'Annulla modifica';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Chiudi la modifica o i dettagli dell’attività';
+
+ @override
+ String get aboutBusyMax => 'Informazioni su BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'Calendario e attività';
+
+ @override
+ String get license => 'Licenza';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Sito web';
+
+ @override
+ String get sourceCode => 'Codice sorgente';
+
+ @override
+ String get reportAnIssue => 'Segnala un problema';
+
+ @override
+ String get sendFeedback => 'Invia feedback';
+
+ @override
+ String get feedbackSubmit => 'Invia';
+
+ @override
+ String get feedbackCategory => 'Categoria';
+
+ @override
+ String get feedbackSelectCategory => 'Seleziona una categoria';
+
+ @override
+ String get feedbackCategoryProblem => 'Problema o errore';
+
+ @override
+ String get feedbackCategoryFeature => 'Richiesta di funzionalità';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'Problema di privacy o sicurezza';
+
+ @override
+ String get feedbackCategoryUsability => 'Problema di usabilità';
+
+ @override
+ String get feedbackCategoryOther => 'Altro';
+
+ @override
+ String get feedbackSubject => 'Oggetto';
+
+ @override
+ String get feedbackDetailedMessage => 'Messaggio dettagliato';
+
+ @override
+ String get feedbackReplyEmail =>
+ 'Indirizzo email per la risposta (facoltativo)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Includi dettagli tecnici';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Aggiunge soltanto la versione del sistema operativo Linux e le impostazioni locali dell’applicazione. Non vengono inclusi log, dati degli account, nomi di file o altre informazioni diagnostiche.';
+
+ @override
+ String get feedbackCategoryRequired => 'Seleziona una categoria.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'L’oggetto deve contenere da 3 a 120 caratteri.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'Il messaggio deve contenere da 10 a 5.000 caratteri.';
+
+ @override
+ String get feedbackInvalidEmail => 'Inserisci un indirizzo email valido.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'Impossibile connettersi a BusyStack. Controlla la connessione e riprova.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'La richiesta ha superato il tempo limite. Il feedback non è stato cancellato; riprova.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Sono stati inviati troppi feedback da questa rete. Attendi e riprova.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'Il server ha rifiutato l’invio. Controlla i campi e riprova.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack non può accettare il feedback in questo momento. Il feedback non è stato cancellato; riprova.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Feedback inviato. Riferimento: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Mostra o nascondi la barra laterale';
+
+ @override
+ String get showSidebar => 'Mostra il pannello laterale';
+
+ @override
+ String get hideSidebar => 'Nascondi il pannello laterale';
+
+ @override
+ String get accounts => 'Account';
+
+ @override
+ String get currentAccount => 'Account attuale';
+
+ @override
+ String get switchAccount => 'Cambia account';
+
+ @override
+ String get addGoogleAccount => 'Aggiungi account Google';
+
+ @override
+ String get addMicrosoftAccount => 'Aggiungi account Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Accesso effettuato';
+
+ @override
+ String get removeAccount => 'Rimuovi account…';
+
+ @override
+ String get removingAccount => 'Rimozione account…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Interrompi la sincronizzazione e rimuovi i dati di questo account dal dispositivo.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Rimuovere $account da BusyMax?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'Questa azione elimina dal dispositivo attività, calendari, eventi e promemoria memorizzati nella cache, oltre alle modifiche offline in sospeso. Le modifiche non sincronizzate andranno perse. Non verrà eliminato nulla da Google o Microsoft.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Revoca anche l’accesso di BusyMax a questo account Google';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Dovrai concedere nuovamente l’accesso prima di riconnetterti.';
+
+ @override
+ String get removeAccountAction => 'Rimuovi account';
+
+ @override
+ String get removeAccountFailed =>
+ 'Impossibile completare la rimozione dell’account. Riprova.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'L’account è stato rimosso da questo dispositivo, ma BusyMax non è riuscito a revocare il proprio accesso a Google. Puoi revocarlo dal tuo account Google.';
+
+ @override
+ String get newList => 'Nuovo elenco';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'Accedi per visualizzare gli elenchi di attività.';
+
+ @override
+ String get noTaskListsSynced =>
+ 'Nessun elenco di attività ancora sincronizzato.';
+
+ @override
+ String get listActions => 'Azioni dell’elenco';
+
+ @override
+ String get rename => 'Rinomina';
+
+ @override
+ String get delete => 'Elimina';
+
+ @override
+ String get renameList => 'Rinomina elenco';
+
+ @override
+ String get deleteList => 'Elimina elenco';
+
+ @override
+ String get builtInMicrosoftList => 'Integrato';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Gli elenchi integrati di Microsoft To Do non possono essere rinominati o eliminati.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Eliminare «$title» da Google Tasks?';
+ }
+
+ @override
+ String get deleteEvent => 'Elimina evento';
+
+ @override
+ String get title => 'Titolo';
+
+ @override
+ String get create => 'Crea';
+
+ @override
+ String get newTask => 'Nuova attività';
+
+ @override
+ String get clearCompleted => 'Cancella attività completate';
+
+ @override
+ String get refreshList => 'Aggiorna elenco';
+
+ @override
+ String get refreshAll => 'Aggiorna tutto';
+
+ @override
+ String get listRefreshed => 'Elenco aggiornato.';
+
+ @override
+ String get allTasksRefreshed => 'Tutti gli account sono stati aggiornati.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Esportato in $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Esportazione non riuscita: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Aggiornamento non riuscito: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Seleziona o crea un elenco di attività per iniziare.';
+
+ @override
+ String get signInToViewTasks => 'Accedi per visualizzare le attività.';
+
+ @override
+ String get noTasks => 'Nessuna attività.';
+
+ @override
+ String get noTasksYet => 'Ancora nessuna attività';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Crea un’attività o aggiorna gli account per iniziare.';
+
+ @override
+ String get noTasksInList => 'Nessuna attività in questo elenco.';
+
+ @override
+ String get overdue => 'Scadute';
+
+ @override
+ String get today => 'Oggi';
+
+ @override
+ String get tomorrow => 'Domani';
+
+ @override
+ String get upcoming => 'In arrivo';
+
+ @override
+ String get noDate => 'Senza data';
+
+ @override
+ String get completed => 'Completate';
+
+ @override
+ String duePrefix(String date) {
+ return 'Scadenza: $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'Dettagli attività';
+
+ @override
+ String get editTask => 'Modifica attività';
+
+ @override
+ String get noTaskSelected => 'Nessuna attività selezionata.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Seleziona un’attività per visualizzarne e modificarne i dettagli.';
+
+ @override
+ String get taskUnavailable => 'Attività non disponibile.';
+
+ @override
+ String get signInToEditTasks => 'Accedi per modificare le attività.';
+
+ @override
+ String get refreshTask => 'Aggiorna attività';
+
+ @override
+ String get primarySection => 'Principale';
+
+ @override
+ String get statusSection => 'Stato';
+
+ @override
+ String get openStatus => 'Aperta';
+
+ @override
+ String get doneStatus => 'Completata';
+
+ @override
+ String get notes => 'Note';
+
+ @override
+ String get dueDate => 'Data di scadenza';
+
+ @override
+ String get clearDueDate => 'Cancella data di scadenza';
+
+ @override
+ String get dueTime => 'Ora di scadenza';
+
+ @override
+ String get startDate => 'Data di inizio';
+
+ @override
+ String get startTime => 'Ora di inizio';
+
+ @override
+ String get endDate => 'Data di fine';
+
+ @override
+ String get endTime => 'Ora di fine';
+
+ @override
+ String get reminderDate => 'Data del promemoria';
+
+ @override
+ String get reminderTime => 'Ora del promemoria';
+
+ @override
+ String get reminder => 'Promemoria';
+
+ @override
+ String get addReminder => 'Aggiungi promemoria';
+
+ @override
+ String get addGuest => 'Aggiungi invitato';
+
+ @override
+ String get addGuestEmail => 'Aggiungi email dell’invitato';
+
+ @override
+ String get removeReminder => 'Rimuovi promemoria';
+
+ @override
+ String get off => 'Disattivato';
+
+ @override
+ String get repeat => 'Ripeti';
+
+ @override
+ String get repeatNone => 'Nessuna ripetizione';
+
+ @override
+ String get noneValue => 'Nessuno';
+
+ @override
+ String get repeatDaily => 'Ogni giorno';
+
+ @override
+ String get repeatWeekly => 'Ogni settimana';
+
+ @override
+ String get repeatMonthly => 'Ogni mese';
+
+ @override
+ String get repeatYearly => 'Ogni anno';
+
+ @override
+ String get importance => 'Importanza';
+
+ @override
+ String get importanceLow => 'Bassa';
+
+ @override
+ String get importanceNormal => 'Normale';
+
+ @override
+ String get importanceHigh => 'Alta';
+
+ @override
+ String get categories => 'Categorie';
+
+ @override
+ String get scheduleSection => 'Programmazione';
+
+ @override
+ String get dueGroup => 'Scadenza';
+
+ @override
+ String get startGroup => 'Inizio';
+
+ @override
+ String get reminderGroup => 'Promemoria';
+
+ @override
+ String get organizationSection => 'Organizzazione';
+
+ @override
+ String get actionsSection => 'Azioni';
+
+ @override
+ String get advancedSection => 'Avanzate';
+
+ @override
+ String get addCategory => 'Aggiungi categoria';
+
+ @override
+ String get list => 'Elenco';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'In questa versione non è possibile spostare attività tra elenchi negli account Microsoft To Do.';
+
+ @override
+ String get createSubtask => 'Crea sottoattività';
+
+ @override
+ String get moveToTop => 'Sposta in cima';
+
+ @override
+ String get deleteTask => 'Elimina attività';
+
+ @override
+ String get newSubtask => 'Nuova sottoattività';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Eliminare «$title» da Google Tasks?';
+ }
+
+ @override
+ String get metadata => 'Metadati';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Aggiornato';
+
+ @override
+ String get parent => 'Attività principale';
+
+ @override
+ String get position => 'Posizione';
+
+ @override
+ String get webLink => 'Collegamento web';
+
+ @override
+ String get assignment => 'Assegnazione';
+
+ @override
+ String get localState => 'Stato locale';
+
+ @override
+ String get pendingSync => 'Sincronizzazione in sospeso';
+
+ @override
+ String get synced => 'Sincronizzato';
+
+ @override
+ String get account => 'Account';
+
+ @override
+ String get sync => 'Sincronizzazione';
+
+ @override
+ String get manualFullSync => 'Sincronizzazione completa manuale';
+
+ @override
+ String get runInBackgroundWhenClosed =>
+ 'Continua a funzionare quando la finestra è chiusa';
+
+ @override
+ String get showTrayIcon => 'Mostra icona nell’area di notifica';
+
+ @override
+ String get startMinimizedToTray =>
+ 'Avvia ridotto a icona nell’area di notifica';
+
+ @override
+ String get requiresTrayIcon => 'Richiede l’icona nell’area di notifica.';
+
+ @override
+ String get syncComplete => 'Sincronizzazione completata.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Sincronizzazione non riuscita: $error';
+ }
+
+ @override
+ String get notifySyncFailures =>
+ 'Notifiche in caso di errore di sincronizzazione';
+
+ @override
+ String get notifyConflicts => 'Notifiche in caso di conflitto';
+
+ @override
+ String get notifyDueToday => 'Notifiche per attività in scadenza oggi';
+
+ @override
+ String get eventReminders => 'Promemoria degli eventi';
+
+ @override
+ String get taskReminders => 'Promemoria delle attività';
+
+ @override
+ String get notificationDetailLevel => 'Livello di dettaglio delle notifiche';
+
+ @override
+ String get notificationDetailPrivate => 'Privato';
+
+ @override
+ String get notificationDetailNormal => 'Normale';
+
+ @override
+ String get quietHours => 'Ore di silenzio';
+
+ @override
+ String get quietHoursDescription =>
+ 'Sospendi le notifiche durante questo periodo.';
+
+ @override
+ String get quietHoursStart => 'Inizio delle ore di silenzio';
+
+ @override
+ String get quietHoursEnd => 'Fine delle ore di silenzio';
+
+ @override
+ String get notifications => 'Notifiche';
+
+ @override
+ String get appearance => 'Aspetto';
+
+ @override
+ String get theme => 'Tema';
+
+ @override
+ String get themeSystem => 'Sistema';
+
+ @override
+ String get themeLight => 'Chiaro';
+
+ @override
+ String get themeDark => 'Scuro';
+
+ @override
+ String get themeFamily => 'Famiglia di temi';
+
+ @override
+ String get themeFamilyYaru => 'Tema nativo di Ubuntu (Yaru)';
+
+ @override
+ String get localization => 'Lingua e area geografica';
+
+ @override
+ String get currentLocale => 'Impostazioni locali correnti';
+
+ @override
+ String get privacy => 'Privacy';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Nascondi il contenuto delle attività nelle informazioni diagnostiche';
+
+ @override
+ String get developerDiagnostics => 'Diagnostica per sviluppatori';
+
+ @override
+ String get diagnostics => 'Diagnostica';
+
+ @override
+ String get apiInspectorDisabled => 'Mostra l’ispettore API';
+
+ @override
+ String get googleTasksApi => 'API Google Tasks';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Revisione Discovery: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Metodi implementati';
+
+ @override
+ String get supportsTasksScopes =>
+ 'Supporta gli ambiti tasks e tasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'Richiede l’ambito tasks';
+
+ @override
+ String get blockedPendingOperations => 'Operazioni in sospeso bloccate';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Accedi per esaminare le operazioni in sospeso.';
+
+ @override
+ String get noBlockedPendingOperations =>
+ 'Nessuna operazione in sospeso bloccata.';
+
+ @override
+ String get operationActions => 'Azioni dell’operazione';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'elenco=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'attività=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'tentativi=$count';
+ }
+
+ @override
+ String get retry => 'Riprova';
+
+ @override
+ String get discard => 'Scarta';
+
+ @override
+ String get discardChangesAction => 'Scarta';
+
+ @override
+ String get discardChanges => 'Scartare le modifiche?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'Questa azione scarta le modifiche non salvate dell’attività.';
+
+ @override
+ String get retryCompleted => 'Nuovo tentativo completato.';
+
+ @override
+ String get discardPendingOperation => 'Scartare l’operazione in sospeso?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'Questa azione rimuove l’operazione locale bloccata. Alla prossima sincronizzazione, i dati verranno ricaricati da Google Tasks.';
+
+ @override
+ String get pendingOperationDiscarded => 'Operazione in sospeso scartata.';
+
+ @override
+ String get syncFailureNotificationTitle =>
+ 'Sincronizzazione di BusyMax non riuscita';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'Sincronizzazione in background non riuscita. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle =>
+ 'Conflitto di sincronizzazione di BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Una modifica locale in sospeso è stata bloccata. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Attività in scadenza oggi';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count attività scadono oggi.',
+ one: 'Un’attività scade oggi.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Promemoria evento';
+
+ @override
+ String get taskReminderNotificationTitle => 'Promemoria attività';
+
+ @override
+ String get eventReminderNotificationBody => 'L’evento inizierà a breve.';
+
+ @override
+ String get taskReminderNotificationBody => 'L’attività scadrà a breve.';
+
+ @override
+ String get notificationOpenAction => 'Apri';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'I dettagli sono nascosti dalle impostazioni sulla privacy.';
+
+ @override
+ String get previousMonth => 'Mese precedente';
+
+ @override
+ String get nextMonth => 'Mese successivo';
+
+ @override
+ String get openMonthView => 'Apri vista mensile';
+
+ @override
+ String get previousYear => 'Anno precedente';
+
+ @override
+ String get nextYear => 'Anno successivo';
+
+ @override
+ String get openYearView => 'Apri vista annuale';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Settimana $number';
+ }
+
+ @override
+ String get resizeAllDayPanel =>
+ 'Ridimensiona il pannello per l’intera giornata';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count elementi',
+ one: '1 elemento',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Questo calendario è di sola lettura.';
+
+ @override
+ String get selectTimeZone => 'Seleziona fuso orario';
+
+ @override
+ String get searchLocations => 'Cerca luoghi';
+
+ @override
+ String get noLocationsFound => 'Nessun luogo trovato';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Eliminare «$title»?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart
new file mode 100644
index 0000000..1da583e
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_ja.dart
@@ -0,0 +1,1226 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Japanese (`ja`).
+class AppLocalizationsJa extends AppLocalizations {
+ AppLocalizationsJa([String locale = 'ja']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Google と Microsoft のアカウントを接続して、カレンダーとタスクを同期します。';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Google の権限画面で、カレンダーとタスクの両方の権限を選択してください。';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Google カレンダーと Google Tasks の権限が必要です。もう一度試して、両方のチェックボックスを選択してください。';
+
+ @override
+ String get finishSetup => 'セットアップを完了';
+
+ @override
+ String get continueSetup => '続行';
+
+ @override
+ String get onboardingSetupTitle => 'BusyMax をセットアップ';
+
+ @override
+ String get onboardingAccountsStepTitle => 'アカウントを接続';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ '使用するすべての Google アカウントと Microsoft アカウントを追加してください。BusyMax は各アカウントのカレンダー、予定、タスクリスト、タスクを同期します。';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'システム設定を選択';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'スケジュールを開く前に、デスクトップでの動作、リマインダー、通知の詳細度、外観を設定します。';
+
+ @override
+ String get signInWithGoogle => 'Google でサインイン';
+
+ @override
+ String get signInWithMicrosoft => 'Microsoft でサインイン';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'このプロバイダーは設定されていません。';
+
+ @override
+ String get waitingForGoogleSignIn => 'Google のサインインを待機しています...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'Microsoft のサインインを待機しています...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Microsoft のサインインが設定されていません。MICROSOFT_OAUTH_CLIENT_ID を設定してください。';
+
+ @override
+ String get cancel => 'キャンセル';
+
+ @override
+ String get close => '閉じる';
+
+ @override
+ String get exit => '終了';
+
+ @override
+ String get options => 'オプション';
+
+ @override
+ String get hide => '非表示';
+
+ @override
+ String get show => '表示';
+
+ @override
+ String get export => 'エクスポート';
+
+ @override
+ String get save => '保存';
+
+ @override
+ String get settings => '設定';
+
+ @override
+ String get all => 'すべて';
+
+ @override
+ String get calendarEvents => '予定';
+
+ @override
+ String get calendarTasks => 'タスク';
+
+ @override
+ String get calendar => 'カレンダー';
+
+ @override
+ String get calendars => 'カレンダー';
+
+ @override
+ String get newEvent => '新しい予定';
+
+ @override
+ String get refreshCalendar => 'カレンダーを更新';
+
+ @override
+ String get openInProvider => 'サービスで開く';
+
+ @override
+ String get hideFromSchedule => 'スケジュールから非表示';
+
+ @override
+ String get showInSchedule => 'スケジュールに表示';
+
+ @override
+ String get noCalendarsSynced => '同期済みのカレンダーはまだありません。';
+
+ @override
+ String get allDay => '終日';
+
+ @override
+ String moreItems(int count) {
+ return '他 $count 件';
+ }
+
+ @override
+ String get noEventsOrTasks => '予定またはタスクはありません';
+
+ @override
+ String get scheduleLoading => 'スケジュールを読み込んでいます...';
+
+ @override
+ String get scheduleUnavailable => 'スケジュールを利用できません';
+
+ @override
+ String get scheduleNoSources => '表示できるカレンダーまたはタスクリストがありません';
+
+ @override
+ String get scheduleNoSourcesDescription => '設定で表示する項目を選択してから、更新してください。';
+
+ @override
+ String get scheduleSignInRequired => 'アカウントを接続';
+
+ @override
+ String get scheduleSignInDescription => 'カレンダーとタスクを同期するにはサインインしてください。';
+
+ @override
+ String get scheduleNoSearchResults => '一致する予定またはタスクはありません';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ '別の条件で検索するか、現在のフィルターを解除してください。';
+
+ @override
+ String get refresh => '更新';
+
+ @override
+ String get trayOpenBusyMax => 'BusyMax を開く';
+
+ @override
+ String get agendaLoadMoreOverdue => '期限切れのタスクをさらに読み込む';
+
+ @override
+ String get agendaLoadMoreNoDate => '日付のないタスクをさらに読み込む';
+
+ @override
+ String get viewDay => '日';
+
+ @override
+ String get viewWeek => '週';
+
+ @override
+ String get viewMonth => '月';
+
+ @override
+ String get viewYear => '年';
+
+ @override
+ String get viewAgenda => '予定一覧';
+
+ @override
+ String get scheduleSettings => 'スケジュール';
+
+ @override
+ String get scheduleDisplaySettings => 'スケジュール表示';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ '日表示と週表示では、最初にこの時間範囲が表示されます。必要に応じて、この範囲より前または後の項目も表示されるように範囲が広がります。';
+
+ @override
+ String get scheduleDayStartsAt => '一日の開始時刻';
+
+ @override
+ String get scheduleDayEndsAt => '一日の終了時刻';
+
+ @override
+ String get sourceCalendar => 'カレンダー';
+
+ @override
+ String get sourceTaskList => 'タスクリスト';
+
+ @override
+ String get createChoiceTitle => '作成';
+
+ @override
+ String get createEventAtTime => '予定';
+
+ @override
+ String get createTaskAtDate => 'タスク';
+
+ @override
+ String get editEvent => '予定を編集';
+
+ @override
+ String get eventTitle => '予定のタイトル';
+
+ @override
+ String get location => '場所';
+
+ @override
+ String get timeSlot => '時間帯';
+
+ @override
+ String get startDateTime => '開始日時';
+
+ @override
+ String get endDateTime => '終了日時';
+
+ @override
+ String get doesNotRepeat => '繰り返さない';
+
+ @override
+ String get defaultReminder => 'デフォルトのリマインダー';
+
+ @override
+ String get guests => 'ゲスト';
+
+ @override
+ String get noGuests => 'ゲストなし';
+
+ @override
+ String get description => '説明';
+
+ @override
+ String get availabilityShowAs => '空き時間情報 / 表示方法';
+
+ @override
+ String get busy => '予定あり';
+
+ @override
+ String get visibility => '公開設定';
+
+ @override
+ String get defaultVisibility => 'デフォルトの公開設定';
+
+ @override
+ String get conference => '会議';
+
+ @override
+ String get noConference => '会議なし';
+
+ @override
+ String get providerCalendar => 'プロバイダーのカレンダー';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => '太字';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => '斜体';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => '下線';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes分前',
+ one: '1分前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => '開始時';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours時間前',
+ one: '1時間前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days日前',
+ one: '1日前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => '空き時間';
+
+ @override
+ String get availabilityTentative => '仮の予定';
+
+ @override
+ String get availabilityOutOfOffice => '外出中';
+
+ @override
+ String get availabilityWorkingElsewhere => '別の場所で勤務';
+
+ @override
+ String get visibilityDefault => 'デフォルト';
+
+ @override
+ String get visibilityPublic => '一般公開';
+
+ @override
+ String get visibilityPrivate => '非公開';
+
+ @override
+ String get visibilityConfidential => '機密';
+
+ @override
+ String get sensitivityNormal => '標準';
+
+ @override
+ String get sensitivityPersonal => '個人用';
+
+ @override
+ String get tasks => 'タスク';
+
+ @override
+ String get allTasks => 'すべてのタスク';
+
+ @override
+ String tasksInList(String title) {
+ return '$title のタスク';
+ }
+
+ @override
+ String get taskLists => 'タスクリスト';
+
+ @override
+ String get navigation => 'ナビゲーション';
+
+ @override
+ String get mainMenu => 'メインメニュー';
+
+ @override
+ String get keyboardShortcuts => 'キーボードショートカット';
+
+ @override
+ String get shortcutGroupGeneral => '全般';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => 'このショートカット一覧を表示';
+
+ @override
+ String get shortcutGroupNavigation => 'ナビゲーション';
+
+ @override
+ String get shortcutNextPeriod => '次の期間';
+
+ @override
+ String get shortcutNextPeriodDescription => '週表示では次の週、月表示では次の月というように移動します';
+
+ @override
+ String get shortcutPreviousPeriod => '前の期間';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ '週表示では前の週、月表示では前の月というように移動します';
+
+ @override
+ String get shortcutJumpToToday => '今日に移動';
+
+ @override
+ String get shortcutGroupView => '表示';
+
+ @override
+ String get shortcutDayView => '日表示';
+
+ @override
+ String get shortcutWeekView => '週表示';
+
+ @override
+ String get shortcutMonthView => '月表示';
+
+ @override
+ String get shortcutYearView => '年表示';
+
+ @override
+ String get shortcutAgendaView => '予定一覧表示';
+
+ @override
+ String get shortcutGroupCreateAndEdit => '作成と編集';
+
+ @override
+ String get shortcutSaveItem => '予定またはタスクを保存';
+
+ @override
+ String get shortcutDeleteItem => '予定またはタスクを削除';
+
+ @override
+ String get shortcutGroupTaskEditing => 'タスクの編集';
+
+ @override
+ String get shortcutCancelEditing => '編集をキャンセル';
+
+ @override
+ String get shortcutCancelEditingDescription => 'タスクの編集または詳細を閉じる';
+
+ @override
+ String get aboutBusyMax => 'BusyMax について';
+
+ @override
+ String get aboutBusyMaxDescription => 'カレンダーとタスク';
+
+ @override
+ String get license => 'ライセンス';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'ウェブサイト';
+
+ @override
+ String get sourceCode => 'ソースコード';
+
+ @override
+ String get reportAnIssue => '問題を報告';
+
+ @override
+ String get sendFeedback => 'フィードバックを送信';
+
+ @override
+ String get feedbackSubmit => '送信';
+
+ @override
+ String get feedbackCategory => 'カテゴリー';
+
+ @override
+ String get feedbackSelectCategory => 'カテゴリーを選択';
+
+ @override
+ String get feedbackCategoryProblem => '問題またはバグ';
+
+ @override
+ String get feedbackCategoryFeature => '機能のリクエスト';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => 'プライバシーまたはセキュリティに関する懸念';
+
+ @override
+ String get feedbackCategoryUsability => '使いやすさに関する懸念';
+
+ @override
+ String get feedbackCategoryOther => 'その他';
+
+ @override
+ String get feedbackSubject => '件名';
+
+ @override
+ String get feedbackDetailedMessage => '詳しい内容';
+
+ @override
+ String get feedbackReplyEmail => '返信先メールアドレス(任意)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => '技術情報を含める';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Linux オペレーティングシステムのバージョンとアプリのロケールのみが追加されます。ログ、アカウントデータ、ファイル名、その他の診断情報は含まれません。';
+
+ @override
+ String get feedbackCategoryRequired => 'カテゴリーを選択してください。';
+
+ @override
+ String get feedbackSubjectLengthError => '件名は3文字以上120文字以下にしてください。';
+
+ @override
+ String get feedbackMessageLengthError => 'メッセージは10文字以上5,000文字以下にしてください。';
+
+ @override
+ String get feedbackInvalidEmail => '有効なメールアドレスを入力してください。';
+
+ @override
+ String get feedbackConnectionError =>
+ 'BusyStack に接続できませんでした。接続を確認して、もう一度お試しください。';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'リクエストがタイムアウトしました。フィードバックは消去されていません。もう一度お試しください。';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'このネットワークから送信されたフィードバックが多すぎます。しばらく待ってから、もう一度お試しください。';
+
+ @override
+ String get feedbackRejectedError => 'サーバーが送信を拒否しました。入力内容を確認して、もう一度お試しください。';
+
+ @override
+ String get feedbackServerError =>
+ '現在、BusyStack はフィードバックを受け付けられません。フィードバックは消去されていません。もう一度お試しください。';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'フィードバックを送信しました。参照番号: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'サイドバーの表示を切り替え';
+
+ @override
+ String get showSidebar => 'サイドバーパネルを表示';
+
+ @override
+ String get hideSidebar => 'サイドバーパネルを非表示';
+
+ @override
+ String get accounts => 'アカウント';
+
+ @override
+ String get currentAccount => '現在のアカウント';
+
+ @override
+ String get switchAccount => 'アカウントを切り替え';
+
+ @override
+ String get addGoogleAccount => 'Google アカウントを追加';
+
+ @override
+ String get addMicrosoftAccount => 'Microsoft アカウントを追加';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'サインイン済み';
+
+ @override
+ String get removeAccount => 'アカウントを削除…';
+
+ @override
+ String get removingAccount => 'アカウントを削除しています…';
+
+ @override
+ String get removeAccountDescription => '同期を停止し、このアカウントのデータをこのデバイスから削除します。';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'BusyMax から $account を削除しますか?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'このデバイスにキャッシュされたタスク、カレンダー、予定、リマインダー、保留中のオフライン変更が削除されます。同期されていない変更は失われます。Google または Microsoft から削除されるデータはありません。';
+
+ @override
+ String get revokeGoogleAccess => 'この Google アカウントへの BusyMax のアクセス権も取り消す';
+
+ @override
+ String get revokeGoogleAccessDescription => '再接続する前に、もう一度アクセスを許可する必要があります。';
+
+ @override
+ String get removeAccountAction => 'アカウントを削除';
+
+ @override
+ String get removeAccountFailed => 'アカウントの削除を完了できませんでした。もう一度お試しください。';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'アカウントはこのデバイスから削除されましたが、BusyMax は Google アカウントへのアクセス権を取り消せませんでした。Google アカウントの設定から取り消すことができます。';
+
+ @override
+ String get newList => '新しいリスト';
+
+ @override
+ String get signInToViewTaskLists => 'タスクリストを表示するにはサインインしてください。';
+
+ @override
+ String get noTaskListsSynced => '同期済みのタスクリストはまだありません。';
+
+ @override
+ String get listActions => 'リストの操作';
+
+ @override
+ String get rename => '名前を変更';
+
+ @override
+ String get delete => '削除';
+
+ @override
+ String get renameList => 'リスト名を変更';
+
+ @override
+ String get deleteList => 'リストを削除';
+
+ @override
+ String get builtInMicrosoftList => '組み込み';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Microsoft To Do の組み込みリストは、名前の変更や削除ができません。';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Google Tasks から「$title」を削除しますか?';
+ }
+
+ @override
+ String get deleteEvent => '予定を削除';
+
+ @override
+ String get title => 'タイトル';
+
+ @override
+ String get create => '作成';
+
+ @override
+ String get newTask => '新しいタスク';
+
+ @override
+ String get clearCompleted => '完了済みを消去';
+
+ @override
+ String get refreshList => 'リストを更新';
+
+ @override
+ String get refreshAll => 'すべて更新';
+
+ @override
+ String get listRefreshed => 'リストを更新しました。';
+
+ @override
+ String get allTasksRefreshed => 'すべてのアカウントを更新しました。';
+
+ @override
+ String exportedFile(String path) {
+ return '$path にエクスポートしました';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'エクスポートに失敗しました: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return '更新に失敗しました: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => '開始するには、タスクリストを選択または作成してください。';
+
+ @override
+ String get signInToViewTasks => 'タスクを表示するにはサインインしてください。';
+
+ @override
+ String get noTasks => 'タスクはありません。';
+
+ @override
+ String get noTasksYet => 'タスクはまだありません';
+
+ @override
+ String get noTasksYetMessage => 'タスクを作成するか、アカウントを更新して始めましょう。';
+
+ @override
+ String get noTasksInList => 'このリストにタスクはありません。';
+
+ @override
+ String get overdue => '期限超過';
+
+ @override
+ String get today => '今日';
+
+ @override
+ String get tomorrow => '明日';
+
+ @override
+ String get upcoming => '今後';
+
+ @override
+ String get noDate => '日付なし';
+
+ @override
+ String get completed => '完了';
+
+ @override
+ String duePrefix(String date) {
+ return '期限: $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'タスクの詳細';
+
+ @override
+ String get editTask => 'タスクを編集';
+
+ @override
+ String get noTaskSelected => 'タスクが選択されていません。';
+
+ @override
+ String get noTaskSelectedHelper => '詳細を表示して編集するタスクを選択してください。';
+
+ @override
+ String get taskUnavailable => 'タスクを利用できません。';
+
+ @override
+ String get signInToEditTasks => 'タスクを編集するにはサインインしてください。';
+
+ @override
+ String get refreshTask => 'タスクを更新';
+
+ @override
+ String get primarySection => '基本情報';
+
+ @override
+ String get statusSection => 'ステータス';
+
+ @override
+ String get openStatus => '未完了';
+
+ @override
+ String get doneStatus => '完了';
+
+ @override
+ String get notes => 'メモ';
+
+ @override
+ String get dueDate => '期限日';
+
+ @override
+ String get clearDueDate => '期限日を消去';
+
+ @override
+ String get dueTime => '期限時刻';
+
+ @override
+ String get startDate => '開始日';
+
+ @override
+ String get startTime => '開始時刻';
+
+ @override
+ String get endDate => '終了日';
+
+ @override
+ String get endTime => '終了時刻';
+
+ @override
+ String get reminderDate => 'リマインダーの日付';
+
+ @override
+ String get reminderTime => 'リマインダーの時刻';
+
+ @override
+ String get reminder => 'リマインダー';
+
+ @override
+ String get addReminder => 'リマインダーを追加';
+
+ @override
+ String get addGuest => 'ゲストを追加';
+
+ @override
+ String get addGuestEmail => 'ゲストのメールアドレスを追加';
+
+ @override
+ String get removeReminder => 'リマインダーを削除';
+
+ @override
+ String get off => 'オフ';
+
+ @override
+ String get repeat => '繰り返し';
+
+ @override
+ String get repeatNone => 'なし';
+
+ @override
+ String get noneValue => 'なし';
+
+ @override
+ String get repeatDaily => '毎日';
+
+ @override
+ String get repeatWeekly => '毎週';
+
+ @override
+ String get repeatMonthly => '毎月';
+
+ @override
+ String get repeatYearly => '毎年';
+
+ @override
+ String get importance => '重要度';
+
+ @override
+ String get importanceLow => '低';
+
+ @override
+ String get importanceNormal => '標準';
+
+ @override
+ String get importanceHigh => '高';
+
+ @override
+ String get categories => 'カテゴリー';
+
+ @override
+ String get scheduleSection => 'スケジュール';
+
+ @override
+ String get dueGroup => '期限';
+
+ @override
+ String get startGroup => '開始';
+
+ @override
+ String get reminderGroup => 'リマインダー';
+
+ @override
+ String get organizationSection => '整理';
+
+ @override
+ String get actionsSection => '操作';
+
+ @override
+ String get advancedSection => '詳細設定';
+
+ @override
+ String get addCategory => 'カテゴリーを追加';
+
+ @override
+ String get list => 'リスト';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'このバージョンでは、Microsoft To Do アカウントのリスト間でタスクを移動できません。';
+
+ @override
+ String get createSubtask => 'サブタスクを作成';
+
+ @override
+ String get moveToTop => '一番上に移動';
+
+ @override
+ String get deleteTask => 'タスクを削除';
+
+ @override
+ String get newSubtask => '新しいサブタスク';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Google Tasks から「$title」を削除しますか?';
+ }
+
+ @override
+ String get metadata => 'メタデータ';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => '更新日時';
+
+ @override
+ String get parent => '親タスク';
+
+ @override
+ String get position => '位置';
+
+ @override
+ String get webLink => 'ウェブリンク';
+
+ @override
+ String get assignment => '割り当て';
+
+ @override
+ String get localState => 'ローカル状態';
+
+ @override
+ String get pendingSync => '同期待ち';
+
+ @override
+ String get synced => '同期済み';
+
+ @override
+ String get account => 'アカウント';
+
+ @override
+ String get sync => '同期';
+
+ @override
+ String get manualFullSync => '手動ですべて同期';
+
+ @override
+ String get runInBackgroundWhenClosed => 'ウィンドウを閉じてもバックグラウンドで実行を続ける';
+
+ @override
+ String get showTrayIcon => 'トレイアイコンを表示';
+
+ @override
+ String get startMinimizedToTray => 'トレイに最小化して起動';
+
+ @override
+ String get requiresTrayIcon => 'トレイアイコンが必要です。';
+
+ @override
+ String get syncComplete => '同期が完了しました。';
+
+ @override
+ String syncFailed(String error) {
+ return '同期に失敗しました: $error';
+ }
+
+ @override
+ String get notifySyncFailures => '同期失敗時に通知';
+
+ @override
+ String get notifyConflicts => '競合時に通知';
+
+ @override
+ String get notifyDueToday => '今日が期限のタスクを通知';
+
+ @override
+ String get eventReminders => '予定のリマインダー';
+
+ @override
+ String get taskReminders => 'タスクのリマインダー';
+
+ @override
+ String get notificationDetailLevel => '通知の詳細度';
+
+ @override
+ String get notificationDetailPrivate => '非公開';
+
+ @override
+ String get notificationDetailNormal => '標準';
+
+ @override
+ String get quietHours => '通知を停止する時間';
+
+ @override
+ String get quietHoursDescription => 'この時間帯は通知を一時停止します。';
+
+ @override
+ String get quietHoursStart => '通知停止の開始時刻';
+
+ @override
+ String get quietHoursEnd => '通知停止の終了時刻';
+
+ @override
+ String get notifications => '通知';
+
+ @override
+ String get appearance => '外観';
+
+ @override
+ String get theme => 'テーマ';
+
+ @override
+ String get themeSystem => 'システム';
+
+ @override
+ String get themeLight => 'ライト';
+
+ @override
+ String get themeDark => 'ダーク';
+
+ @override
+ String get themeFamily => 'テーマファミリー';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu ネイティブ(Yaru)';
+
+ @override
+ String get localization => '言語と地域';
+
+ @override
+ String get currentLocale => '現在のロケール';
+
+ @override
+ String get privacy => 'プライバシー';
+
+ @override
+ String get redactTaskContentInDiagnostics => '診断情報でタスクの内容を伏せる';
+
+ @override
+ String get developerDiagnostics => '開発者向け診断';
+
+ @override
+ String get diagnostics => '診断';
+
+ @override
+ String get apiInspectorDisabled => 'API インスペクターを表示';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery リビジョン: $revision';
+ }
+
+ @override
+ String get implementedMethods => '実装済みメソッド';
+
+ @override
+ String get supportsTasksScopes => 'tasks および tasks.readonly スコープをサポート';
+
+ @override
+ String get requiresTasksScope => 'tasks スコープが必要';
+
+ @override
+ String get blockedPendingOperations => 'ブロックされた保留中の操作';
+
+ @override
+ String get signInToInspectPendingOperations => '保留中の操作を確認するにはサインインしてください。';
+
+ @override
+ String get noBlockedPendingOperations => 'ブロックされた保留中の操作はありません。';
+
+ @override
+ String get operationActions => '操作への対応';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'リスト=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'タスク=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return '試行回数=$count';
+ }
+
+ @override
+ String get retry => '再試行';
+
+ @override
+ String get discard => '破棄';
+
+ @override
+ String get discardChangesAction => '破棄';
+
+ @override
+ String get discardChanges => '変更を破棄しますか?';
+
+ @override
+ String get discardChangesConfirmation => 'このタスクの未保存の編集内容を破棄します。';
+
+ @override
+ String get retryCompleted => '再試行が完了しました。';
+
+ @override
+ String get discardPendingOperation => '保留中の操作を破棄しますか?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'ブロックされたローカル操作を削除します。次回の同期時に Google Tasks からデータが再取得されます。';
+
+ @override
+ String get pendingOperationDiscarded => '保留中の操作を破棄しました。';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax の同期に失敗';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'バックグラウンド同期に失敗しました。$message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax の同期競合';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return '保留中のローカル変更がブロックされました。$summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => '今日が期限のタスク';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '今日が期限のタスクが$count件あります。',
+ one: '今日が期限のタスクが1件あります。',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => '予定のリマインダー';
+
+ @override
+ String get taskReminderNotificationTitle => 'タスクのリマインダー';
+
+ @override
+ String get eventReminderNotificationBody => '予定がまもなく始まります。';
+
+ @override
+ String get taskReminderNotificationBody => 'タスクの期限が近づいています。';
+
+ @override
+ String get notificationOpenAction => '開く';
+
+ @override
+ String get notificationDetailsHidden => 'プライバシー設定により詳細は非表示です。';
+
+ @override
+ String get previousMonth => '前の月';
+
+ @override
+ String get nextMonth => '次の月';
+
+ @override
+ String get openMonthView => '月表示を開く';
+
+ @override
+ String get previousYear => '前の年';
+
+ @override
+ String get nextYear => '次の年';
+
+ @override
+ String get openYearView => '年表示を開く';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return '第$number週';
+ }
+
+ @override
+ String get resizeAllDayPanel => '終日パネルのサイズを変更';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count件',
+ one: '1件',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'このカレンダーは読み取り専用です。';
+
+ @override
+ String get selectTimeZone => 'タイムゾーンを選択';
+
+ @override
+ String get searchLocations => '場所を検索';
+
+ @override
+ String get noLocationsFound => '場所が見つかりません';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '「$title」を削除しますか?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart
new file mode 100644
index 0000000..dee60a8
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_ko.dart
@@ -0,0 +1,1226 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Korean (`ko`).
+class AppLocalizationsKo extends AppLocalizations {
+ AppLocalizationsKo([String locale = 'ko']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Google 및 Microsoft 계정을 연결하여 캘린더와 할 일을 동기화하세요.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Google 권한 화면에서 캘린더와 할 일 권한을 모두 선택하세요.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Google Calendar 및 Google Tasks 권한이 필요합니다. 다시 시도하여 두 체크박스를 모두 선택하세요.';
+
+ @override
+ String get finishSetup => '설정 완료';
+
+ @override
+ String get continueSetup => '계속';
+
+ @override
+ String get onboardingSetupTitle => 'BusyMax 설정';
+
+ @override
+ String get onboardingAccountsStepTitle => '계정 연결';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ '사용할 Google 및 Microsoft 계정을 모두 추가하세요. BusyMax는 각 계정의 캘린더, 일정, 할 일 목록 및 할 일을 동기화합니다.';
+
+ @override
+ String get onboardingPreferencesStepTitle => '시스템 설정 선택';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ '일정을 열기 전에 데스크톱 동작, 미리 알림, 알림 세부 수준 및 화면 모양을 설정하세요.';
+
+ @override
+ String get signInWithGoogle => 'Google로 로그인';
+
+ @override
+ String get signInWithMicrosoft => 'Microsoft로 로그인';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => '이 서비스는 설정되어 있지 않습니다.';
+
+ @override
+ String get waitingForGoogleSignIn => 'Google 로그인을 기다리는 중...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'Microsoft 로그인을 기다리는 중...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Microsoft 로그인이 구성되지 않았습니다. MICROSOFT_OAUTH_CLIENT_ID를 설정하세요.';
+
+ @override
+ String get cancel => '취소';
+
+ @override
+ String get close => '닫기';
+
+ @override
+ String get exit => '종료';
+
+ @override
+ String get options => '옵션';
+
+ @override
+ String get hide => '숨기기';
+
+ @override
+ String get show => '표시';
+
+ @override
+ String get export => '내보내기';
+
+ @override
+ String get save => '저장';
+
+ @override
+ String get settings => '설정';
+
+ @override
+ String get all => '모두';
+
+ @override
+ String get calendarEvents => '일정';
+
+ @override
+ String get calendarTasks => '할 일';
+
+ @override
+ String get calendar => '캘린더';
+
+ @override
+ String get calendars => '캘린더';
+
+ @override
+ String get newEvent => '새 일정';
+
+ @override
+ String get refreshCalendar => '캘린더 새로 고침';
+
+ @override
+ String get openInProvider => '서비스에서 열기';
+
+ @override
+ String get hideFromSchedule => '일정에서 숨기기';
+
+ @override
+ String get showInSchedule => '일정에 표시';
+
+ @override
+ String get noCalendarsSynced => '아직 동기화된 캘린더가 없습니다.';
+
+ @override
+ String get allDay => '하루 종일';
+
+ @override
+ String moreItems(int count) {
+ return '+$count개 더 보기';
+ }
+
+ @override
+ String get noEventsOrTasks => '일정 또는 할 일이 없습니다';
+
+ @override
+ String get scheduleLoading => '일정을 불러오는 중...';
+
+ @override
+ String get scheduleUnavailable => '일정을 사용할 수 없습니다';
+
+ @override
+ String get scheduleNoSources => '표시할 캘린더 또는 할 일 목록이 없습니다';
+
+ @override
+ String get scheduleNoSourcesDescription => '설정에서 표시할 항목을 선택한 다음 새로 고침하세요.';
+
+ @override
+ String get scheduleSignInRequired => '계정 연결';
+
+ @override
+ String get scheduleSignInDescription => '캘린더와 할 일을 동기화하려면 로그인하세요.';
+
+ @override
+ String get scheduleNoSearchResults => '일치하는 일정 또는 할 일이 없습니다';
+
+ @override
+ String get scheduleNoSearchResultsDescription => '다른 검색어를 사용하거나 현재 필터를 지우세요.';
+
+ @override
+ String get refresh => '새로 고침';
+
+ @override
+ String get trayOpenBusyMax => 'BusyMax 열기';
+
+ @override
+ String get agendaLoadMoreOverdue => '기한이 지난 할 일 더 불러오기';
+
+ @override
+ String get agendaLoadMoreNoDate => '날짜 없는 할 일 더 불러오기';
+
+ @override
+ String get viewDay => '일';
+
+ @override
+ String get viewWeek => '주';
+
+ @override
+ String get viewMonth => '월';
+
+ @override
+ String get viewYear => '년';
+
+ @override
+ String get viewAgenda => '일정 목록';
+
+ @override
+ String get scheduleSettings => '일정';
+
+ @override
+ String get scheduleDisplaySettings => '일정 표시';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ '일간 및 주간 보기는 처음에 이 시간 범위를 표시합니다. 필요한 경우 더 이르거나 늦은 항목에 맞춰 범위가 확장됩니다.';
+
+ @override
+ String get scheduleDayStartsAt => '하루 시작 시간';
+
+ @override
+ String get scheduleDayEndsAt => '하루 종료 시간';
+
+ @override
+ String get sourceCalendar => '캘린더';
+
+ @override
+ String get sourceTaskList => '할 일 목록';
+
+ @override
+ String get createChoiceTitle => '만들기';
+
+ @override
+ String get createEventAtTime => '일정';
+
+ @override
+ String get createTaskAtDate => '할 일';
+
+ @override
+ String get editEvent => '일정 편집';
+
+ @override
+ String get eventTitle => '일정 제목';
+
+ @override
+ String get location => '위치';
+
+ @override
+ String get timeSlot => '시간대';
+
+ @override
+ String get startDateTime => '시작 날짜/시간';
+
+ @override
+ String get endDateTime => '종료 날짜/시간';
+
+ @override
+ String get doesNotRepeat => '반복 안 함';
+
+ @override
+ String get defaultReminder => '기본 미리 알림';
+
+ @override
+ String get guests => '참석자';
+
+ @override
+ String get noGuests => '참석자 없음';
+
+ @override
+ String get description => '설명';
+
+ @override
+ String get availabilityShowAs => '일정 상태 / 표시 방식';
+
+ @override
+ String get busy => '바쁨';
+
+ @override
+ String get visibility => '공개 범위';
+
+ @override
+ String get defaultVisibility => '기본 공개 범위';
+
+ @override
+ String get conference => '회의';
+
+ @override
+ String get noConference => '회의 없음';
+
+ @override
+ String get providerCalendar => '서비스 캘린더';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => '굵게';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => '기울임꼴';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => '밑줄';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes분 전',
+ one: '1분 전',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => '시작 시';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours시간 전',
+ one: '1시간 전',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days일 전',
+ one: '1일 전',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => '한가함';
+
+ @override
+ String get availabilityTentative => '미정';
+
+ @override
+ String get availabilityOutOfOffice => '부재중';
+
+ @override
+ String get availabilityWorkingElsewhere => '다른 장소에서 근무';
+
+ @override
+ String get visibilityDefault => '기본값';
+
+ @override
+ String get visibilityPublic => '공개';
+
+ @override
+ String get visibilityPrivate => '비공개';
+
+ @override
+ String get visibilityConfidential => '기밀';
+
+ @override
+ String get sensitivityNormal => '일반';
+
+ @override
+ String get sensitivityPersonal => '개인';
+
+ @override
+ String get tasks => '할 일';
+
+ @override
+ String get allTasks => '모든 할 일';
+
+ @override
+ String tasksInList(String title) {
+ return '$title의 할 일';
+ }
+
+ @override
+ String get taskLists => '할 일 목록';
+
+ @override
+ String get navigation => '탐색';
+
+ @override
+ String get mainMenu => '주 메뉴';
+
+ @override
+ String get keyboardShortcuts => '키보드 단축키';
+
+ @override
+ String get shortcutGroupGeneral => '일반';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => '이 단축키 도움말 표시';
+
+ @override
+ String get shortcutGroupNavigation => '탐색';
+
+ @override
+ String get shortcutNextPeriod => '다음 기간';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ '주간 보기에서는 다음 주, 월간 보기에서는 다음 달로 이동하는 식입니다';
+
+ @override
+ String get shortcutPreviousPeriod => '이전 기간';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ '주간 보기에서는 이전 주, 월간 보기에서는 이전 달로 이동하는 식입니다';
+
+ @override
+ String get shortcutJumpToToday => '오늘로 이동';
+
+ @override
+ String get shortcutGroupView => '보기';
+
+ @override
+ String get shortcutDayView => '일간 보기';
+
+ @override
+ String get shortcutWeekView => '주간 보기';
+
+ @override
+ String get shortcutMonthView => '월간 보기';
+
+ @override
+ String get shortcutYearView => '연간 보기';
+
+ @override
+ String get shortcutAgendaView => '일정 목록 보기';
+
+ @override
+ String get shortcutGroupCreateAndEdit => '만들기 및 편집';
+
+ @override
+ String get shortcutSaveItem => '일정 또는 할 일 저장';
+
+ @override
+ String get shortcutDeleteItem => '일정 또는 할 일 삭제';
+
+ @override
+ String get shortcutGroupTaskEditing => '할 일 편집';
+
+ @override
+ String get shortcutCancelEditing => '편집 취소';
+
+ @override
+ String get shortcutCancelEditingDescription => '할 일 편집 또는 할 일 세부 정보 닫기';
+
+ @override
+ String get aboutBusyMax => 'BusyMax 정보';
+
+ @override
+ String get aboutBusyMaxDescription => '캘린더와 할 일';
+
+ @override
+ String get license => '라이선스';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => '웹사이트';
+
+ @override
+ String get sourceCode => '소스 코드';
+
+ @override
+ String get reportAnIssue => '문제 신고';
+
+ @override
+ String get sendFeedback => '의견 보내기';
+
+ @override
+ String get feedbackSubmit => '제출';
+
+ @override
+ String get feedbackCategory => '범주';
+
+ @override
+ String get feedbackSelectCategory => '범주 선택';
+
+ @override
+ String get feedbackCategoryProblem => '문제 또는 버그';
+
+ @override
+ String get feedbackCategoryFeature => '기능 요청';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => '개인정보 보호 또는 보안 우려';
+
+ @override
+ String get feedbackCategoryUsability => '사용 편의성 문제';
+
+ @override
+ String get feedbackCategoryOther => '기타';
+
+ @override
+ String get feedbackSubject => '제목';
+
+ @override
+ String get feedbackDetailedMessage => '자세한 내용';
+
+ @override
+ String get feedbackReplyEmail => '답변 받을 이메일 주소(선택 사항)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => '기술 세부 정보 포함';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Linux 운영 체제 버전과 앱 로캘만 추가됩니다. 로그, 계정 데이터, 파일 이름 또는 기타 진단 정보는 포함되지 않습니다.';
+
+ @override
+ String get feedbackCategoryRequired => '범주를 선택하세요.';
+
+ @override
+ String get feedbackSubjectLengthError => '제목은 3~120자여야 합니다.';
+
+ @override
+ String get feedbackMessageLengthError => '메시지는 10~5,000자여야 합니다.';
+
+ @override
+ String get feedbackInvalidEmail => '올바른 이메일 주소를 입력하세요.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'BusyStack에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요.';
+
+ @override
+ String get feedbackTimeoutError =>
+ '요청 시간이 초과되었습니다. 의견은 지워지지 않았습니다. 다시 시도하세요.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ '이 네트워크에서 너무 많은 의견이 제출되었습니다. 잠시 기다린 후 다시 시도하세요.';
+
+ @override
+ String get feedbackRejectedError => '서버가 제출을 거부했습니다. 입력란을 검토하고 다시 시도하세요.';
+
+ @override
+ String get feedbackServerError =>
+ '현재 BusyStack에서 의견을 받을 수 없습니다. 의견은 지워지지 않았습니다. 다시 시도하세요.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return '의견을 보냈습니다. 참조: $id';
+ }
+
+ @override
+ String get toggleSidebar => '사이드바 표시 전환';
+
+ @override
+ String get showSidebar => '사이드바 패널 표시';
+
+ @override
+ String get hideSidebar => '사이드바 패널 숨기기';
+
+ @override
+ String get accounts => '계정';
+
+ @override
+ String get currentAccount => '현재 계정';
+
+ @override
+ String get switchAccount => '계정 전환';
+
+ @override
+ String get addGoogleAccount => 'Google 계정 추가';
+
+ @override
+ String get addMicrosoftAccount => 'Microsoft 계정 추가';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => '로그인됨';
+
+ @override
+ String get removeAccount => '계정 삭제…';
+
+ @override
+ String get removingAccount => '계정 삭제 중…';
+
+ @override
+ String get removeAccountDescription => '동기화를 중지하고 이 기기에서 이 계정의 데이터를 삭제합니다.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'BusyMax에서 $account 계정을 삭제할까요?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ '이 기기에서 캐시된 할 일, 캘린더, 일정, 미리 알림 및 보류 중인 오프라인 변경 사항이 삭제됩니다. 동기화되지 않은 변경 사항은 사라집니다. Google 또는 Microsoft에서는 아무것도 삭제되지 않습니다.';
+
+ @override
+ String get revokeGoogleAccess => '이 Google 계정에 대한 BusyMax의 액세스 권한도 취소';
+
+ @override
+ String get revokeGoogleAccessDescription => '다시 연결하기 전에 액세스 권한을 다시 부여해야 합니다.';
+
+ @override
+ String get removeAccountAction => '계정 삭제';
+
+ @override
+ String get removeAccountFailed => '계정 삭제를 완료할 수 없습니다. 다시 시도하세요.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ '계정은 이 기기에서 삭제되었지만 BusyMax가 Google 계정 액세스 권한을 취소하지 못했습니다. Google 계정에서 직접 취소할 수 있습니다.';
+
+ @override
+ String get newList => '새 목록';
+
+ @override
+ String get signInToViewTaskLists => '할 일 목록을 보려면 로그인하세요.';
+
+ @override
+ String get noTaskListsSynced => '아직 동기화된 할 일 목록이 없습니다.';
+
+ @override
+ String get listActions => '목록 작업';
+
+ @override
+ String get rename => '이름 바꾸기';
+
+ @override
+ String get delete => '삭제';
+
+ @override
+ String get renameList => '목록 이름 바꾸기';
+
+ @override
+ String get deleteList => '목록 삭제';
+
+ @override
+ String get builtInMicrosoftList => '기본 제공';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Microsoft To Do의 기본 제공 목록은 이름을 바꾸거나 삭제할 수 없습니다.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Google Tasks에서 “$title” 목록을 삭제할까요?';
+ }
+
+ @override
+ String get deleteEvent => '일정 삭제';
+
+ @override
+ String get title => '제목';
+
+ @override
+ String get create => '만들기';
+
+ @override
+ String get newTask => '새 할 일';
+
+ @override
+ String get clearCompleted => '완료된 항목 지우기';
+
+ @override
+ String get refreshList => '목록 새로 고침';
+
+ @override
+ String get refreshAll => '모두 새로 고침';
+
+ @override
+ String get listRefreshed => '목록을 새로 고쳤습니다.';
+
+ @override
+ String get allTasksRefreshed => '모든 계정을 새로 고쳤습니다.';
+
+ @override
+ String exportedFile(String path) {
+ return '$path에 내보냈습니다';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return '내보내기 실패: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return '새로 고침 실패: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => '시작하려면 할 일 목록을 선택하거나 만드세요.';
+
+ @override
+ String get signInToViewTasks => '할 일을 보려면 로그인하세요.';
+
+ @override
+ String get noTasks => '할 일이 없습니다.';
+
+ @override
+ String get noTasksYet => '아직 할 일이 없습니다';
+
+ @override
+ String get noTasksYetMessage => '할 일을 만들거나 계정을 새로 고쳐 시작하세요.';
+
+ @override
+ String get noTasksInList => '이 목록에 할 일이 없습니다.';
+
+ @override
+ String get overdue => '기한 지남';
+
+ @override
+ String get today => '오늘';
+
+ @override
+ String get tomorrow => '내일';
+
+ @override
+ String get upcoming => '예정';
+
+ @override
+ String get noDate => '날짜 없음';
+
+ @override
+ String get completed => '완료';
+
+ @override
+ String duePrefix(String date) {
+ return '$date 마감';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => '할 일 세부 정보';
+
+ @override
+ String get editTask => '할 일 편집';
+
+ @override
+ String get noTaskSelected => '선택된 할 일이 없습니다.';
+
+ @override
+ String get noTaskSelectedHelper => '세부 정보를 보고 편집할 할 일을 선택하세요.';
+
+ @override
+ String get taskUnavailable => '할 일을 사용할 수 없습니다.';
+
+ @override
+ String get signInToEditTasks => '할 일을 편집하려면 로그인하세요.';
+
+ @override
+ String get refreshTask => '할 일 새로 고침';
+
+ @override
+ String get primarySection => '기본';
+
+ @override
+ String get statusSection => '상태';
+
+ @override
+ String get openStatus => '미완료';
+
+ @override
+ String get doneStatus => '완료';
+
+ @override
+ String get notes => '메모';
+
+ @override
+ String get dueDate => '마감일';
+
+ @override
+ String get clearDueDate => '마감일 지우기';
+
+ @override
+ String get dueTime => '마감 시간';
+
+ @override
+ String get startDate => '시작일';
+
+ @override
+ String get startTime => '시작 시간';
+
+ @override
+ String get endDate => '종료일';
+
+ @override
+ String get endTime => '종료 시간';
+
+ @override
+ String get reminderDate => '미리 알림 날짜';
+
+ @override
+ String get reminderTime => '미리 알림 시간';
+
+ @override
+ String get reminder => '미리 알림';
+
+ @override
+ String get addReminder => '미리 알림 추가';
+
+ @override
+ String get addGuest => '참석자 추가';
+
+ @override
+ String get addGuestEmail => '참석자 이메일 추가';
+
+ @override
+ String get removeReminder => '미리 알림 삭제';
+
+ @override
+ String get off => '끔';
+
+ @override
+ String get repeat => '반복';
+
+ @override
+ String get repeatNone => '없음';
+
+ @override
+ String get noneValue => '없음';
+
+ @override
+ String get repeatDaily => '매일';
+
+ @override
+ String get repeatWeekly => '매주';
+
+ @override
+ String get repeatMonthly => '매월';
+
+ @override
+ String get repeatYearly => '매년';
+
+ @override
+ String get importance => '중요도';
+
+ @override
+ String get importanceLow => '낮음';
+
+ @override
+ String get importanceNormal => '보통';
+
+ @override
+ String get importanceHigh => '높음';
+
+ @override
+ String get categories => '범주';
+
+ @override
+ String get scheduleSection => '일정';
+
+ @override
+ String get dueGroup => '마감';
+
+ @override
+ String get startGroup => '시작';
+
+ @override
+ String get reminderGroup => '미리 알림';
+
+ @override
+ String get organizationSection => '구성';
+
+ @override
+ String get actionsSection => '작업';
+
+ @override
+ String get advancedSection => '고급';
+
+ @override
+ String get addCategory => '범주 추가';
+
+ @override
+ String get list => '목록';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ '이 버전에서는 Microsoft To Do 계정의 목록 간에 할 일을 이동할 수 없습니다.';
+
+ @override
+ String get createSubtask => '하위 할 일 만들기';
+
+ @override
+ String get moveToTop => '맨 위로 이동';
+
+ @override
+ String get deleteTask => '할 일 삭제';
+
+ @override
+ String get newSubtask => '새 하위 할 일';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Google Tasks에서 “$title” 항목을 삭제할까요?';
+ }
+
+ @override
+ String get metadata => '메타데이터';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => '업데이트됨';
+
+ @override
+ String get parent => '상위 할 일';
+
+ @override
+ String get position => '위치';
+
+ @override
+ String get webLink => '웹 링크';
+
+ @override
+ String get assignment => '할당';
+
+ @override
+ String get localState => '로컬 상태';
+
+ @override
+ String get pendingSync => '동기화 보류 중';
+
+ @override
+ String get synced => '동기화됨';
+
+ @override
+ String get account => '계정';
+
+ @override
+ String get sync => '동기화';
+
+ @override
+ String get manualFullSync => '수동 전체 동기화';
+
+ @override
+ String get runInBackgroundWhenClosed => '창을 닫아도 계속 실행';
+
+ @override
+ String get showTrayIcon => '트레이 아이콘 표시';
+
+ @override
+ String get startMinimizedToTray => '트레이에 최소화하여 시작';
+
+ @override
+ String get requiresTrayIcon => '트레이 아이콘이 필요합니다.';
+
+ @override
+ String get syncComplete => '동기화가 완료되었습니다.';
+
+ @override
+ String syncFailed(String error) {
+ return '동기화 실패: $error';
+ }
+
+ @override
+ String get notifySyncFailures => '동기화 실패 알림';
+
+ @override
+ String get notifyConflicts => '충돌 알림';
+
+ @override
+ String get notifyDueToday => '오늘 마감인 할 일 알림';
+
+ @override
+ String get eventReminders => '일정 미리 알림';
+
+ @override
+ String get taskReminders => '할 일 미리 알림';
+
+ @override
+ String get notificationDetailLevel => '알림 세부 수준';
+
+ @override
+ String get notificationDetailPrivate => '비공개';
+
+ @override
+ String get notificationDetailNormal => '일반';
+
+ @override
+ String get quietHours => '방해 금지 시간';
+
+ @override
+ String get quietHoursDescription => '이 시간 동안 알림을 일시 중지합니다.';
+
+ @override
+ String get quietHoursStart => '방해 금지 시작 시간';
+
+ @override
+ String get quietHoursEnd => '방해 금지 종료 시간';
+
+ @override
+ String get notifications => '알림';
+
+ @override
+ String get appearance => '화면 모양';
+
+ @override
+ String get theme => '테마';
+
+ @override
+ String get themeSystem => '시스템';
+
+ @override
+ String get themeLight => '라이트';
+
+ @override
+ String get themeDark => '다크';
+
+ @override
+ String get themeFamily => '테마 계열';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu 기본 테마(Yaru)';
+
+ @override
+ String get localization => '언어 및 지역';
+
+ @override
+ String get currentLocale => '현재 로캘';
+
+ @override
+ String get privacy => '개인정보 보호';
+
+ @override
+ String get redactTaskContentInDiagnostics => '진단 정보에서 할 일 내용 숨기기';
+
+ @override
+ String get developerDiagnostics => '개발자 진단';
+
+ @override
+ String get diagnostics => '진단';
+
+ @override
+ String get apiInspectorDisabled => 'API 검사기 표시';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery 리비전: $revision';
+ }
+
+ @override
+ String get implementedMethods => '구현된 메서드';
+
+ @override
+ String get supportsTasksScopes => 'tasks 및 tasks.readonly 범위 지원';
+
+ @override
+ String get requiresTasksScope => 'tasks 범위 필요';
+
+ @override
+ String get blockedPendingOperations => '차단된 보류 작업';
+
+ @override
+ String get signInToInspectPendingOperations => '보류 작업을 확인하려면 로그인하세요.';
+
+ @override
+ String get noBlockedPendingOperations => '차단된 보류 작업이 없습니다.';
+
+ @override
+ String get operationActions => '작업별 조치';
+
+ @override
+ String pendingOpListId(String id) {
+ return '목록=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return '할 일=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return '시도=$count';
+ }
+
+ @override
+ String get retry => '다시 시도';
+
+ @override
+ String get discard => '버리기';
+
+ @override
+ String get discardChangesAction => '변경 사항 버리기';
+
+ @override
+ String get discardChanges => '변경 사항을 버릴까요?';
+
+ @override
+ String get discardChangesConfirmation => '이 할 일에서 저장하지 않은 편집 내용을 버립니다.';
+
+ @override
+ String get retryCompleted => '다시 시도했습니다.';
+
+ @override
+ String get discardPendingOperation => '보류 작업을 버릴까요?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ '차단된 로컬 작업을 삭제합니다. 다음 동기화에서 Google Tasks의 데이터를 새로 불러옵니다.';
+
+ @override
+ String get pendingOperationDiscarded => '보류 작업을 버렸습니다.';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax 동기화 실패';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return '백그라운드 동기화에 실패했습니다. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax 동기화 충돌';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return '보류 중인 로컬 변경 사항이 차단되었습니다. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => '오늘 마감인 할 일';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '오늘 마감인 할 일이 $count개 있습니다.',
+ one: '오늘 마감인 할 일이 1개 있습니다.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => '일정 미리 알림';
+
+ @override
+ String get taskReminderNotificationTitle => '할 일 미리 알림';
+
+ @override
+ String get eventReminderNotificationBody => '일정이 곧 시작됩니다.';
+
+ @override
+ String get taskReminderNotificationBody => '할 일 마감이 얼마 남지 않았습니다.';
+
+ @override
+ String get notificationOpenAction => '열기';
+
+ @override
+ String get notificationDetailsHidden => '개인정보 보호 설정에 따라 세부 정보가 숨겨졌습니다.';
+
+ @override
+ String get previousMonth => '이전 달';
+
+ @override
+ String get nextMonth => '다음 달';
+
+ @override
+ String get openMonthView => '월간 보기 열기';
+
+ @override
+ String get previousYear => '이전 해';
+
+ @override
+ String get nextYear => '다음 해';
+
+ @override
+ String get openYearView => '연간 보기 열기';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return '$number주차';
+ }
+
+ @override
+ String get resizeAllDayPanel => '종일 패널 크기 조절';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '항목 $count개',
+ one: '항목 1개',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => '이 캘린더는 읽기 전용입니다.';
+
+ @override
+ String get selectTimeZone => '시간대 선택';
+
+ @override
+ String get searchLocations => '위치 검색';
+
+ @override
+ String get noLocationsFound => '위치를 찾을 수 없습니다';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '“$title” 캘린더를 삭제할까요?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart
new file mode 100644
index 0000000..14bbdea
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_pt.dart
@@ -0,0 +1,1260 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Portuguese (`pt`).
+class AppLocalizationsPt extends AppLocalizations {
+ AppLocalizationsPt([String locale = 'pt']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Ligue contas Google e Microsoft para sincronizar calendários e tarefas.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'No ecrã de autorizações da Google, selecione as autorizações do Calendário e das Tarefas.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'As autorizações do Calendário Google e do Google Tasks são necessárias. Tente novamente e selecione ambas as caixas.';
+
+ @override
+ String get finishSetup => 'Concluir configuração';
+
+ @override
+ String get continueSetup => 'Continuar';
+
+ @override
+ String get onboardingSetupTitle => 'Configurar o BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Ligar contas';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Adicione todas as contas Google e Microsoft que pretende utilizar. O BusyMax sincroniza calendários, eventos, listas de tarefas e tarefas de cada conta.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'Escolher definições do sistema';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Configure o comportamento da aplicação no ambiente de trabalho, os lembretes, o nível de detalhe das notificações e o aspeto antes de abrir a agenda.';
+
+ @override
+ String get signInWithGoogle => 'Iniciar sessão com a Google';
+
+ @override
+ String get signInWithMicrosoft => 'Iniciar sessão com a Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'Este fornecedor não está configurado.';
+
+ @override
+ String get waitingForGoogleSignIn =>
+ 'A aguardar o início de sessão da Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn =>
+ 'A aguardar o início de sessão da Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'O início de sessão da Microsoft não está configurado. Defina MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Cancelar';
+
+ @override
+ String get close => 'Fechar';
+
+ @override
+ String get exit => 'Sair';
+
+ @override
+ String get options => 'Opções';
+
+ @override
+ String get hide => 'Ocultar';
+
+ @override
+ String get show => 'Mostrar';
+
+ @override
+ String get export => 'Exportar';
+
+ @override
+ String get save => 'Guardar';
+
+ @override
+ String get settings => 'Definições';
+
+ @override
+ String get all => 'Tudo';
+
+ @override
+ String get calendarEvents => 'Eventos';
+
+ @override
+ String get calendarTasks => 'Tarefas';
+
+ @override
+ String get calendar => 'Calendário';
+
+ @override
+ String get calendars => 'Calendários';
+
+ @override
+ String get newEvent => 'Novo evento';
+
+ @override
+ String get refreshCalendar => 'Atualizar calendário';
+
+ @override
+ String get openInProvider => 'Abrir no serviço';
+
+ @override
+ String get hideFromSchedule => 'Ocultar da agenda';
+
+ @override
+ String get showInSchedule => 'Mostrar na agenda';
+
+ @override
+ String get noCalendarsSynced => 'Ainda não há calendários sincronizados.';
+
+ @override
+ String get allDay => 'Todo o dia';
+
+ @override
+ String moreItems(int count) {
+ return '+$count mais';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Sem eventos ou tarefas';
+
+ @override
+ String get scheduleLoading => 'A carregar agenda...';
+
+ @override
+ String get scheduleUnavailable => 'Agenda indisponível';
+
+ @override
+ String get scheduleNoSources =>
+ 'Sem calendários ou listas de tarefas visíveis';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Escolha o que pretende mostrar nas Definições e atualize a agenda.';
+
+ @override
+ String get scheduleSignInRequired => 'Ligar uma conta';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Inicie sessão para sincronizar calendários e tarefas.';
+
+ @override
+ String get scheduleNoSearchResults =>
+ 'Nenhum evento ou tarefa correspondente';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Experimente outra pesquisa ou limpe os filtros atuais.';
+
+ @override
+ String get refresh => 'Atualizar';
+
+ @override
+ String get trayOpenBusyMax => 'Abrir o BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Carregar mais tarefas em atraso';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Carregar mais tarefas sem data';
+
+ @override
+ String get viewDay => 'Dia';
+
+ @override
+ String get viewWeek => 'Semana';
+
+ @override
+ String get viewMonth => 'Mês';
+
+ @override
+ String get viewYear => 'Ano';
+
+ @override
+ String get viewAgenda => 'Agenda';
+
+ @override
+ String get scheduleSettings => 'Agenda';
+
+ @override
+ String get scheduleDisplaySettings => 'Apresentação da agenda';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'As vistas de dia e semana mostram inicialmente este intervalo horário. Os itens anteriores ou posteriores alargam-no quando necessário.';
+
+ @override
+ String get scheduleDayStartsAt => 'O dia começa às';
+
+ @override
+ String get scheduleDayEndsAt => 'O dia termina às';
+
+ @override
+ String get sourceCalendar => 'Calendário';
+
+ @override
+ String get sourceTaskList => 'Lista de tarefas';
+
+ @override
+ String get createChoiceTitle => 'Criar';
+
+ @override
+ String get createEventAtTime => 'Evento';
+
+ @override
+ String get createTaskAtDate => 'Tarefa';
+
+ @override
+ String get editEvent => 'Editar evento';
+
+ @override
+ String get eventTitle => 'Título do evento';
+
+ @override
+ String get location => 'Local';
+
+ @override
+ String get timeSlot => 'Intervalo de tempo';
+
+ @override
+ String get startDateTime => 'Data e hora de início';
+
+ @override
+ String get endDateTime => 'Data e hora de fim';
+
+ @override
+ String get doesNotRepeat => 'Não se repete';
+
+ @override
+ String get defaultReminder => 'Lembrete predefinido';
+
+ @override
+ String get guests => 'Convidados';
+
+ @override
+ String get noGuests => 'Sem convidados';
+
+ @override
+ String get description => 'Descrição';
+
+ @override
+ String get availabilityShowAs => 'Disponibilidade / Mostrar como';
+
+ @override
+ String get busy => 'Ocupado';
+
+ @override
+ String get visibility => 'Visibilidade';
+
+ @override
+ String get defaultVisibility => 'Visibilidade predefinida';
+
+ @override
+ String get conference => 'Conferência';
+
+ @override
+ String get noConference => 'Sem conferência';
+
+ @override
+ String get providerCalendar => 'Calendário do fornecedor';
+
+ @override
+ String get formatBoldShortLabel => 'N';
+
+ @override
+ String get formatBoldTooltip => 'Negrito';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'Itálico';
+
+ @override
+ String get formatUnderlineShortLabel => 'S';
+
+ @override
+ String get formatUnderlineTooltip => 'Sublinhado';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes minutos antes',
+ one: '1 minuto antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'À hora de início';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours horas antes',
+ one: '1 hora antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days dias antes',
+ one: '1 dia antes',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Livre';
+
+ @override
+ String get availabilityTentative => 'Provisório';
+
+ @override
+ String get availabilityOutOfOffice => 'Fora do escritório';
+
+ @override
+ String get availabilityWorkingElsewhere => 'A trabalhar noutro local';
+
+ @override
+ String get visibilityDefault => 'Predefinida';
+
+ @override
+ String get visibilityPublic => 'Pública';
+
+ @override
+ String get visibilityPrivate => 'Privada';
+
+ @override
+ String get visibilityConfidential => 'Confidencial';
+
+ @override
+ String get sensitivityNormal => 'Normal';
+
+ @override
+ String get sensitivityPersonal => 'Pessoal';
+
+ @override
+ String get tasks => 'Tarefas';
+
+ @override
+ String get allTasks => 'Todas as tarefas';
+
+ @override
+ String tasksInList(String title) {
+ return 'Tarefas em $title';
+ }
+
+ @override
+ String get taskLists => 'Listas de tarefas';
+
+ @override
+ String get navigation => 'Navegação';
+
+ @override
+ String get mainMenu => 'Menu principal';
+
+ @override
+ String get keyboardShortcuts => 'Atalhos de teclado';
+
+ @override
+ String get shortcutGroupGeneral => 'Geral';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Mostrar esta referência de atalhos';
+
+ @override
+ String get shortcutGroupNavigation => 'Navegação';
+
+ @override
+ String get shortcutNextPeriod => 'Período seguinte';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Semana seguinte na vista semanal, mês seguinte na vista mensal e assim por diante';
+
+ @override
+ String get shortcutPreviousPeriod => 'Período anterior';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Semana anterior na vista semanal, mês anterior na vista mensal e assim por diante';
+
+ @override
+ String get shortcutJumpToToday => 'Ir para hoje';
+
+ @override
+ String get shortcutGroupView => 'Vista';
+
+ @override
+ String get shortcutDayView => 'Vista diária';
+
+ @override
+ String get shortcutWeekView => 'Vista semanal';
+
+ @override
+ String get shortcutMonthView => 'Vista mensal';
+
+ @override
+ String get shortcutYearView => 'Vista anual';
+
+ @override
+ String get shortcutAgendaView => 'Vista de agenda';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Criar e editar';
+
+ @override
+ String get shortcutSaveItem => 'Guardar evento ou tarefa';
+
+ @override
+ String get shortcutDeleteItem => 'Eliminar evento ou tarefa';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Edição de tarefas';
+
+ @override
+ String get shortcutCancelEditing => 'Cancelar edição';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Fechar a edição ou os detalhes da tarefa';
+
+ @override
+ String get aboutBusyMax => 'Acerca do BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'Calendário e tarefas';
+
+ @override
+ String get license => 'Licença';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Site';
+
+ @override
+ String get sourceCode => 'Código-fonte';
+
+ @override
+ String get reportAnIssue => 'Comunicar um problema';
+
+ @override
+ String get sendFeedback => 'Enviar comentários';
+
+ @override
+ String get feedbackSubmit => 'Enviar';
+
+ @override
+ String get feedbackCategory => 'Categoria';
+
+ @override
+ String get feedbackSelectCategory => 'Selecione uma categoria';
+
+ @override
+ String get feedbackCategoryProblem => 'Problema ou erro';
+
+ @override
+ String get feedbackCategoryFeature => 'Pedido de funcionalidade';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'Questão de privacidade ou segurança';
+
+ @override
+ String get feedbackCategoryUsability => 'Problema de utilização';
+
+ @override
+ String get feedbackCategoryOther => 'Outro';
+
+ @override
+ String get feedbackSubject => 'Assunto';
+
+ @override
+ String get feedbackDetailedMessage => 'Mensagem detalhada';
+
+ @override
+ String get feedbackReplyEmail =>
+ 'Endereço de e-mail para resposta (opcional)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Incluir detalhes técnicos';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Adiciona apenas a versão do sistema operativo Linux e a configuração regional da aplicação. Não são incluídos registos, dados de contas, nomes de ficheiros nem outros diagnósticos.';
+
+ @override
+ String get feedbackCategoryRequired => 'Selecione uma categoria.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'O assunto deve ter entre 3 e 120 carateres.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'A mensagem deve ter entre 10 e 5 000 carateres.';
+
+ @override
+ String get feedbackInvalidEmail => 'Introduza um endereço de e-mail válido.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'Não foi possível ligar ao BusyStack. Verifique a ligação e tente novamente.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'O pedido excedeu o tempo limite. Os seus comentários não foram apagados; tente novamente.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Foram enviados demasiados comentários a partir desta rede. Aguarde e tente novamente.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'O servidor rejeitou o envio. Reveja os campos e tente novamente.';
+
+ @override
+ String get feedbackServerError =>
+ 'O BusyStack não pode aceitar os seus comentários neste momento. Os seus comentários não foram apagados; tente novamente.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Comentários enviados. Referência: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Mostrar ou ocultar a barra lateral';
+
+ @override
+ String get showSidebar => 'Mostrar painel lateral';
+
+ @override
+ String get hideSidebar => 'Ocultar painel lateral';
+
+ @override
+ String get accounts => 'Contas';
+
+ @override
+ String get currentAccount => 'Conta atual';
+
+ @override
+ String get switchAccount => 'Mudar de conta';
+
+ @override
+ String get addGoogleAccount => 'Adicionar conta Google';
+
+ @override
+ String get addMicrosoftAccount => 'Adicionar conta Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Sessão iniciada';
+
+ @override
+ String get removeAccount => 'Remover conta…';
+
+ @override
+ String get removingAccount => 'A remover conta…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Parar a sincronização e remover os dados desta conta deste dispositivo.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Remover $account do BusyMax?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'Esta ação elimina deste dispositivo as tarefas, os calendários, os eventos, os lembretes e as alterações offline pendentes em cache. As alterações não sincronizadas serão perdidas. Nada será eliminado da Google ou da Microsoft.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Revogar também o acesso do BusyMax a esta conta Google';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Terá de conceder acesso novamente antes de voltar a ligar a conta.';
+
+ @override
+ String get removeAccountAction => 'Remover conta';
+
+ @override
+ String get removeAccountFailed =>
+ 'Não foi possível concluir a remoção da conta. Tente novamente.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'A conta foi removida deste dispositivo, mas não foi possível revogar o acesso do BusyMax à sua conta Google. Pode revogar esse acesso na sua conta Google.';
+
+ @override
+ String get newList => 'Nova lista';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'Inicie sessão para ver as listas de tarefas.';
+
+ @override
+ String get noTaskListsSynced =>
+ 'Ainda não há listas de tarefas sincronizadas.';
+
+ @override
+ String get listActions => 'Ações da lista';
+
+ @override
+ String get rename => 'Mudar o nome';
+
+ @override
+ String get delete => 'Eliminar';
+
+ @override
+ String get renameList => 'Mudar o nome da lista';
+
+ @override
+ String get deleteList => 'Eliminar lista';
+
+ @override
+ String get builtInMicrosoftList => 'Incorporada';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'As listas incorporadas do Microsoft To Do não podem ser renomeadas nem eliminadas.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Eliminar «$title» do Google Tasks?';
+ }
+
+ @override
+ String get deleteEvent => 'Eliminar evento';
+
+ @override
+ String get title => 'Título';
+
+ @override
+ String get create => 'Criar';
+
+ @override
+ String get newTask => 'Nova tarefa';
+
+ @override
+ String get clearCompleted => 'Limpar tarefas concluídas';
+
+ @override
+ String get refreshList => 'Atualizar lista';
+
+ @override
+ String get refreshAll => 'Atualizar tudo';
+
+ @override
+ String get listRefreshed => 'Lista atualizada.';
+
+ @override
+ String get allTasksRefreshed => 'Todas as contas foram atualizadas.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Exportado para $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Falha ao exportar: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Falha ao atualizar: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Selecione ou crie uma lista de tarefas para começar.';
+
+ @override
+ String get signInToViewTasks => 'Inicie sessão para ver as tarefas.';
+
+ @override
+ String get noTasks => 'Sem tarefas.';
+
+ @override
+ String get noTasksYet => 'Ainda não há tarefas';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Crie uma tarefa ou atualize as suas contas para começar.';
+
+ @override
+ String get noTasksInList => 'Não há tarefas nesta lista.';
+
+ @override
+ String get overdue => 'Em atraso';
+
+ @override
+ String get today => 'Hoje';
+
+ @override
+ String get tomorrow => 'Amanhã';
+
+ @override
+ String get upcoming => 'Próximas';
+
+ @override
+ String get noDate => 'Sem data';
+
+ @override
+ String get completed => 'Concluídas';
+
+ @override
+ String duePrefix(String date) {
+ return 'Prazo: $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date, $time';
+ }
+
+ @override
+ String get taskDetails => 'Detalhes da tarefa';
+
+ @override
+ String get editTask => 'Editar tarefa';
+
+ @override
+ String get noTaskSelected => 'Nenhuma tarefa selecionada.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Selecione uma tarefa para ver e editar os detalhes.';
+
+ @override
+ String get taskUnavailable => 'Tarefa indisponível.';
+
+ @override
+ String get signInToEditTasks => 'Inicie sessão para editar tarefas.';
+
+ @override
+ String get refreshTask => 'Atualizar tarefa';
+
+ @override
+ String get primarySection => 'Principal';
+
+ @override
+ String get statusSection => 'Estado';
+
+ @override
+ String get openStatus => 'Aberta';
+
+ @override
+ String get doneStatus => 'Concluída';
+
+ @override
+ String get notes => 'Notas';
+
+ @override
+ String get dueDate => 'Data limite';
+
+ @override
+ String get clearDueDate => 'Limpar data limite';
+
+ @override
+ String get dueTime => 'Hora limite';
+
+ @override
+ String get startDate => 'Data de início';
+
+ @override
+ String get startTime => 'Hora de início';
+
+ @override
+ String get endDate => 'Data de fim';
+
+ @override
+ String get endTime => 'Hora de fim';
+
+ @override
+ String get reminderDate => 'Data do lembrete';
+
+ @override
+ String get reminderTime => 'Hora do lembrete';
+
+ @override
+ String get reminder => 'Lembrete';
+
+ @override
+ String get addReminder => 'Adicionar lembrete';
+
+ @override
+ String get addGuest => 'Adicionar convidado';
+
+ @override
+ String get addGuestEmail => 'Adicionar e-mail do convidado';
+
+ @override
+ String get removeReminder => 'Remover lembrete';
+
+ @override
+ String get off => 'Desativado';
+
+ @override
+ String get repeat => 'Repetição';
+
+ @override
+ String get repeatNone => 'Não repetir';
+
+ @override
+ String get noneValue => 'Nenhum';
+
+ @override
+ String get repeatDaily => 'Diariamente';
+
+ @override
+ String get repeatWeekly => 'Semanalmente';
+
+ @override
+ String get repeatMonthly => 'Mensalmente';
+
+ @override
+ String get repeatYearly => 'Anualmente';
+
+ @override
+ String get importance => 'Importância';
+
+ @override
+ String get importanceLow => 'Baixa';
+
+ @override
+ String get importanceNormal => 'Normal';
+
+ @override
+ String get importanceHigh => 'Alta';
+
+ @override
+ String get categories => 'Categorias';
+
+ @override
+ String get scheduleSection => 'Agenda';
+
+ @override
+ String get dueGroup => 'Prazo';
+
+ @override
+ String get startGroup => 'Início';
+
+ @override
+ String get reminderGroup => 'Lembrete';
+
+ @override
+ String get organizationSection => 'Organização';
+
+ @override
+ String get actionsSection => 'Ações';
+
+ @override
+ String get advancedSection => 'Avançado';
+
+ @override
+ String get addCategory => 'Adicionar categoria';
+
+ @override
+ String get list => 'Lista';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'Nesta versão, não é possível mover tarefas entre listas em contas Microsoft To Do.';
+
+ @override
+ String get createSubtask => 'Criar subtarefa';
+
+ @override
+ String get moveToTop => 'Mover para o início';
+
+ @override
+ String get deleteTask => 'Eliminar tarefa';
+
+ @override
+ String get newSubtask => 'Nova subtarefa';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Eliminar «$title» do Google Tasks?';
+ }
+
+ @override
+ String get metadata => 'Metadados';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Atualizado';
+
+ @override
+ String get parent => 'Tarefa principal';
+
+ @override
+ String get position => 'Posição';
+
+ @override
+ String get webLink => 'Ligação Web';
+
+ @override
+ String get assignment => 'Atribuição';
+
+ @override
+ String get localState => 'Estado local';
+
+ @override
+ String get pendingSync => 'Sincronização pendente';
+
+ @override
+ String get synced => 'Sincronizado';
+
+ @override
+ String get account => 'Conta';
+
+ @override
+ String get sync => 'Sincronização';
+
+ @override
+ String get manualFullSync => 'Sincronização completa manual';
+
+ @override
+ String get runInBackgroundWhenClosed =>
+ 'Continuar em execução quando a janela for fechada';
+
+ @override
+ String get showTrayIcon => 'Mostrar ícone na área de notificação';
+
+ @override
+ String get startMinimizedToTray =>
+ 'Iniciar minimizado na área de notificação';
+
+ @override
+ String get requiresTrayIcon => 'Requer o ícone da área de notificação.';
+
+ @override
+ String get syncComplete => 'Sincronização concluída.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Falha na sincronização: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'Notificações de falhas de sincronização';
+
+ @override
+ String get notifyConflicts => 'Notificações de conflitos';
+
+ @override
+ String get notifyDueToday => 'Notificações de tarefas com prazo para hoje';
+
+ @override
+ String get eventReminders => 'Lembretes de eventos';
+
+ @override
+ String get taskReminders => 'Lembretes de tarefas';
+
+ @override
+ String get notificationDetailLevel => 'Nível de detalhe das notificações';
+
+ @override
+ String get notificationDetailPrivate => 'Privado';
+
+ @override
+ String get notificationDetailNormal => 'Normal';
+
+ @override
+ String get quietHours => 'Período de silêncio';
+
+ @override
+ String get quietHoursDescription =>
+ 'Pausar as notificações durante este período.';
+
+ @override
+ String get quietHoursStart => 'Início do período de silêncio';
+
+ @override
+ String get quietHoursEnd => 'Fim do período de silêncio';
+
+ @override
+ String get notifications => 'Notificações';
+
+ @override
+ String get appearance => 'Aspeto';
+
+ @override
+ String get theme => 'Tema';
+
+ @override
+ String get themeSystem => 'Sistema';
+
+ @override
+ String get themeLight => 'Claro';
+
+ @override
+ String get themeDark => 'Escuro';
+
+ @override
+ String get themeFamily => 'Família de temas';
+
+ @override
+ String get themeFamilyYaru => 'Tema nativo do Ubuntu (Yaru)';
+
+ @override
+ String get localization => 'Localização';
+
+ @override
+ String get currentLocale => 'Configuração regional atual';
+
+ @override
+ String get privacy => 'Privacidade';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Ocultar o conteúdo das tarefas nos diagnósticos';
+
+ @override
+ String get developerDiagnostics => 'Diagnósticos de programador';
+
+ @override
+ String get diagnostics => 'Diagnósticos';
+
+ @override
+ String get apiInspectorDisabled => 'Mostrar inspetor da API';
+
+ @override
+ String get googleTasksApi => 'API do Google Tasks';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Revisão de descoberta: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Métodos implementados';
+
+ @override
+ String get supportsTasksScopes =>
+ 'Suporta os âmbitos de autorização tasks e tasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'Requer o âmbito de autorização tasks';
+
+ @override
+ String get blockedPendingOperations => 'Operações pendentes bloqueadas';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Inicie sessão para inspecionar as operações pendentes.';
+
+ @override
+ String get noBlockedPendingOperations =>
+ 'Não há operações pendentes bloqueadas.';
+
+ @override
+ String get operationActions => 'Ações da operação';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'lista=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'tarefa=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'tentativas=$count';
+ }
+
+ @override
+ String get retry => 'Tentar novamente';
+
+ @override
+ String get discard => 'Descartar';
+
+ @override
+ String get discardChangesAction => 'Descartar';
+
+ @override
+ String get discardChanges => 'Descartar alterações?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'Esta ação descarta as alterações não guardadas nesta tarefa.';
+
+ @override
+ String get retryCompleted => 'Nova tentativa concluída.';
+
+ @override
+ String get discardPendingOperation => 'Descartar operação pendente?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'Esta ação remove a operação local bloqueada. Na próxima sincronização, os dados serão novamente carregados do Google Tasks.';
+
+ @override
+ String get pendingOperationDiscarded => 'Operação pendente descartada.';
+
+ @override
+ String get syncFailureNotificationTitle =>
+ 'Falha na sincronização do BusyMax';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'A sincronização em segundo plano falhou. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle =>
+ 'Conflito de sincronização do BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Uma alteração local pendente foi bloqueada. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Tarefas com prazo para hoje';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'Há $count tarefas com prazo para hoje.',
+ one: 'Há uma tarefa com prazo para hoje.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Lembrete de evento';
+
+ @override
+ String get taskReminderNotificationTitle => 'Lembrete de tarefa';
+
+ @override
+ String get eventReminderNotificationBody => 'O evento começa em breve.';
+
+ @override
+ String get taskReminderNotificationBody => 'O prazo da tarefa aproxima-se.';
+
+ @override
+ String get notificationOpenAction => 'Abrir';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'Os detalhes estão ocultos pelas definições de privacidade.';
+
+ @override
+ String get previousMonth => 'Mês anterior';
+
+ @override
+ String get nextMonth => 'Mês seguinte';
+
+ @override
+ String get openMonthView => 'Abrir vista mensal';
+
+ @override
+ String get previousYear => 'Ano anterior';
+
+ @override
+ String get nextYear => 'Ano seguinte';
+
+ @override
+ String get openYearView => 'Abrir vista anual';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Semana $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Redimensionar o painel de dia inteiro';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count itens',
+ one: '1 item',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Este calendário é só de leitura.';
+
+ @override
+ String get selectTimeZone => 'Selecionar fuso horário';
+
+ @override
+ String get searchLocations => 'Pesquisar locais';
+
+ @override
+ String get noLocationsFound => 'Nenhum local encontrado';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Eliminar «$title»?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart
new file mode 100644
index 0000000..728ec35
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_ru.dart
@@ -0,0 +1,1263 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Russian (`ru`).
+class AppLocalizationsRu extends AppLocalizations {
+ AppLocalizationsRu([String locale = 'ru']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Подключите аккаунты Google и Microsoft, чтобы синхронизировать календари и задачи.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'На экране запроса доступа Google установите флажки «Google Календарь» и «Google Задачи».';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'BusyMax требуется доступ к Google Календарю и Google Задачам. Повторите попытку и установите оба флажка.';
+
+ @override
+ String get finishSetup => 'Завершить настройку';
+
+ @override
+ String get continueSetup => 'Продолжить';
+
+ @override
+ String get onboardingSetupTitle => 'Настройка BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Подключите аккаунты';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Добавьте все аккаунты Google и Microsoft, которые хотите использовать. BusyMax синхронизирует календари, события, списки задач и задачи из каждого аккаунта.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'Выберите системные параметры';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Настройте поведение приложения на рабочем столе, напоминания, уровень детализации уведомлений и внешний вид, прежде чем открыть расписание.';
+
+ @override
+ String get signInWithGoogle => 'Войти через Google';
+
+ @override
+ String get signInWithMicrosoft => 'Войти через Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'Этот сервис не настроен.';
+
+ @override
+ String get waitingForGoogleSignIn => 'Ожидание входа через Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'Ожидание входа через Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Вход через Microsoft не настроен. Задайте MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Отмена';
+
+ @override
+ String get close => 'Закрыть';
+
+ @override
+ String get exit => 'Выйти';
+
+ @override
+ String get options => 'Параметры';
+
+ @override
+ String get hide => 'Скрыть';
+
+ @override
+ String get show => 'Показать';
+
+ @override
+ String get export => 'Экспортировать';
+
+ @override
+ String get save => 'Сохранить';
+
+ @override
+ String get settings => 'Настройки';
+
+ @override
+ String get all => 'Все';
+
+ @override
+ String get calendarEvents => 'События';
+
+ @override
+ String get calendarTasks => 'Задачи';
+
+ @override
+ String get calendar => 'Календарь';
+
+ @override
+ String get calendars => 'Календари';
+
+ @override
+ String get newEvent => 'Новое событие';
+
+ @override
+ String get refreshCalendar => 'Обновить календарь';
+
+ @override
+ String get openInProvider => 'Открыть в сервисе';
+
+ @override
+ String get hideFromSchedule => 'Скрыть из расписания';
+
+ @override
+ String get showInSchedule => 'Показывать в расписании';
+
+ @override
+ String get noCalendarsSynced => 'Синхронизированных календарей пока нет.';
+
+ @override
+ String get allDay => 'Весь день';
+
+ @override
+ String moreItems(int count) {
+ return '+ ещё $count';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Нет событий или задач';
+
+ @override
+ String get scheduleLoading => 'Загрузка расписания...';
+
+ @override
+ String get scheduleUnavailable => 'Расписание недоступно';
+
+ @override
+ String get scheduleNoSources => 'Нет видимых календарей или списков задач';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Выберите в настройках, что нужно показывать, а затем обновите расписание.';
+
+ @override
+ String get scheduleSignInRequired => 'Подключите аккаунт';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Войдите, чтобы синхронизировать календари и задачи.';
+
+ @override
+ String get scheduleNoSearchResults => 'Подходящих событий или задач нет';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Попробуйте изменить запрос или сбросить текущие фильтры.';
+
+ @override
+ String get refresh => 'Обновить';
+
+ @override
+ String get trayOpenBusyMax => 'Открыть BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Загрузить ещё просроченные задачи';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Загрузить ещё задачи без даты';
+
+ @override
+ String get viewDay => 'День';
+
+ @override
+ String get viewWeek => 'Неделя';
+
+ @override
+ String get viewMonth => 'Месяц';
+
+ @override
+ String get viewYear => 'Год';
+
+ @override
+ String get viewAgenda => 'Расписание';
+
+ @override
+ String get scheduleSettings => 'Расписание';
+
+ @override
+ String get scheduleDisplaySettings => 'Отображение расписания';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'В представлениях дня и недели изначально отображается этот период. Более ранние или поздние записи при необходимости расширяют его.';
+
+ @override
+ String get scheduleDayStartsAt => 'Начало дня';
+
+ @override
+ String get scheduleDayEndsAt => 'Конец дня';
+
+ @override
+ String get sourceCalendar => 'Календарь';
+
+ @override
+ String get sourceTaskList => 'Список задач';
+
+ @override
+ String get createChoiceTitle => 'Создать';
+
+ @override
+ String get createEventAtTime => 'Событие';
+
+ @override
+ String get createTaskAtDate => 'Задача';
+
+ @override
+ String get editEvent => 'Изменить событие';
+
+ @override
+ String get eventTitle => 'Название события';
+
+ @override
+ String get location => 'Место';
+
+ @override
+ String get timeSlot => 'Интервал времени';
+
+ @override
+ String get startDateTime => 'Дата и время начала';
+
+ @override
+ String get endDateTime => 'Дата и время окончания';
+
+ @override
+ String get doesNotRepeat => 'Не повторяется';
+
+ @override
+ String get defaultReminder => 'Напоминание по умолчанию';
+
+ @override
+ String get guests => 'Гости';
+
+ @override
+ String get noGuests => 'Нет гостей';
+
+ @override
+ String get description => 'Описание';
+
+ @override
+ String get availabilityShowAs => 'Показывать как';
+
+ @override
+ String get busy => 'Занят';
+
+ @override
+ String get visibility => 'Видимость';
+
+ @override
+ String get defaultVisibility => 'Видимость по умолчанию';
+
+ @override
+ String get conference => 'Конференция';
+
+ @override
+ String get noConference => 'Без конференции';
+
+ @override
+ String get providerCalendar => 'Календарь сервиса';
+
+ @override
+ String get formatBoldShortLabel => 'Ж';
+
+ @override
+ String get formatBoldTooltip => 'Полужирный';
+
+ @override
+ String get formatItalicShortLabel => 'К';
+
+ @override
+ String get formatItalicTooltip => 'Курсив';
+
+ @override
+ String get formatUnderlineShortLabel => 'Ч';
+
+ @override
+ String get formatUnderlineTooltip => 'Подчёркнутый';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: 'За $minutes минуты',
+ many: 'За $minutes минут',
+ few: 'За $minutes минуты',
+ one: 'За $minutes минуту',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'В момент начала';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: 'За $hours часа',
+ many: 'За $hours часов',
+ few: 'За $hours часа',
+ one: 'За $hours час',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: 'За $days дня',
+ many: 'За $days дней',
+ few: 'За $days дня',
+ one: 'За $days день',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Свободен';
+
+ @override
+ String get availabilityTentative => 'Под вопросом';
+
+ @override
+ String get availabilityOutOfOffice => 'Нет на рабочем месте';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Работа в другом месте';
+
+ @override
+ String get visibilityDefault => 'По умолчанию';
+
+ @override
+ String get visibilityPublic => 'Общедоступное';
+
+ @override
+ String get visibilityPrivate => 'Личное';
+
+ @override
+ String get visibilityConfidential => 'Конфиденциальное';
+
+ @override
+ String get sensitivityNormal => 'Обычная';
+
+ @override
+ String get sensitivityPersonal => 'Личная';
+
+ @override
+ String get tasks => 'Задачи';
+
+ @override
+ String get allTasks => 'Все задачи';
+
+ @override
+ String tasksInList(String title) {
+ return 'Задачи в списке «$title»';
+ }
+
+ @override
+ String get taskLists => 'Списки задач';
+
+ @override
+ String get navigation => 'Навигация';
+
+ @override
+ String get mainMenu => 'Главное меню';
+
+ @override
+ String get keyboardShortcuts => 'Сочетания клавиш';
+
+ @override
+ String get shortcutGroupGeneral => 'Общие';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Показать эту справку по сочетаниям клавиш';
+
+ @override
+ String get shortcutGroupNavigation => 'Навигация';
+
+ @override
+ String get shortcutNextPeriod => 'Следующий период';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Следующая неделя в представлении недели, следующий месяц в представлении месяца и так далее';
+
+ @override
+ String get shortcutPreviousPeriod => 'Предыдущий период';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Предыдущая неделя в представлении недели, предыдущий месяц в представлении месяца и так далее';
+
+ @override
+ String get shortcutJumpToToday => 'Перейти к сегодняшнему дню';
+
+ @override
+ String get shortcutGroupView => 'Представление';
+
+ @override
+ String get shortcutDayView => 'Представление дня';
+
+ @override
+ String get shortcutWeekView => 'Представление недели';
+
+ @override
+ String get shortcutMonthView => 'Представление месяца';
+
+ @override
+ String get shortcutYearView => 'Представление года';
+
+ @override
+ String get shortcutAgendaView => 'Расписание';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Создание и редактирование';
+
+ @override
+ String get shortcutSaveItem => 'Сохранить событие или задачу';
+
+ @override
+ String get shortcutDeleteItem => 'Удалить событие или задачу';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Редактирование задач';
+
+ @override
+ String get shortcutCancelEditing => 'Отменить редактирование';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Выйти из режима редактирования задачи или закрыть сведения о ней';
+
+ @override
+ String get aboutBusyMax => 'О приложении BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'Календарь и задачи';
+
+ @override
+ String get license => 'Лицензия';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Веб-сайт';
+
+ @override
+ String get sourceCode => 'Исходный код';
+
+ @override
+ String get reportAnIssue => 'Сообщить о проблеме';
+
+ @override
+ String get sendFeedback => 'Отправить отзыв';
+
+ @override
+ String get feedbackSubmit => 'Отправить';
+
+ @override
+ String get feedbackCategory => 'Категория';
+
+ @override
+ String get feedbackSelectCategory => 'Выберите категорию';
+
+ @override
+ String get feedbackCategoryProblem => 'Проблема или ошибка';
+
+ @override
+ String get feedbackCategoryFeature => 'Запрос функции';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'Проблема конфиденциальности или безопасности';
+
+ @override
+ String get feedbackCategoryUsability => 'Проблема удобства использования';
+
+ @override
+ String get feedbackCategoryOther => 'Другое';
+
+ @override
+ String get feedbackSubject => 'Тема';
+
+ @override
+ String get feedbackDetailedMessage => 'Подробное сообщение';
+
+ @override
+ String get feedbackReplyEmail =>
+ 'Адрес электронной почты для ответа (необязательно)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Включить технические сведения';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Будут добавлены только версия Linux и выбранный язык приложения. Журналы, данные аккаунтов, имена файлов и другие диагностические сведения не добавляются.';
+
+ @override
+ String get feedbackCategoryRequired => 'Выберите категорию.';
+
+ @override
+ String get feedbackSubjectLengthError =>
+ 'Тема должна содержать от 3 до 120 символов.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'Сообщение должно содержать от 10 до 5 000 символов.';
+
+ @override
+ String get feedbackInvalidEmail =>
+ 'Введите действительный адрес электронной почты.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'Не удалось подключиться к BusyStack. Проверьте подключение и повторите попытку.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'Время ожидания запроса истекло. Текст отзыва сохранён. Повторите попытку.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Из этой сети было отправлено слишком много отзывов. Подождите и повторите попытку.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'Сервер отклонил отправку. Проверьте поля и повторите попытку.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack сейчас не может принять ваш отзыв. Текст отзыва сохранён. Повторите попытку.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Отзыв отправлен. Номер: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Показать или скрыть боковую панель';
+
+ @override
+ String get showSidebar => 'Показать боковую панель';
+
+ @override
+ String get hideSidebar => 'Скрыть боковую панель';
+
+ @override
+ String get accounts => 'Аккаунты';
+
+ @override
+ String get currentAccount => 'Текущий аккаунт';
+
+ @override
+ String get switchAccount => 'Сменить аккаунт';
+
+ @override
+ String get addGoogleAccount => 'Добавить аккаунт Google';
+
+ @override
+ String get addMicrosoftAccount => 'Добавить аккаунт Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Выполнен вход';
+
+ @override
+ String get removeAccount => 'Удалить аккаунт…';
+
+ @override
+ String get removingAccount => 'Удаление аккаунта…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Остановить синхронизацию и удалить данные этого аккаунта с устройства.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Удалить $account из BusyMax?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'С этого устройства будут удалены кэшированные задачи, календари, события, напоминания и локальные изменения, ожидающие синхронизации. Несинхронизированные изменения будут потеряны. В Google и Microsoft ничего не будет удалено.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Также отозвать у BusyMax доступ к этому аккаунту Google';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Перед повторным подключением аккаунта потребуется снова предоставить доступ.';
+
+ @override
+ String get removeAccountAction => 'Удалить аккаунт';
+
+ @override
+ String get removeAccountFailed =>
+ 'Не удалось завершить удаление аккаунта. Повторите попытку.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Аккаунт удалён с этого устройства, но отозвать доступ BusyMax к Google не удалось. Вы можете отозвать доступ в аккаунте Google.';
+
+ @override
+ String get newList => 'Новый список';
+
+ @override
+ String get signInToViewTaskLists =>
+ 'Войдите, чтобы просмотреть списки задач.';
+
+ @override
+ String get noTaskListsSynced => 'Синхронизированных списков задач пока нет.';
+
+ @override
+ String get listActions => 'Действия со списком';
+
+ @override
+ String get rename => 'Переименовать';
+
+ @override
+ String get delete => 'Удалить';
+
+ @override
+ String get renameList => 'Переименовать список';
+
+ @override
+ String get deleteList => 'Удалить список';
+
+ @override
+ String get builtInMicrosoftList => 'Встроенный';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Встроенные списки Microsoft To Do нельзя переименовывать или удалять.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Удалить «$title» из Google Tasks?';
+ }
+
+ @override
+ String get deleteEvent => 'Удалить событие';
+
+ @override
+ String get title => 'Название';
+
+ @override
+ String get create => 'Создать';
+
+ @override
+ String get newTask => 'Новая задача';
+
+ @override
+ String get clearCompleted => 'Удалить выполненные';
+
+ @override
+ String get refreshList => 'Обновить список';
+
+ @override
+ String get refreshAll => 'Обновить всё';
+
+ @override
+ String get listRefreshed => 'Список обновлён.';
+
+ @override
+ String get allTasksRefreshed => 'Все аккаунты обновлены.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Экспортировано в $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Не удалось экспортировать: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Не удалось обновить: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Сначала выберите или создайте список задач.';
+
+ @override
+ String get signInToViewTasks => 'Войдите, чтобы просмотреть задачи.';
+
+ @override
+ String get noTasks => 'Задач нет.';
+
+ @override
+ String get noTasksYet => 'Задач пока нет';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Создайте задачу или обновите аккаунты, чтобы начать.';
+
+ @override
+ String get noTasksInList => 'В этом списке нет задач.';
+
+ @override
+ String get overdue => 'Просроченные';
+
+ @override
+ String get today => 'Сегодня';
+
+ @override
+ String get tomorrow => 'Завтра';
+
+ @override
+ String get upcoming => 'Предстоящие';
+
+ @override
+ String get noDate => 'Без даты';
+
+ @override
+ String get completed => 'Выполненные';
+
+ @override
+ String duePrefix(String date) {
+ return 'Срок: $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date, $time';
+ }
+
+ @override
+ String get taskDetails => 'Сведения о задаче';
+
+ @override
+ String get editTask => 'Изменить задачу';
+
+ @override
+ String get noTaskSelected => 'Задача не выбрана.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Выберите задачу, чтобы просмотреть и изменить её сведения.';
+
+ @override
+ String get taskUnavailable => 'Задача недоступна.';
+
+ @override
+ String get signInToEditTasks => 'Войдите, чтобы изменять задачи.';
+
+ @override
+ String get refreshTask => 'Обновить задачу';
+
+ @override
+ String get primarySection => 'Основные сведения';
+
+ @override
+ String get statusSection => 'Состояние';
+
+ @override
+ String get openStatus => 'Открыта';
+
+ @override
+ String get doneStatus => 'Выполнена';
+
+ @override
+ String get notes => 'Заметки';
+
+ @override
+ String get dueDate => 'Срок';
+
+ @override
+ String get clearDueDate => 'Удалить срок выполнения';
+
+ @override
+ String get dueTime => 'Время выполнения';
+
+ @override
+ String get startDate => 'Дата начала';
+
+ @override
+ String get startTime => 'Время начала';
+
+ @override
+ String get endDate => 'Дата окончания';
+
+ @override
+ String get endTime => 'Время окончания';
+
+ @override
+ String get reminderDate => 'Дата напоминания';
+
+ @override
+ String get reminderTime => 'Время напоминания';
+
+ @override
+ String get reminder => 'Напоминание';
+
+ @override
+ String get addReminder => 'Добавить напоминание';
+
+ @override
+ String get addGuest => 'Добавить гостя';
+
+ @override
+ String get addGuestEmail => 'Добавить адрес электронной почты гостя';
+
+ @override
+ String get removeReminder => 'Удалить напоминание';
+
+ @override
+ String get off => 'Выкл.';
+
+ @override
+ String get repeat => 'Повтор';
+
+ @override
+ String get repeatNone => 'Не повторять';
+
+ @override
+ String get noneValue => 'Нет';
+
+ @override
+ String get repeatDaily => 'Ежедневно';
+
+ @override
+ String get repeatWeekly => 'Еженедельно';
+
+ @override
+ String get repeatMonthly => 'Ежемесячно';
+
+ @override
+ String get repeatYearly => 'Ежегодно';
+
+ @override
+ String get importance => 'Важность';
+
+ @override
+ String get importanceLow => 'Низкая';
+
+ @override
+ String get importanceNormal => 'Обычная';
+
+ @override
+ String get importanceHigh => 'Высокая';
+
+ @override
+ String get categories => 'Категории';
+
+ @override
+ String get scheduleSection => 'Расписание';
+
+ @override
+ String get dueGroup => 'Срок';
+
+ @override
+ String get startGroup => 'Начало';
+
+ @override
+ String get reminderGroup => 'Напоминание';
+
+ @override
+ String get organizationSection => 'Организация';
+
+ @override
+ String get actionsSection => 'Действия';
+
+ @override
+ String get advancedSection => 'Дополнительно';
+
+ @override
+ String get addCategory => 'Добавить категорию';
+
+ @override
+ String get list => 'Список';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'В этой версии перенос между списками для аккаунтов Microsoft To Do не поддерживается.';
+
+ @override
+ String get createSubtask => 'Создать подзадачу';
+
+ @override
+ String get moveToTop => 'Переместить в самый верх';
+
+ @override
+ String get deleteTask => 'Удалить задачу';
+
+ @override
+ String get newSubtask => 'Новая подзадача';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Удалить «$title» из Google Tasks?';
+ }
+
+ @override
+ String get metadata => 'Метаданные';
+
+ @override
+ String get id => 'Идентификатор';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Обновлено';
+
+ @override
+ String get parent => 'Родительская задача';
+
+ @override
+ String get position => 'Позиция';
+
+ @override
+ String get webLink => 'Веб-ссылка';
+
+ @override
+ String get assignment => 'Назначение';
+
+ @override
+ String get localState => 'Локальное состояние';
+
+ @override
+ String get pendingSync => 'Ожидает синхронизации';
+
+ @override
+ String get synced => 'Синхронизировано';
+
+ @override
+ String get account => 'Аккаунт';
+
+ @override
+ String get sync => 'Синхронизация';
+
+ @override
+ String get manualFullSync => 'Полная синхронизация вручную';
+
+ @override
+ String get runInBackgroundWhenClosed =>
+ 'Продолжать работу после закрытия окна';
+
+ @override
+ String get showTrayIcon => 'Показывать значок в области уведомлений';
+
+ @override
+ String get startMinimizedToTray =>
+ 'Запускать свёрнутым в область уведомлений';
+
+ @override
+ String get requiresTrayIcon => 'Требуется значок в области уведомлений.';
+
+ @override
+ String get syncComplete => 'Синхронизация завершена.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Синхронизация не удалась: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'Уведомлять об ошибках синхронизации';
+
+ @override
+ String get notifyConflicts => 'Уведомлять о конфликтах';
+
+ @override
+ String get notifyDueToday => 'Уведомлять о задачах на сегодня';
+
+ @override
+ String get eventReminders => 'Напоминания о событиях';
+
+ @override
+ String get taskReminders => 'Напоминания о задачах';
+
+ @override
+ String get notificationDetailLevel => 'Содержимое уведомлений';
+
+ @override
+ String get notificationDetailPrivate => 'Скрывать подробности';
+
+ @override
+ String get notificationDetailNormal => 'Показывать подробности';
+
+ @override
+ String get quietHours => 'Период без уведомлений';
+
+ @override
+ String get quietHoursDescription => 'Не показывать уведомления в это время.';
+
+ @override
+ String get quietHoursStart => 'Начало периода';
+
+ @override
+ String get quietHoursEnd => 'Конец периода';
+
+ @override
+ String get notifications => 'Уведомления';
+
+ @override
+ String get appearance => 'Внешний вид';
+
+ @override
+ String get theme => 'Тема';
+
+ @override
+ String get themeSystem => 'Системная';
+
+ @override
+ String get themeLight => 'Светлая';
+
+ @override
+ String get themeDark => 'Тёмная';
+
+ @override
+ String get themeFamily => 'Семейство тем';
+
+ @override
+ String get themeFamilyYaru => 'Стандартная тема Ubuntu (Yaru)';
+
+ @override
+ String get localization => 'Язык';
+
+ @override
+ String get currentLocale => 'Язык приложения';
+
+ @override
+ String get privacy => 'Конфиденциальность';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Скрывать содержимое задач в диагностике';
+
+ @override
+ String get developerDiagnostics => 'Диагностика для разработчиков';
+
+ @override
+ String get diagnostics => 'Диагностика';
+
+ @override
+ String get apiInspectorDisabled => 'Показать инспектор API';
+
+ @override
+ String get googleTasksApi => 'API Google Tasks';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Версия Discovery: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Реализованные методы';
+
+ @override
+ String get supportsTasksScopes =>
+ 'Поддерживает области разрешений tasks и tasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'Требуется область разрешений tasks';
+
+ @override
+ String get blockedPendingOperations => 'Заблокированные операции';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Войдите, чтобы просмотреть ожидающие операции.';
+
+ @override
+ String get noBlockedPendingOperations => 'Заблокированных операций нет.';
+
+ @override
+ String get operationActions => 'Действия с операцией';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'список=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'задача=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'попытки=$count';
+ }
+
+ @override
+ String get retry => 'Повторить';
+
+ @override
+ String get discard => 'Отменить';
+
+ @override
+ String get discardChangesAction => 'Не сохранять';
+
+ @override
+ String get discardChanges => 'Не сохранять изменения?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'Несохранённые изменения этой задачи будут потеряны.';
+
+ @override
+ String get retryCompleted => 'Повторная попытка завершена.';
+
+ @override
+ String get discardPendingOperation => 'Удалить заблокированную операцию?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'Заблокированная локальная операция будет удалена. При следующей синхронизации данные будут заново загружены из Google Tasks.';
+
+ @override
+ String get pendingOperationDiscarded => 'Заблокированная операция удалена.';
+
+ @override
+ String get syncFailureNotificationTitle => 'Сбой синхронизации BusyMax';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'Сбой фоновой синхронизации. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'Конфликт синхронизации BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Локальное изменение не удалось синхронизировать. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Задачи на сегодня';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'Сегодня нужно выполнить $count задачи.',
+ many: 'Сегодня нужно выполнить $count задач.',
+ few: 'Сегодня нужно выполнить $count задачи.',
+ one: 'Сегодня нужно выполнить $count задачу.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Напоминание о событии';
+
+ @override
+ String get taskReminderNotificationTitle => 'Напоминание о задаче';
+
+ @override
+ String get eventReminderNotificationBody => 'Событие скоро начнётся.';
+
+ @override
+ String get taskReminderNotificationBody =>
+ 'Срок выполнения задачи скоро наступит.';
+
+ @override
+ String get notificationOpenAction => 'Открыть';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'Сведения скрыты настройками конфиденциальности.';
+
+ @override
+ String get previousMonth => 'Предыдущий месяц';
+
+ @override
+ String get nextMonth => 'Следующий месяц';
+
+ @override
+ String get openMonthView => 'Открыть представление месяца';
+
+ @override
+ String get previousYear => 'Предыдущий год';
+
+ @override
+ String get nextYear => 'Следующий год';
+
+ @override
+ String get openYearView => 'Открыть представление года';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Неделя $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Изменить размер панели «Весь день»';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count записи',
+ many: '$count записей',
+ few: '$count записи',
+ one: '$count запись',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Этот календарь доступен только для чтения.';
+
+ @override
+ String get selectTimeZone => 'Выберите часовой пояс';
+
+ @override
+ String get searchLocations => 'Поиск города';
+
+ @override
+ String get noLocationsFound => 'Ничего не найдено';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Удалить «$title»?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart
new file mode 100644
index 0000000..0abb69c
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_vi.dart
@@ -0,0 +1,1251 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Vietnamese (`vi`).
+class AppLocalizationsVi extends AppLocalizations {
+ AppLocalizationsVi([String locale = 'vi']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount =>
+ 'Kết nối tài khoản Google và Microsoft để đồng bộ lịch và công việc.';
+
+ @override
+ String get googlePermissionsConsentNotice =>
+ 'Trên màn hình cấp quyền của Google, hãy chọn cả quyền truy cập Lịch và Công việc.';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ 'Cần có quyền truy cập Google Calendar và Google Tasks. Vui lòng thử lại và chọn cả hai hộp kiểm.';
+
+ @override
+ String get finishSetup => 'Hoàn tất thiết lập';
+
+ @override
+ String get continueSetup => 'Tiếp tục';
+
+ @override
+ String get onboardingSetupTitle => 'Thiết lập BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => 'Kết nối tài khoản';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ 'Thêm tất cả tài khoản Google và Microsoft bạn muốn sử dụng. BusyMax đồng bộ lịch, sự kiện, danh sách công việc và công việc từ mỗi tài khoản.';
+
+ @override
+ String get onboardingPreferencesStepTitle => 'Chọn cài đặt hệ thống';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ 'Thiết lập cách ứng dụng hoạt động trên máy tính, lời nhắc, mức độ chi tiết của thông báo và giao diện trước khi mở lịch biểu.';
+
+ @override
+ String get signInWithGoogle => 'Đăng nhập bằng Google';
+
+ @override
+ String get signInWithMicrosoft => 'Đăng nhập bằng Microsoft';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => 'Dịch vụ này chưa được cấu hình.';
+
+ @override
+ String get waitingForGoogleSignIn => 'Đang chờ đăng nhập Google...';
+
+ @override
+ String get waitingForMicrosoftSignIn => 'Đang chờ đăng nhập Microsoft...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ 'Tính năng đăng nhập Microsoft chưa được cấu hình. Hãy đặt MICROSOFT_OAUTH_CLIENT_ID.';
+
+ @override
+ String get cancel => 'Hủy';
+
+ @override
+ String get close => 'Đóng';
+
+ @override
+ String get exit => 'Thoát';
+
+ @override
+ String get options => 'Tùy chọn';
+
+ @override
+ String get hide => 'Ẩn';
+
+ @override
+ String get show => 'Hiện';
+
+ @override
+ String get export => 'Xuất';
+
+ @override
+ String get save => 'Lưu';
+
+ @override
+ String get settings => 'Cài đặt';
+
+ @override
+ String get all => 'Tất cả';
+
+ @override
+ String get calendarEvents => 'Sự kiện';
+
+ @override
+ String get calendarTasks => 'Công việc';
+
+ @override
+ String get calendar => 'Lịch';
+
+ @override
+ String get calendars => 'Lịch';
+
+ @override
+ String get newEvent => 'Sự kiện mới';
+
+ @override
+ String get refreshCalendar => 'Làm mới lịch';
+
+ @override
+ String get openInProvider => 'Mở trong dịch vụ';
+
+ @override
+ String get hideFromSchedule => 'Ẩn khỏi lịch biểu';
+
+ @override
+ String get showInSchedule => 'Hiện trong lịch biểu';
+
+ @override
+ String get noCalendarsSynced => 'Chưa có lịch nào được đồng bộ.';
+
+ @override
+ String get allDay => 'Cả ngày';
+
+ @override
+ String moreItems(int count) {
+ return '+$count mục khác';
+ }
+
+ @override
+ String get noEventsOrTasks => 'Không có sự kiện hoặc công việc';
+
+ @override
+ String get scheduleLoading => 'Đang tải lịch biểu...';
+
+ @override
+ String get scheduleUnavailable => 'Lịch biểu không khả dụng';
+
+ @override
+ String get scheduleNoSources =>
+ 'Không có lịch hoặc danh sách công việc nào đang hiển thị';
+
+ @override
+ String get scheduleNoSourcesDescription =>
+ 'Chọn nội dung cần hiển thị trong Cài đặt, sau đó làm mới lịch biểu.';
+
+ @override
+ String get scheduleSignInRequired => 'Kết nối tài khoản';
+
+ @override
+ String get scheduleSignInDescription =>
+ 'Đăng nhập để đồng bộ lịch và công việc.';
+
+ @override
+ String get scheduleNoSearchResults =>
+ 'Không có sự kiện hoặc công việc phù hợp';
+
+ @override
+ String get scheduleNoSearchResultsDescription =>
+ 'Thử tìm kiếm khác hoặc xóa các bộ lọc hiện tại.';
+
+ @override
+ String get refresh => 'Làm mới';
+
+ @override
+ String get trayOpenBusyMax => 'Mở BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => 'Tải thêm công việc quá hạn';
+
+ @override
+ String get agendaLoadMoreNoDate => 'Tải thêm công việc không có ngày';
+
+ @override
+ String get viewDay => 'Ngày';
+
+ @override
+ String get viewWeek => 'Tuần';
+
+ @override
+ String get viewMonth => 'Tháng';
+
+ @override
+ String get viewYear => 'Năm';
+
+ @override
+ String get viewAgenda => 'Lịch biểu';
+
+ @override
+ String get scheduleSettings => 'Lịch biểu';
+
+ @override
+ String get scheduleDisplaySettings => 'Hiển thị lịch biểu';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ 'Chế độ xem Ngày và Tuần ban đầu hiển thị khoảng thời gian này. Các mục sớm hơn hoặc muộn hơn sẽ mở rộng khoảng hiển thị khi cần.';
+
+ @override
+ String get scheduleDayStartsAt => 'Ngày bắt đầu lúc';
+
+ @override
+ String get scheduleDayEndsAt => 'Ngày kết thúc lúc';
+
+ @override
+ String get sourceCalendar => 'Lịch';
+
+ @override
+ String get sourceTaskList => 'Danh sách công việc';
+
+ @override
+ String get createChoiceTitle => 'Tạo';
+
+ @override
+ String get createEventAtTime => 'Sự kiện';
+
+ @override
+ String get createTaskAtDate => 'Công việc';
+
+ @override
+ String get editEvent => 'Chỉnh sửa sự kiện';
+
+ @override
+ String get eventTitle => 'Tiêu đề sự kiện';
+
+ @override
+ String get location => 'Địa điểm';
+
+ @override
+ String get timeSlot => 'Khoảng thời gian';
+
+ @override
+ String get startDateTime => 'Ngày/giờ bắt đầu';
+
+ @override
+ String get endDateTime => 'Ngày/giờ kết thúc';
+
+ @override
+ String get doesNotRepeat => 'Không lặp lại';
+
+ @override
+ String get defaultReminder => 'Lời nhắc mặc định';
+
+ @override
+ String get guests => 'Khách mời';
+
+ @override
+ String get noGuests => 'Không có khách mời';
+
+ @override
+ String get description => 'Mô tả';
+
+ @override
+ String get availabilityShowAs => 'Tình trạng rảnh/bận / Hiển thị là';
+
+ @override
+ String get busy => 'Bận';
+
+ @override
+ String get visibility => 'Chế độ hiển thị';
+
+ @override
+ String get defaultVisibility => 'Chế độ hiển thị mặc định';
+
+ @override
+ String get conference => 'Cuộc họp';
+
+ @override
+ String get noConference => 'Không có cuộc họp';
+
+ @override
+ String get providerCalendar => 'Lịch của dịch vụ';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => 'Đậm';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => 'Nghiêng';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => 'Gạch chân';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: 'Trước $minutes phút',
+ one: 'Trước 1 phút',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => 'Khi bắt đầu';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: 'Trước $hours giờ',
+ one: 'Trước 1 giờ',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: 'Trước $days ngày',
+ one: 'Trước 1 ngày',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => 'Rảnh';
+
+ @override
+ String get availabilityTentative => 'Dự kiến';
+
+ @override
+ String get availabilityOutOfOffice => 'Vắng mặt';
+
+ @override
+ String get availabilityWorkingElsewhere => 'Làm việc ở nơi khác';
+
+ @override
+ String get visibilityDefault => 'Mặc định';
+
+ @override
+ String get visibilityPublic => 'Công khai';
+
+ @override
+ String get visibilityPrivate => 'Riêng tư';
+
+ @override
+ String get visibilityConfidential => 'Bảo mật';
+
+ @override
+ String get sensitivityNormal => 'Bình thường';
+
+ @override
+ String get sensitivityPersonal => 'Cá nhân';
+
+ @override
+ String get tasks => 'Công việc';
+
+ @override
+ String get allTasks => 'Tất cả công việc';
+
+ @override
+ String tasksInList(String title) {
+ return 'Công việc trong $title';
+ }
+
+ @override
+ String get taskLists => 'Danh sách công việc';
+
+ @override
+ String get navigation => 'Điều hướng';
+
+ @override
+ String get mainMenu => 'Trình đơn chính';
+
+ @override
+ String get keyboardShortcuts => 'Phím tắt';
+
+ @override
+ String get shortcutGroupGeneral => 'Chung';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription =>
+ 'Hiển thị bảng tham khảo phím tắt này';
+
+ @override
+ String get shortcutGroupNavigation => 'Điều hướng';
+
+ @override
+ String get shortcutNextPeriod => 'Khoảng tiếp theo';
+
+ @override
+ String get shortcutNextPeriodDescription =>
+ 'Tuần tiếp theo trong chế độ xem tuần, tháng tiếp theo trong chế độ xem tháng, v.v.';
+
+ @override
+ String get shortcutPreviousPeriod => 'Khoảng trước đó';
+
+ @override
+ String get shortcutPreviousPeriodDescription =>
+ 'Tuần trước trong chế độ xem tuần, tháng trước trong chế độ xem tháng, v.v.';
+
+ @override
+ String get shortcutJumpToToday => 'Chuyển đến hôm nay';
+
+ @override
+ String get shortcutGroupView => 'Chế độ xem';
+
+ @override
+ String get shortcutDayView => 'Chế độ xem ngày';
+
+ @override
+ String get shortcutWeekView => 'Chế độ xem tuần';
+
+ @override
+ String get shortcutMonthView => 'Chế độ xem tháng';
+
+ @override
+ String get shortcutYearView => 'Chế độ xem năm';
+
+ @override
+ String get shortcutAgendaView => 'Chế độ xem lịch biểu';
+
+ @override
+ String get shortcutGroupCreateAndEdit => 'Tạo và chỉnh sửa';
+
+ @override
+ String get shortcutSaveItem => 'Lưu sự kiện hoặc công việc';
+
+ @override
+ String get shortcutDeleteItem => 'Xóa sự kiện hoặc công việc';
+
+ @override
+ String get shortcutGroupTaskEditing => 'Chỉnh sửa công việc';
+
+ @override
+ String get shortcutCancelEditing => 'Hủy chỉnh sửa';
+
+ @override
+ String get shortcutCancelEditingDescription =>
+ 'Đóng phần chỉnh sửa hoặc chi tiết công việc';
+
+ @override
+ String get aboutBusyMax => 'Giới thiệu BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => 'Lịch và công việc';
+
+ @override
+ String get license => 'Giấy phép';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => 'Trang web';
+
+ @override
+ String get sourceCode => 'Mã nguồn';
+
+ @override
+ String get reportAnIssue => 'Báo cáo sự cố';
+
+ @override
+ String get sendFeedback => 'Gửi phản hồi';
+
+ @override
+ String get feedbackSubmit => 'Gửi';
+
+ @override
+ String get feedbackCategory => 'Danh mục';
+
+ @override
+ String get feedbackSelectCategory => 'Chọn một danh mục';
+
+ @override
+ String get feedbackCategoryProblem => 'Sự cố hoặc lỗi';
+
+ @override
+ String get feedbackCategoryFeature => 'Yêu cầu tính năng';
+
+ @override
+ String get feedbackCategoryPrivacySecurity =>
+ 'Vấn đề về quyền riêng tư hoặc bảo mật';
+
+ @override
+ String get feedbackCategoryUsability => 'Vấn đề về khả năng sử dụng';
+
+ @override
+ String get feedbackCategoryOther => 'Khác';
+
+ @override
+ String get feedbackSubject => 'Chủ đề';
+
+ @override
+ String get feedbackDetailedMessage => 'Nội dung chi tiết';
+
+ @override
+ String get feedbackReplyEmail =>
+ 'Địa chỉ email để nhận phản hồi (không bắt buộc)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => 'Bao gồm chi tiết kỹ thuật';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ 'Chỉ thêm phiên bản hệ điều hành Linux và ngôn ngữ, khu vực của ứng dụng. Không bao gồm nhật ký, dữ liệu tài khoản, tên tệp hoặc thông tin chẩn đoán khác.';
+
+ @override
+ String get feedbackCategoryRequired => 'Hãy chọn một danh mục.';
+
+ @override
+ String get feedbackSubjectLengthError => 'Chủ đề phải có từ 3 đến 120 ký tự.';
+
+ @override
+ String get feedbackMessageLengthError =>
+ 'Nội dung phải có từ 10 đến 5.000 ký tự.';
+
+ @override
+ String get feedbackInvalidEmail => 'Nhập địa chỉ email hợp lệ.';
+
+ @override
+ String get feedbackConnectionError =>
+ 'Không thể kết nối với BusyStack. Hãy kiểm tra kết nối và thử lại.';
+
+ @override
+ String get feedbackTimeoutError =>
+ 'Yêu cầu đã hết thời gian chờ. Phản hồi của bạn chưa bị xóa; hãy thử lại.';
+
+ @override
+ String get feedbackRateLimitedError =>
+ 'Đã gửi quá nhiều phản hồi từ mạng này. Vui lòng chờ rồi thử lại.';
+
+ @override
+ String get feedbackRejectedError =>
+ 'Máy chủ đã từ chối nội dung gửi. Hãy kiểm tra các trường và thử lại.';
+
+ @override
+ String get feedbackServerError =>
+ 'BusyStack hiện không thể nhận phản hồi của bạn. Phản hồi chưa bị xóa; hãy thử lại.';
+
+ @override
+ String feedbackSuccess(String id) {
+ return 'Đã gửi phản hồi. Mã tham chiếu: $id';
+ }
+
+ @override
+ String get toggleSidebar => 'Hiện hoặc ẩn thanh bên';
+
+ @override
+ String get showSidebar => 'Hiện bảng bên';
+
+ @override
+ String get hideSidebar => 'Ẩn bảng bên';
+
+ @override
+ String get accounts => 'Tài khoản';
+
+ @override
+ String get currentAccount => 'Tài khoản hiện tại';
+
+ @override
+ String get switchAccount => 'Chuyển tài khoản';
+
+ @override
+ String get addGoogleAccount => 'Thêm tài khoản Google';
+
+ @override
+ String get addMicrosoftAccount => 'Thêm tài khoản Microsoft';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => 'Đã đăng nhập';
+
+ @override
+ String get removeAccount => 'Xóa tài khoản…';
+
+ @override
+ String get removingAccount => 'Đang xóa tài khoản…';
+
+ @override
+ String get removeAccountDescription =>
+ 'Dừng đồng bộ và xóa dữ liệu của tài khoản này khỏi thiết bị.';
+
+ @override
+ String removeAccountTitle(String account) {
+ return 'Xóa $account khỏi BusyMax?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ 'Thao tác này sẽ xóa công việc, lịch, sự kiện, lời nhắc đã lưu trong bộ nhớ đệm và các thay đổi ngoại tuyến đang chờ khỏi thiết bị. Các thay đổi chưa đồng bộ sẽ bị mất. Không có dữ liệu nào bị xóa khỏi Google hoặc Microsoft.';
+
+ @override
+ String get revokeGoogleAccess =>
+ 'Đồng thời thu hồi quyền truy cập của BusyMax vào tài khoản Google này';
+
+ @override
+ String get revokeGoogleAccessDescription =>
+ 'Bạn sẽ cần cấp lại quyền truy cập trước khi kết nối lại.';
+
+ @override
+ String get removeAccountAction => 'Xóa tài khoản';
+
+ @override
+ String get removeAccountFailed =>
+ 'Không thể hoàn tất việc xóa tài khoản. Hãy thử lại.';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ 'Tài khoản đã bị xóa khỏi thiết bị này, nhưng BusyMax không thể thu hồi quyền truy cập vào tài khoản Google. Bạn có thể thu hồi quyền trong phần cài đặt Tài khoản Google.';
+
+ @override
+ String get newList => 'Danh sách mới';
+
+ @override
+ String get signInToViewTaskLists => 'Đăng nhập để xem danh sách công việc.';
+
+ @override
+ String get noTaskListsSynced =>
+ 'Chưa có danh sách công việc nào được đồng bộ.';
+
+ @override
+ String get listActions => 'Thao tác với danh sách';
+
+ @override
+ String get rename => 'Đổi tên';
+
+ @override
+ String get delete => 'Xóa';
+
+ @override
+ String get renameList => 'Đổi tên danh sách';
+
+ @override
+ String get deleteList => 'Xóa danh sách';
+
+ @override
+ String get builtInMicrosoftList => 'Tích hợp sẵn';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ 'Không thể đổi tên hoặc xóa danh sách tích hợp sẵn của Microsoft To Do.';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return 'Xóa “$title” khỏi Google Tasks?';
+ }
+
+ @override
+ String get deleteEvent => 'Xóa sự kiện';
+
+ @override
+ String get title => 'Tiêu đề';
+
+ @override
+ String get create => 'Tạo';
+
+ @override
+ String get newTask => 'Công việc mới';
+
+ @override
+ String get clearCompleted => 'Xóa các công việc đã hoàn thành';
+
+ @override
+ String get refreshList => 'Làm mới danh sách';
+
+ @override
+ String get refreshAll => 'Làm mới tất cả';
+
+ @override
+ String get listRefreshed => 'Đã làm mới danh sách.';
+
+ @override
+ String get allTasksRefreshed => 'Đã làm mới tất cả tài khoản.';
+
+ @override
+ String exportedFile(String path) {
+ return 'Đã xuất sang $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return 'Xuất không thành công: $error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return 'Làm mới không thành công: $error';
+ }
+
+ @override
+ String get selectOrCreateTaskList =>
+ 'Chọn hoặc tạo một danh sách công việc để bắt đầu.';
+
+ @override
+ String get signInToViewTasks => 'Đăng nhập để xem công việc.';
+
+ @override
+ String get noTasks => 'Không có công việc.';
+
+ @override
+ String get noTasksYet => 'Chưa có công việc';
+
+ @override
+ String get noTasksYetMessage =>
+ 'Tạo một công việc hoặc làm mới tài khoản để bắt đầu.';
+
+ @override
+ String get noTasksInList => 'Không có công việc nào trong danh sách này.';
+
+ @override
+ String get overdue => 'Quá hạn';
+
+ @override
+ String get today => 'Hôm nay';
+
+ @override
+ String get tomorrow => 'Ngày mai';
+
+ @override
+ String get upcoming => 'Sắp tới';
+
+ @override
+ String get noDate => 'Không có ngày';
+
+ @override
+ String get completed => 'Đã hoàn thành';
+
+ @override
+ String duePrefix(String date) {
+ return 'Đến hạn $date';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => 'Chi tiết công việc';
+
+ @override
+ String get editTask => 'Chỉnh sửa công việc';
+
+ @override
+ String get noTaskSelected => 'Chưa chọn công việc.';
+
+ @override
+ String get noTaskSelectedHelper =>
+ 'Chọn một công việc để xem và chỉnh sửa chi tiết.';
+
+ @override
+ String get taskUnavailable => 'Công việc không khả dụng.';
+
+ @override
+ String get signInToEditTasks => 'Đăng nhập để chỉnh sửa công việc.';
+
+ @override
+ String get refreshTask => 'Làm mới công việc';
+
+ @override
+ String get primarySection => 'Chính';
+
+ @override
+ String get statusSection => 'Trạng thái';
+
+ @override
+ String get openStatus => 'Chưa hoàn thành';
+
+ @override
+ String get doneStatus => 'Đã hoàn thành';
+
+ @override
+ String get notes => 'Ghi chú';
+
+ @override
+ String get dueDate => 'Ngày đến hạn';
+
+ @override
+ String get clearDueDate => 'Xóa ngày đến hạn';
+
+ @override
+ String get dueTime => 'Giờ đến hạn';
+
+ @override
+ String get startDate => 'Ngày bắt đầu';
+
+ @override
+ String get startTime => 'Giờ bắt đầu';
+
+ @override
+ String get endDate => 'Ngày kết thúc';
+
+ @override
+ String get endTime => 'Giờ kết thúc';
+
+ @override
+ String get reminderDate => 'Ngày nhắc';
+
+ @override
+ String get reminderTime => 'Giờ nhắc';
+
+ @override
+ String get reminder => 'Lời nhắc';
+
+ @override
+ String get addReminder => 'Thêm lời nhắc';
+
+ @override
+ String get addGuest => 'Thêm khách mời';
+
+ @override
+ String get addGuestEmail => 'Thêm email khách mời';
+
+ @override
+ String get removeReminder => 'Xóa lời nhắc';
+
+ @override
+ String get off => 'Tắt';
+
+ @override
+ String get repeat => 'Lặp lại';
+
+ @override
+ String get repeatNone => 'Không lặp lại';
+
+ @override
+ String get noneValue => 'Không có';
+
+ @override
+ String get repeatDaily => 'Hằng ngày';
+
+ @override
+ String get repeatWeekly => 'Hằng tuần';
+
+ @override
+ String get repeatMonthly => 'Hằng tháng';
+
+ @override
+ String get repeatYearly => 'Hằng năm';
+
+ @override
+ String get importance => 'Mức độ quan trọng';
+
+ @override
+ String get importanceLow => 'Thấp';
+
+ @override
+ String get importanceNormal => 'Bình thường';
+
+ @override
+ String get importanceHigh => 'Cao';
+
+ @override
+ String get categories => 'Danh mục';
+
+ @override
+ String get scheduleSection => 'Lịch';
+
+ @override
+ String get dueGroup => 'Đến hạn';
+
+ @override
+ String get startGroup => 'Bắt đầu';
+
+ @override
+ String get reminderGroup => 'Lời nhắc';
+
+ @override
+ String get organizationSection => 'Sắp xếp';
+
+ @override
+ String get actionsSection => 'Thao tác';
+
+ @override
+ String get advancedSection => 'Nâng cao';
+
+ @override
+ String get addCategory => 'Thêm danh mục';
+
+ @override
+ String get list => 'Danh sách';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ 'Phiên bản này không hỗ trợ di chuyển công việc giữa các danh sách trong tài khoản Microsoft To Do.';
+
+ @override
+ String get createSubtask => 'Tạo công việc con';
+
+ @override
+ String get moveToTop => 'Chuyển lên đầu';
+
+ @override
+ String get deleteTask => 'Xóa công việc';
+
+ @override
+ String get newSubtask => 'Công việc con mới';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return 'Xóa “$title” khỏi Google Tasks?';
+ }
+
+ @override
+ String get metadata => 'Siêu dữ liệu';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => 'Đã cập nhật';
+
+ @override
+ String get parent => 'Công việc cha';
+
+ @override
+ String get position => 'Vị trí';
+
+ @override
+ String get webLink => 'Liên kết web';
+
+ @override
+ String get assignment => 'Phân công';
+
+ @override
+ String get localState => 'Trạng thái cục bộ';
+
+ @override
+ String get pendingSync => 'Đang chờ đồng bộ';
+
+ @override
+ String get synced => 'Đã đồng bộ';
+
+ @override
+ String get account => 'Tài khoản';
+
+ @override
+ String get sync => 'Đồng bộ';
+
+ @override
+ String get manualFullSync => 'Đồng bộ toàn bộ thủ công';
+
+ @override
+ String get runInBackgroundWhenClosed => 'Tiếp tục chạy khi đóng cửa sổ';
+
+ @override
+ String get showTrayIcon => 'Hiện biểu tượng khay hệ thống';
+
+ @override
+ String get startMinimizedToTray => 'Khởi động thu nhỏ vào khay hệ thống';
+
+ @override
+ String get requiresTrayIcon => 'Yêu cầu biểu tượng khay hệ thống.';
+
+ @override
+ String get syncComplete => 'Đồng bộ hoàn tất.';
+
+ @override
+ String syncFailed(String error) {
+ return 'Đồng bộ không thành công: $error';
+ }
+
+ @override
+ String get notifySyncFailures => 'Thông báo khi đồng bộ thất bại';
+
+ @override
+ String get notifyConflicts => 'Thông báo khi có xung đột';
+
+ @override
+ String get notifyDueToday => 'Thông báo công việc đến hạn hôm nay';
+
+ @override
+ String get eventReminders => 'Lời nhắc sự kiện';
+
+ @override
+ String get taskReminders => 'Lời nhắc công việc';
+
+ @override
+ String get notificationDetailLevel => 'Mức độ chi tiết của thông báo';
+
+ @override
+ String get notificationDetailPrivate => 'Riêng tư';
+
+ @override
+ String get notificationDetailNormal => 'Bình thường';
+
+ @override
+ String get quietHours => 'Giờ yên tĩnh';
+
+ @override
+ String get quietHoursDescription =>
+ 'Tạm dừng thông báo trong khoảng thời gian này.';
+
+ @override
+ String get quietHoursStart => 'Bắt đầu giờ yên tĩnh';
+
+ @override
+ String get quietHoursEnd => 'Kết thúc giờ yên tĩnh';
+
+ @override
+ String get notifications => 'Thông báo';
+
+ @override
+ String get appearance => 'Giao diện';
+
+ @override
+ String get theme => 'Chủ đề';
+
+ @override
+ String get themeSystem => 'Hệ thống';
+
+ @override
+ String get themeLight => 'Sáng';
+
+ @override
+ String get themeDark => 'Tối';
+
+ @override
+ String get themeFamily => 'Họ chủ đề';
+
+ @override
+ String get themeFamilyYaru => 'Chủ đề Ubuntu nguyên bản (Yaru)';
+
+ @override
+ String get localization => 'Ngôn ngữ và khu vực';
+
+ @override
+ String get currentLocale => 'Ngôn ngữ và khu vực hiện tại';
+
+ @override
+ String get privacy => 'Quyền riêng tư';
+
+ @override
+ String get redactTaskContentInDiagnostics =>
+ 'Ẩn nội dung công việc trong thông tin chẩn đoán';
+
+ @override
+ String get developerDiagnostics => 'Chẩn đoán dành cho nhà phát triển';
+
+ @override
+ String get diagnostics => 'Chẩn đoán';
+
+ @override
+ String get apiInspectorDisabled => 'Hiện trình kiểm tra API';
+
+ @override
+ String get googleTasksApi => 'API Google Tasks';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Bản sửa đổi Discovery: $revision';
+ }
+
+ @override
+ String get implementedMethods => 'Phương thức đã triển khai';
+
+ @override
+ String get supportsTasksScopes => 'Hỗ trợ phạm vi tasks và tasks.readonly';
+
+ @override
+ String get requiresTasksScope => 'Yêu cầu phạm vi tasks';
+
+ @override
+ String get blockedPendingOperations => 'Thao tác đang chờ bị chặn';
+
+ @override
+ String get signInToInspectPendingOperations =>
+ 'Đăng nhập để kiểm tra các thao tác đang chờ.';
+
+ @override
+ String get noBlockedPendingOperations =>
+ 'Không có thao tác đang chờ nào bị chặn.';
+
+ @override
+ String get operationActions => 'Hành động cho thao tác';
+
+ @override
+ String pendingOpListId(String id) {
+ return 'danh_sách=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return 'công_việc=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return 'số_lần_thử=$count';
+ }
+
+ @override
+ String get retry => 'Thử lại';
+
+ @override
+ String get discard => 'Hủy bỏ';
+
+ @override
+ String get discardChangesAction => 'Không lưu';
+
+ @override
+ String get discardChanges => 'Hủy bỏ thay đổi?';
+
+ @override
+ String get discardChangesConfirmation =>
+ 'Thao tác này sẽ hủy bỏ các chỉnh sửa chưa lưu đối với công việc.';
+
+ @override
+ String get retryCompleted => 'Đã thử lại.';
+
+ @override
+ String get discardPendingOperation => 'Hủy bỏ thao tác đang chờ?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ 'Thao tác này sẽ xóa thao tác cục bộ bị chặn. Lần đồng bộ tiếp theo sẽ tải lại dữ liệu từ Google Tasks.';
+
+ @override
+ String get pendingOperationDiscarded => 'Đã hủy bỏ thao tác đang chờ.';
+
+ @override
+ String get syncFailureNotificationTitle => 'Đồng bộ BusyMax không thành công';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return 'Đồng bộ nền không thành công. $message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'Xung đột đồng bộ BusyMax';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return 'Một thay đổi cục bộ đang chờ đã bị chặn. $summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => 'Công việc đến hạn hôm nay';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: 'Có $count công việc đến hạn hôm nay.',
+ one: 'Có một công việc đến hạn hôm nay.',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => 'Lời nhắc sự kiện';
+
+ @override
+ String get taskReminderNotificationTitle => 'Lời nhắc công việc';
+
+ @override
+ String get eventReminderNotificationBody => 'Sự kiện sắp bắt đầu.';
+
+ @override
+ String get taskReminderNotificationBody => 'Công việc sắp đến hạn.';
+
+ @override
+ String get notificationOpenAction => 'Mở';
+
+ @override
+ String get notificationDetailsHidden =>
+ 'Chi tiết bị ẩn theo cài đặt quyền riêng tư.';
+
+ @override
+ String get previousMonth => 'Tháng trước';
+
+ @override
+ String get nextMonth => 'Tháng sau';
+
+ @override
+ String get openMonthView => 'Mở chế độ xem tháng';
+
+ @override
+ String get previousYear => 'Năm trước';
+
+ @override
+ String get nextYear => 'Năm sau';
+
+ @override
+ String get openYearView => 'Mở chế độ xem năm';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return 'Tuần $number';
+ }
+
+ @override
+ String get resizeAllDayPanel => 'Đổi kích thước bảng cả ngày';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count mục',
+ one: '1 mục',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => 'Lịch này chỉ có thể đọc.';
+
+ @override
+ String get selectTimeZone => 'Chọn múi giờ';
+
+ @override
+ String get searchLocations => 'Tìm kiếm địa điểm';
+
+ @override
+ String get noLocationsFound => 'Không tìm thấy địa điểm';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return 'Xóa “$title”?';
+ }
+}
diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart
new file mode 100644
index 0000000..5d7f2bf
--- /dev/null
+++ b/lib/l10n/generated/app_localizations_zh.dart
@@ -0,0 +1,3634 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment
+
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for Chinese (`zh`).
+class AppLocalizationsZh extends AppLocalizations {
+ AppLocalizationsZh([String locale = 'zh']) : super(locale);
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount => '连接 Google 和 Microsoft 帐户以同步日历和任务。';
+
+ @override
+ String get googlePermissionsConsentNotice => '在 Google 权限页面上,同时选择日历和任务权限。';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ '必须授予 Google 日历和 Google Tasks 权限。请重试并选中两个复选框。';
+
+ @override
+ String get finishSetup => '完成设置';
+
+ @override
+ String get continueSetup => '继续';
+
+ @override
+ String get onboardingSetupTitle => '设置 BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => '连接帐户';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ '添加您要使用的所有 Google 和 Microsoft 帐户。BusyMax 会同步每个帐户中的日历、日程、任务列表和任务。';
+
+ @override
+ String get onboardingPreferencesStepTitle => '选择系统设置';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ '打开日程前,请设置桌面行为、提醒、通知详细程度和外观。';
+
+ @override
+ String get signInWithGoogle => '使用 Google 登录';
+
+ @override
+ String get signInWithMicrosoft => '使用 Microsoft 登录';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => '尚未配置此服务。';
+
+ @override
+ String get waitingForGoogleSignIn => '正在等待 Google 登录...';
+
+ @override
+ String get waitingForMicrosoftSignIn => '正在等待 Microsoft 登录...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ '尚未配置 Microsoft 登录。请设置 MICROSOFT_OAUTH_CLIENT_ID。';
+
+ @override
+ String get cancel => '取消';
+
+ @override
+ String get close => '关闭';
+
+ @override
+ String get exit => '退出';
+
+ @override
+ String get options => '选项';
+
+ @override
+ String get hide => '隐藏';
+
+ @override
+ String get show => '显示';
+
+ @override
+ String get export => '导出';
+
+ @override
+ String get save => '保存';
+
+ @override
+ String get settings => '设置';
+
+ @override
+ String get all => '全部';
+
+ @override
+ String get calendarEvents => '日程';
+
+ @override
+ String get calendarTasks => '任务';
+
+ @override
+ String get calendar => '日历';
+
+ @override
+ String get calendars => '日历';
+
+ @override
+ String get newEvent => '新建日程';
+
+ @override
+ String get refreshCalendar => '刷新日历';
+
+ @override
+ String get openInProvider => '在服务中打开';
+
+ @override
+ String get hideFromSchedule => '从日程中隐藏';
+
+ @override
+ String get showInSchedule => '在日程中显示';
+
+ @override
+ String get noCalendarsSynced => '尚未同步任何日历。';
+
+ @override
+ String get allDay => '全天';
+
+ @override
+ String moreItems(int count) {
+ return '还有 $count 项';
+ }
+
+ @override
+ String get noEventsOrTasks => '没有日程或任务';
+
+ @override
+ String get scheduleLoading => '正在加载日程...';
+
+ @override
+ String get scheduleUnavailable => '日程不可用';
+
+ @override
+ String get scheduleNoSources => '没有可见的日历或任务列表';
+
+ @override
+ String get scheduleNoSourcesDescription => '请在设置中选择要显示的内容,然后刷新。';
+
+ @override
+ String get scheduleSignInRequired => '连接帐户';
+
+ @override
+ String get scheduleSignInDescription => '登录以同步日历和任务。';
+
+ @override
+ String get scheduleNoSearchResults => '没有匹配的日程或任务';
+
+ @override
+ String get scheduleNoSearchResultsDescription => '请尝试其他搜索内容或清除当前筛选条件。';
+
+ @override
+ String get refresh => '刷新';
+
+ @override
+ String get trayOpenBusyMax => '打开 BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => '加载更多逾期任务';
+
+ @override
+ String get agendaLoadMoreNoDate => '加载更多无日期任务';
+
+ @override
+ String get viewDay => '日';
+
+ @override
+ String get viewWeek => '周';
+
+ @override
+ String get viewMonth => '月';
+
+ @override
+ String get viewYear => '年';
+
+ @override
+ String get viewAgenda => '日程';
+
+ @override
+ String get scheduleSettings => '日程';
+
+ @override
+ String get scheduleDisplaySettings => '日程显示';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ '日视图和周视图最初显示此时间范围。需要时,更早或更晚的项目会扩展该范围。';
+
+ @override
+ String get scheduleDayStartsAt => '每日开始时间';
+
+ @override
+ String get scheduleDayEndsAt => '每日结束时间';
+
+ @override
+ String get sourceCalendar => '日历';
+
+ @override
+ String get sourceTaskList => '任务列表';
+
+ @override
+ String get createChoiceTitle => '新建';
+
+ @override
+ String get createEventAtTime => '日程';
+
+ @override
+ String get createTaskAtDate => '任务';
+
+ @override
+ String get editEvent => '编辑日程';
+
+ @override
+ String get eventTitle => '日程标题';
+
+ @override
+ String get location => '地点';
+
+ @override
+ String get timeSlot => '时间段';
+
+ @override
+ String get startDateTime => '开始日期/时间';
+
+ @override
+ String get endDateTime => '结束日期/时间';
+
+ @override
+ String get doesNotRepeat => '不重复';
+
+ @override
+ String get defaultReminder => '默认提醒';
+
+ @override
+ String get guests => '参与者';
+
+ @override
+ String get noGuests => '没有参与者';
+
+ @override
+ String get description => '说明';
+
+ @override
+ String get availabilityShowAs => '空闲状态 / 显示为';
+
+ @override
+ String get busy => '忙碌';
+
+ @override
+ String get visibility => '可见性';
+
+ @override
+ String get defaultVisibility => '默认可见性';
+
+ @override
+ String get conference => '会议';
+
+ @override
+ String get noConference => '无会议';
+
+ @override
+ String get providerCalendar => '服务日历';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => '粗体';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => '斜体';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => '下划线';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes 分钟前',
+ one: '1 分钟前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => '开始时';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours 小时前',
+ one: '1 小时前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days 天前',
+ one: '1 天前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => '空闲';
+
+ @override
+ String get availabilityTentative => '暂定';
+
+ @override
+ String get availabilityOutOfOffice => '不在办公室';
+
+ @override
+ String get availabilityWorkingElsewhere => '在其他地点办公';
+
+ @override
+ String get visibilityDefault => '默认';
+
+ @override
+ String get visibilityPublic => '公开';
+
+ @override
+ String get visibilityPrivate => '私密';
+
+ @override
+ String get visibilityConfidential => '机密';
+
+ @override
+ String get sensitivityNormal => '普通';
+
+ @override
+ String get sensitivityPersonal => '个人';
+
+ @override
+ String get tasks => '任务';
+
+ @override
+ String get allTasks => '所有任务';
+
+ @override
+ String tasksInList(String title) {
+ return '$title中的任务';
+ }
+
+ @override
+ String get taskLists => '任务列表';
+
+ @override
+ String get navigation => '导航';
+
+ @override
+ String get mainMenu => '主菜单';
+
+ @override
+ String get keyboardShortcuts => '键盘快捷键';
+
+ @override
+ String get shortcutGroupGeneral => '常规';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => '显示快捷键参考表';
+
+ @override
+ String get shortcutGroupNavigation => '导航';
+
+ @override
+ String get shortcutNextPeriod => '下一时段';
+
+ @override
+ String get shortcutNextPeriodDescription => '在周视图中前往下一周,在月视图中前往下个月,依此类推';
+
+ @override
+ String get shortcutPreviousPeriod => '上一时段';
+
+ @override
+ String get shortcutPreviousPeriodDescription => '在周视图中前往上一周,在月视图中前往上个月,依此类推';
+
+ @override
+ String get shortcutJumpToToday => '跳转到今天';
+
+ @override
+ String get shortcutGroupView => '视图';
+
+ @override
+ String get shortcutDayView => '日视图';
+
+ @override
+ String get shortcutWeekView => '周视图';
+
+ @override
+ String get shortcutMonthView => '月视图';
+
+ @override
+ String get shortcutYearView => '年视图';
+
+ @override
+ String get shortcutAgendaView => '日程视图';
+
+ @override
+ String get shortcutGroupCreateAndEdit => '新建和编辑';
+
+ @override
+ String get shortcutSaveItem => '保存日程或任务';
+
+ @override
+ String get shortcutDeleteItem => '删除日程或任务';
+
+ @override
+ String get shortcutGroupTaskEditing => '任务编辑';
+
+ @override
+ String get shortcutCancelEditing => '取消编辑';
+
+ @override
+ String get shortcutCancelEditingDescription => '关闭任务编辑或任务详情';
+
+ @override
+ String get aboutBusyMax => '关于 BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => '日历和任务';
+
+ @override
+ String get license => '许可证';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => '网站';
+
+ @override
+ String get sourceCode => '源代码';
+
+ @override
+ String get reportAnIssue => '报告问题';
+
+ @override
+ String get sendFeedback => '发送反馈';
+
+ @override
+ String get feedbackSubmit => '提交';
+
+ @override
+ String get feedbackCategory => '类别';
+
+ @override
+ String get feedbackSelectCategory => '选择类别';
+
+ @override
+ String get feedbackCategoryProblem => '问题或错误';
+
+ @override
+ String get feedbackCategoryFeature => '功能请求';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => '隐私或安全问题';
+
+ @override
+ String get feedbackCategoryUsability => '易用性问题';
+
+ @override
+ String get feedbackCategoryOther => '其他';
+
+ @override
+ String get feedbackSubject => '主题';
+
+ @override
+ String get feedbackDetailedMessage => '详细信息';
+
+ @override
+ String get feedbackReplyEmail => '用于接收回复的电子邮件地址(可选)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => '包含技术详情';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ '仅添加您的 Linux 操作系统版本和应用区域设置。不包含日志、帐户数据、文件名或其他诊断信息。';
+
+ @override
+ String get feedbackCategoryRequired => '请选择类别。';
+
+ @override
+ String get feedbackSubjectLengthError => '主题必须为 3 至 120 个字符。';
+
+ @override
+ String get feedbackMessageLengthError => '消息必须为 10 至 5,000 个字符。';
+
+ @override
+ String get feedbackInvalidEmail => '请输入有效的电子邮件地址。';
+
+ @override
+ String get feedbackConnectionError => '无法连接到 BusyStack。请检查连接,然后重试。';
+
+ @override
+ String get feedbackTimeoutError => '请求超时。您的反馈尚未清除,请重试。';
+
+ @override
+ String get feedbackRateLimitedError => '从此网络发送的反馈过多。请稍后再试。';
+
+ @override
+ String get feedbackRejectedError => '服务器拒绝了提交。请检查各字段,然后重试。';
+
+ @override
+ String get feedbackServerError => 'BusyStack 目前无法接收您的反馈。您的反馈尚未清除,请重试。';
+
+ @override
+ String feedbackSuccess(String id) {
+ return '反馈已发送。参考编号:$id';
+ }
+
+ @override
+ String get toggleSidebar => '显示或隐藏侧边栏';
+
+ @override
+ String get showSidebar => '显示侧边栏面板';
+
+ @override
+ String get hideSidebar => '隐藏侧边栏面板';
+
+ @override
+ String get accounts => '帐户';
+
+ @override
+ String get currentAccount => '当前帐户';
+
+ @override
+ String get switchAccount => '切换帐户';
+
+ @override
+ String get addGoogleAccount => '添加 Google 帐户';
+
+ @override
+ String get addMicrosoftAccount => '添加 Microsoft 帐户';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => '已登录';
+
+ @override
+ String get removeAccount => '移除帐户…';
+
+ @override
+ String get removingAccount => '正在移除帐户…';
+
+ @override
+ String get removeAccountDescription => '停止同步并从此设备移除此帐户的数据。';
+
+ @override
+ String removeAccountTitle(String account) {
+ return '从 BusyMax 中移除 $account?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ '这会从此设备删除缓存的任务、日历、日程、提醒和待处理的离线更改。未同步的更改将丢失。不会从 Google 或 Microsoft 删除任何内容。';
+
+ @override
+ String get revokeGoogleAccess => '同时撤销 BusyMax 对此 Google 帐户的访问权限';
+
+ @override
+ String get revokeGoogleAccessDescription => '重新连接之前,您需要再次授予访问权限。';
+
+ @override
+ String get removeAccountAction => '移除帐户';
+
+ @override
+ String get removeAccountFailed => '无法完成帐户移除。请重试。';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ '该帐户已从此设备移除,但无法撤销 BusyMax 对您的 Google 帐户的访问权限。您可以在 Google 帐户中手动撤销该权限。';
+
+ @override
+ String get newList => '新建列表';
+
+ @override
+ String get signInToViewTaskLists => '登录以查看任务列表。';
+
+ @override
+ String get noTaskListsSynced => '尚未同步任何任务列表。';
+
+ @override
+ String get listActions => '列表操作';
+
+ @override
+ String get rename => '重命名';
+
+ @override
+ String get delete => '删除';
+
+ @override
+ String get renameList => '重命名列表';
+
+ @override
+ String get deleteList => '删除列表';
+
+ @override
+ String get builtInMicrosoftList => '内置';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ '无法重命名或删除 Microsoft To Do 内置列表。';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return '从 Google Tasks 中删除“$title”?';
+ }
+
+ @override
+ String get deleteEvent => '删除日程';
+
+ @override
+ String get title => '标题';
+
+ @override
+ String get create => '新建';
+
+ @override
+ String get newTask => '新建任务';
+
+ @override
+ String get clearCompleted => '清除已完成项';
+
+ @override
+ String get refreshList => '刷新列表';
+
+ @override
+ String get refreshAll => '全部刷新';
+
+ @override
+ String get listRefreshed => '列表已刷新。';
+
+ @override
+ String get allTasksRefreshed => '所有帐户均已刷新。';
+
+ @override
+ String exportedFile(String path) {
+ return '已导出到 $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return '导出失败:$error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return '刷新失败:$error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => '请选择或创建任务列表以开始使用。';
+
+ @override
+ String get signInToViewTasks => '登录以查看任务。';
+
+ @override
+ String get noTasks => '没有任务。';
+
+ @override
+ String get noTasksYet => '还没有任务';
+
+ @override
+ String get noTasksYetMessage => '创建任务或刷新帐户以开始使用。';
+
+ @override
+ String get noTasksInList => '此列表中没有任务。';
+
+ @override
+ String get overdue => '已逾期';
+
+ @override
+ String get today => '今天';
+
+ @override
+ String get tomorrow => '明天';
+
+ @override
+ String get upcoming => '即将到期';
+
+ @override
+ String get noDate => '无日期';
+
+ @override
+ String get completed => '已完成';
+
+ @override
+ String duePrefix(String date) {
+ return '$date 到期';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => '任务详情';
+
+ @override
+ String get editTask => '编辑任务';
+
+ @override
+ String get noTaskSelected => '未选择任务。';
+
+ @override
+ String get noTaskSelectedHelper => '选择任务以查看和编辑详情。';
+
+ @override
+ String get taskUnavailable => '任务不可用。';
+
+ @override
+ String get signInToEditTasks => '登录以编辑任务。';
+
+ @override
+ String get refreshTask => '刷新任务';
+
+ @override
+ String get primarySection => '主要信息';
+
+ @override
+ String get statusSection => '状态';
+
+ @override
+ String get openStatus => '未完成';
+
+ @override
+ String get doneStatus => '已完成';
+
+ @override
+ String get notes => '备注';
+
+ @override
+ String get dueDate => '截止日期';
+
+ @override
+ String get clearDueDate => '清除截止日期';
+
+ @override
+ String get dueTime => '截止时间';
+
+ @override
+ String get startDate => '开始日期';
+
+ @override
+ String get startTime => '开始时间';
+
+ @override
+ String get endDate => '结束日期';
+
+ @override
+ String get endTime => '结束时间';
+
+ @override
+ String get reminderDate => '提醒日期';
+
+ @override
+ String get reminderTime => '提醒时间';
+
+ @override
+ String get reminder => '提醒';
+
+ @override
+ String get addReminder => '添加提醒';
+
+ @override
+ String get addGuest => '添加参与者';
+
+ @override
+ String get addGuestEmail => '添加参与者电子邮件';
+
+ @override
+ String get removeReminder => '移除提醒';
+
+ @override
+ String get off => '关闭';
+
+ @override
+ String get repeat => '重复';
+
+ @override
+ String get repeatNone => '不重复';
+
+ @override
+ String get noneValue => '无';
+
+ @override
+ String get repeatDaily => '每天';
+
+ @override
+ String get repeatWeekly => '每周';
+
+ @override
+ String get repeatMonthly => '每月';
+
+ @override
+ String get repeatYearly => '每年';
+
+ @override
+ String get importance => '重要性';
+
+ @override
+ String get importanceLow => '低';
+
+ @override
+ String get importanceNormal => '普通';
+
+ @override
+ String get importanceHigh => '高';
+
+ @override
+ String get categories => '类别';
+
+ @override
+ String get scheduleSection => '日程';
+
+ @override
+ String get dueGroup => '截止';
+
+ @override
+ String get startGroup => '开始';
+
+ @override
+ String get reminderGroup => '提醒';
+
+ @override
+ String get organizationSection => '整理';
+
+ @override
+ String get actionsSection => '操作';
+
+ @override
+ String get advancedSection => '高级';
+
+ @override
+ String get addCategory => '添加类别';
+
+ @override
+ String get list => '列表';
+
+ @override
+ String get microsoftMoveUnsupported => '此版本不支持在 Microsoft To Do 帐户的列表之间移动任务。';
+
+ @override
+ String get createSubtask => '创建子任务';
+
+ @override
+ String get moveToTop => '移到顶部';
+
+ @override
+ String get deleteTask => '删除任务';
+
+ @override
+ String get newSubtask => '新建子任务';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return '从 Google Tasks 中删除“$title”?';
+ }
+
+ @override
+ String get metadata => '元数据';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => '更新时间';
+
+ @override
+ String get parent => '父任务';
+
+ @override
+ String get position => '位置';
+
+ @override
+ String get webLink => '网页链接';
+
+ @override
+ String get assignment => '分配';
+
+ @override
+ String get localState => '本地状态';
+
+ @override
+ String get pendingSync => '等待同步';
+
+ @override
+ String get synced => '已同步';
+
+ @override
+ String get account => '帐户';
+
+ @override
+ String get sync => '同步';
+
+ @override
+ String get manualFullSync => '手动完整同步';
+
+ @override
+ String get runInBackgroundWhenClosed => '窗口关闭后继续在后台运行';
+
+ @override
+ String get showTrayIcon => '显示托盘图标';
+
+ @override
+ String get startMinimizedToTray => '启动时最小化到托盘';
+
+ @override
+ String get requiresTrayIcon => '需要托盘图标。';
+
+ @override
+ String get syncComplete => '同步完成。';
+
+ @override
+ String syncFailed(String error) {
+ return '同步失败:$error';
+ }
+
+ @override
+ String get notifySyncFailures => '同步失败通知';
+
+ @override
+ String get notifyConflicts => '冲突通知';
+
+ @override
+ String get notifyDueToday => '今天到期任务通知';
+
+ @override
+ String get eventReminders => '日程提醒';
+
+ @override
+ String get taskReminders => '任务提醒';
+
+ @override
+ String get notificationDetailLevel => '通知详细程度';
+
+ @override
+ String get notificationDetailPrivate => '私密';
+
+ @override
+ String get notificationDetailNormal => '普通';
+
+ @override
+ String get quietHours => '免打扰时段';
+
+ @override
+ String get quietHoursDescription => '在此时段暂停通知。';
+
+ @override
+ String get quietHoursStart => '免打扰开始时间';
+
+ @override
+ String get quietHoursEnd => '免打扰结束时间';
+
+ @override
+ String get notifications => '通知';
+
+ @override
+ String get appearance => '外观';
+
+ @override
+ String get theme => '主题';
+
+ @override
+ String get themeSystem => '系统';
+
+ @override
+ String get themeLight => '浅色';
+
+ @override
+ String get themeDark => '深色';
+
+ @override
+ String get themeFamily => '主题系列';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu 原生主题(Yaru)';
+
+ @override
+ String get localization => '语言和区域';
+
+ @override
+ String get currentLocale => '当前区域设置';
+
+ @override
+ String get privacy => '隐私';
+
+ @override
+ String get redactTaskContentInDiagnostics => '在诊断信息中隐藏任务内容';
+
+ @override
+ String get developerDiagnostics => '开发者诊断';
+
+ @override
+ String get diagnostics => '诊断';
+
+ @override
+ String get apiInspectorDisabled => '显示 API 检查器';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery 修订版:$revision';
+ }
+
+ @override
+ String get implementedMethods => '已实现的方法';
+
+ @override
+ String get supportsTasksScopes => '支持 tasks 和 tasks.readonly 权限范围';
+
+ @override
+ String get requiresTasksScope => '需要 tasks 权限范围';
+
+ @override
+ String get blockedPendingOperations => '被阻止的待处理操作';
+
+ @override
+ String get signInToInspectPendingOperations => '登录以检查待处理操作。';
+
+ @override
+ String get noBlockedPendingOperations => '没有被阻止的待处理操作。';
+
+ @override
+ String get operationActions => '操作选项';
+
+ @override
+ String pendingOpListId(String id) {
+ return '列表=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return '任务=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return '尝试次数=$count';
+ }
+
+ @override
+ String get retry => '重试';
+
+ @override
+ String get discard => '舍弃';
+
+ @override
+ String get discardChangesAction => '舍弃';
+
+ @override
+ String get discardChanges => '舍弃更改?';
+
+ @override
+ String get discardChangesConfirmation => '这将舍弃对此任务所做的未保存编辑。';
+
+ @override
+ String get retryCompleted => '重试完成。';
+
+ @override
+ String get discardPendingOperation => '舍弃待处理操作?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ '这将移除被阻止的本地操作。下次同步时将从 Google Tasks 刷新数据。';
+
+ @override
+ String get pendingOperationDiscarded => '已舍弃待处理操作。';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax 同步失败';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return '后台同步失败。$message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax 同步冲突';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return '一项待处理的本地更改被阻止。$summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => '今天到期的任务';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '今天有 $count 项任务到期。',
+ one: '今天有 1 项任务到期。',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => '日程提醒';
+
+ @override
+ String get taskReminderNotificationTitle => '任务提醒';
+
+ @override
+ String get eventReminderNotificationBody => '日程即将开始。';
+
+ @override
+ String get taskReminderNotificationBody => '任务即将到期。';
+
+ @override
+ String get notificationOpenAction => '打开';
+
+ @override
+ String get notificationDetailsHidden => '根据隐私设置,详细信息已隐藏。';
+
+ @override
+ String get previousMonth => '上个月';
+
+ @override
+ String get nextMonth => '下个月';
+
+ @override
+ String get openMonthView => '打开月视图';
+
+ @override
+ String get previousYear => '上一年';
+
+ @override
+ String get nextYear => '下一年';
+
+ @override
+ String get openYearView => '打开年视图';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return '第 $number 周';
+ }
+
+ @override
+ String get resizeAllDayPanel => '调整全天面板的大小';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count 项',
+ one: '1 项',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => '此日历为只读。';
+
+ @override
+ String get selectTimeZone => '选择时区';
+
+ @override
+ String get searchLocations => '搜索地点';
+
+ @override
+ String get noLocationsFound => '未找到地点';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '删除“$title”?';
+ }
+}
+
+/// The translations for Chinese, using the Han script (`zh_Hans`).
+class AppLocalizationsZhHans extends AppLocalizationsZh {
+ AppLocalizationsZhHans() : super('zh_Hans');
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount => '连接 Google 和 Microsoft 帐户以同步日历和任务。';
+
+ @override
+ String get googlePermissionsConsentNotice => '在 Google 权限页面上,同时选择日历和任务权限。';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ '必须授予 Google 日历和 Google Tasks 权限。请重试并选中两个复选框。';
+
+ @override
+ String get finishSetup => '完成设置';
+
+ @override
+ String get continueSetup => '继续';
+
+ @override
+ String get onboardingSetupTitle => '设置 BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => '连接帐户';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ '添加您要使用的所有 Google 和 Microsoft 帐户。BusyMax 会同步每个帐户中的日历、日程、任务列表和任务。';
+
+ @override
+ String get onboardingPreferencesStepTitle => '选择系统设置';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ '打开日程前,请设置桌面行为、提醒、通知详细程度和外观。';
+
+ @override
+ String get signInWithGoogle => '使用 Google 登录';
+
+ @override
+ String get signInWithMicrosoft => '使用 Microsoft 登录';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => '尚未配置此服务。';
+
+ @override
+ String get waitingForGoogleSignIn => '正在等待 Google 登录...';
+
+ @override
+ String get waitingForMicrosoftSignIn => '正在等待 Microsoft 登录...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ '尚未配置 Microsoft 登录。请设置 MICROSOFT_OAUTH_CLIENT_ID。';
+
+ @override
+ String get cancel => '取消';
+
+ @override
+ String get close => '关闭';
+
+ @override
+ String get exit => '退出';
+
+ @override
+ String get options => '选项';
+
+ @override
+ String get hide => '隐藏';
+
+ @override
+ String get show => '显示';
+
+ @override
+ String get export => '导出';
+
+ @override
+ String get save => '保存';
+
+ @override
+ String get settings => '设置';
+
+ @override
+ String get all => '全部';
+
+ @override
+ String get calendarEvents => '日程';
+
+ @override
+ String get calendarTasks => '任务';
+
+ @override
+ String get calendar => '日历';
+
+ @override
+ String get calendars => '日历';
+
+ @override
+ String get newEvent => '新建日程';
+
+ @override
+ String get refreshCalendar => '刷新日历';
+
+ @override
+ String get openInProvider => '在服务中打开';
+
+ @override
+ String get hideFromSchedule => '从日程中隐藏';
+
+ @override
+ String get showInSchedule => '在日程中显示';
+
+ @override
+ String get noCalendarsSynced => '尚未同步任何日历。';
+
+ @override
+ String get allDay => '全天';
+
+ @override
+ String moreItems(int count) {
+ return '还有 $count 项';
+ }
+
+ @override
+ String get noEventsOrTasks => '没有日程或任务';
+
+ @override
+ String get scheduleLoading => '正在加载日程...';
+
+ @override
+ String get scheduleUnavailable => '日程不可用';
+
+ @override
+ String get scheduleNoSources => '没有可见的日历或任务列表';
+
+ @override
+ String get scheduleNoSourcesDescription => '请在设置中选择要显示的内容,然后刷新。';
+
+ @override
+ String get scheduleSignInRequired => '连接帐户';
+
+ @override
+ String get scheduleSignInDescription => '登录以同步日历和任务。';
+
+ @override
+ String get scheduleNoSearchResults => '没有匹配的日程或任务';
+
+ @override
+ String get scheduleNoSearchResultsDescription => '请尝试其他搜索内容或清除当前筛选条件。';
+
+ @override
+ String get refresh => '刷新';
+
+ @override
+ String get trayOpenBusyMax => '打开 BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => '加载更多逾期任务';
+
+ @override
+ String get agendaLoadMoreNoDate => '加载更多无日期任务';
+
+ @override
+ String get viewDay => '日';
+
+ @override
+ String get viewWeek => '周';
+
+ @override
+ String get viewMonth => '月';
+
+ @override
+ String get viewYear => '年';
+
+ @override
+ String get viewAgenda => '日程';
+
+ @override
+ String get scheduleSettings => '日程';
+
+ @override
+ String get scheduleDisplaySettings => '日程显示';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ '日视图和周视图最初显示此时间范围。需要时,更早或更晚的项目会扩展该范围。';
+
+ @override
+ String get scheduleDayStartsAt => '每日开始时间';
+
+ @override
+ String get scheduleDayEndsAt => '每日结束时间';
+
+ @override
+ String get sourceCalendar => '日历';
+
+ @override
+ String get sourceTaskList => '任务列表';
+
+ @override
+ String get createChoiceTitle => '新建';
+
+ @override
+ String get createEventAtTime => '日程';
+
+ @override
+ String get createTaskAtDate => '任务';
+
+ @override
+ String get editEvent => '编辑日程';
+
+ @override
+ String get eventTitle => '日程标题';
+
+ @override
+ String get location => '地点';
+
+ @override
+ String get timeSlot => '时间段';
+
+ @override
+ String get startDateTime => '开始日期/时间';
+
+ @override
+ String get endDateTime => '结束日期/时间';
+
+ @override
+ String get doesNotRepeat => '不重复';
+
+ @override
+ String get defaultReminder => '默认提醒';
+
+ @override
+ String get guests => '参与者';
+
+ @override
+ String get noGuests => '没有参与者';
+
+ @override
+ String get description => '说明';
+
+ @override
+ String get availabilityShowAs => '空闲状态 / 显示为';
+
+ @override
+ String get busy => '忙碌';
+
+ @override
+ String get visibility => '可见性';
+
+ @override
+ String get defaultVisibility => '默认可见性';
+
+ @override
+ String get conference => '会议';
+
+ @override
+ String get noConference => '无会议';
+
+ @override
+ String get providerCalendar => '服务日历';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => '粗体';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => '斜体';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => '下划线';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes 分钟前',
+ one: '1 分钟前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => '开始时';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours 小时前',
+ one: '1 小时前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days 天前',
+ one: '1 天前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => '空闲';
+
+ @override
+ String get availabilityTentative => '暂定';
+
+ @override
+ String get availabilityOutOfOffice => '不在办公室';
+
+ @override
+ String get availabilityWorkingElsewhere => '在其他地点办公';
+
+ @override
+ String get visibilityDefault => '默认';
+
+ @override
+ String get visibilityPublic => '公开';
+
+ @override
+ String get visibilityPrivate => '私密';
+
+ @override
+ String get visibilityConfidential => '机密';
+
+ @override
+ String get sensitivityNormal => '普通';
+
+ @override
+ String get sensitivityPersonal => '个人';
+
+ @override
+ String get tasks => '任务';
+
+ @override
+ String get allTasks => '所有任务';
+
+ @override
+ String tasksInList(String title) {
+ return '$title中的任务';
+ }
+
+ @override
+ String get taskLists => '任务列表';
+
+ @override
+ String get navigation => '导航';
+
+ @override
+ String get mainMenu => '主菜单';
+
+ @override
+ String get keyboardShortcuts => '键盘快捷键';
+
+ @override
+ String get shortcutGroupGeneral => '常规';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => '显示快捷键参考表';
+
+ @override
+ String get shortcutGroupNavigation => '导航';
+
+ @override
+ String get shortcutNextPeriod => '下一时段';
+
+ @override
+ String get shortcutNextPeriodDescription => '在周视图中前往下一周,在月视图中前往下个月,依此类推';
+
+ @override
+ String get shortcutPreviousPeriod => '上一时段';
+
+ @override
+ String get shortcutPreviousPeriodDescription => '在周视图中前往上一周,在月视图中前往上个月,依此类推';
+
+ @override
+ String get shortcutJumpToToday => '跳转到今天';
+
+ @override
+ String get shortcutGroupView => '视图';
+
+ @override
+ String get shortcutDayView => '日视图';
+
+ @override
+ String get shortcutWeekView => '周视图';
+
+ @override
+ String get shortcutMonthView => '月视图';
+
+ @override
+ String get shortcutYearView => '年视图';
+
+ @override
+ String get shortcutAgendaView => '日程视图';
+
+ @override
+ String get shortcutGroupCreateAndEdit => '新建和编辑';
+
+ @override
+ String get shortcutSaveItem => '保存日程或任务';
+
+ @override
+ String get shortcutDeleteItem => '删除日程或任务';
+
+ @override
+ String get shortcutGroupTaskEditing => '任务编辑';
+
+ @override
+ String get shortcutCancelEditing => '取消编辑';
+
+ @override
+ String get shortcutCancelEditingDescription => '关闭任务编辑或任务详情';
+
+ @override
+ String get aboutBusyMax => '关于 BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => '日历和任务';
+
+ @override
+ String get license => '许可证';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => '网站';
+
+ @override
+ String get sourceCode => '源代码';
+
+ @override
+ String get reportAnIssue => '报告问题';
+
+ @override
+ String get sendFeedback => '发送反馈';
+
+ @override
+ String get feedbackSubmit => '提交';
+
+ @override
+ String get feedbackCategory => '类别';
+
+ @override
+ String get feedbackSelectCategory => '选择类别';
+
+ @override
+ String get feedbackCategoryProblem => '问题或错误';
+
+ @override
+ String get feedbackCategoryFeature => '功能请求';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => '隐私或安全问题';
+
+ @override
+ String get feedbackCategoryUsability => '易用性问题';
+
+ @override
+ String get feedbackCategoryOther => '其他';
+
+ @override
+ String get feedbackSubject => '主题';
+
+ @override
+ String get feedbackDetailedMessage => '详细信息';
+
+ @override
+ String get feedbackReplyEmail => '用于接收回复的电子邮件地址(可选)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => '包含技术详情';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ '仅添加您的 Linux 操作系统版本和应用区域设置。不包含日志、帐户数据、文件名或其他诊断信息。';
+
+ @override
+ String get feedbackCategoryRequired => '请选择类别。';
+
+ @override
+ String get feedbackSubjectLengthError => '主题必须为 3 至 120 个字符。';
+
+ @override
+ String get feedbackMessageLengthError => '消息必须为 10 至 5,000 个字符。';
+
+ @override
+ String get feedbackInvalidEmail => '请输入有效的电子邮件地址。';
+
+ @override
+ String get feedbackConnectionError => '无法连接到 BusyStack。请检查连接,然后重试。';
+
+ @override
+ String get feedbackTimeoutError => '请求超时。您的反馈尚未清除,请重试。';
+
+ @override
+ String get feedbackRateLimitedError => '从此网络发送的反馈过多。请稍后再试。';
+
+ @override
+ String get feedbackRejectedError => '服务器拒绝了提交。请检查各字段,然后重试。';
+
+ @override
+ String get feedbackServerError => 'BusyStack 目前无法接收您的反馈。您的反馈尚未清除,请重试。';
+
+ @override
+ String feedbackSuccess(String id) {
+ return '反馈已发送。参考编号:$id';
+ }
+
+ @override
+ String get toggleSidebar => '显示或隐藏侧边栏';
+
+ @override
+ String get showSidebar => '显示侧边栏面板';
+
+ @override
+ String get hideSidebar => '隐藏侧边栏面板';
+
+ @override
+ String get accounts => '帐户';
+
+ @override
+ String get currentAccount => '当前帐户';
+
+ @override
+ String get switchAccount => '切换帐户';
+
+ @override
+ String get addGoogleAccount => '添加 Google 帐户';
+
+ @override
+ String get addMicrosoftAccount => '添加 Microsoft 帐户';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => '已登录';
+
+ @override
+ String get removeAccount => '移除帐户…';
+
+ @override
+ String get removingAccount => '正在移除帐户…';
+
+ @override
+ String get removeAccountDescription => '停止同步并从此设备移除此帐户的数据。';
+
+ @override
+ String removeAccountTitle(String account) {
+ return '从 BusyMax 中移除 $account?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ '这会从此设备删除缓存的任务、日历、日程、提醒和待处理的离线更改。未同步的更改将丢失。不会从 Google 或 Microsoft 删除任何内容。';
+
+ @override
+ String get revokeGoogleAccess => '同时撤销 BusyMax 对此 Google 帐户的访问权限';
+
+ @override
+ String get revokeGoogleAccessDescription => '重新连接之前,您需要再次授予访问权限。';
+
+ @override
+ String get removeAccountAction => '移除帐户';
+
+ @override
+ String get removeAccountFailed => '无法完成帐户移除。请重试。';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ '该帐户已从此设备移除,但无法撤销 BusyMax 对您的 Google 帐户的访问权限。您可以在 Google 帐户中手动撤销该权限。';
+
+ @override
+ String get newList => '新建列表';
+
+ @override
+ String get signInToViewTaskLists => '登录以查看任务列表。';
+
+ @override
+ String get noTaskListsSynced => '尚未同步任何任务列表。';
+
+ @override
+ String get listActions => '列表操作';
+
+ @override
+ String get rename => '重命名';
+
+ @override
+ String get delete => '删除';
+
+ @override
+ String get renameList => '重命名列表';
+
+ @override
+ String get deleteList => '删除列表';
+
+ @override
+ String get builtInMicrosoftList => '内置';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ '无法重命名或删除 Microsoft To Do 内置列表。';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return '从 Google Tasks 中删除“$title”?';
+ }
+
+ @override
+ String get deleteEvent => '删除日程';
+
+ @override
+ String get title => '标题';
+
+ @override
+ String get create => '新建';
+
+ @override
+ String get newTask => '新建任务';
+
+ @override
+ String get clearCompleted => '清除已完成项';
+
+ @override
+ String get refreshList => '刷新列表';
+
+ @override
+ String get refreshAll => '全部刷新';
+
+ @override
+ String get listRefreshed => '列表已刷新。';
+
+ @override
+ String get allTasksRefreshed => '所有帐户均已刷新。';
+
+ @override
+ String exportedFile(String path) {
+ return '已导出到 $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return '导出失败:$error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return '刷新失败:$error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => '请选择或创建任务列表以开始使用。';
+
+ @override
+ String get signInToViewTasks => '登录以查看任务。';
+
+ @override
+ String get noTasks => '没有任务。';
+
+ @override
+ String get noTasksYet => '还没有任务';
+
+ @override
+ String get noTasksYetMessage => '创建任务或刷新帐户以开始使用。';
+
+ @override
+ String get noTasksInList => '此列表中没有任务。';
+
+ @override
+ String get overdue => '已逾期';
+
+ @override
+ String get today => '今天';
+
+ @override
+ String get tomorrow => '明天';
+
+ @override
+ String get upcoming => '即将到期';
+
+ @override
+ String get noDate => '无日期';
+
+ @override
+ String get completed => '已完成';
+
+ @override
+ String duePrefix(String date) {
+ return '$date 到期';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => '任务详情';
+
+ @override
+ String get editTask => '编辑任务';
+
+ @override
+ String get noTaskSelected => '未选择任务。';
+
+ @override
+ String get noTaskSelectedHelper => '选择任务以查看和编辑详情。';
+
+ @override
+ String get taskUnavailable => '任务不可用。';
+
+ @override
+ String get signInToEditTasks => '登录以编辑任务。';
+
+ @override
+ String get refreshTask => '刷新任务';
+
+ @override
+ String get primarySection => '主要信息';
+
+ @override
+ String get statusSection => '状态';
+
+ @override
+ String get openStatus => '未完成';
+
+ @override
+ String get doneStatus => '已完成';
+
+ @override
+ String get notes => '备注';
+
+ @override
+ String get dueDate => '截止日期';
+
+ @override
+ String get clearDueDate => '清除截止日期';
+
+ @override
+ String get dueTime => '截止时间';
+
+ @override
+ String get startDate => '开始日期';
+
+ @override
+ String get startTime => '开始时间';
+
+ @override
+ String get endDate => '结束日期';
+
+ @override
+ String get endTime => '结束时间';
+
+ @override
+ String get reminderDate => '提醒日期';
+
+ @override
+ String get reminderTime => '提醒时间';
+
+ @override
+ String get reminder => '提醒';
+
+ @override
+ String get addReminder => '添加提醒';
+
+ @override
+ String get addGuest => '添加参与者';
+
+ @override
+ String get addGuestEmail => '添加参与者电子邮件';
+
+ @override
+ String get removeReminder => '移除提醒';
+
+ @override
+ String get off => '关闭';
+
+ @override
+ String get repeat => '重复';
+
+ @override
+ String get repeatNone => '不重复';
+
+ @override
+ String get noneValue => '无';
+
+ @override
+ String get repeatDaily => '每天';
+
+ @override
+ String get repeatWeekly => '每周';
+
+ @override
+ String get repeatMonthly => '每月';
+
+ @override
+ String get repeatYearly => '每年';
+
+ @override
+ String get importance => '重要性';
+
+ @override
+ String get importanceLow => '低';
+
+ @override
+ String get importanceNormal => '普通';
+
+ @override
+ String get importanceHigh => '高';
+
+ @override
+ String get categories => '类别';
+
+ @override
+ String get scheduleSection => '日程';
+
+ @override
+ String get dueGroup => '截止';
+
+ @override
+ String get startGroup => '开始';
+
+ @override
+ String get reminderGroup => '提醒';
+
+ @override
+ String get organizationSection => '整理';
+
+ @override
+ String get actionsSection => '操作';
+
+ @override
+ String get advancedSection => '高级';
+
+ @override
+ String get addCategory => '添加类别';
+
+ @override
+ String get list => '列表';
+
+ @override
+ String get microsoftMoveUnsupported => '此版本不支持在 Microsoft To Do 帐户的列表之间移动任务。';
+
+ @override
+ String get createSubtask => '创建子任务';
+
+ @override
+ String get moveToTop => '移到顶部';
+
+ @override
+ String get deleteTask => '删除任务';
+
+ @override
+ String get newSubtask => '新建子任务';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return '从 Google Tasks 中删除“$title”?';
+ }
+
+ @override
+ String get metadata => '元数据';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => '更新时间';
+
+ @override
+ String get parent => '父任务';
+
+ @override
+ String get position => '位置';
+
+ @override
+ String get webLink => '网页链接';
+
+ @override
+ String get assignment => '分配';
+
+ @override
+ String get localState => '本地状态';
+
+ @override
+ String get pendingSync => '等待同步';
+
+ @override
+ String get synced => '已同步';
+
+ @override
+ String get account => '帐户';
+
+ @override
+ String get sync => '同步';
+
+ @override
+ String get manualFullSync => '手动完整同步';
+
+ @override
+ String get runInBackgroundWhenClosed => '窗口关闭后继续在后台运行';
+
+ @override
+ String get showTrayIcon => '显示托盘图标';
+
+ @override
+ String get startMinimizedToTray => '启动时最小化到托盘';
+
+ @override
+ String get requiresTrayIcon => '需要托盘图标。';
+
+ @override
+ String get syncComplete => '同步完成。';
+
+ @override
+ String syncFailed(String error) {
+ return '同步失败:$error';
+ }
+
+ @override
+ String get notifySyncFailures => '同步失败通知';
+
+ @override
+ String get notifyConflicts => '冲突通知';
+
+ @override
+ String get notifyDueToday => '今天到期任务通知';
+
+ @override
+ String get eventReminders => '日程提醒';
+
+ @override
+ String get taskReminders => '任务提醒';
+
+ @override
+ String get notificationDetailLevel => '通知详细程度';
+
+ @override
+ String get notificationDetailPrivate => '私密';
+
+ @override
+ String get notificationDetailNormal => '普通';
+
+ @override
+ String get quietHours => '免打扰时段';
+
+ @override
+ String get quietHoursDescription => '在此时段暂停通知。';
+
+ @override
+ String get quietHoursStart => '免打扰开始时间';
+
+ @override
+ String get quietHoursEnd => '免打扰结束时间';
+
+ @override
+ String get notifications => '通知';
+
+ @override
+ String get appearance => '外观';
+
+ @override
+ String get theme => '主题';
+
+ @override
+ String get themeSystem => '系统';
+
+ @override
+ String get themeLight => '浅色';
+
+ @override
+ String get themeDark => '深色';
+
+ @override
+ String get themeFamily => '主题系列';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu 原生主题(Yaru)';
+
+ @override
+ String get localization => '语言和区域';
+
+ @override
+ String get currentLocale => '当前区域设置';
+
+ @override
+ String get privacy => '隐私';
+
+ @override
+ String get redactTaskContentInDiagnostics => '在诊断信息中隐藏任务内容';
+
+ @override
+ String get developerDiagnostics => '开发者诊断';
+
+ @override
+ String get diagnostics => '诊断';
+
+ @override
+ String get apiInspectorDisabled => '显示 API 检查器';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery 修订版:$revision';
+ }
+
+ @override
+ String get implementedMethods => '已实现的方法';
+
+ @override
+ String get supportsTasksScopes => '支持 tasks 和 tasks.readonly 权限范围';
+
+ @override
+ String get requiresTasksScope => '需要 tasks 权限范围';
+
+ @override
+ String get blockedPendingOperations => '被阻止的待处理操作';
+
+ @override
+ String get signInToInspectPendingOperations => '登录以检查待处理操作。';
+
+ @override
+ String get noBlockedPendingOperations => '没有被阻止的待处理操作。';
+
+ @override
+ String get operationActions => '操作选项';
+
+ @override
+ String pendingOpListId(String id) {
+ return '列表=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return '任务=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return '尝试次数=$count';
+ }
+
+ @override
+ String get retry => '重试';
+
+ @override
+ String get discard => '舍弃';
+
+ @override
+ String get discardChangesAction => '舍弃';
+
+ @override
+ String get discardChanges => '舍弃更改?';
+
+ @override
+ String get discardChangesConfirmation => '这将舍弃对此任务所做的未保存编辑。';
+
+ @override
+ String get retryCompleted => '重试完成。';
+
+ @override
+ String get discardPendingOperation => '舍弃待处理操作?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ '这将移除被阻止的本地操作。下次同步时将从 Google Tasks 刷新数据。';
+
+ @override
+ String get pendingOperationDiscarded => '已舍弃待处理操作。';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax 同步失败';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return '后台同步失败。$message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax 同步冲突';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return '一项待处理的本地更改被阻止。$summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => '今天到期的任务';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '今天有 $count 项任务到期。',
+ one: '今天有 1 项任务到期。',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => '日程提醒';
+
+ @override
+ String get taskReminderNotificationTitle => '任务提醒';
+
+ @override
+ String get eventReminderNotificationBody => '日程即将开始。';
+
+ @override
+ String get taskReminderNotificationBody => '任务即将到期。';
+
+ @override
+ String get notificationOpenAction => '打开';
+
+ @override
+ String get notificationDetailsHidden => '根据隐私设置,详细信息已隐藏。';
+
+ @override
+ String get previousMonth => '上个月';
+
+ @override
+ String get nextMonth => '下个月';
+
+ @override
+ String get openMonthView => '打开月视图';
+
+ @override
+ String get previousYear => '上一年';
+
+ @override
+ String get nextYear => '下一年';
+
+ @override
+ String get openYearView => '打开年视图';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return '第 $number 周';
+ }
+
+ @override
+ String get resizeAllDayPanel => '调整全天面板的大小';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count 项',
+ one: '1 项',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => '此日历为只读。';
+
+ @override
+ String get selectTimeZone => '选择时区';
+
+ @override
+ String get searchLocations => '搜索地点';
+
+ @override
+ String get noLocationsFound => '未找到地点';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '删除“$title”?';
+ }
+}
+
+/// The translations for Chinese, using the Han script (`zh_Hant`).
+class AppLocalizationsZhHant extends AppLocalizationsZh {
+ AppLocalizationsZhHant() : super('zh_Hant');
+
+ @override
+ String get appTitle => 'BusyMax';
+
+ @override
+ String get connectGoogleAccount => '連結 Google 和 Microsoft 帳戶以同步行事曆和待辦事項。';
+
+ @override
+ String get googlePermissionsConsentNotice => '在 Google 權限畫面中,同時選取行事曆和待辦事項權限。';
+
+ @override
+ String get googlePermissionsRequiredRetry =>
+ '必須授予 Google 日曆和 Google Tasks 權限。請再試一次並勾選兩個核取方塊。';
+
+ @override
+ String get finishSetup => '完成設定';
+
+ @override
+ String get continueSetup => '繼續';
+
+ @override
+ String get onboardingSetupTitle => '設定 BusyMax';
+
+ @override
+ String get onboardingAccountsStepTitle => '連結帳戶';
+
+ @override
+ String get onboardingAccountsStepDescription =>
+ '新增您要使用的所有 Google 和 Microsoft 帳戶。BusyMax 會同步每個帳戶中的行事曆、活動、待辦清單和待辦事項。';
+
+ @override
+ String get onboardingPreferencesStepTitle => '選擇系統設定';
+
+ @override
+ String get onboardingPreferencesStepDescription =>
+ '開啟行程前,請設定桌面行為、提醒、通知詳細程度和外觀。';
+
+ @override
+ String get signInWithGoogle => '使用 Google 登入';
+
+ @override
+ String get signInWithMicrosoft => '使用 Microsoft 登入';
+
+ @override
+ String get googleTasksProvider => 'Google Tasks';
+
+ @override
+ String get microsoftTodoProvider => 'Microsoft To Do';
+
+ @override
+ String get providerNotConfigured => '尚未設定此服務。';
+
+ @override
+ String get waitingForGoogleSignIn => '正在等候 Google 登入...';
+
+ @override
+ String get waitingForMicrosoftSignIn => '正在等候 Microsoft 登入...';
+
+ @override
+ String get microsoftSignInNotConfigured =>
+ '尚未設定 Microsoft 登入。請設定 MICROSOFT_OAUTH_CLIENT_ID。';
+
+ @override
+ String get cancel => '取消';
+
+ @override
+ String get close => '關閉';
+
+ @override
+ String get exit => '結束';
+
+ @override
+ String get options => '選項';
+
+ @override
+ String get hide => '隱藏';
+
+ @override
+ String get show => '顯示';
+
+ @override
+ String get export => '匯出';
+
+ @override
+ String get save => '儲存';
+
+ @override
+ String get settings => '設定';
+
+ @override
+ String get all => '全部';
+
+ @override
+ String get calendarEvents => '活動';
+
+ @override
+ String get calendarTasks => '待辦事項';
+
+ @override
+ String get calendar => '行事曆';
+
+ @override
+ String get calendars => '行事曆';
+
+ @override
+ String get newEvent => '新增活動';
+
+ @override
+ String get refreshCalendar => '重新整理行事曆';
+
+ @override
+ String get openInProvider => '在服務中開啟';
+
+ @override
+ String get hideFromSchedule => '從行程中隱藏';
+
+ @override
+ String get showInSchedule => '在行程中顯示';
+
+ @override
+ String get noCalendarsSynced => '尚未同步任何行事曆。';
+
+ @override
+ String get allDay => '全天';
+
+ @override
+ String moreItems(int count) {
+ return '還有 $count 項';
+ }
+
+ @override
+ String get noEventsOrTasks => '沒有活動或待辦事項';
+
+ @override
+ String get scheduleLoading => '正在載入行程...';
+
+ @override
+ String get scheduleUnavailable => '無法使用行程';
+
+ @override
+ String get scheduleNoSources => '沒有可見的行事曆或待辦清單';
+
+ @override
+ String get scheduleNoSourcesDescription => '請在設定中選擇要顯示的內容,然後重新整理。';
+
+ @override
+ String get scheduleSignInRequired => '連結帳戶';
+
+ @override
+ String get scheduleSignInDescription => '登入以同步行事曆和待辦事項。';
+
+ @override
+ String get scheduleNoSearchResults => '沒有相符的活動或待辦事項';
+
+ @override
+ String get scheduleNoSearchResultsDescription => '請嘗試其他搜尋內容或清除目前的篩選條件。';
+
+ @override
+ String get refresh => '重新整理';
+
+ @override
+ String get trayOpenBusyMax => '開啟 BusyMax';
+
+ @override
+ String get agendaLoadMoreOverdue => '載入更多逾期待辦事項';
+
+ @override
+ String get agendaLoadMoreNoDate => '載入更多無日期待辦事項';
+
+ @override
+ String get viewDay => '日';
+
+ @override
+ String get viewWeek => '週';
+
+ @override
+ String get viewMonth => '月';
+
+ @override
+ String get viewYear => '年';
+
+ @override
+ String get viewAgenda => '行程';
+
+ @override
+ String get scheduleSettings => '行程';
+
+ @override
+ String get scheduleDisplaySettings => '行程顯示';
+
+ @override
+ String get scheduleDisplayHoursDescription =>
+ '日檢視和週檢視一開始會顯示此時間範圍。必要時,較早或較晚的項目會擴大此範圍。';
+
+ @override
+ String get scheduleDayStartsAt => '每日開始時間';
+
+ @override
+ String get scheduleDayEndsAt => '每日結束時間';
+
+ @override
+ String get sourceCalendar => '行事曆';
+
+ @override
+ String get sourceTaskList => '待辦清單';
+
+ @override
+ String get createChoiceTitle => '新增';
+
+ @override
+ String get createEventAtTime => '活動';
+
+ @override
+ String get createTaskAtDate => '待辦事項';
+
+ @override
+ String get editEvent => '編輯活動';
+
+ @override
+ String get eventTitle => '活動標題';
+
+ @override
+ String get location => '地點';
+
+ @override
+ String get timeSlot => '時段';
+
+ @override
+ String get startDateTime => '開始日期/時間';
+
+ @override
+ String get endDateTime => '結束日期/時間';
+
+ @override
+ String get doesNotRepeat => '不重複';
+
+ @override
+ String get defaultReminder => '預設提醒';
+
+ @override
+ String get guests => '參與者';
+
+ @override
+ String get noGuests => '沒有參與者';
+
+ @override
+ String get description => '說明';
+
+ @override
+ String get availabilityShowAs => '空閒狀態 / 顯示為';
+
+ @override
+ String get busy => '忙碌';
+
+ @override
+ String get visibility => '顯示設定';
+
+ @override
+ String get defaultVisibility => '預設顯示設定';
+
+ @override
+ String get conference => '會議';
+
+ @override
+ String get noConference => '無會議';
+
+ @override
+ String get providerCalendar => '服務行事曆';
+
+ @override
+ String get formatBoldShortLabel => 'B';
+
+ @override
+ String get formatBoldTooltip => '粗體';
+
+ @override
+ String get formatItalicShortLabel => 'I';
+
+ @override
+ String get formatItalicTooltip => '斜體';
+
+ @override
+ String get formatUnderlineShortLabel => 'U';
+
+ @override
+ String get formatUnderlineTooltip => '底線';
+
+ @override
+ String reminderMinutesBefore(int minutes) {
+ String _temp0 = intl.Intl.pluralLogic(
+ minutes,
+ locale: localeName,
+ other: '$minutes 分鐘前',
+ one: '1 分鐘前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get reminderAtStart => '開始時';
+
+ @override
+ String reminderHoursBefore(int hours) {
+ String _temp0 = intl.Intl.pluralLogic(
+ hours,
+ locale: localeName,
+ other: '$hours 小時前',
+ one: '1 小時前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String reminderDaysBefore(int days) {
+ String _temp0 = intl.Intl.pluralLogic(
+ days,
+ locale: localeName,
+ other: '$days 天前',
+ one: '1 天前',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get availabilityFree => '有空';
+
+ @override
+ String get availabilityTentative => '暫定';
+
+ @override
+ String get availabilityOutOfOffice => '不在辦公室';
+
+ @override
+ String get availabilityWorkingElsewhere => '在其他地點工作';
+
+ @override
+ String get visibilityDefault => '預設';
+
+ @override
+ String get visibilityPublic => '公開';
+
+ @override
+ String get visibilityPrivate => '私人';
+
+ @override
+ String get visibilityConfidential => '機密';
+
+ @override
+ String get sensitivityNormal => '一般';
+
+ @override
+ String get sensitivityPersonal => '個人';
+
+ @override
+ String get tasks => '待辦事項';
+
+ @override
+ String get allTasks => '所有待辦事項';
+
+ @override
+ String tasksInList(String title) {
+ return '$title中的待辦事項';
+ }
+
+ @override
+ String get taskLists => '待辦清單';
+
+ @override
+ String get navigation => '導覽';
+
+ @override
+ String get mainMenu => '主選單';
+
+ @override
+ String get keyboardShortcuts => '鍵盤快速鍵';
+
+ @override
+ String get shortcutGroupGeneral => '一般';
+
+ @override
+ String get shortcutKeyboardShortcutsDescription => '顯示快速鍵參考表';
+
+ @override
+ String get shortcutGroupNavigation => '導覽';
+
+ @override
+ String get shortcutNextPeriod => '下一時段';
+
+ @override
+ String get shortcutNextPeriodDescription => '在週檢視中前往下一週,在月檢視中前往下個月,依此類推';
+
+ @override
+ String get shortcutPreviousPeriod => '上一時段';
+
+ @override
+ String get shortcutPreviousPeriodDescription => '在週檢視中前往上一週,在月檢視中前往上個月,依此類推';
+
+ @override
+ String get shortcutJumpToToday => '跳至今天';
+
+ @override
+ String get shortcutGroupView => '檢視';
+
+ @override
+ String get shortcutDayView => '日檢視';
+
+ @override
+ String get shortcutWeekView => '週檢視';
+
+ @override
+ String get shortcutMonthView => '月檢視';
+
+ @override
+ String get shortcutYearView => '年檢視';
+
+ @override
+ String get shortcutAgendaView => '行程檢視';
+
+ @override
+ String get shortcutGroupCreateAndEdit => '新增和編輯';
+
+ @override
+ String get shortcutSaveItem => '儲存活動或待辦事項';
+
+ @override
+ String get shortcutDeleteItem => '刪除活動或待辦事項';
+
+ @override
+ String get shortcutGroupTaskEditing => '待辦事項編輯';
+
+ @override
+ String get shortcutCancelEditing => '取消編輯';
+
+ @override
+ String get shortcutCancelEditingDescription => '關閉待辦事項編輯或詳細資料';
+
+ @override
+ String get aboutBusyMax => '關於 BusyMax';
+
+ @override
+ String get aboutBusyMaxDescription => '行事曆與待辦事項';
+
+ @override
+ String get license => '授權';
+
+ @override
+ String get apacheLicenseName => 'Apache License 2.0';
+
+ @override
+ String get website => '網站';
+
+ @override
+ String get sourceCode => '原始碼';
+
+ @override
+ String get reportAnIssue => '回報問題';
+
+ @override
+ String get sendFeedback => '傳送意見';
+
+ @override
+ String get feedbackSubmit => '提交';
+
+ @override
+ String get feedbackCategory => '類別';
+
+ @override
+ String get feedbackSelectCategory => '選擇類別';
+
+ @override
+ String get feedbackCategoryProblem => '問題或錯誤';
+
+ @override
+ String get feedbackCategoryFeature => '功能請求';
+
+ @override
+ String get feedbackCategoryPrivacySecurity => '隱私權或安全性疑慮';
+
+ @override
+ String get feedbackCategoryUsability => '易用性疑慮';
+
+ @override
+ String get feedbackCategoryOther => '其他';
+
+ @override
+ String get feedbackSubject => '主旨';
+
+ @override
+ String get feedbackDetailedMessage => '詳細訊息';
+
+ @override
+ String get feedbackReplyEmail => '回覆用電子郵件地址(選填)';
+
+ @override
+ String get feedbackIncludeTechnicalDetails => '包含技術詳細資料';
+
+ @override
+ String get feedbackTechnicalDetailsDisclosure =>
+ '只會加入您的 Linux 作業系統版本和應用程式語系。不會包含記錄、帳戶資料、檔案名稱或其他診斷資訊。';
+
+ @override
+ String get feedbackCategoryRequired => '請選擇類別。';
+
+ @override
+ String get feedbackSubjectLengthError => '主旨必須介於 3 到 120 個字元之間。';
+
+ @override
+ String get feedbackMessageLengthError => '訊息必須介於 10 到 5,000 個字元之間。';
+
+ @override
+ String get feedbackInvalidEmail => '請輸入有效的電子郵件地址。';
+
+ @override
+ String get feedbackConnectionError => '無法連線至 BusyStack。請檢查連線,然後再試一次。';
+
+ @override
+ String get feedbackTimeoutError => '要求逾時。您的意見尚未清除,請再試一次。';
+
+ @override
+ String get feedbackRateLimitedError => '此網路已傳送太多意見。請稍候再試。';
+
+ @override
+ String get feedbackRejectedError => '伺服器拒絕了提交內容。請檢查各欄位,然後再試一次。';
+
+ @override
+ String get feedbackServerError => 'BusyStack 目前無法接收您的意見。您的意見尚未清除,請再試一次。';
+
+ @override
+ String feedbackSuccess(String id) {
+ return '意見已傳送。參考編號:$id';
+ }
+
+ @override
+ String get toggleSidebar => '顯示或隱藏側邊欄';
+
+ @override
+ String get showSidebar => '顯示側邊欄面板';
+
+ @override
+ String get hideSidebar => '隱藏側邊欄面板';
+
+ @override
+ String get accounts => '帳戶';
+
+ @override
+ String get currentAccount => '目前帳戶';
+
+ @override
+ String get switchAccount => '切換帳戶';
+
+ @override
+ String get addGoogleAccount => '新增 Google 帳戶';
+
+ @override
+ String get addMicrosoftAccount => '新增 Microsoft 帳戶';
+
+ @override
+ String get googleProvider => 'Google';
+
+ @override
+ String get microsoftProvider => 'Microsoft';
+
+ @override
+ String get signedInAccount => '已登入';
+
+ @override
+ String get removeAccount => '移除帳戶…';
+
+ @override
+ String get removingAccount => '正在移除帳戶…';
+
+ @override
+ String get removeAccountDescription => '停止同步並從此裝置移除此帳戶的資料。';
+
+ @override
+ String removeAccountTitle(String account) {
+ return '要從 BusyMax 移除 $account 嗎?';
+ }
+
+ @override
+ String get removeAccountConfirmation =>
+ '這會從此裝置刪除快取的待辦事項、行事曆、活動、提醒和待處理的離線變更。未同步的變更將會遺失。不會從 Google 或 Microsoft 刪除任何內容。';
+
+ @override
+ String get revokeGoogleAccess => '同時撤銷 BusyMax 對此 Google 帳戶的存取權';
+
+ @override
+ String get revokeGoogleAccessDescription => '重新連結前,您必須再次授予存取權。';
+
+ @override
+ String get removeAccountAction => '移除帳戶';
+
+ @override
+ String get removeAccountFailed => '無法完成帳戶移除。請再試一次。';
+
+ @override
+ String get accountRemovedGoogleRevokeFailed =>
+ '該帳戶已從此裝置移除,但無法撤銷 BusyMax 對您的 Google 帳戶的存取權。您可以在 Google 帳戶中手動撤銷該權限。';
+
+ @override
+ String get newList => '新增清單';
+
+ @override
+ String get signInToViewTaskLists => '登入以查看待辦清單。';
+
+ @override
+ String get noTaskListsSynced => '尚未同步任何待辦清單。';
+
+ @override
+ String get listActions => '清單動作';
+
+ @override
+ String get rename => '重新命名';
+
+ @override
+ String get delete => '刪除';
+
+ @override
+ String get renameList => '重新命名清單';
+
+ @override
+ String get deleteList => '刪除清單';
+
+ @override
+ String get builtInMicrosoftList => '內建';
+
+ @override
+ String get builtInMicrosoftListCannotRenameDelete =>
+ '無法重新命名或刪除 Microsoft To Do 內建清單。';
+
+ @override
+ String deleteListConfirmation(String title) {
+ return '要從 Google Tasks 刪除「$title」嗎?';
+ }
+
+ @override
+ String get deleteEvent => '刪除活動';
+
+ @override
+ String get title => '標題';
+
+ @override
+ String get create => '新增';
+
+ @override
+ String get newTask => '新增待辦事項';
+
+ @override
+ String get clearCompleted => '清除已完成項目';
+
+ @override
+ String get refreshList => '重新整理清單';
+
+ @override
+ String get refreshAll => '全部重新整理';
+
+ @override
+ String get listRefreshed => '清單已重新整理。';
+
+ @override
+ String get allTasksRefreshed => '所有帳戶都已重新整理。';
+
+ @override
+ String exportedFile(String path) {
+ return '已匯出至 $path';
+ }
+
+ @override
+ String exportFailed(String error) {
+ return '匯出失敗:$error';
+ }
+
+ @override
+ String refreshFailed(String error) {
+ return '重新整理失敗:$error';
+ }
+
+ @override
+ String get selectOrCreateTaskList => '請選擇或建立待辦清單以開始使用。';
+
+ @override
+ String get signInToViewTasks => '登入以查看待辦事項。';
+
+ @override
+ String get noTasks => '沒有待辦事項。';
+
+ @override
+ String get noTasksYet => '還沒有待辦事項';
+
+ @override
+ String get noTasksYetMessage => '建立待辦事項或重新整理帳戶以開始使用。';
+
+ @override
+ String get noTasksInList => '此清單中沒有待辦事項。';
+
+ @override
+ String get overdue => '已逾期';
+
+ @override
+ String get today => '今天';
+
+ @override
+ String get tomorrow => '明天';
+
+ @override
+ String get upcoming => '即將到期';
+
+ @override
+ String get noDate => '無日期';
+
+ @override
+ String get completed => '已完成';
+
+ @override
+ String duePrefix(String date) {
+ return '$date 到期';
+ }
+
+ @override
+ String dateTimeDisplay(String date, String time) {
+ return '$date · $time';
+ }
+
+ @override
+ String get taskDetails => '待辦事項詳細資料';
+
+ @override
+ String get editTask => '編輯待辦事項';
+
+ @override
+ String get noTaskSelected => '未選取待辦事項。';
+
+ @override
+ String get noTaskSelectedHelper => '選擇待辦事項以查看和編輯詳細資料。';
+
+ @override
+ String get taskUnavailable => '無法使用待辦事項。';
+
+ @override
+ String get signInToEditTasks => '登入以編輯待辦事項。';
+
+ @override
+ String get refreshTask => '重新整理待辦事項';
+
+ @override
+ String get primarySection => '主要資訊';
+
+ @override
+ String get statusSection => '狀態';
+
+ @override
+ String get openStatus => '未完成';
+
+ @override
+ String get doneStatus => '已完成';
+
+ @override
+ String get notes => '備註';
+
+ @override
+ String get dueDate => '到期日';
+
+ @override
+ String get clearDueDate => '清除到期日';
+
+ @override
+ String get dueTime => '到期時間';
+
+ @override
+ String get startDate => '開始日期';
+
+ @override
+ String get startTime => '開始時間';
+
+ @override
+ String get endDate => '結束日期';
+
+ @override
+ String get endTime => '結束時間';
+
+ @override
+ String get reminderDate => '提醒日期';
+
+ @override
+ String get reminderTime => '提醒時間';
+
+ @override
+ String get reminder => '提醒';
+
+ @override
+ String get addReminder => '新增提醒';
+
+ @override
+ String get addGuest => '新增參與者';
+
+ @override
+ String get addGuestEmail => '新增參與者電子郵件';
+
+ @override
+ String get removeReminder => '移除提醒';
+
+ @override
+ String get off => '關閉';
+
+ @override
+ String get repeat => '重複';
+
+ @override
+ String get repeatNone => '不重複';
+
+ @override
+ String get noneValue => '無';
+
+ @override
+ String get repeatDaily => '每天';
+
+ @override
+ String get repeatWeekly => '每週';
+
+ @override
+ String get repeatMonthly => '每月';
+
+ @override
+ String get repeatYearly => '每年';
+
+ @override
+ String get importance => '重要性';
+
+ @override
+ String get importanceLow => '低';
+
+ @override
+ String get importanceNormal => '一般';
+
+ @override
+ String get importanceHigh => '高';
+
+ @override
+ String get categories => '類別';
+
+ @override
+ String get scheduleSection => '行程';
+
+ @override
+ String get dueGroup => '到期';
+
+ @override
+ String get startGroup => '開始';
+
+ @override
+ String get reminderGroup => '提醒';
+
+ @override
+ String get organizationSection => '整理';
+
+ @override
+ String get actionsSection => '動作';
+
+ @override
+ String get advancedSection => '進階';
+
+ @override
+ String get addCategory => '新增類別';
+
+ @override
+ String get list => '清單';
+
+ @override
+ String get microsoftMoveUnsupported =>
+ '此版本不支援在 Microsoft To Do 帳戶的清單之間移動待辦事項。';
+
+ @override
+ String get createSubtask => '建立子待辦事項';
+
+ @override
+ String get moveToTop => '移至頂端';
+
+ @override
+ String get deleteTask => '刪除待辦事項';
+
+ @override
+ String get newSubtask => '新增子待辦事項';
+
+ @override
+ String deleteTaskConfirmation(String title) {
+ return '要從 Google Tasks 刪除「$title」嗎?';
+ }
+
+ @override
+ String get metadata => '中繼資料';
+
+ @override
+ String get id => 'ID';
+
+ @override
+ String get etag => 'ETag';
+
+ @override
+ String get updated => '更新時間';
+
+ @override
+ String get parent => '上層待辦事項';
+
+ @override
+ String get position => '位置';
+
+ @override
+ String get webLink => '網頁連結';
+
+ @override
+ String get assignment => '指派';
+
+ @override
+ String get localState => '本機狀態';
+
+ @override
+ String get pendingSync => '等候同步';
+
+ @override
+ String get synced => '已同步';
+
+ @override
+ String get account => '帳戶';
+
+ @override
+ String get sync => '同步';
+
+ @override
+ String get manualFullSync => '手動完整同步';
+
+ @override
+ String get runInBackgroundWhenClosed => '視窗關閉後繼續在背景執行';
+
+ @override
+ String get showTrayIcon => '顯示系統匣圖示';
+
+ @override
+ String get startMinimizedToTray => '啟動時最小化至系統匣';
+
+ @override
+ String get requiresTrayIcon => '需要系統匣圖示。';
+
+ @override
+ String get syncComplete => '同步完成。';
+
+ @override
+ String syncFailed(String error) {
+ return '同步失敗:$error';
+ }
+
+ @override
+ String get notifySyncFailures => '同步失敗通知';
+
+ @override
+ String get notifyConflicts => '衝突通知';
+
+ @override
+ String get notifyDueToday => '今天到期待辦事項通知';
+
+ @override
+ String get eventReminders => '活動提醒';
+
+ @override
+ String get taskReminders => '待辦事項提醒';
+
+ @override
+ String get notificationDetailLevel => '通知詳細程度';
+
+ @override
+ String get notificationDetailPrivate => '私人';
+
+ @override
+ String get notificationDetailNormal => '一般';
+
+ @override
+ String get quietHours => '勿擾時段';
+
+ @override
+ String get quietHoursDescription => '在此時段暫停通知。';
+
+ @override
+ String get quietHoursStart => '勿擾開始時間';
+
+ @override
+ String get quietHoursEnd => '勿擾結束時間';
+
+ @override
+ String get notifications => '通知';
+
+ @override
+ String get appearance => '外觀';
+
+ @override
+ String get theme => '主題';
+
+ @override
+ String get themeSystem => '系統';
+
+ @override
+ String get themeLight => '淺色';
+
+ @override
+ String get themeDark => '深色';
+
+ @override
+ String get themeFamily => '主題系列';
+
+ @override
+ String get themeFamilyYaru => 'Ubuntu 原生主題(Yaru)';
+
+ @override
+ String get localization => '語言與地區';
+
+ @override
+ String get currentLocale => '目前語系';
+
+ @override
+ String get privacy => '隱私權';
+
+ @override
+ String get redactTaskContentInDiagnostics => '在診斷資訊中隱藏待辦事項內容';
+
+ @override
+ String get developerDiagnostics => '開發人員診斷';
+
+ @override
+ String get diagnostics => '診斷';
+
+ @override
+ String get apiInspectorDisabled => '顯示 API 檢查器';
+
+ @override
+ String get googleTasksApi => 'Google Tasks API';
+
+ @override
+ String discoveryRevision(String revision) {
+ return 'Discovery 修訂版本:$revision';
+ }
+
+ @override
+ String get implementedMethods => '已實作的方法';
+
+ @override
+ String get supportsTasksScopes => '支援 tasks 和 tasks.readonly 權限範圍';
+
+ @override
+ String get requiresTasksScope => '需要 tasks 權限範圍';
+
+ @override
+ String get blockedPendingOperations => '遭封鎖的待處理作業';
+
+ @override
+ String get signInToInspectPendingOperations => '登入以檢查待處理作業。';
+
+ @override
+ String get noBlockedPendingOperations => '沒有遭封鎖的待處理作業。';
+
+ @override
+ String get operationActions => '操作選項';
+
+ @override
+ String pendingOpListId(String id) {
+ return '清單=$id';
+ }
+
+ @override
+ String pendingOpTaskId(String id) {
+ return '待辦事項=$id';
+ }
+
+ @override
+ String pendingOpAttempts(int count) {
+ return '嘗試次數=$count';
+ }
+
+ @override
+ String get retry => '再試一次';
+
+ @override
+ String get discard => '捨棄';
+
+ @override
+ String get discardChangesAction => '捨棄';
+
+ @override
+ String get discardChanges => '要捨棄變更嗎?';
+
+ @override
+ String get discardChangesConfirmation => '這會捨棄此待辦事項中尚未儲存的編輯內容。';
+
+ @override
+ String get retryCompleted => '重試完成。';
+
+ @override
+ String get discardPendingOperation => '要捨棄待處理作業嗎?';
+
+ @override
+ String get discardPendingOperationConfirmation =>
+ '這會移除遭封鎖的本機作業。下次同步時將從 Google Tasks 重新整理資料。';
+
+ @override
+ String get pendingOperationDiscarded => '已捨棄待處理作業。';
+
+ @override
+ String get syncFailureNotificationTitle => 'BusyMax 同步失敗';
+
+ @override
+ String syncFailureNotificationBody(String message) {
+ return '背景同步失敗。$message';
+ }
+
+ @override
+ String get conflictNotificationTitle => 'BusyMax 同步衝突';
+
+ @override
+ String conflictNotificationBody(String summary) {
+ return '一項待處理的本機變更遭到封鎖。$summary';
+ }
+
+ @override
+ String get dueTodayNotificationTitle => '今天到期的待辦事項';
+
+ @override
+ String dueTodayNotificationBody(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '今天有 $count 項待辦事項到期。',
+ one: '今天有 1 項待辦事項到期。',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get eventReminderNotificationTitle => '活動提醒';
+
+ @override
+ String get taskReminderNotificationTitle => '待辦事項提醒';
+
+ @override
+ String get eventReminderNotificationBody => '活動即將開始。';
+
+ @override
+ String get taskReminderNotificationBody => '待辦事項即將到期。';
+
+ @override
+ String get notificationOpenAction => '開啟';
+
+ @override
+ String get notificationDetailsHidden => '根據隱私權設定,詳細資料已隱藏。';
+
+ @override
+ String get previousMonth => '上個月';
+
+ @override
+ String get nextMonth => '下個月';
+
+ @override
+ String get openMonthView => '開啟月檢視';
+
+ @override
+ String get previousYear => '上一年';
+
+ @override
+ String get nextYear => '下一年';
+
+ @override
+ String get openYearView => '開啟年檢視';
+
+ @override
+ String weekNumberTooltip(int number) {
+ return '第 $number 週';
+ }
+
+ @override
+ String get resizeAllDayPanel => '調整全天面板大小';
+
+ @override
+ String scheduleItemCount(int count) {
+ String _temp0 = intl.Intl.pluralLogic(
+ count,
+ locale: localeName,
+ other: '$count 項',
+ one: '1 項',
+ );
+ return '$_temp0';
+ }
+
+ @override
+ String get readOnlyCalendar => '此行事曆為唯讀。';
+
+ @override
+ String get selectTimeZone => '選擇時區';
+
+ @override
+ String get searchLocations => '搜尋地點';
+
+ @override
+ String get noLocationsFound => '找不到地點';
+
+ @override
+ String deleteCalendarConfirmation(String title) {
+ return '要刪除「$title」嗎?';
+ }
+}
diff --git a/lib/main.dart b/lib/main.dart
index 9bc7b76..405f0f2 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,52 +1,101 @@
-import 'package:desktop_multi_window/desktop_multi_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:system_theme/system_theme.dart';
-import 'package:window_manager/window_manager.dart';
import 'src/app/app_bootstrap.dart';
+import 'src/app/app_theme.dart';
import 'src/app/busymax_app.dart';
import 'src/config/build_config.dart';
import 'src/core/logging/redacting_logger.dart';
-import 'src/features/schedule/application/compact_agenda_data.dart';
-import 'src/features/schedule/presentation/compact_agenda_app.dart';
-import 'src/platform/main_window_command_client.dart';
-import 'src/platform/busymax_window_args.dart';
+import 'src/demo/demo_profile.dart';
+import 'src/platform/gtk_font_service.dart';
+import 'src/platform/linux_header_bar_service.dart';
-Future main(List args) async {
- WidgetsFlutterBinding.ensureInitialized();
- await SystemTheme.accentColor.load();
+Future main() async {
+ final binding = WidgetsFlutterBinding.ensureInitialized();
+ binding.deferFirstFrame();
+ final buildConfig = BuildConfig.fromEnvironment();
+ final LocalSettingsStore settingsStore;
+ if (buildConfig.useFakeProviderData) {
+ final settings = busyMaxDemoSettings(buildConfig.demoTheme);
+ settingsStore = InMemoryLocalSettingsStore(settings.toJson());
+ } else {
+ settingsStore = const JsonFileLocalSettingsStore();
+ }
+
+ final systemAccentFuture = SystemTheme.accentColor.load();
+ final initialGtkFontFuture = const GtkFontService().getGtkFont();
+ final initialAppSettingsFuture = loadInitialAppSettings(settingsStore);
+ final initialAppSettings = await initialAppSettingsFuture;
+ final gtkThemeService = const GtkThemeService();
+ await gtkThemeService.setPreferDark(
+ switch (initialAppSettings.themeModePreference) {
+ BusyMaxThemeModePreference.system => null,
+ BusyMaxThemeModePreference.light => false,
+ BusyMaxThemeModePreference.dark => true,
+ },
+ );
+ final desktopSettings = await Future.wait