mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21:46 +00:00
Merge branch 'dev' into feature/naver-support
This commit is contained in:
@@ -12,6 +12,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'جارٍ التحميل...',
|
||||
'common.import': 'استيراد',
|
||||
'common.error': 'خطأ',
|
||||
'common.unknownError': 'خطأ غير معروف',
|
||||
'common.tooManyAttempts': 'محاولات كثيرة جدًا. يرجى المحاولة لاحقًا.',
|
||||
'common.back': 'رجوع',
|
||||
'common.all': 'الكل',
|
||||
'common.close': 'إغلاق',
|
||||
@@ -31,6 +33,12 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.password': 'كلمة المرور',
|
||||
'common.saving': 'جارٍ الحفظ...',
|
||||
'common.saved': 'تم الحفظ',
|
||||
'common.expand': 'توسيع',
|
||||
'common.collapse': 'طي',
|
||||
'trips.memberRemoved': '{username} تمت إزالته',
|
||||
'trips.memberRemoveError': 'فشل في الإزالة',
|
||||
'trips.memberAdded': '{username} تمت إضافته',
|
||||
'trips.memberAddError': 'فشل في الإضافة',
|
||||
'trips.reminder': 'تذكير',
|
||||
'trips.reminderNone': 'بدون',
|
||||
'trips.reminderDay': 'يوم',
|
||||
@@ -184,9 +192,6 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'معطّل',
|
||||
'admin.notifications.email': 'البريد الإلكتروني (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'أحداث الإشعارات',
|
||||
'admin.notifications.eventsHint': 'اختر الأحداث التي تُفعّل الإشعارات لجميع المستخدمين.',
|
||||
'admin.notifications.configureFirst': 'قم بتكوين إعدادات SMTP أو Webhook أدناه أولاً، ثم قم بتفعيل الأحداث.',
|
||||
'admin.notifications.save': 'حفظ إعدادات الإشعارات',
|
||||
'admin.notifications.saved': 'تم حفظ إعدادات الإشعارات',
|
||||
'admin.notifications.testWebhook': 'إرسال webhook تجريبي',
|
||||
@@ -233,6 +238,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'نقطة نهاية MCP',
|
||||
'settings.mcp.clientConfig': 'إعداد العميل',
|
||||
'settings.mcp.clientConfigHint': 'استبدل <your_token> برمز API من القائمة أدناه. قد يحتاج مسار npx إلى ضبط وفق نظامك (مثلاً C:\\PROGRA~1\\nodejs\\npx.cmd على Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'استبدل <your_client_id> و<your_client_secret> ببيانات الاعتماد المعروضة في عميل OAuth 2.1 الذي أنشأته أعلاه. سيفتح mcp-remote متصفحك لإتمام التفويض في أول اتصال. قد يحتاج مسار npx إلى تعديل حسب نظامك (مثال: C:\PROGRA~1\nodejs\npx.cmd على Windows).',
|
||||
'settings.mcp.copy': 'نسخ',
|
||||
'settings.mcp.copied': 'تم النسخ!',
|
||||
'settings.mcp.apiTokens': 'رموز API',
|
||||
@@ -254,6 +260,48 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'فشل إنشاء الرمز',
|
||||
'settings.mcp.toast.deleted': 'تم حذف الرمز',
|
||||
'settings.mcp.toast.deleteError': 'فشل حذف الرمز',
|
||||
'settings.mcp.apiTokensDeprecated': 'رموز API قديمة وستُزال في إصدار مستقبلي. يُرجى استخدام عملاء OAuth 2.1 بدلاً منها.',
|
||||
'settings.oauth.clients': 'عملاء OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'سجّل عملاء OAuth 2.1 للسماح لتطبيقات MCP الخارجية (Claude Web وCursor وغيرها) بالاتصال دون رموز ثابتة.',
|
||||
'settings.oauth.createClient': 'عميل جديد',
|
||||
'settings.oauth.noClients': 'لا يوجد عملاء OAuth مسجلون.',
|
||||
'settings.oauth.clientId': 'معرّف العميل',
|
||||
'settings.oauth.clientSecret': 'سر العميل',
|
||||
'settings.oauth.deleteClient': 'حذف العميل',
|
||||
'settings.oauth.deleteClientMessage': 'سيتم حذف هذا العميل وجميع الجلسات النشطة بشكل دائم. ستفقد أي تطبيق يستخدمه وصوله فوراً.',
|
||||
'settings.oauth.rotateSecret': 'تجديد السر',
|
||||
'settings.oauth.rotateSecretMessage': 'سيتم إنشاء سر عميل جديد وإبطال جميع الجلسات الحالية فوراً. حدّث تطبيقك قبل إغلاق هذا الحوار.',
|
||||
'settings.oauth.rotateSecretConfirm': 'تجديد',
|
||||
'settings.oauth.rotateSecretConfirming': 'جارٍ التجديد…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'تم إنشاء سر جديد',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'يُعرض هذا السر مرة واحدة فقط. انسخه الآن وحدّث تطبيقك — تم إبطال جميع الجلسات السابقة.',
|
||||
'settings.oauth.activeSessions': 'جلسات OAuth النشطة',
|
||||
'settings.oauth.sessionScopes': 'النطاقات',
|
||||
'settings.oauth.sessionExpires': 'تنتهي',
|
||||
'settings.oauth.revoke': 'إلغاء',
|
||||
'settings.oauth.revokeSession': 'إلغاء الجلسة',
|
||||
'settings.oauth.revokeSessionMessage': 'سيؤدي هذا إلى إلغاء الوصول لهذه الجلسة OAuth فوراً.',
|
||||
'settings.oauth.modal.createTitle': 'تسجيل عميل OAuth',
|
||||
'settings.oauth.modal.presets': 'إعدادات سريعة',
|
||||
'settings.oauth.modal.clientName': 'اسم التطبيق',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'مثال: Claude Web، تطبيق MCP الخاص بي',
|
||||
'settings.oauth.modal.redirectUris': 'عناوين URI لإعادة التوجيه',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'عنوان URI واحد لكل سطر. يُطلب HTTPS (localhost مستثنى). يُطبق تطابق دقيق.',
|
||||
'settings.oauth.modal.scopes': 'النطاقات المسموح بها',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips وget_trip_summary متاحان دائماً — لا يُطلب نطاق. يساعدان الذكاء الاصطناعي في اكتشاف معرّفات الرحلات.',
|
||||
'settings.oauth.modal.selectAll': 'تحديد الكل',
|
||||
'settings.oauth.modal.deselectAll': 'إلغاء تحديد الكل',
|
||||
'settings.oauth.modal.creating': 'جارٍ التسجيل…',
|
||||
'settings.oauth.modal.create': 'تسجيل العميل',
|
||||
'settings.oauth.modal.createdTitle': 'تم تسجيل العميل',
|
||||
'settings.oauth.modal.createdWarning': 'يُعرض سر العميل مرة واحدة فقط. انسخه الآن — لا يمكن استرداده.',
|
||||
'settings.oauth.toast.createError': 'فشل تسجيل عميل OAuth',
|
||||
'settings.oauth.toast.deleted': 'تم حذف عميل OAuth',
|
||||
'settings.oauth.toast.deleteError': 'فشل حذف عميل OAuth',
|
||||
'settings.oauth.toast.revoked': 'تم إلغاء الجلسة',
|
||||
'settings.oauth.toast.revokeError': 'فشل إلغاء الجلسة',
|
||||
'settings.oauth.toast.rotateError': 'فشل تجديد سر العميل',
|
||||
'settings.account': 'الحساب',
|
||||
'settings.about': 'حول',
|
||||
'settings.about.reportBug': 'الإبلاغ عن خطأ',
|
||||
@@ -376,6 +424,10 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'افتح Google Authenticator أو Authy أو أي تطبيق TOTP آخر.',
|
||||
'login.mfaBack': '← العودة لتسجيل الدخول',
|
||||
'login.mfaVerify': 'تحقق',
|
||||
'login.invalidInviteLink': 'رابط الدعوة غير صالح أو منتهي الصلاحية',
|
||||
'login.oidcFailed': 'فشل تسجيل الدخول عبر OIDC',
|
||||
'login.usernameRequired': 'اسم المستخدم مطلوب',
|
||||
'login.passwordMinLength': 'يجب أن تكون كلمة المرور 8 أحرف على الأقل',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'كلمتا المرور غير متطابقتين',
|
||||
@@ -410,9 +462,10 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.config': 'التخصيص',
|
||||
'admin.tabs.templates': 'قوالب التعبئة',
|
||||
'admin.tabs.addons': 'الإضافات',
|
||||
'admin.tabs.mcpTokens': 'رموز MCP',
|
||||
'admin.mcpTokens.title': 'رموز MCP',
|
||||
'admin.mcpTokens.subtitle': 'إدارة رموز API لجميع المستخدمين',
|
||||
'admin.tabs.mcpTokens': 'وصول MCP',
|
||||
'admin.mcpTokens.title': 'وصول MCP',
|
||||
'admin.mcpTokens.subtitle': 'إدارة جلسات OAuth ورموز API لجميع المستخدمين',
|
||||
'admin.mcpTokens.sectionTitle': 'رموز API',
|
||||
'admin.mcpTokens.owner': 'المالك',
|
||||
'admin.mcpTokens.tokenName': 'اسم الرمز',
|
||||
'admin.mcpTokens.created': 'تاريخ الإنشاء',
|
||||
@@ -424,6 +477,17 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'تم حذف الرمز',
|
||||
'admin.mcpTokens.deleteError': 'فشل حذف الرمز',
|
||||
'admin.mcpTokens.loadError': 'فشل تحميل الرموز',
|
||||
'admin.oauthSessions.sectionTitle': 'جلسات OAuth',
|
||||
'admin.oauthSessions.clientName': 'العميل',
|
||||
'admin.oauthSessions.owner': 'المالك',
|
||||
'admin.oauthSessions.scopes': 'الصلاحيات',
|
||||
'admin.oauthSessions.created': 'تاريخ الإنشاء',
|
||||
'admin.oauthSessions.empty': 'لا توجد جلسات OAuth نشطة',
|
||||
'admin.oauthSessions.revokeTitle': 'إلغاء الجلسة',
|
||||
'admin.oauthSessions.revokeMessage': 'سيتم إلغاء جلسة OAuth هذه فوراً. سيفقد العميل وصوله إلى MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'تم إلغاء الجلسة',
|
||||
'admin.oauthSessions.revokeError': 'فشل إلغاء الجلسة',
|
||||
'admin.oauthSessions.loadError': 'فشل تحميل جلسات OAuth',
|
||||
'admin.tabs.github': 'GitHub',
|
||||
'admin.stats.users': 'المستخدمون',
|
||||
'admin.stats.trips': 'الرحلات',
|
||||
@@ -473,6 +537,17 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.invite.deleteError': 'فشل حذف رابط الدعوة',
|
||||
'admin.allowRegistration': 'السماح بالتسجيل',
|
||||
'admin.allowRegistrationHint': 'يمكن للمستخدمين الجدد التسجيل بأنفسهم',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'فرض المصادقة الثنائية (2FA)',
|
||||
'admin.requireMfaHint': 'يجب على المستخدمين الذين لا يملكون 2FA إكمال الإعداد في الإعدادات قبل استخدام التطبيق.',
|
||||
'admin.apiKeys': 'مفاتيح API',
|
||||
@@ -664,6 +739,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'عطل الشركة',
|
||||
'vacay.companyHolidaysHint': 'السماح بوضع علامة على أيام عطلات الشركة',
|
||||
'vacay.companyHolidaysNoDeduct': 'لا تُخصم عطل الشركة من أيام الإجازة.',
|
||||
'vacay.weekStart': 'يبدأ الأسبوع في',
|
||||
'vacay.weekStartHint': 'اختر ما إذا كان الأسبوع يبدأ يوم الاثنين أو الأحد',
|
||||
'vacay.carryOver': 'الترحيل',
|
||||
'vacay.carryOverHint': 'ترحيل أيام الإجازة المتبقية تلقائيًا إلى السنة التالية',
|
||||
'vacay.sharing': 'المشاركة',
|
||||
@@ -874,6 +951,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'الملفات',
|
||||
'inspector.filesCount': '{count} ملفات',
|
||||
'inspector.removeFromDay': 'إزالة من اليوم',
|
||||
'inspector.remove': 'إزالة',
|
||||
'inspector.addToDay': 'إضافة إلى اليوم',
|
||||
'inspector.confirmedRes': 'حجز مؤكد',
|
||||
'inspector.pendingRes': 'حجز قيد الانتظار',
|
||||
@@ -1014,6 +1092,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'إجمالي الميزانية',
|
||||
'budget.byCategory': 'حسب الفئة',
|
||||
'budget.editTooltip': 'انقر للتعديل',
|
||||
'budget.linkedToReservation': 'مرتبط بحجز — عدّل الاسم هناك',
|
||||
'budget.confirm.deleteCategory': 'هل تريد حذف الفئة "{name}" مع {count} إدخالات؟',
|
||||
'budget.deleteCategory': 'حذف الفئة',
|
||||
'budget.perPerson': 'لكل شخص',
|
||||
@@ -1023,9 +1102,13 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.settlement': 'التسوية',
|
||||
'budget.settlementInfo': 'انقر على صورة العضو في بند الميزانية لتحديده باللون الأخضر — وهذا يعني أنه دفع. ثم تُظهر التسوية من يدين لمن وبكم.',
|
||||
'budget.netBalances': 'الأرصدة الصافية',
|
||||
'budget.linkedToReservation': 'مرتبط بحجز — قم بتحرير الاسم هناك',
|
||||
|
||||
// Files
|
||||
'files.title': 'الملفات',
|
||||
'files.pageTitle': 'الملفات والمستندات',
|
||||
'files.subtitle': '{count} ملف لـ {trip}',
|
||||
'files.downloadPdf': 'تنزيل PDF',
|
||||
'files.count': '{count} ملفات',
|
||||
'files.countSingular': 'ملف واحد',
|
||||
'files.uploaded': 'تم رفع {count}',
|
||||
@@ -1104,7 +1187,6 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'تحديد الكل',
|
||||
'packing.menuUncheckAll': 'إلغاء تحديد الكل',
|
||||
'packing.menuDeleteCat': 'حذف الفئة',
|
||||
'packing.assignUser': 'تعيين مستخدم',
|
||||
'packing.noMembers': 'لا أعضاء',
|
||||
'packing.addItem': 'إضافة عنصر',
|
||||
'packing.addItemPlaceholder': 'اسم العنصر...',
|
||||
@@ -1114,6 +1196,9 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'قالب',
|
||||
'packing.templateApplied': 'تمت إضافة {count} عنصر من القالب',
|
||||
'packing.templateError': 'فشل تطبيق القالب',
|
||||
'packing.saveAsTemplate': 'حفظ كقالب',
|
||||
'packing.templateName': 'اسم القالب',
|
||||
'packing.templateSaved': 'تم حفظ قائمة الحقائب كقالب',
|
||||
'packing.bags': 'أمتعة',
|
||||
'packing.noBag': 'غير معيّن',
|
||||
'packing.totalWeight': 'الوزن الإجمالي',
|
||||
@@ -1269,6 +1354,13 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'الاحتفاظ للأبد',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'صور',
|
||||
'photos.subtitle': '{count} صورة لـ {trip}',
|
||||
'photos.dropHere': 'أسقط الصور هنا...',
|
||||
'photos.dropHereActive': 'أسقط الصور هنا',
|
||||
'photos.captionForAll': 'تعليق (للجميع)',
|
||||
'photos.captionPlaceholder': 'تعليق اختياري...',
|
||||
'photos.addCaption': 'إضافة تعليق...',
|
||||
'photos.allDays': 'كل الأيام',
|
||||
'photos.noPhotos': 'لا توجد صور بعد',
|
||||
'photos.uploadHint': 'ارفع صور رحلتك',
|
||||
@@ -1276,6 +1368,12 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'ربط بمكان',
|
||||
'photos.noPlace': 'بلا مكان',
|
||||
'photos.uploadN': 'رفع {n} صورة',
|
||||
'photos.linkDay': 'ربط اليوم',
|
||||
'photos.noDay': 'لا يوم',
|
||||
'photos.dayLabel': 'اليوم {number}',
|
||||
'photos.photoSelected': 'صورة محددة',
|
||||
'photos.photosSelected': 'صور محددة',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · الحد الأقصى 10 ميغابايت · حتى 30 صورة',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'استعادة النسخة الاحتياطية؟',
|
||||
@@ -1302,6 +1400,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'تم حساب المسار',
|
||||
'planner.routeCalcFailed': 'تعذر حساب المسار',
|
||||
'planner.routeError': 'خطأ أثناء حساب المسار',
|
||||
'planner.icsExportFailed': 'فشل تصدير ICS',
|
||||
'planner.routeOptimized': 'تم تحسين المسار',
|
||||
'planner.reservationUpdated': 'تم تحديث الحجز',
|
||||
'planner.reservationAdded': 'تمت إضافة الحجز',
|
||||
@@ -1387,6 +1486,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'صور',
|
||||
'memories.notConnected': 'Immich غير متصل',
|
||||
'memories.notConnectedHint': 'قم بتوصيل Immich في الإعدادات لعرض صور رحلتك هنا.',
|
||||
'memories.notConnectedMultipleHint': 'قم بتوصيل أحد موفري الصور هؤلاء: {provider_names} في الإعدادات لتتمكن من إضافة صور إلى هذه الرحلة.',
|
||||
'memories.noDates': 'أضف تواريخ لرحلتك لتحميل الصور.',
|
||||
'memories.noPhotos': 'لم يتم العثور على صور',
|
||||
'memories.noPhotosHint': 'لم يتم العثور على صور في Immich لفترة هذه الرحلة.',
|
||||
@@ -1397,26 +1497,38 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'مراجعة صورك',
|
||||
'memories.reviewHint': 'انقر على الصور لاستبعادها من المشاركة.',
|
||||
'memories.shareCount': 'مشاركة {count} صور',
|
||||
'memories.immichUrl': 'عنوان خادم Immich',
|
||||
'memories.immichApiKey': 'مفتاح API',
|
||||
'memories.providerUrl': 'عنوان URL للخادم',
|
||||
'memories.providerApiKey': 'مفتاح API',
|
||||
'memories.providerUsername': 'اسم المستخدم',
|
||||
'memories.providerPassword': 'كلمة المرور',
|
||||
'memories.providerOTP': 'رمز MFA (إذا كان مفعلاً)',
|
||||
'memories.skipSSLVerification': 'تخطي التحقق من شهادة SSL',
|
||||
'memories.providerUrlHintSynology': 'أدرج مسار تطبيق Photos في URL، مثل https://nas:5001/photo',
|
||||
'memories.testConnection': 'اختبار الاتصال',
|
||||
'memories.testFirst': 'اختبر الاتصال أولاً',
|
||||
'memories.connected': 'متصل',
|
||||
'memories.disconnected': 'غير متصل',
|
||||
'memories.connectionSuccess': 'تم الاتصال بـ Immich',
|
||||
'memories.connectionError': 'تعذر الاتصال بـ Immich',
|
||||
'memories.saved': 'تم حفظ إعدادات Immich',
|
||||
'memories.saved': 'تم حفظ إعدادات {provider_name}',
|
||||
'memories.providerDisconnectedBanner': 'اتصالك بـ {provider_name} مفقود. أعد الاتصال في الإعدادات لعرض الصور.',
|
||||
'memories.saveError': 'تعذّر حفظ إعدادات {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'مسار الحفظ غير مهيأ لهذا المزود',
|
||||
'memories.testRouteNotConfigured': 'مسار الاختبار غير مهيأ لهذا المزود',
|
||||
'memories.fillRequiredFields': 'يرجى ملء جميع الحقول المطلوبة',
|
||||
'memories.oldest': 'الأقدم أولاً',
|
||||
'memories.newest': 'الأحدث أولاً',
|
||||
'memories.allLocations': 'جميع المواقع',
|
||||
'memories.addPhotos': 'إضافة صور',
|
||||
'memories.linkAlbum': 'ربط ألبوم',
|
||||
'memories.selectAlbum': 'اختيار ألبوم Immich',
|
||||
'memories.selectAlbumMultiple': 'اختيار ألبوم',
|
||||
'memories.noAlbums': 'لم يتم العثور على ألبومات',
|
||||
'memories.syncAlbum': 'مزامنة الألبوم',
|
||||
'memories.unlinkAlbum': 'إلغاء الربط',
|
||||
'memories.photos': 'صور',
|
||||
'memories.selectPhotos': 'اختيار صور من Immich',
|
||||
'memories.selectPhotosMultiple': 'اختيار الصور',
|
||||
'memories.selectHint': 'انقر على الصور لتحديدها.',
|
||||
'memories.selected': 'محدد',
|
||||
'memories.addSelected': 'إضافة {count} صور',
|
||||
@@ -1428,6 +1540,10 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.confirmShareTitle': 'مشاركة مع أعضاء الرحلة؟',
|
||||
'memories.confirmShareHint': '{count} صور ستكون مرئية لجميع أعضاء هذه الرحلة. يمكنك جعل الصور الفردية خاصة لاحقًا.',
|
||||
'memories.confirmShareButton': 'مشاركة الصور',
|
||||
'journey.settings.failedToDelete': 'فشل في الحذف',
|
||||
'journey.entries.deleteTitle': 'حذف الإدخال',
|
||||
'journey.photosUploaded': 'تم رفع {count} صورة',
|
||||
'journey.photosAdded': 'تمت إضافة {count} صورة',
|
||||
|
||||
// Collab Addon
|
||||
'collab.tabs.chat': 'الدردشة',
|
||||
@@ -1574,6 +1690,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'تحديد كغير مقروء',
|
||||
'notifications.delete': 'حذف',
|
||||
'notifications.system': 'النظام',
|
||||
'notifications.synologySessionCleared.title': 'تم قطع اتصال Synology Photos',
|
||||
'notifications.synologySessionCleared.text': 'تغير خادمك أو حسابك — انتقل إلى الإعدادات لاختبار اتصالك مرة أخرى.',
|
||||
'memories.error.loadAlbums': 'فشل تحميل الألبومات',
|
||||
'memories.error.linkAlbum': 'فشل ربط الألبوم',
|
||||
'memories.error.unlinkAlbum': 'فشل إلغاء ربط الألبوم',
|
||||
@@ -1696,6 +1814,70 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'لديك إشعار جديد',
|
||||
'notif.dev.unknown_event.title': '[DEV] حدث غير معروف',
|
||||
'notif.dev.unknown_event.text': 'نوع الحدث "{event}" غير مسجل في EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'الرحلات',
|
||||
'oauth.scope.group.places': 'الأماكن',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'الأمتعة',
|
||||
'oauth.scope.group.todos': 'المهام',
|
||||
'oauth.scope.group.budget': 'الميزانية',
|
||||
'oauth.scope.group.reservations': 'الحجوزات',
|
||||
'oauth.scope.group.collab': 'التعاون',
|
||||
'oauth.scope.group.notifications': 'الإشعارات',
|
||||
'oauth.scope.group.vacay': 'الإجازة',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'الطقس',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'عرض الرحلات وخطط السفر',
|
||||
'oauth.scope.trips:read.description': 'قراءة الرحلات والأيام والملاحظات والأعضاء',
|
||||
'oauth.scope.trips:write.label': 'تحرير الرحلات وخطط السفر',
|
||||
'oauth.scope.trips:write.description': 'إنشاء وتحديث الرحلات والأيام والملاحظات وإدارة الأعضاء',
|
||||
'oauth.scope.trips:delete.label': 'حذف الرحلات',
|
||||
'oauth.scope.trips:delete.description': 'حذف الرحلات بأكملها نهائياً — هذا الإجراء لا يمكن التراجع عنه',
|
||||
'oauth.scope.trips:share.label': 'إدارة روابط المشاركة',
|
||||
'oauth.scope.trips:share.description': 'إنشاء روابط مشاركة عامة وتحديثها وإلغاؤها',
|
||||
'oauth.scope.places:read.label': 'عرض الأماكن وبيانات الخريطة',
|
||||
'oauth.scope.places:read.description': 'قراءة الأماكن وتعيينات الأيام والعلامات والفئات',
|
||||
'oauth.scope.places:write.label': 'إدارة الأماكن',
|
||||
'oauth.scope.places:write.description': 'إنشاء وتحديث وحذف الأماكن والتعيينات والعلامات',
|
||||
'oauth.scope.atlas:read.label': 'عرض Atlas',
|
||||
'oauth.scope.atlas:read.description': 'قراءة الدول والمناطق المزارة وقائمة الأمنيات',
|
||||
'oauth.scope.atlas:write.label': 'إدارة Atlas',
|
||||
'oauth.scope.atlas:write.description': 'تعليم الدول والمناطق كمزارة، وإدارة قائمة الأمنيات',
|
||||
'oauth.scope.packing:read.label': 'عرض قوائم الأمتعة',
|
||||
'oauth.scope.packing:read.description': 'قراءة عناصر الأمتعة والحقائب ومُسنَدي الفئات',
|
||||
'oauth.scope.packing:write.label': 'إدارة قوائم الأمتعة',
|
||||
'oauth.scope.packing:write.description': 'إضافة وتحديث وحذف وتبديل وإعادة ترتيب عناصر الأمتعة والحقائب',
|
||||
'oauth.scope.todos:read.label': 'عرض قوائم المهام',
|
||||
'oauth.scope.todos:read.description': 'قراءة مهام الرحلة ومُسنَدي الفئات',
|
||||
'oauth.scope.todos:write.label': 'إدارة قوائم المهام',
|
||||
'oauth.scope.todos:write.description': 'إنشاء وتحديث وتبديل وحذف وإعادة ترتيب المهام',
|
||||
'oauth.scope.budget:read.label': 'عرض الميزانية',
|
||||
'oauth.scope.budget:read.description': 'قراءة بنود الميزانية وتفاصيل النفقات',
|
||||
'oauth.scope.budget:write.label': 'إدارة الميزانية',
|
||||
'oauth.scope.budget:write.description': 'إنشاء وتحديث وحذف بنود الميزانية',
|
||||
'oauth.scope.reservations:read.label': 'عرض الحجوزات',
|
||||
'oauth.scope.reservations:read.description': 'قراءة الحجوزات وتفاصيل الإقامة',
|
||||
'oauth.scope.reservations:write.label': 'إدارة الحجوزات',
|
||||
'oauth.scope.reservations:write.description': 'إنشاء وتحديث وحذف وإعادة ترتيب الحجوزات',
|
||||
'oauth.scope.collab:read.label': 'عرض التعاون',
|
||||
'oauth.scope.collab:read.description': 'قراءة ملاحظات التعاون والاستطلاعات والرسائل',
|
||||
'oauth.scope.collab:write.label': 'إدارة التعاون',
|
||||
'oauth.scope.collab:write.description': 'إنشاء وتحديث وحذف الملاحظات والاستطلاعات والرسائل التعاونية',
|
||||
'oauth.scope.notifications:read.label': 'عرض الإشعارات',
|
||||
'oauth.scope.notifications:read.description': 'قراءة إشعارات التطبيق وأعداد غير المقروءة',
|
||||
'oauth.scope.notifications:write.label': 'إدارة الإشعارات',
|
||||
'oauth.scope.notifications:write.description': 'تعليم الإشعارات كمقروءة والرد عليها',
|
||||
'oauth.scope.vacay:read.label': 'عرض خطط الإجازة',
|
||||
'oauth.scope.vacay:read.description': 'قراءة بيانات تخطيط الإجازة والإدخالات والإحصاءات',
|
||||
'oauth.scope.vacay:write.label': 'إدارة خطط الإجازة',
|
||||
'oauth.scope.vacay:write.description': 'إنشاء وإدارة إدخالات الإجازة والعطلات وخطط الفريق',
|
||||
'oauth.scope.geo:read.label': 'الخرائط والترميز الجغرافي',
|
||||
'oauth.scope.geo:read.description': 'البحث عن مواقع وحل عناوين الخرائط والترميز الجغرافي العكسي للإحداثيات',
|
||||
'oauth.scope.weather:read.label': 'توقعات الطقس',
|
||||
'oauth.scope.weather:read.description': 'جلب توقعات الطقس لمواقع الرحلة وتواريخها',
|
||||
}
|
||||
|
||||
export default ar
|
||||
|
||||
@@ -8,6 +8,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Carregando...',
|
||||
'common.import': 'Importar',
|
||||
'common.error': 'Erro',
|
||||
'common.unknownError': 'Erro desconhecido',
|
||||
'common.tooManyAttempts': 'Muitas tentativas. Tente novamente mais tarde.',
|
||||
'common.back': 'Voltar',
|
||||
'common.all': 'Todos',
|
||||
'common.close': 'Fechar',
|
||||
@@ -27,11 +29,17 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.password': 'Senha',
|
||||
'common.saving': 'Salvando...',
|
||||
'common.saved': 'Salvo',
|
||||
'common.expand': 'Expandir',
|
||||
'common.collapse': 'Recolher',
|
||||
'trips.reminder': 'Lembrete',
|
||||
'trips.reminderNone': 'Nenhum',
|
||||
'trips.reminderDay': 'dia',
|
||||
'trips.reminderDays': 'dias',
|
||||
'trips.reminderCustom': 'Personalizado',
|
||||
'trips.memberRemoved': '{username} removido',
|
||||
'trips.memberRemoveError': 'Falha ao remover',
|
||||
'trips.memberAdded': '{username} adicionado',
|
||||
'trips.memberAddError': 'Falha ao adicionar',
|
||||
'trips.reminderDaysBefore': 'dias antes da partida',
|
||||
'trips.reminderDisabledHint': 'Os lembretes de viagem estão desativados. Ative-os em Admin > Configurações > Notificações.',
|
||||
'common.update': 'Atualizar',
|
||||
@@ -179,9 +187,6 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'Desativado',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Eventos de notificação',
|
||||
'admin.notifications.eventsHint': 'Escolha quais eventos acionam notificações para todos os usuários.',
|
||||
'admin.notifications.configureFirst': 'Configure primeiro as configurações SMTP ou webhook abaixo, depois ative os eventos.',
|
||||
'admin.notifications.save': 'Salvar configurações de notificação',
|
||||
'admin.notifications.saved': 'Configurações de notificação salvas',
|
||||
'admin.notifications.testWebhook': 'Enviar webhook de teste',
|
||||
@@ -295,6 +300,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'Endpoint MCP',
|
||||
'settings.mcp.clientConfig': 'Configuração do cliente',
|
||||
'settings.mcp.clientConfigHint': 'Substitua <your_token> por um token de API da lista abaixo. O caminho para o npx pode precisar ser ajustado para o seu sistema (ex.: C:\\PROGRA~1\\nodejs\\npx.cmd no Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Substitua <your_client_id> e <your_client_secret> pelas credenciais exibidas no cliente OAuth 2.1 criado acima. O mcp-remote abrirá seu navegador para concluir a autorização na primeira conexão. O caminho para o npx pode precisar ser ajustado para seu sistema (ex.: C:\\PROGRA~1\\nodejs\\npx.cmd no Windows).',
|
||||
'settings.mcp.copy': 'Copiar',
|
||||
'settings.mcp.copied': 'Copiado!',
|
||||
'settings.mcp.apiTokens': 'Tokens de API',
|
||||
@@ -316,6 +322,48 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Falha ao criar token',
|
||||
'settings.mcp.toast.deleted': 'Token excluído',
|
||||
'settings.mcp.toast.deleteError': 'Falha ao excluir token',
|
||||
'settings.mcp.apiTokensDeprecated': 'Os tokens de API estão obsoletos e serão removidos em uma versão futura. Por favor, use Clientes OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Clientes OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Registre clientes OAuth 2.1 para permitir que aplicações MCP de terceiros (Claude Web, Cursor, etc.) se conectem sem tokens estáticos.',
|
||||
'settings.oauth.createClient': 'Novo cliente',
|
||||
'settings.oauth.noClients': 'Nenhum cliente OAuth registrado.',
|
||||
'settings.oauth.clientId': 'ID do cliente',
|
||||
'settings.oauth.clientSecret': 'Segredo do cliente',
|
||||
'settings.oauth.deleteClient': 'Excluir cliente',
|
||||
'settings.oauth.deleteClientMessage': 'Este cliente e todas as sessões ativas serão removidos permanentemente. Qualquer aplicação que o utilize perderá o acesso imediatamente.',
|
||||
'settings.oauth.rotateSecret': 'Renovar segredo',
|
||||
'settings.oauth.rotateSecretMessage': 'Um novo segredo de cliente será gerado e todas as sessões existentes serão invalidadas imediatamente. Atualize sua aplicação antes de fechar esta janela.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Renovar',
|
||||
'settings.oauth.rotateSecretConfirming': 'Renovando…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Novo segredo gerado',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Este segredo é exibido apenas uma vez. Copie-o agora e atualize sua aplicação — todas as sessões anteriores foram invalidadas.',
|
||||
'settings.oauth.activeSessions': 'Sessões OAuth ativas',
|
||||
'settings.oauth.sessionScopes': 'Escopos',
|
||||
'settings.oauth.sessionExpires': 'Expira',
|
||||
'settings.oauth.revoke': 'Revogar',
|
||||
'settings.oauth.revokeSession': 'Revogar sessão',
|
||||
'settings.oauth.revokeSessionMessage': 'Isso revogará imediatamente o acesso desta sessão OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Registrar cliente OAuth',
|
||||
'settings.oauth.modal.presets': 'Configurações rápidas',
|
||||
'settings.oauth.modal.clientName': 'Nome da aplicação',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'ex.: Claude Web, Meu app MCP',
|
||||
'settings.oauth.modal.redirectUris': 'URIs de redirecionamento',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Uma URI por linha. HTTPS obrigatório (localhost isento). Correspondência exata.',
|
||||
'settings.oauth.modal.scopes': 'Escopos permitidos',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips e get_trip_summary estão sempre disponíveis — sem escopo necessário. Permitem à IA descobrir IDs de viagem.',
|
||||
'settings.oauth.modal.selectAll': 'Selecionar tudo',
|
||||
'settings.oauth.modal.deselectAll': 'Desmarcar tudo',
|
||||
'settings.oauth.modal.creating': 'Registrando…',
|
||||
'settings.oauth.modal.create': 'Registrar cliente',
|
||||
'settings.oauth.modal.createdTitle': 'Cliente registrado',
|
||||
'settings.oauth.modal.createdWarning': 'O segredo do cliente é exibido apenas uma vez. Copie-o agora — não pode ser recuperado.',
|
||||
'settings.oauth.toast.createError': 'Falha ao registrar cliente OAuth',
|
||||
'settings.oauth.toast.deleted': 'Cliente OAuth excluído',
|
||||
'settings.oauth.toast.deleteError': 'Falha ao excluir cliente OAuth',
|
||||
'settings.oauth.toast.revoked': 'Sessão revogada',
|
||||
'settings.oauth.toast.revokeError': 'Falha ao revogar sessão',
|
||||
'settings.oauth.toast.rotateError': 'Falha ao renovar segredo do cliente',
|
||||
'settings.mustChangePassword': 'Você deve alterar sua senha antes de continuar. Defina uma nova senha abaixo.',
|
||||
|
||||
// Login
|
||||
@@ -371,6 +419,10 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Abra o Google Authenticator, Authy ou outro app TOTP.',
|
||||
'login.mfaBack': '← Voltar ao login',
|
||||
'login.mfaVerify': 'Verificar',
|
||||
'login.invalidInviteLink': 'Link de convite inválido ou expirado',
|
||||
'login.oidcFailed': 'Falha no login OIDC',
|
||||
'login.usernameRequired': 'Nome de usuário é obrigatório',
|
||||
'login.passwordMinLength': 'A senha deve ter pelo menos 8 caracteres',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'As senhas não coincidem',
|
||||
@@ -449,6 +501,17 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Configurações',
|
||||
'admin.allowRegistration': 'Permitir cadastro',
|
||||
'admin.allowRegistrationHint': 'Novos usuários podem se cadastrar sozinhos',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Exigir autenticação em dois fatores (2FA)',
|
||||
'admin.requireMfaHint': 'Usuários sem 2FA precisam concluir a configuração em Configurações antes de usar o app.',
|
||||
'admin.apiKeys': 'Chaves de API',
|
||||
@@ -463,7 +526,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.keyValid': 'Conectado',
|
||||
'admin.keyInvalid': 'Inválida',
|
||||
'admin.keySaved': 'Chaves de API salvas',
|
||||
'admin.oidcTitle': 'Single Sign-On (OIDC)',
|
||||
'admin.oidcTitle': 'Login Único (OIDC)',
|
||||
'admin.oidcSubtitle': 'Permitir login via provedores externos como Google, Apple, Authentik ou Keycloak.',
|
||||
'admin.oidcDisplayName': 'Nome exibido',
|
||||
'admin.oidcIssuer': 'URL do emissor',
|
||||
@@ -513,7 +576,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.addons.catalog.budget.description': 'Acompanhe despesas e planeje o orçamento da viagem',
|
||||
'admin.addons.catalog.documents.name': 'Documentos',
|
||||
'admin.addons.catalog.documents.description': 'Armazene e gerencie documentos de viagem',
|
||||
'admin.addons.catalog.vacay.name': 'Vacay',
|
||||
'admin.addons.catalog.vacay.name': 'Férias',
|
||||
'admin.addons.catalog.vacay.description': 'Planejador de férias pessoal com visão em calendário',
|
||||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||||
'admin.addons.catalog.atlas.description': 'Mapa mundial com países visitados e estatísticas',
|
||||
@@ -546,7 +609,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.weather.requestsDesc': 'Grátis, sem chave de API',
|
||||
'admin.weather.locationHint': 'O clima usa o primeiro lugar com coordenadas de cada dia. Se nenhum lugar estiver atribuído ao dia, qualquer lugar da lista serve como referência.',
|
||||
|
||||
'admin.tabs.audit': 'Audit',
|
||||
'admin.tabs.audit': 'Auditoria',
|
||||
|
||||
'admin.audit.subtitle': 'Eventos sensíveis de segurança e administração (backups, usuários, 2FA, configurações).',
|
||||
'admin.audit.empty': 'Nenhum registro de auditoria.',
|
||||
@@ -645,6 +708,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Feriados da empresa',
|
||||
'vacay.companyHolidaysHint': 'Permitir marcar dias de feriado em toda a empresa',
|
||||
'vacay.companyHolidaysNoDeduct': 'Feriados da empresa não contam como dias de férias.',
|
||||
'vacay.weekStart': 'Semana começa em',
|
||||
'vacay.weekStartHint': 'Escolha se a semana começa na segunda-feira ou no domingo',
|
||||
'vacay.carryOver': 'Acúmulo',
|
||||
'vacay.carryOverHint': 'Levar automaticamente os dias de férias restantes para o ano seguinte',
|
||||
'vacay.sharing': 'Compartilhamento',
|
||||
@@ -855,6 +920,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'Arquivos',
|
||||
'inspector.filesCount': '{count} arquivos',
|
||||
'inspector.removeFromDay': 'Remover do dia',
|
||||
'inspector.remove': 'Remover',
|
||||
'inspector.addToDay': 'Adicionar ao dia',
|
||||
'inspector.confirmedRes': 'Reserva confirmada',
|
||||
'inspector.pendingRes': 'Reserva pendente',
|
||||
@@ -995,6 +1061,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'Orçamento total',
|
||||
'budget.byCategory': 'Por categoria',
|
||||
'budget.editTooltip': 'Clique para editar',
|
||||
'budget.linkedToReservation': 'Vinculado a uma reserva — edite o nome por lá',
|
||||
'budget.confirm.deleteCategory': 'Excluir a categoria "{name}" com {count} lançamento(s)?',
|
||||
'budget.deleteCategory': 'Excluir categoria',
|
||||
'budget.perPerson': 'Por pessoa',
|
||||
@@ -1004,9 +1071,13 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.settlement': 'Acerto',
|
||||
'budget.settlementInfo': 'Clique no avatar de um membro em um item do orçamento para marcá-lo em verde — significa que ele pagou. O acerto mostra quem deve quanto a quem.',
|
||||
'budget.netBalances': 'Saldos líquidos',
|
||||
'budget.linkedToReservation': 'Vinculado a uma reserva — edite o nome lá',
|
||||
|
||||
// Files
|
||||
'files.title': 'Arquivos',
|
||||
'files.pageTitle': 'Arquivos e documentos',
|
||||
'files.subtitle': '{count} arquivos para {trip}',
|
||||
'files.downloadPdf': 'Baixar PDF',
|
||||
'files.count': '{count} arquivos',
|
||||
'files.countSingular': '1 arquivo',
|
||||
'files.uploaded': '{count} enviado(s)',
|
||||
@@ -1075,6 +1146,9 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.allPacked': 'Tudo na mala!',
|
||||
'packing.addPlaceholder': 'Adicionar item...',
|
||||
'packing.categoryPlaceholder': 'Categoria...',
|
||||
'packing.saveAsTemplate': 'Salvar como modelo',
|
||||
'packing.templateName': 'Nome do modelo',
|
||||
'packing.templateSaved': 'Lista de bagagem salva como modelo',
|
||||
'packing.filterAll': 'Todos',
|
||||
'packing.filterOpen': 'Abertos',
|
||||
'packing.filterDone': 'Prontos',
|
||||
@@ -1085,7 +1159,6 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'Marcar todos',
|
||||
'packing.menuUncheckAll': 'Desmarcar todos',
|
||||
'packing.menuDeleteCat': 'Excluir categoria',
|
||||
'packing.assignUser': 'Atribuir usuário',
|
||||
'packing.noMembers': 'Nenhum membro na viagem',
|
||||
'packing.addItem': 'Adicionar item',
|
||||
'packing.addItemPlaceholder': 'Nome do item...',
|
||||
@@ -1095,6 +1168,9 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'Modelo',
|
||||
'packing.templateApplied': '{count} itens adicionados do modelo',
|
||||
'packing.templateError': 'Falha ao aplicar modelo',
|
||||
'packing.saveAsTemplate': 'Salvar como modelo',
|
||||
'packing.templateName': 'Nome do modelo',
|
||||
'packing.templateSaved': 'Lista de bagagem salva como modelo',
|
||||
'packing.bags': 'Malas',
|
||||
'packing.noBag': 'Sem mala',
|
||||
'packing.totalWeight': 'Peso total',
|
||||
@@ -1250,6 +1326,13 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Manter para sempre',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Fotos',
|
||||
'photos.subtitle': '{count} fotos para {trip}',
|
||||
'photos.dropHere': 'Arraste fotos aqui...',
|
||||
'photos.dropHereActive': 'Arraste fotos aqui',
|
||||
'photos.captionForAll': 'Legenda (para todos)',
|
||||
'photos.captionPlaceholder': 'Legenda opcional...',
|
||||
'photos.addCaption': 'Adicionar legenda...',
|
||||
'photos.allDays': 'Todos os dias',
|
||||
'photos.noPhotos': 'Nenhuma foto ainda',
|
||||
'photos.uploadHint': 'Envie suas fotos de viagem',
|
||||
@@ -1257,6 +1340,12 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Vincular lugar',
|
||||
'photos.noPlace': 'Sem lugar',
|
||||
'photos.uploadN': 'Enviar {n} foto(s)',
|
||||
'photos.linkDay': 'Vincular dia',
|
||||
'photos.noDay': 'Nenhum dia',
|
||||
'photos.dayLabel': 'Dia {number}',
|
||||
'photos.photoSelected': 'Foto selecionada',
|
||||
'photos.photosSelected': 'Fotos selecionadas',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · máx. 10 MB · até 30 fotos',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Restaurar backup?',
|
||||
@@ -1283,6 +1372,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Rota calculada',
|
||||
'planner.routeCalcFailed': 'Não foi possível calcular a rota',
|
||||
'planner.routeError': 'Erro ao calcular a rota',
|
||||
'planner.icsExportFailed': 'Falha ao exportar ICS',
|
||||
'planner.routeOptimized': 'Rota otimizada',
|
||||
'planner.reservationUpdated': 'Reserva atualizada',
|
||||
'planner.reservationAdded': 'Reserva adicionada',
|
||||
@@ -1438,6 +1528,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich não conectado',
|
||||
'memories.notConnectedHint': 'Conecte sua instância Immich nas Configurações para ver suas fotos de viagem aqui.',
|
||||
'memories.notConnectedMultipleHint': 'Conecte um destes provedores de fotos: {provider_names} nas Configurações para poder adicionar fotos a esta viagem.',
|
||||
'memories.noDates': 'Adicione datas à sua viagem para carregar fotos.',
|
||||
'memories.noPhotos': 'Nenhuma foto encontrada',
|
||||
'memories.noPhotosHint': 'Nenhuma foto encontrada no Immich para o período desta viagem.',
|
||||
@@ -1448,23 +1539,32 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Revise suas fotos',
|
||||
'memories.reviewHint': 'Clique nas fotos para excluí-las do compartilhamento.',
|
||||
'memories.shareCount': 'Compartilhar {count} fotos',
|
||||
'memories.immichUrl': 'URL do servidor Immich',
|
||||
'memories.immichApiKey': 'Chave da API',
|
||||
'memories.providerUrl': 'URL do servidor',
|
||||
'memories.providerApiKey': 'Chave de API',
|
||||
'memories.providerUsername': 'Nome de usuário',
|
||||
'memories.providerPassword': 'Senha',
|
||||
'memories.providerOTP': 'Código MFA (se habilitado)',
|
||||
'memories.skipSSLVerification': 'Pular verificação de certificado SSL',
|
||||
'memories.providerUrlHintSynology': 'Inclua o caminho do aplicativo Photos na URL, ex. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Testar conexão',
|
||||
'memories.testFirst': 'Teste a conexão primeiro',
|
||||
'memories.connected': 'Conectado',
|
||||
'memories.disconnected': 'Não conectado',
|
||||
'memories.connectionSuccess': 'Conectado ao Immich',
|
||||
'memories.connectionError': 'Não foi possível conectar ao Immich',
|
||||
'memories.saved': 'Configurações do Immich salvas',
|
||||
'memories.saved': 'Configurações do {provider_name} salvas',
|
||||
'memories.providerDisconnectedBanner': 'Sua conexão com {provider_name} foi perdida. Reconecte nas Configurações para ver as fotos.',
|
||||
'memories.saveError': 'Não foi possível salvar as configurações de {provider_name}',
|
||||
'memories.addPhotos': 'Adicionar fotos',
|
||||
'memories.linkAlbum': 'Vincular álbum',
|
||||
'memories.selectAlbum': 'Selecionar álbum do Immich',
|
||||
'memories.selectAlbumMultiple': 'Selecionar álbum',
|
||||
'memories.noAlbums': 'Nenhum álbum encontrado',
|
||||
'memories.syncAlbum': 'Sincronizar álbum',
|
||||
'memories.unlinkAlbum': 'Desvincular',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': 'Selecionar fotos do Immich',
|
||||
'memories.selectPhotosMultiple': 'Selecionar fotos',
|
||||
'memories.selectHint': 'Toque nas fotos para selecioná-las.',
|
||||
'memories.selected': 'selecionadas',
|
||||
'memories.addSelected': 'Adicionar {count} fotos',
|
||||
@@ -1482,9 +1582,10 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
|
||||
// Permissions
|
||||
'admin.tabs.permissions': 'Permissões',
|
||||
'admin.tabs.mcpTokens': 'Tokens MCP',
|
||||
'admin.mcpTokens.title': 'Tokens MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gerenciar tokens de API de todos os usuários',
|
||||
'admin.tabs.mcpTokens': 'Acesso MCP',
|
||||
'admin.mcpTokens.title': 'Acesso MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gerenciar sessões OAuth e tokens de API de todos os usuários',
|
||||
'admin.mcpTokens.sectionTitle': 'Tokens de API',
|
||||
'admin.mcpTokens.owner': 'Proprietário',
|
||||
'admin.mcpTokens.tokenName': 'Nome do Token',
|
||||
'admin.mcpTokens.created': 'Criado',
|
||||
@@ -1496,6 +1597,17 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token excluído',
|
||||
'admin.mcpTokens.deleteError': 'Falha ao excluir token',
|
||||
'admin.mcpTokens.loadError': 'Falha ao carregar tokens',
|
||||
'admin.oauthSessions.sectionTitle': 'Sessões OAuth',
|
||||
'admin.oauthSessions.clientName': 'Cliente',
|
||||
'admin.oauthSessions.owner': 'Proprietário',
|
||||
'admin.oauthSessions.scopes': 'Permissões',
|
||||
'admin.oauthSessions.created': 'Criado',
|
||||
'admin.oauthSessions.empty': 'Nenhuma sessão OAuth ativa',
|
||||
'admin.oauthSessions.revokeTitle': 'Revogar sessão',
|
||||
'admin.oauthSessions.revokeMessage': 'Esta sessão OAuth será revogada imediatamente. O cliente perderá o acesso MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sessão revogada',
|
||||
'admin.oauthSessions.revokeError': 'Falha ao revogar sessão',
|
||||
'admin.oauthSessions.loadError': 'Falha ao carregar sessões OAuth',
|
||||
'perm.title': 'Configurações de Permissões',
|
||||
'perm.subtitle': 'Controle quem pode realizar ações no aplicativo',
|
||||
'perm.saved': 'Configurações de permissões salvas',
|
||||
@@ -1569,6 +1681,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Marcar como não lido',
|
||||
'notifications.delete': 'Excluir',
|
||||
'notifications.system': 'Sistema',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos desconectado',
|
||||
'notifications.synologySessionCleared.text': 'Seu servidor ou conta foi alterado — vá para Configurações para testar sua conexão novamente.',
|
||||
'memories.error.loadAlbums': 'Falha ao carregar álbuns',
|
||||
'memories.error.linkAlbum': 'Falha ao vincular álbum',
|
||||
'memories.error.unlinkAlbum': 'Falha ao desvincular álbum',
|
||||
@@ -1691,6 +1805,310 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Você tem uma nova notificação',
|
||||
'notif.dev.unknown_event.title': '[DEV] Evento desconhecido',
|
||||
'notif.dev.unknown_event.text': 'O tipo de evento "{event}" não está registrado em EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'agora mesmo',
|
||||
'common.hoursAgo': 'há {count}h',
|
||||
'common.daysAgo': 'há {count}d',
|
||||
'budget.linkedToReservation': 'Vinculado a uma reserva — edite o nome lá',
|
||||
'packing.saveAsTemplate': 'Salvar como modelo',
|
||||
'packing.templateName': 'Nome do modelo',
|
||||
'packing.templateSaved': 'Lista de bagagem salva como modelo',
|
||||
'memories.notConnectedMultipleHint': 'Conecte qualquer um destes provedores de fotos: {provider_names} em Configurações para poder adicionar fotos a esta viagem.',
|
||||
'memories.providerUrl': 'URL do servidor',
|
||||
'memories.providerApiKey': 'Chave da API',
|
||||
'memories.providerUsername': 'Nome de usuário',
|
||||
'memories.providerPassword': 'Senha',
|
||||
'memories.saveError': 'Não foi possível salvar as configurações de {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'A rota de salvamento não está configurada para este provedor',
|
||||
'memories.testRouteNotConfigured': 'A rota de teste não está configurada para este provedor',
|
||||
'memories.fillRequiredFields': 'Por favor preencha todos os campos obrigatórios',
|
||||
'memories.selectAlbumMultiple': 'Selecionar álbum',
|
||||
'memories.selectPhotosMultiple': 'Selecionar fotos',
|
||||
'journey.title': 'Jornada',
|
||||
'journey.subtitle': 'Registre suas viagens em tempo real',
|
||||
'journey.new': 'Nova jornada',
|
||||
'journey.create': 'Criar',
|
||||
'journey.titlePlaceholder': 'Para onde você vai?',
|
||||
'journey.empty': 'Nenhuma jornada ainda',
|
||||
'journey.emptyHint': 'Comece a documentar sua próxima viagem',
|
||||
'journey.deleted': 'Jornada excluída',
|
||||
'journey.createError': 'Não foi possível criar a jornada',
|
||||
'journey.deleteError': 'Não foi possível excluir a jornada',
|
||||
'journey.deleteConfirmTitle': 'Excluir',
|
||||
'journey.deleteConfirmMessage': 'Excluir "{title}"? Isso não pode ser desfeito.',
|
||||
'journey.deleteConfirmGeneric': 'Tem certeza de que deseja excluir isso?',
|
||||
'journey.notFound': 'Jornada não encontrada',
|
||||
'journey.photos': 'Fotos',
|
||||
'journey.timelineEmpty': 'Nenhuma parada ainda',
|
||||
'journey.timelineEmptyHint': 'Adicione um check-in ou escreva uma entrada no diário para começar',
|
||||
'journey.status.draft': 'Rascunho',
|
||||
'journey.status.active': 'Ativa',
|
||||
'journey.status.completed': 'Concluída',
|
||||
'journey.status.upcoming': 'Próxima',
|
||||
'journey.checkin.add': 'Fazer check-in',
|
||||
'journey.checkin.namePlaceholder': 'Nome do local',
|
||||
'journey.checkin.notesPlaceholder': 'Notas (opcional)',
|
||||
'journey.checkin.save': 'Salvar',
|
||||
'journey.checkin.error': 'Não foi possível salvar o check-in',
|
||||
'journey.entry.add': 'Diário',
|
||||
'journey.entry.edit': 'Editar entrada',
|
||||
'journey.entry.titlePlaceholder': 'Título (opcional)',
|
||||
'journey.entry.bodyPlaceholder': 'O que aconteceu hoje?',
|
||||
'journey.entry.save': 'Salvar',
|
||||
'journey.entry.error': 'Não foi possível salvar a entrada',
|
||||
'journey.photo.add': 'Foto',
|
||||
'journey.photo.uploadError': 'Falha no envio',
|
||||
'journey.share.share': 'Compartilhar',
|
||||
'journey.share.public': 'Público',
|
||||
'journey.share.linkCopied': 'Link público copiado',
|
||||
'journey.share.disabled': 'Compartilhamento público desativado',
|
||||
'journey.editor.titlePlaceholder': 'Dê um nome a este momento...',
|
||||
'journey.editor.bodyPlaceholder': 'Conte a história deste dia...',
|
||||
'journey.editor.placePlaceholder': 'Localização (opcional)',
|
||||
'journey.editor.tagsPlaceholder': 'Tags: joia escondida, melhor refeição, preciso voltar...',
|
||||
'journey.visibility.private': 'Privado',
|
||||
'journey.visibility.shared': 'Compartilhado',
|
||||
'journey.visibility.public': 'Público',
|
||||
'journey.emptyState.title': 'Sua história começa aqui',
|
||||
'journey.emptyState.subtitle': 'Faça check-in em um lugar ou escreva sua primeira entrada no diário',
|
||||
'journey.frontpage.subtitle': 'Transforme suas viagens em histórias que você nunca vai esquecer',
|
||||
'journey.frontpage.createJourney': 'Criar jornada',
|
||||
'journey.frontpage.activeJourney': 'Jornada ativa',
|
||||
'journey.frontpage.allJourneys': 'Todas as jornadas',
|
||||
'journey.frontpage.journeys': 'jornadas',
|
||||
'journey.frontpage.createNew': 'Criar uma nova jornada',
|
||||
'journey.frontpage.createNewSub': 'Escolha viagens, escreva histórias, compartilhe suas aventuras',
|
||||
'journey.frontpage.live': 'Ao vivo',
|
||||
'journey.frontpage.synced': 'Sincronizado',
|
||||
'journey.frontpage.continueWriting': 'Continuar escrevendo',
|
||||
'journey.frontpage.updated': 'Atualizado {time}',
|
||||
'journey.frontpage.suggestionLabel': 'A viagem acabou de terminar',
|
||||
'journey.frontpage.suggestionText': 'Transforme <strong>{title}</strong> em uma jornada',
|
||||
'journey.frontpage.dismiss': 'Dispensar',
|
||||
'journey.frontpage.journeyName': 'Nome da jornada',
|
||||
'journey.frontpage.namePlaceholder': 'ex. Sudeste Asiático 2026',
|
||||
'journey.frontpage.selectTrips': 'Selecionar viagens',
|
||||
'journey.frontpage.tripsSelected': 'viagens selecionadas',
|
||||
'journey.frontpage.trips': 'viagens',
|
||||
'journey.frontpage.placesImported': 'lugares serão importados',
|
||||
'journey.frontpage.places': 'lugares',
|
||||
'journey.detail.backToJourney': 'Voltar à jornada',
|
||||
'journey.detail.syncedWithTrips': 'Sincronizado com viagens',
|
||||
'journey.detail.addEntry': 'Adicionar entrada',
|
||||
'journey.detail.newEntry': 'Nova entrada',
|
||||
'journey.detail.editEntry': 'Editar entrada',
|
||||
'journey.detail.noEntries': 'Nenhuma entrada ainda',
|
||||
'journey.detail.noEntriesHint': 'Adicione uma viagem para começar com entradas preliminares',
|
||||
'journey.detail.noPhotos': 'Nenhuma foto ainda',
|
||||
'journey.detail.noPhotosHint': 'Envie fotos para as entradas ou explore sua biblioteca do Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Estatísticas da jornada',
|
||||
'journey.detail.syncedTrips': 'Viagens sincronizadas',
|
||||
'journey.detail.noTripsLinked': 'Nenhuma viagem vinculada ainda',
|
||||
'journey.detail.contributors': 'Colaboradores',
|
||||
'journey.detail.readMore': 'Ler mais',
|
||||
'journey.detail.prosCons': 'Prós e contras',
|
||||
'journey.stats.days': 'Dias',
|
||||
'journey.stats.cities': 'Cidades',
|
||||
'journey.stats.entries': 'Entradas',
|
||||
'journey.stats.photos': 'Fotos',
|
||||
'journey.stats.places': 'Lugares',
|
||||
'journey.verdict.lovedIt': 'Adorei',
|
||||
'journey.verdict.couldBeBetter': 'Poderia ser melhor',
|
||||
'journey.synced.places': 'lugares',
|
||||
'journey.synced.synced': 'sincronizado',
|
||||
'journey.editor.uploadPhotos': 'Enviar fotos',
|
||||
'journey.editor.fromGallery': 'Da galeria',
|
||||
'journey.editor.allPhotosAdded': 'Todas as fotos já foram adicionadas',
|
||||
'journey.editor.writeStory': 'Escreva sua história...',
|
||||
'journey.editor.prosCons': 'Prós e contras',
|
||||
'journey.editor.pros': 'Prós',
|
||||
'journey.editor.cons': 'Contras',
|
||||
'journey.editor.proPlaceholder': 'Algo ótimo...',
|
||||
'journey.editor.conPlaceholder': 'Não tão bom...',
|
||||
'journey.editor.addAnother': 'Adicionar outro',
|
||||
'journey.editor.date': 'Data',
|
||||
'journey.editor.location': 'Localização',
|
||||
'journey.editor.searchLocation': 'Buscar localização...',
|
||||
'journey.editor.mood': 'Humor',
|
||||
'journey.editor.weather': 'Clima',
|
||||
'journey.editor.photoFirst': '1º',
|
||||
'journey.editor.makeFirst': 'Tornar 1º',
|
||||
'journey.mood.amazing': 'Incrível',
|
||||
'journey.mood.good': 'Bom',
|
||||
'journey.mood.neutral': 'Neutro',
|
||||
'journey.mood.rough': 'Difícil',
|
||||
'journey.weather.sunny': 'Ensolarado',
|
||||
'journey.weather.partly': 'Parcialmente nublado',
|
||||
'journey.weather.cloudy': 'Nublado',
|
||||
'journey.weather.rainy': 'Chuvoso',
|
||||
'journey.weather.stormy': 'Tempestuoso',
|
||||
'journey.weather.cold': 'Nevando',
|
||||
'journey.trips.linkTrip': 'Vincular viagem',
|
||||
'journey.trips.searchTrip': 'Buscar viagem',
|
||||
'journey.trips.searchPlaceholder': 'Nome da viagem ou destino...',
|
||||
'journey.trips.noTripsAvailable': 'Nenhuma viagem disponível',
|
||||
'journey.trips.link': 'Vincular',
|
||||
'journey.trips.tripLinked': 'Viagem vinculada',
|
||||
'journey.trips.linkFailed': 'Não foi possível vincular a viagem',
|
||||
'journey.trips.addTrip': 'Adicionar viagem',
|
||||
'journey.trips.unlinkTrip': 'Desvincular viagem',
|
||||
'journey.trips.unlinkMessage': 'Desvincular "{title}"? Todas as entradas e fotos sincronizadas desta viagem serão excluídas permanentemente. Isso não pode ser desfeito.',
|
||||
'journey.trips.unlink': 'Desvincular',
|
||||
'journey.trips.tripUnlinked': 'Viagem desvinculada',
|
||||
'journey.trips.unlinkFailed': 'Não foi possível desvincular a viagem',
|
||||
'journey.trips.noTripsLinkedSettings': 'Nenhuma viagem vinculada',
|
||||
'journey.contributors.invite': 'Convidar colaborador',
|
||||
'journey.contributors.searchUser': 'Buscar usuário',
|
||||
'journey.contributors.searchPlaceholder': 'Nome de usuário ou e-mail...',
|
||||
'journey.contributors.noUsers': 'Nenhum usuário encontrado',
|
||||
'journey.contributors.role': 'Função',
|
||||
'journey.contributors.added': 'Colaborador adicionado',
|
||||
'journey.contributors.addFailed': 'Não foi possível adicionar o colaborador',
|
||||
'journey.share.publicShare': 'Compartilhamento público',
|
||||
'journey.share.createLink': 'Criar link de compartilhamento',
|
||||
'journey.share.linkCreated': 'Link de compartilhamento criado',
|
||||
'journey.share.createFailed': 'Não foi possível criar o link',
|
||||
'journey.share.copy': 'Copiar',
|
||||
'journey.share.copied': 'Copiado!',
|
||||
'journey.share.timeline': 'Linha do tempo',
|
||||
'journey.share.gallery': 'Galeria',
|
||||
'journey.share.map': 'Mapa',
|
||||
'journey.share.removeLink': 'Remover link de compartilhamento',
|
||||
'journey.share.linkDeleted': 'Link de compartilhamento removido',
|
||||
'journey.share.deleteFailed': 'Não foi possível excluir',
|
||||
'journey.share.updateFailed': 'Não foi possível atualizar',
|
||||
'journey.settings.title': 'Configurações da jornada',
|
||||
'journey.settings.coverImage': 'Imagem de capa',
|
||||
'journey.settings.changeCover': 'Alterar capa',
|
||||
'journey.settings.addCover': 'Adicionar imagem de capa',
|
||||
'journey.settings.name': 'Nome',
|
||||
'journey.settings.subtitle': 'Subtítulo',
|
||||
'journey.settings.subtitlePlaceholder': 'ex. Tailândia, Vietnã e Camboja',
|
||||
'journey.settings.delete': 'Excluir',
|
||||
'journey.settings.deleteJourney': 'Excluir jornada',
|
||||
'journey.settings.deleteMessage': 'Excluir "{title}"? Todas as entradas e fotos serão perdidas.',
|
||||
'journey.settings.saved': 'Configurações salvas',
|
||||
'journey.settings.saveFailed': 'Não foi possível salvar',
|
||||
'journey.settings.coverUpdated': 'Capa atualizada',
|
||||
'journey.settings.coverFailed': 'Falha no envio',
|
||||
'journey.settings.failedToDelete': 'Falha ao excluir',
|
||||
'journey.entries.deleteTitle': 'Excluir entrada',
|
||||
'journey.photosUploaded': '{count} fotos enviadas',
|
||||
'journey.photosAdded': '{count} fotos adicionadas',
|
||||
'journey.public.notFound': 'Não encontrado',
|
||||
'journey.public.notFoundMessage': 'Esta jornada não existe ou o link expirou.',
|
||||
'journey.public.readOnly': 'Somente leitura · Jornada pública',
|
||||
'journey.public.tagline': 'Kit de recursos e exploração de viagens',
|
||||
'journey.public.sharedVia': 'Compartilhado via',
|
||||
'journey.public.madeWith': 'Feito com',
|
||||
'journey.pdf.journeyBook': 'Livro da jornada',
|
||||
'journey.pdf.madeWith': 'Feito com TREK',
|
||||
'journey.pdf.day': 'Dia',
|
||||
'journey.pdf.theEnd': 'Fim',
|
||||
'journey.pdf.saveAsPdf': 'Salvar como PDF',
|
||||
'journey.pdf.pages': 'páginas',
|
||||
'dashboard.greeting.morning': 'Bom dia,',
|
||||
'dashboard.greeting.afternoon': 'Boa tarde,',
|
||||
'dashboard.greeting.evening': 'Boa noite,',
|
||||
'dashboard.mobile.liveNow': 'Ao vivo agora',
|
||||
'dashboard.mobile.tripProgress': 'Progresso da viagem',
|
||||
'dashboard.mobile.daysLeft': '{count} dias restantes',
|
||||
'dashboard.mobile.places': 'Lugares',
|
||||
'dashboard.mobile.buddies': 'Companheiros',
|
||||
'dashboard.mobile.newTrip': 'Nova viagem',
|
||||
'dashboard.mobile.currency': 'Moeda',
|
||||
'dashboard.mobile.timezone': 'Fuso horário',
|
||||
'dashboard.mobile.upcomingTrips': 'Próximas viagens',
|
||||
'dashboard.mobile.yourTrips': 'Suas viagens',
|
||||
'dashboard.mobile.trips': 'viagens',
|
||||
'dashboard.mobile.starts': 'Começa',
|
||||
'dashboard.mobile.duration': 'Duração',
|
||||
'dashboard.mobile.day': 'dia',
|
||||
'dashboard.mobile.days': 'dias',
|
||||
'dashboard.mobile.ongoing': 'Em andamento',
|
||||
'dashboard.mobile.startsToday': 'Começa hoje',
|
||||
'dashboard.mobile.tomorrow': 'Amanhã',
|
||||
'dashboard.mobile.inDays': 'Em {count} dias',
|
||||
'dashboard.mobile.inMonths': 'Em {count} meses',
|
||||
'dashboard.mobile.completed': 'Concluído',
|
||||
'dashboard.mobile.currencyConverter': 'Conversor de moedas',
|
||||
'nav.profile': 'Perfil',
|
||||
'nav.bottomSettings': 'Configurações',
|
||||
'nav.bottomAdmin': 'Administração',
|
||||
'nav.bottomLogout': 'Sair',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Adicionar lugar',
|
||||
'dayplan.mobile.searchPlaces': 'Buscar lugares...',
|
||||
'dayplan.mobile.allAssigned': 'Todos os lugares atribuídos',
|
||||
'dayplan.mobile.noMatch': 'Sem correspondência',
|
||||
'dayplan.mobile.createNew': 'Criar novo lugar',
|
||||
'admin.addons.catalog.journey.name': 'Jornada',
|
||||
'admin.addons.catalog.journey.description': 'Rastreamento de viagens e diário de viajante com check-ins, fotos e histórias diárias',
|
||||
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Viagens',
|
||||
'oauth.scope.group.places': 'Locais',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Bagagem',
|
||||
'oauth.scope.group.todos': 'Tarefas',
|
||||
'oauth.scope.group.budget': 'Orçamento',
|
||||
'oauth.scope.group.reservations': 'Reservas',
|
||||
'oauth.scope.group.collab': 'Colaboração',
|
||||
'oauth.scope.group.notifications': 'Notificações',
|
||||
'oauth.scope.group.vacay': 'Férias',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Clima',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Ver viagens e itinerários',
|
||||
'oauth.scope.trips:read.description': 'Ler viagens, dias, notas e membros',
|
||||
'oauth.scope.trips:write.label': 'Editar viagens e itinerários',
|
||||
'oauth.scope.trips:write.description': 'Criar e atualizar viagens, dias, notas e gerenciar membros',
|
||||
'oauth.scope.trips:delete.label': 'Excluir viagens',
|
||||
'oauth.scope.trips:delete.description': 'Excluir viagens permanentemente — esta ação é irreversível',
|
||||
'oauth.scope.trips:share.label': 'Gerenciar links de compartilhamento',
|
||||
'oauth.scope.trips:share.description': 'Criar, atualizar e revogar links de compartilhamento públicos',
|
||||
'oauth.scope.places:read.label': 'Ver locais e dados do mapa',
|
||||
'oauth.scope.places:read.description': 'Ler locais, atribuições de dias, tags e categorias',
|
||||
'oauth.scope.places:write.label': 'Gerenciar locais',
|
||||
'oauth.scope.places:write.description': 'Criar, atualizar e excluir locais, atribuições e tags',
|
||||
'oauth.scope.atlas:read.label': 'Ver Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Ler países visitados, regiões e lista de desejos',
|
||||
'oauth.scope.atlas:write.label': 'Gerenciar Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Marcar países e regiões como visitados, gerenciar lista de desejos',
|
||||
'oauth.scope.packing:read.label': 'Ver listas de bagagem',
|
||||
'oauth.scope.packing:read.description': 'Ler itens, malas e responsáveis por categoria',
|
||||
'oauth.scope.packing:write.label': 'Gerenciar listas de bagagem',
|
||||
'oauth.scope.packing:write.description': 'Adicionar, atualizar, excluir, marcar e reordenar itens e malas',
|
||||
'oauth.scope.todos:read.label': 'Ver listas de tarefas',
|
||||
'oauth.scope.todos:read.description': 'Ler tarefas da viagem e responsáveis por categoria',
|
||||
'oauth.scope.todos:write.label': 'Gerenciar listas de tarefas',
|
||||
'oauth.scope.todos:write.description': 'Criar, atualizar, marcar, excluir e reordenar tarefas',
|
||||
'oauth.scope.budget:read.label': 'Ver orçamento',
|
||||
'oauth.scope.budget:read.description': 'Ler itens de orçamento e detalhamento de despesas',
|
||||
'oauth.scope.budget:write.label': 'Gerenciar orçamento',
|
||||
'oauth.scope.budget:write.description': 'Criar, atualizar e excluir itens de orçamento',
|
||||
'oauth.scope.reservations:read.label': 'Ver reservas',
|
||||
'oauth.scope.reservations:read.description': 'Ler reservas e detalhes de acomodação',
|
||||
'oauth.scope.reservations:write.label': 'Gerenciar reservas',
|
||||
'oauth.scope.reservations:write.description': 'Criar, atualizar, excluir e reordenar reservas',
|
||||
'oauth.scope.collab:read.label': 'Ver colaboração',
|
||||
'oauth.scope.collab:read.description': 'Ler notas colaborativas, enquetes e mensagens',
|
||||
'oauth.scope.collab:write.label': 'Gerenciar colaboração',
|
||||
'oauth.scope.collab:write.description': 'Criar, atualizar e excluir notas, enquetes e mensagens',
|
||||
'oauth.scope.notifications:read.label': 'Ver notificações',
|
||||
'oauth.scope.notifications:read.description': 'Ler notificações e contagens não lidas',
|
||||
'oauth.scope.notifications:write.label': 'Gerenciar notificações',
|
||||
'oauth.scope.notifications:write.description': 'Marcar notificações como lidas e respondê-las',
|
||||
'oauth.scope.vacay:read.label': 'Ver planos de férias',
|
||||
'oauth.scope.vacay:read.description': 'Ler dados de planejamento de férias, entradas e estatísticas',
|
||||
'oauth.scope.vacay:write.label': 'Gerenciar planos de férias',
|
||||
'oauth.scope.vacay:write.description': 'Criar e gerenciar entradas de férias, feriados e planos de equipe',
|
||||
'oauth.scope.geo:read.label': 'Mapas e geocodificação',
|
||||
'oauth.scope.geo:read.description': 'Pesquisar locais, resolver URLs de mapa e geocodificar coordenadas',
|
||||
'oauth.scope.weather:read.label': 'Previsão do tempo',
|
||||
'oauth.scope.weather:read.description': 'Obter previsão do tempo para locais e datas da viagem',
|
||||
}
|
||||
|
||||
export default br
|
||||
|
||||
@@ -8,6 +8,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Načítání...',
|
||||
'common.import': 'Importovat',
|
||||
'common.error': 'Chyba',
|
||||
'common.unknownError': 'Neznámá chyba',
|
||||
'common.tooManyAttempts': 'Příliš mnoho pokusů. Zkuste to prosím znovu.',
|
||||
'common.back': 'Zpět',
|
||||
'common.all': 'Vše',
|
||||
'common.close': 'Zavřít',
|
||||
@@ -26,6 +28,12 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.email': 'E-mail',
|
||||
'common.password': 'Heslo',
|
||||
'common.saving': 'Ukládání...',
|
||||
'trips.memberRemoved': '{username} odebrán',
|
||||
'trips.memberRemoveError': 'Odebrání se nezdařilo',
|
||||
'trips.memberAdded': '{username} přidán',
|
||||
'trips.memberAddError': 'Přidání se nezdařilo',
|
||||
'common.expand': 'Rozbalit',
|
||||
'common.collapse': 'Sbalit',
|
||||
'common.saved': 'Uloženo',
|
||||
'trips.reminder': 'Připomínka',
|
||||
'trips.reminderNone': 'Žádná',
|
||||
@@ -181,6 +189,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'MCP endpoint',
|
||||
'settings.mcp.clientConfig': 'Konfigurace klienta',
|
||||
'settings.mcp.clientConfigHint': 'Nahraďte <your_token> API tokenem ze seznamu níže. Cestu k npx může být nutné upravit pro váš systém (např. C:\\PROGRA~1\\nodejs\\npx.cmd ve Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Nahraďte <your_client_id> a <your_client_secret> přihlašovacími údaji ze klienta OAuth 2.1, který jste vytvořili výše. mcp-remote při prvním připojení otevře prohlížeč pro dokončení autorizace. Cestu k npx může být nutné upravit pro váš systém (např. C:\\PROGRA~1\\nodejs\\npx.cmd ve Windows).',
|
||||
'settings.mcp.copy': 'Kopírovat',
|
||||
'settings.mcp.copied': 'Zkopírováno!',
|
||||
'settings.mcp.apiTokens': 'API tokeny',
|
||||
@@ -202,6 +211,48 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Nepodařilo se vytvořit token',
|
||||
'settings.mcp.toast.deleted': 'Token smazán',
|
||||
'settings.mcp.toast.deleteError': 'Nepodařilo se smazat token',
|
||||
'settings.mcp.apiTokensDeprecated': 'API tokeny jsou zastaralé a budou odstraněny v budoucí verzi. Místo toho použijte klienty OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Klienti OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Zaregistrujte klienty OAuth 2.1, aby se aplikace MCP třetích stran (Claude Web, Cursor atd.) mohly připojit bez statických tokenů.',
|
||||
'settings.oauth.createClient': 'Nový klient',
|
||||
'settings.oauth.noClients': 'Žádní klienti OAuth nejsou zaregistrováni.',
|
||||
'settings.oauth.clientId': 'ID klienta',
|
||||
'settings.oauth.clientSecret': 'Tajný klíč klienta',
|
||||
'settings.oauth.deleteClient': 'Smazat klienta',
|
||||
'settings.oauth.deleteClientMessage': 'Tento klient a všechny aktivní relace budou trvale odstraněny. Jakákoliv aplikace, která ho používá, okamžitě ztratí přístup.',
|
||||
'settings.oauth.rotateSecret': 'Obnovit tajný klíč',
|
||||
'settings.oauth.rotateSecretMessage': 'Bude vygenerován nový tajný klíč klienta a všechny stávající relace budou okamžitě zneplatněny. Aktualizujte aplikaci před zavřením tohoto dialogu.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Obnovit',
|
||||
'settings.oauth.rotateSecretConfirming': 'Obnovování…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Nový tajný klíč vygenerován',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Tento tajný klíč se zobrazí pouze jednou. Zkopírujte ho nyní a aktualizujte aplikaci — všechny předchozí relace byly zneplatněny.',
|
||||
'settings.oauth.activeSessions': 'Aktivní relace OAuth',
|
||||
'settings.oauth.sessionScopes': 'Oprávnění',
|
||||
'settings.oauth.sessionExpires': 'Vyprší',
|
||||
'settings.oauth.revoke': 'Odvolat',
|
||||
'settings.oauth.revokeSession': 'Odvolat relaci',
|
||||
'settings.oauth.revokeSessionMessage': 'Tím se okamžitě odvolá přístup pro tuto relaci OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Zaregistrovat klienta OAuth',
|
||||
'settings.oauth.modal.presets': 'Rychlá nastavení',
|
||||
'settings.oauth.modal.clientName': 'Název aplikace',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'např. Claude Web, Moje MCP aplikace',
|
||||
'settings.oauth.modal.redirectUris': 'Přesměrovací URI',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Jedno URI na řádek. Vyžadováno HTTPS (localhost vyjmuto). Vyžadována přesná shoda.',
|
||||
'settings.oauth.modal.scopes': 'Povolená oprávnění',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips a get_trip_summary jsou vždy dostupné — bez požadovaného oprávnění. Umožňují AI zjistit potřebná ID výletů.',
|
||||
'settings.oauth.modal.selectAll': 'Vybrat vše',
|
||||
'settings.oauth.modal.deselectAll': 'Zrušit výběr',
|
||||
'settings.oauth.modal.creating': 'Registrování…',
|
||||
'settings.oauth.modal.create': 'Zaregistrovat klienta',
|
||||
'settings.oauth.modal.createdTitle': 'Klient zaregistrován',
|
||||
'settings.oauth.modal.createdWarning': 'Tajný klíč klienta se zobrazí pouze jednou. Zkopírujte ho nyní — nelze ho obnovit.',
|
||||
'settings.oauth.toast.createError': 'Registrace klienta OAuth se nezdařila',
|
||||
'settings.oauth.toast.deleted': 'Klient OAuth smazán',
|
||||
'settings.oauth.toast.deleteError': 'Smazání klienta OAuth se nezdařilo',
|
||||
'settings.oauth.toast.revoked': 'Relace odvolána',
|
||||
'settings.oauth.toast.revokeError': 'Odvolání relace se nezdařilo',
|
||||
'settings.oauth.toast.rotateError': 'Obnovení tajného klíče klienta se nezdařilo',
|
||||
'settings.account': 'Účet',
|
||||
'settings.about': 'O aplikaci',
|
||||
'settings.about.reportBug': 'Nahlásit chybu',
|
||||
@@ -274,9 +325,6 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'Vypnuto',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Události oznámení',
|
||||
'admin.notifications.eventsHint': 'Vyberte, které události spouštějí oznámení pro všechny uživatele.',
|
||||
'admin.notifications.configureFirst': 'Nejprve nakonfigurujte nastavení SMTP nebo webhooku níže, poté povolte události.',
|
||||
'admin.notifications.save': 'Uložit nastavení oznámení',
|
||||
'admin.notifications.saved': 'Nastavení oznámení uloženo',
|
||||
'admin.notifications.testWebhook': 'Odeslat testovací webhook',
|
||||
@@ -371,6 +419,10 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Otevřete Google Authenticator, Authy nebo jinou TOTP aplikaci.',
|
||||
'login.mfaBack': '← Zpět k přihlášení',
|
||||
'login.mfaVerify': 'Ověřit',
|
||||
'login.invalidInviteLink': 'Neplatný nebo vypršelý odkaz s pozvánkou',
|
||||
'login.oidcFailed': 'Přihlášení přes OIDC se nezdařilo',
|
||||
'login.usernameRequired': 'Uživatelské jméno je povinné',
|
||||
'login.passwordMinLength': 'Heslo musí mít alespoň 8 znaků',
|
||||
|
||||
// Registrace (Register)
|
||||
'register.passwordMismatch': 'Hesla se neshodují',
|
||||
@@ -449,6 +501,17 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Nastavení',
|
||||
'admin.allowRegistration': 'Povolit registraci',
|
||||
'admin.allowRegistrationHint': 'Noví uživatelé se mohou sami registrovat',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Vyžadovat dvoufázové ověření (2FA)',
|
||||
'admin.requireMfaHint': 'Uživatelé bez 2FA musí dokončit nastavení v Nastavení před použitím aplikace.',
|
||||
'admin.apiKeys': 'API klíče',
|
||||
@@ -550,9 +613,10 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.audit.col.details': 'Detaily',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP tokeny',
|
||||
'admin.mcpTokens.title': 'MCP tokeny',
|
||||
'admin.mcpTokens.subtitle': 'Správa API tokenů všech uživatelů',
|
||||
'admin.tabs.mcpTokens': 'MCP přístup',
|
||||
'admin.mcpTokens.title': 'MCP přístup',
|
||||
'admin.mcpTokens.subtitle': 'Správa OAuth relací a API tokenů všech uživatelů',
|
||||
'admin.mcpTokens.sectionTitle': 'API tokeny',
|
||||
'admin.mcpTokens.owner': 'Vlastník',
|
||||
'admin.mcpTokens.tokenName': 'Název tokenu',
|
||||
'admin.mcpTokens.created': 'Vytvořen',
|
||||
@@ -564,6 +628,17 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token smazán',
|
||||
'admin.mcpTokens.deleteError': 'Nepodařilo se smazat token',
|
||||
'admin.mcpTokens.loadError': 'Nepodařilo se načíst tokeny',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth relace',
|
||||
'admin.oauthSessions.clientName': 'Klient',
|
||||
'admin.oauthSessions.owner': 'Vlastník',
|
||||
'admin.oauthSessions.scopes': 'Oprávnění',
|
||||
'admin.oauthSessions.created': 'Vytvořeno',
|
||||
'admin.oauthSessions.empty': 'Žádné aktivní OAuth relace',
|
||||
'admin.oauthSessions.revokeTitle': 'Zrušit relaci',
|
||||
'admin.oauthSessions.revokeMessage': 'Tato OAuth relace bude okamžitě zrušena. Klient ztratí přístup k MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Relace zrušena',
|
||||
'admin.oauthSessions.revokeError': 'Nepodařilo se zrušit relaci',
|
||||
'admin.oauthSessions.loadError': 'Nepodařilo se načíst OAuth relace',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -663,6 +738,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Firemní volno',
|
||||
'vacay.companyHolidaysHint': 'Povolit označování dnů celofiremního volna',
|
||||
'vacay.companyHolidaysNoDeduct': 'Firemní volno se nezapočítává do nároku na dovolenou.',
|
||||
'vacay.weekStart': 'Týden začíná',
|
||||
'vacay.weekStartHint': 'Zvolte, zda týden začíná v pondělí nebo v neděli',
|
||||
'vacay.carryOver': 'Převod dovolené',
|
||||
'vacay.carryOverHint': 'Automaticky převádět zbývající dny do dalšího roku',
|
||||
'vacay.sharing': 'Sdílení',
|
||||
@@ -872,6 +949,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'Soubory',
|
||||
'inspector.filesCount': '{count} souborů',
|
||||
'inspector.removeFromDay': 'Odebrat ze dne',
|
||||
'inspector.remove': 'Odstranit',
|
||||
'inspector.addToDay': 'Přidat ke dni',
|
||||
'inspector.confirmedRes': 'Potvrzená rezervace',
|
||||
'inspector.pendingRes': 'Čekající rezervace',
|
||||
@@ -1012,6 +1090,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'Celkový rozpočet',
|
||||
'budget.byCategory': 'Podle kategorie',
|
||||
'budget.editTooltip': 'Klikněte pro úpravu',
|
||||
'budget.linkedToReservation': 'Propojeno s rezervací — název upravte tam',
|
||||
'budget.confirm.deleteCategory': 'Opravdu chcete smazat kategorii „{name}” s {count} položkami?',
|
||||
'budget.deleteCategory': 'Smazat kategorii',
|
||||
'budget.perPerson': 'Na osobu',
|
||||
@@ -1021,9 +1100,13 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.settlement': 'Vyúčtování',
|
||||
'budget.settlementInfo': 'Klikněte na avatar člena u rozpočtové položky pro zelené označení – to znamená, že zaplatil. Vyúčtování pak ukazuje, kdo komu a kolik dluží.',
|
||||
'budget.netBalances': 'Čisté zůstatky',
|
||||
'budget.linkedToReservation': 'Propojeno s rezervací — upravte název tam',
|
||||
|
||||
// Soubory (Files)
|
||||
'files.title': 'Soubory',
|
||||
'files.pageTitle': 'Soubory a dokumenty',
|
||||
'files.subtitle': '{count} souborů pro {trip}',
|
||||
'files.downloadPdf': 'Stáhnout PDF',
|
||||
'files.count': '{count} souborů',
|
||||
'files.countSingular': '1 soubor',
|
||||
'files.uploaded': '{count} nahráno',
|
||||
@@ -1102,7 +1185,6 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'Označit vše',
|
||||
'packing.menuUncheckAll': 'Odznačit vše',
|
||||
'packing.menuDeleteCat': 'Smazat kategorii',
|
||||
'packing.assignUser': 'Přiřadit uživateli',
|
||||
'packing.noMembers': 'Žádní členové cesty',
|
||||
'packing.addItem': 'Přidat položku',
|
||||
'packing.addItemPlaceholder': 'Název položky...',
|
||||
@@ -1112,6 +1194,9 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'Šablona',
|
||||
'packing.templateApplied': '{count} položek přidáno ze šablony',
|
||||
'packing.templateError': 'Šablonu se nepodařilo použít',
|
||||
'packing.saveAsTemplate': 'Uložit jako šablonu',
|
||||
'packing.templateName': 'Název šablony',
|
||||
'packing.templateSaved': 'Seznam balení uložen jako šablona',
|
||||
'packing.bags': 'Zavazadla',
|
||||
'packing.noBag': 'Nepřiřazeno',
|
||||
'packing.totalWeight': 'Celková váha',
|
||||
@@ -1267,6 +1352,13 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Uchovávat navždy',
|
||||
|
||||
// Fotky
|
||||
'photos.title': 'Fotografie',
|
||||
'photos.subtitle': '{count} fotek pro {trip}',
|
||||
'photos.dropHere': 'Přetáhněte fotografie sem...',
|
||||
'photos.dropHereActive': 'Přetáhněte fotografie sem',
|
||||
'photos.captionForAll': 'Popisek (pro všechny)',
|
||||
'photos.captionPlaceholder': 'Volitelný popisek...',
|
||||
'photos.addCaption': 'Přidat popisek...',
|
||||
'photos.allDays': 'Všechny dny',
|
||||
'photos.noPhotos': 'Zatím žádné fotky',
|
||||
'photos.uploadHint': 'Nahrajte své cestovní fotky',
|
||||
@@ -1274,6 +1366,12 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Propojit s místem',
|
||||
'photos.noPlace': 'Žádné místo',
|
||||
'photos.uploadN': 'Nahrát {n} fotek',
|
||||
'photos.linkDay': 'Propojit den',
|
||||
'photos.noDay': 'Žádný den',
|
||||
'photos.dayLabel': 'Den {number}',
|
||||
'photos.photoSelected': 'Fotografie vybrána',
|
||||
'photos.photosSelected': 'Fotografie vybrány',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · až 30 fotografií',
|
||||
|
||||
// Obnovení zálohy
|
||||
'backup.restoreConfirmTitle': 'Obnovit zálohu?',
|
||||
@@ -1300,6 +1398,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Trasa vypočtena',
|
||||
'planner.routeCalcFailed': 'Trasu se nepodařilo vypočítat',
|
||||
'planner.routeError': 'Chyba při výpočtu trasy',
|
||||
'planner.icsExportFailed': 'Export ICS se nezdařil',
|
||||
'planner.routeOptimized': 'Trasa optimalizována',
|
||||
'planner.reservationUpdated': 'Rezervace aktualizována',
|
||||
'planner.reservationAdded': 'Rezervace přidána',
|
||||
@@ -1385,6 +1484,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Fotky',
|
||||
'memories.notConnected': 'Immich není připojen',
|
||||
'memories.notConnectedHint': 'Připojte svoji instanci Immich v Nastavení, abyste zde viděli fotky z cest.',
|
||||
'memories.notConnectedMultipleHint': 'Pro přidání fotek k tomuto výletu připojte v Nastavení jednoho z těchto poskytovatelů fotek: {provider_names}.',
|
||||
'memories.noDates': 'Přidejte data k cestě pro načtení fotek.',
|
||||
'memories.noPhotos': 'Nenalezeny žádné fotky',
|
||||
'memories.noPhotosHint': 'V Immich nebyly nalezeny žádné fotky pro období této cesty.',
|
||||
@@ -1395,23 +1495,32 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Zkontrolujte své fotky',
|
||||
'memories.reviewHint': 'Klikněte na fotky pro vyloučení ze sdílení.',
|
||||
'memories.shareCount': 'Sdílet {count} fotek',
|
||||
'memories.immichUrl': 'URL serveru Immich',
|
||||
'memories.immichApiKey': 'API klíč',
|
||||
'memories.providerUrl': 'URL serveru',
|
||||
'memories.providerApiKey': 'API klíč',
|
||||
'memories.providerUsername': 'Uživatelské jméno',
|
||||
'memories.providerPassword': 'Heslo',
|
||||
'memories.providerOTP': 'MFA kód (pokud je povoleno)',
|
||||
'memories.skipSSLVerification': 'Přeskočit ověření SSL certifikátu',
|
||||
'memories.providerUrlHintSynology': 'Zahrňte cestu aplikace Photos do URL, např. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Otestovat připojení',
|
||||
'memories.testFirst': 'Nejprve otestujte připojení',
|
||||
'memories.connected': 'Připojeno',
|
||||
'memories.disconnected': 'Nepřipojeno',
|
||||
'memories.connectionSuccess': 'Připojeno k Immich',
|
||||
'memories.connectionError': 'Nepodařilo se připojit k Immich',
|
||||
'memories.saved': 'Nastavení Immich uloženo',
|
||||
'memories.saved': 'Nastavení {provider_name} uloženo',
|
||||
'memories.providerDisconnectedBanner': 'Vaše připojení k {provider_name} bylo ztraceno. Obnovte připojení v Nastavení pro zobrazení fotek.',
|
||||
'memories.saveError': 'Nepodařilo se uložit nastavení {provider_name}',
|
||||
'memories.addPhotos': 'Přidat fotky',
|
||||
'memories.linkAlbum': 'Propojit album',
|
||||
'memories.selectAlbum': 'Vybrat album z Immich',
|
||||
'memories.selectAlbumMultiple': 'Vybrat album',
|
||||
'memories.noAlbums': 'Žádná alba nenalezena',
|
||||
'memories.syncAlbum': 'Synchronizovat album',
|
||||
'memories.unlinkAlbum': 'Odpojit',
|
||||
'memories.photos': 'fotek',
|
||||
'memories.selectPhotos': 'Vybrat fotky z Immich',
|
||||
'memories.selectPhotosMultiple': 'Vybrat fotky',
|
||||
'memories.selectHint': 'Klepněte na fotky pro jejich výběr.',
|
||||
'memories.selected': 'vybráno',
|
||||
'memories.addSelected': 'Přidat {count} fotek',
|
||||
@@ -1572,6 +1681,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Označit jako nepřečtené',
|
||||
'notifications.delete': 'Smazat',
|
||||
'notifications.system': 'Systém',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos odpojeno',
|
||||
'notifications.synologySessionCleared.text': 'Váš server nebo účet se změnil — přejděte do Nastavení a znovu otestujte připojení.',
|
||||
'settings.mustChangePassword': 'Před pokračováním musíte změnit heslo.',
|
||||
'atlas.searchCountry': 'Hledat zemi...',
|
||||
'memories.error.loadAlbums': 'Načtení alb se nezdařilo',
|
||||
@@ -1696,6 +1807,309 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Máte nové oznámení',
|
||||
'notif.dev.unknown_event.title': '[DEV] Neznámá událost',
|
||||
'notif.dev.unknown_event.text': 'Typ události "{event}" není registrován v EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'právě teď',
|
||||
'common.hoursAgo': 'před {count} h',
|
||||
'common.daysAgo': 'před {count} d',
|
||||
'budget.linkedToReservation': 'Propojeno s rezervací — upravte název tam',
|
||||
'packing.saveAsTemplate': 'Uložit jako šablonu',
|
||||
'packing.templateName': 'Název šablony',
|
||||
'packing.templateSaved': 'Balicí seznam uložen jako šablona',
|
||||
'memories.notConnectedMultipleHint': 'Připojte některého z těchto poskytovatelů fotek: {provider_names} v Nastavení, abyste mohli přidávat fotky k tomuto výletu.',
|
||||
'memories.providerUrl': 'URL serveru',
|
||||
'memories.providerApiKey': 'API klíč',
|
||||
'memories.providerUsername': 'Uživatelské jméno',
|
||||
'memories.providerPassword': 'Heslo',
|
||||
'memories.saveError': 'Nepodařilo se uložit nastavení {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'Trasa uložení není nakonfigurována pro tohoto poskytovatele',
|
||||
'memories.testRouteNotConfigured': 'Testovací trasa není nakonfigurována pro tohoto poskytovatele',
|
||||
'memories.fillRequiredFields': 'Prosím vyplňte všechna povinná pole',
|
||||
'memories.selectAlbumMultiple': 'Vybrat album',
|
||||
'memories.selectPhotosMultiple': 'Vybrat fotky',
|
||||
'journey.title': 'Cestovní deník',
|
||||
'journey.subtitle': 'Zaznamenávejte své cesty průběžně',
|
||||
'journey.new': 'Nový cestovní deník',
|
||||
'journey.create': 'Vytvořit',
|
||||
'journey.titlePlaceholder': 'Kam jedete?',
|
||||
'journey.empty': 'Zatím žádné cestovní deníky',
|
||||
'journey.emptyHint': 'Začněte dokumentovat svůj další výlet',
|
||||
'journey.deleted': 'Cestovní deník smazán',
|
||||
'journey.createError': 'Nepodařilo se vytvořit cestovní deník',
|
||||
'journey.deleteError': 'Nepodařilo se smazat cestovní deník',
|
||||
'journey.deleteConfirmTitle': 'Smazat',
|
||||
'journey.deleteConfirmMessage': 'Smazat „{title}"? Tuto akci nelze vrátit zpět.',
|
||||
'journey.deleteConfirmGeneric': 'Opravdu to chcete smazat?',
|
||||
'journey.notFound': 'Cestovní deník nenalezen',
|
||||
'journey.photos': 'Fotky',
|
||||
'journey.timelineEmpty': 'Zatím žádné zastávky',
|
||||
'journey.timelineEmptyHint': 'Přidejte odbavení nebo napište záznam do deníku',
|
||||
'journey.status.draft': 'Koncept',
|
||||
'journey.status.active': 'Aktivní',
|
||||
'journey.status.completed': 'Dokončeno',
|
||||
'journey.status.upcoming': 'Nadcházející',
|
||||
'journey.checkin.add': 'Odbavit se',
|
||||
'journey.checkin.namePlaceholder': 'Název místa',
|
||||
'journey.checkin.notesPlaceholder': 'Poznámky (volitelné)',
|
||||
'journey.checkin.save': 'Uložit',
|
||||
'journey.checkin.error': 'Nepodařilo se uložit odbavení',
|
||||
'journey.entry.add': 'Deník',
|
||||
'journey.entry.edit': 'Upravit záznam',
|
||||
'journey.entry.titlePlaceholder': 'Název (volitelný)',
|
||||
'journey.entry.bodyPlaceholder': 'Co se dnes stalo?',
|
||||
'journey.entry.save': 'Uložit',
|
||||
'journey.entry.error': 'Nepodařilo se uložit záznam',
|
||||
'journey.photo.add': 'Fotka',
|
||||
'journey.photo.uploadError': 'Nahrávání selhalo',
|
||||
'journey.share.share': 'Sdílet',
|
||||
'journey.share.public': 'Veřejný',
|
||||
'journey.share.linkCopied': 'Veřejný odkaz zkopírován',
|
||||
'journey.share.disabled': 'Veřejné sdílení vypnuto',
|
||||
'journey.editor.titlePlaceholder': 'Pojmenujte tento okamžik...',
|
||||
'journey.editor.bodyPlaceholder': 'Vyprávějte příběh tohoto dne...',
|
||||
'journey.editor.placePlaceholder': 'Místo (volitelné)',
|
||||
'journey.editor.tagsPlaceholder': 'Tagy: skrytý klenot, nejlepší jídlo, musím se vrátit...',
|
||||
'journey.visibility.private': 'Soukromý',
|
||||
'journey.visibility.shared': 'Sdílený',
|
||||
'journey.visibility.public': 'Veřejný',
|
||||
'journey.emptyState.title': 'Váš příběh začíná zde',
|
||||
'journey.emptyState.subtitle': 'Odbavte se na místě nebo napište svůj první záznam do deníku',
|
||||
'journey.frontpage.subtitle': 'Proměňte své cesty v příběhy, na které nikdy nezapomenete',
|
||||
'journey.frontpage.createJourney': 'Vytvořit cestovní deník',
|
||||
'journey.frontpage.activeJourney': 'Aktivní cestovní deník',
|
||||
'journey.frontpage.allJourneys': 'Všechny cestovní deníky',
|
||||
'journey.frontpage.journeys': 'cestovní deníky',
|
||||
'journey.frontpage.createNew': 'Vytvořit nový cestovní deník',
|
||||
'journey.frontpage.createNewSub': 'Vyberte cesty, pište příběhy, sdílejte dobrodružství',
|
||||
'journey.frontpage.live': 'Živě',
|
||||
'journey.frontpage.synced': 'Synchronizováno',
|
||||
'journey.frontpage.continueWriting': 'Pokračovat v psaní',
|
||||
'journey.frontpage.updated': 'Aktualizováno {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Cesta právě skončila',
|
||||
'journey.frontpage.suggestionText': 'Proměňte <strong>{title}</strong> v cestovní deník',
|
||||
'journey.frontpage.dismiss': 'Zavřít',
|
||||
'journey.frontpage.journeyName': 'Název cestovního deníku',
|
||||
'journey.frontpage.namePlaceholder': 'např. Jihovýchodní Asie 2026',
|
||||
'journey.frontpage.selectTrips': 'Vybrat cesty',
|
||||
'journey.frontpage.tripsSelected': 'cest vybráno',
|
||||
'journey.frontpage.trips': 'cesty',
|
||||
'journey.frontpage.placesImported': 'míst bude importováno',
|
||||
'journey.frontpage.places': 'místa',
|
||||
'journey.detail.backToJourney': 'Zpět na cestovní deník',
|
||||
'journey.detail.syncedWithTrips': 'Synchronizováno s cestami',
|
||||
'journey.detail.addEntry': 'Přidat záznam',
|
||||
'journey.detail.newEntry': 'Nový záznam',
|
||||
'journey.detail.editEntry': 'Upravit záznam',
|
||||
'journey.detail.noEntries': 'Zatím žádné záznamy',
|
||||
'journey.detail.noEntriesHint': 'Přidejte cestu pro začátek s kostrovými záznamy',
|
||||
'journey.detail.noPhotos': 'Zatím žádné fotky',
|
||||
'journey.detail.noPhotosHint': 'Nahrajte fotky k záznamům nebo procházejte knihovnu Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Statistiky cesty',
|
||||
'journey.detail.syncedTrips': 'Synchronizované cesty',
|
||||
'journey.detail.noTripsLinked': 'Zatím žádné propojené cesty',
|
||||
'journey.detail.contributors': 'Přispěvatelé',
|
||||
'journey.detail.readMore': 'Číst dále',
|
||||
'journey.detail.prosCons': 'Klady a zápory',
|
||||
'journey.stats.days': 'Dny',
|
||||
'journey.stats.cities': 'Města',
|
||||
'journey.stats.entries': 'Záznamy',
|
||||
'journey.stats.photos': 'Fotky',
|
||||
'journey.stats.places': 'Místa',
|
||||
'journey.verdict.lovedIt': 'Skvělé',
|
||||
'journey.verdict.couldBeBetter': 'Mohlo by být lepší',
|
||||
'journey.synced.places': 'místa',
|
||||
'journey.synced.synced': 'synchronizováno',
|
||||
'journey.editor.uploadPhotos': 'Nahrát fotky',
|
||||
'journey.editor.fromGallery': 'Z galerie',
|
||||
'journey.editor.allPhotosAdded': 'Všechny fotky již přidány',
|
||||
'journey.editor.writeStory': 'Napište svůj příběh...',
|
||||
'journey.editor.prosCons': 'Klady a zápory',
|
||||
'journey.editor.pros': 'Klady',
|
||||
'journey.editor.cons': 'Zápory',
|
||||
'journey.editor.proPlaceholder': 'Něco skvělého...',
|
||||
'journey.editor.conPlaceholder': 'Ne tak skvělé...',
|
||||
'journey.editor.addAnother': 'Přidat další',
|
||||
'journey.editor.date': 'Datum',
|
||||
'journey.editor.location': 'Místo',
|
||||
'journey.editor.searchLocation': 'Hledat místo...',
|
||||
'journey.editor.mood': 'Nálada',
|
||||
'journey.editor.weather': 'Počasí',
|
||||
'journey.editor.photoFirst': '1.',
|
||||
'journey.editor.makeFirst': 'Nastavit jako 1.',
|
||||
'journey.mood.amazing': 'Úžasný',
|
||||
'journey.mood.good': 'Dobrý',
|
||||
'journey.mood.neutral': 'Neutrální',
|
||||
'journey.mood.rough': 'Těžký',
|
||||
'journey.weather.sunny': 'Slunečno',
|
||||
'journey.weather.partly': 'Polojasno',
|
||||
'journey.weather.cloudy': 'Zataženo',
|
||||
'journey.weather.rainy': 'Deštivo',
|
||||
'journey.weather.stormy': 'Bouřlivo',
|
||||
'journey.weather.cold': 'Sněžení',
|
||||
'journey.trips.linkTrip': 'Propojit cestu',
|
||||
'journey.trips.searchTrip': 'Hledat cestu',
|
||||
'journey.trips.searchPlaceholder': 'Název cesty nebo cíl...',
|
||||
'journey.trips.noTripsAvailable': 'Žádné dostupné cesty',
|
||||
'journey.trips.link': 'Propojit',
|
||||
'journey.trips.tripLinked': 'Cesta propojena',
|
||||
'journey.trips.linkFailed': 'Propojení cesty selhalo',
|
||||
'journey.trips.addTrip': 'Přidat cestu',
|
||||
'journey.trips.unlinkTrip': 'Odpojit cestu',
|
||||
'journey.trips.unlinkMessage': 'Odpojit „{title}"? Všechny synchronizované záznamy a fotky z této cesty budou trvale smazány. Tuto akci nelze vrátit zpět.',
|
||||
'journey.trips.unlink': 'Odpojit',
|
||||
'journey.trips.tripUnlinked': 'Cesta odpojena',
|
||||
'journey.trips.unlinkFailed': 'Odpojení cesty selhalo',
|
||||
'journey.trips.noTripsLinkedSettings': 'Žádné propojené cesty',
|
||||
'journey.contributors.invite': 'Pozvat přispěvatele',
|
||||
'journey.contributors.searchUser': 'Hledat uživatele',
|
||||
'journey.contributors.searchPlaceholder': 'Uživatelské jméno nebo e-mail...',
|
||||
'journey.contributors.noUsers': 'Žádní uživatelé nenalezeni',
|
||||
'journey.contributors.role': 'Role',
|
||||
'journey.contributors.added': 'Přispěvatel přidán',
|
||||
'journey.contributors.addFailed': 'Přidání přispěvatele selhalo',
|
||||
'journey.share.publicShare': 'Veřejné sdílení',
|
||||
'journey.share.createLink': 'Vytvořit odkaz ke sdílení',
|
||||
'journey.share.linkCreated': 'Odkaz ke sdílení vytvořen',
|
||||
'journey.share.createFailed': 'Vytvoření odkazu selhalo',
|
||||
'journey.share.copy': 'Kopírovat',
|
||||
'journey.share.copied': 'Zkopírováno!',
|
||||
'journey.share.timeline': 'Časová osa',
|
||||
'journey.share.gallery': 'Galerie',
|
||||
'journey.share.map': 'Mapa',
|
||||
'journey.share.removeLink': 'Odstranit odkaz ke sdílení',
|
||||
'journey.share.linkDeleted': 'Odkaz ke sdílení smazán',
|
||||
'journey.share.deleteFailed': 'Smazání selhalo',
|
||||
'journey.share.updateFailed': 'Aktualizace selhala',
|
||||
'journey.settings.title': 'Nastavení cestovního deníku',
|
||||
'journey.settings.coverImage': 'Titulní obrázek',
|
||||
'journey.settings.changeCover': 'Změnit obal',
|
||||
'journey.settings.addCover': 'Přidat titulní obrázek',
|
||||
'journey.settings.name': 'Název',
|
||||
'journey.settings.subtitle': 'Podtitul',
|
||||
'journey.settings.subtitlePlaceholder': 'např. Thajsko, Vietnam a Kambodža',
|
||||
'journey.settings.delete': 'Smazat',
|
||||
'journey.settings.deleteJourney': 'Smazat cestovní deník',
|
||||
'journey.settings.deleteMessage': 'Smazat „{title}"? Všechny záznamy a fotky budou ztraceny.',
|
||||
'journey.settings.saved': 'Nastavení uloženo',
|
||||
'journey.settings.saveFailed': 'Uložení selhalo',
|
||||
'journey.settings.coverUpdated': 'Obal aktualizován',
|
||||
'journey.settings.coverFailed': 'Nahrávání selhalo',
|
||||
'journey.settings.failedToDelete': 'Smazání se nezdařilo',
|
||||
'journey.entries.deleteTitle': 'Smazat záznam',
|
||||
'journey.photosUploaded': '{count} fotografií nahráno',
|
||||
'journey.photosAdded': '{count} fotografií přidáno',
|
||||
'journey.public.notFound': 'Nenalezeno',
|
||||
'journey.public.notFoundMessage': 'Tento cestovní deník neexistuje nebo odkaz vypršel.',
|
||||
'journey.public.readOnly': 'Pouze ke čtení · Veřejný cestovní deník',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Sdíleno přes',
|
||||
'journey.public.madeWith': 'Vytvořeno pomocí',
|
||||
'journey.pdf.journeyBook': 'Cestovní kniha',
|
||||
'journey.pdf.madeWith': 'Vytvořeno pomocí TREK',
|
||||
'journey.pdf.day': 'Den',
|
||||
'journey.pdf.theEnd': 'Konec',
|
||||
'journey.pdf.saveAsPdf': 'Uložit jako PDF',
|
||||
'journey.pdf.pages': 'stran',
|
||||
'dashboard.greeting.morning': 'Dobré ráno,',
|
||||
'dashboard.greeting.afternoon': 'Dobré odpoledne,',
|
||||
'dashboard.greeting.evening': 'Dobrý večer,',
|
||||
'dashboard.mobile.liveNow': 'Živě',
|
||||
'dashboard.mobile.tripProgress': 'Průběh cesty',
|
||||
'dashboard.mobile.daysLeft': 'Zbývá {count} dní',
|
||||
'dashboard.mobile.places': 'Místa',
|
||||
'dashboard.mobile.buddies': 'Spolucestující',
|
||||
'dashboard.mobile.newTrip': 'Nová cesta',
|
||||
'dashboard.mobile.currency': 'Měna',
|
||||
'dashboard.mobile.timezone': 'Časové pásmo',
|
||||
'dashboard.mobile.upcomingTrips': 'Nadcházející cesty',
|
||||
'dashboard.mobile.yourTrips': 'Vaše cesty',
|
||||
'dashboard.mobile.trips': 'cesty',
|
||||
'dashboard.mobile.starts': 'Začátek',
|
||||
'dashboard.mobile.duration': 'Doba trvání',
|
||||
'dashboard.mobile.day': 'den',
|
||||
'dashboard.mobile.days': 'dní',
|
||||
'dashboard.mobile.ongoing': 'Probíhající',
|
||||
'dashboard.mobile.startsToday': 'Začíná dnes',
|
||||
'dashboard.mobile.tomorrow': 'Zítra',
|
||||
'dashboard.mobile.inDays': 'Za {count} dní',
|
||||
'dashboard.mobile.inMonths': 'Za {count} měsíců',
|
||||
'dashboard.mobile.completed': 'Dokončeno',
|
||||
'dashboard.mobile.currencyConverter': 'Převodník měn',
|
||||
'nav.profile': 'Profil',
|
||||
'nav.bottomSettings': 'Nastavení',
|
||||
'nav.bottomAdmin': 'Nastavení správce',
|
||||
'nav.bottomLogout': 'Odhlásit se',
|
||||
'nav.bottomAdminBadge': 'Správce',
|
||||
'dayplan.mobile.addPlace': 'Přidat místo',
|
||||
'dayplan.mobile.searchPlaces': 'Hledat místa...',
|
||||
'dayplan.mobile.allAssigned': 'Všechna místa přiřazena',
|
||||
'dayplan.mobile.noMatch': 'Žádná shoda',
|
||||
'dayplan.mobile.createNew': 'Vytvořit nové místo',
|
||||
'admin.addons.catalog.journey.name': 'Cestovní deník',
|
||||
'admin.addons.catalog.journey.description': 'Sledování cest a cestovní deník s odbaveními, fotkami a denními příběhy',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Výlety',
|
||||
'oauth.scope.group.places': 'Místa',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Balení',
|
||||
'oauth.scope.group.todos': 'Úkoly',
|
||||
'oauth.scope.group.budget': 'Rozpočet',
|
||||
'oauth.scope.group.reservations': 'Rezervace',
|
||||
'oauth.scope.group.collab': 'Spolupráce',
|
||||
'oauth.scope.group.notifications': 'Oznámení',
|
||||
'oauth.scope.group.vacay': 'Dovolená',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Počasí',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Zobrazit výlety a itineráře',
|
||||
'oauth.scope.trips:read.description': 'Číst výlety, dny, poznámky a členy',
|
||||
'oauth.scope.trips:write.label': 'Upravit výlety a itineráře',
|
||||
'oauth.scope.trips:write.description': 'Vytvářet a aktualizovat výlety, dny, poznámky a spravovat členy',
|
||||
'oauth.scope.trips:delete.label': 'Mazat výlety',
|
||||
'oauth.scope.trips:delete.description': 'Trvale smazat celé výlety — tato akce je nevratná',
|
||||
'oauth.scope.trips:share.label': 'Spravovat sdílené odkazy',
|
||||
'oauth.scope.trips:share.description': 'Vytvářet, aktualizovat a rušit veřejné sdílené odkazy',
|
||||
'oauth.scope.places:read.label': 'Zobrazit místa a mapová data',
|
||||
'oauth.scope.places:read.description': 'Číst místa, denní přiřazení, štítky a kategorie',
|
||||
'oauth.scope.places:write.label': 'Spravovat místa',
|
||||
'oauth.scope.places:write.description': 'Vytvářet, aktualizovat a mazat místa, přiřazení a štítky',
|
||||
'oauth.scope.atlas:read.label': 'Zobrazit Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Číst navštívené země, regiony a seznam přání',
|
||||
'oauth.scope.atlas:write.label': 'Spravovat Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Označovat navštívené země a regiony, spravovat seznam přání',
|
||||
'oauth.scope.packing:read.label': 'Zobrazit seznamy balení',
|
||||
'oauth.scope.packing:read.description': 'Číst položky, tašky a přiřazení kategorií',
|
||||
'oauth.scope.packing:write.label': 'Spravovat seznamy balení',
|
||||
'oauth.scope.packing:write.description': 'Přidávat, aktualizovat, mazat, označovat a řadit položky a tašky',
|
||||
'oauth.scope.todos:read.label': 'Zobrazit seznamy úkolů',
|
||||
'oauth.scope.todos:read.description': 'Číst úkoly výletu a přiřazení kategorií',
|
||||
'oauth.scope.todos:write.label': 'Spravovat seznamy úkolů',
|
||||
'oauth.scope.todos:write.description': 'Vytvářet, aktualizovat, označovat, mazat a řadit úkoly',
|
||||
'oauth.scope.budget:read.label': 'Zobrazit rozpočet',
|
||||
'oauth.scope.budget:read.description': 'Číst položky rozpočtu a přehled výdajů',
|
||||
'oauth.scope.budget:write.label': 'Spravovat rozpočet',
|
||||
'oauth.scope.budget:write.description': 'Vytvářet, aktualizovat a mazat položky rozpočtu',
|
||||
'oauth.scope.reservations:read.label': 'Zobrazit rezervace',
|
||||
'oauth.scope.reservations:read.description': 'Číst rezervace a podrobnosti ubytování',
|
||||
'oauth.scope.reservations:write.label': 'Spravovat rezervace',
|
||||
'oauth.scope.reservations:write.description': 'Vytvářet, aktualizovat, mazat a řadit rezervace',
|
||||
'oauth.scope.collab:read.label': 'Zobrazit spolupráci',
|
||||
'oauth.scope.collab:read.description': 'Číst poznámky, ankety a zprávy spolupráce',
|
||||
'oauth.scope.collab:write.label': 'Spravovat spolupráci',
|
||||
'oauth.scope.collab:write.description': 'Vytvářet, aktualizovat a mazat poznámky, ankety a zprávy',
|
||||
'oauth.scope.notifications:read.label': 'Zobrazit oznámení',
|
||||
'oauth.scope.notifications:read.description': 'Číst oznámení v aplikaci a počty nepřečtených',
|
||||
'oauth.scope.notifications:write.label': 'Spravovat oznámení',
|
||||
'oauth.scope.notifications:write.description': 'Označovat oznámení jako přečtená a reagovat na ně',
|
||||
'oauth.scope.vacay:read.label': 'Zobrazit plány dovolené',
|
||||
'oauth.scope.vacay:read.description': 'Číst data plánování dovolené, záznamy a statistiky',
|
||||
'oauth.scope.vacay:write.label': 'Spravovat plány dovolené',
|
||||
'oauth.scope.vacay:write.description': 'Vytvářet a spravovat záznamy dovolené, svátky a týmové plány',
|
||||
'oauth.scope.geo:read.label': 'Mapy a geokódování',
|
||||
'oauth.scope.geo:read.description': 'Vyhledávat místa, řešit URL map a zpětně geokódovat souřadnice',
|
||||
'oauth.scope.weather:read.label': 'Předpovědi počasí',
|
||||
'oauth.scope.weather:read.description': 'Získávat předpovědi počasí pro místa a data výletu',
|
||||
}
|
||||
|
||||
export default cs
|
||||
|
||||
@@ -8,6 +8,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Laden...',
|
||||
'common.import': 'Importieren',
|
||||
'common.error': 'Fehler',
|
||||
'common.unknownError': 'Unbekannter Fehler',
|
||||
'common.tooManyAttempts': 'Zu viele Versuche. Bitte versuchen Sie es später erneut.',
|
||||
'common.back': 'Zurück',
|
||||
'common.all': 'Alle',
|
||||
'common.close': 'Schließen',
|
||||
@@ -26,12 +28,21 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.email': 'E-Mail',
|
||||
'common.password': 'Passwort',
|
||||
'common.saving': 'Speichern...',
|
||||
'common.expand': 'Erweitern',
|
||||
'common.collapse': 'Einklappen',
|
||||
'common.justNow': 'gerade eben',
|
||||
'common.hoursAgo': 'vor {count}h',
|
||||
'common.daysAgo': 'vor {count}T',
|
||||
'common.saved': 'Gespeichert',
|
||||
'trips.reminder': 'Erinnerung',
|
||||
'trips.reminderNone': 'Keine',
|
||||
'trips.reminderDay': 'Tag',
|
||||
'trips.reminderDays': 'Tage',
|
||||
'trips.reminderCustom': 'Benutzerdefiniert',
|
||||
'trips.memberRemoved': '{username} entfernt',
|
||||
'trips.memberRemoveError': 'Entfernen fehlgeschlagen',
|
||||
'trips.memberAdded': '{username} hinzugefügt',
|
||||
'trips.memberAddError': 'Hinzufügen fehlgeschlagen',
|
||||
'trips.reminderDaysBefore': 'Tage vor Abreise',
|
||||
'trips.reminderDisabledHint': 'Reiseerinnerungen sind deaktiviert. Aktivieren Sie sie unter Admin > Einstellungen > Benachrichtigungen.',
|
||||
'common.update': 'Aktualisieren',
|
||||
@@ -179,9 +190,6 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'Deaktiviert',
|
||||
'admin.notifications.email': 'E-Mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Benachrichtigungsereignisse',
|
||||
'admin.notifications.eventsHint': 'Wähle, welche Ereignisse Benachrichtigungen für alle Benutzer auslösen.',
|
||||
'admin.notifications.configureFirst': 'Konfiguriere zuerst die SMTP- oder Webhook-Einstellungen unten, dann aktiviere die Events.',
|
||||
'admin.notifications.save': 'Benachrichtigungseinstellungen speichern',
|
||||
'admin.notifications.saved': 'Benachrichtigungseinstellungen gespeichert',
|
||||
'admin.notifications.testWebhook': 'Test-Webhook senden',
|
||||
@@ -228,6 +236,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'MCP-Endpunkt',
|
||||
'settings.mcp.clientConfig': 'Client-Konfiguration',
|
||||
'settings.mcp.clientConfigHint': 'Ersetze <your_token> durch ein API-Token aus der Liste unten. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Ersetze <your_client_id> und <your_client_secret> durch die Zugangsdaten des oben erstellten OAuth 2.1-Clients. mcp-remote öffnet beim ersten Verbindungsaufbau deinen Browser zur Autorisierung. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).',
|
||||
'settings.mcp.copy': 'Kopieren',
|
||||
'settings.mcp.copied': 'Kopiert!',
|
||||
'settings.mcp.apiTokens': 'API-Tokens',
|
||||
@@ -249,6 +258,48 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Token konnte nicht erstellt werden',
|
||||
'settings.mcp.toast.deleted': 'Token gelöscht',
|
||||
'settings.mcp.toast.deleteError': 'Token konnte nicht gelöscht werden',
|
||||
'settings.mcp.apiTokensDeprecated': 'API-Tokens sind veraltet und werden in einer zukünftigen Version entfernt. Bitte verwende stattdessen OAuth 2.1-Clients.',
|
||||
'settings.oauth.clients': 'OAuth 2.1-Clients',
|
||||
'settings.oauth.clientsHint': 'Registriere OAuth 2.1-Clients, damit externe MCP-Anwendungen (Claude Web, Cursor usw.) sich ohne statische Tokens verbinden können.',
|
||||
'settings.oauth.createClient': 'Neuer Client',
|
||||
'settings.oauth.noClients': 'Keine OAuth-Clients registriert.',
|
||||
'settings.oauth.clientId': 'Client-ID',
|
||||
'settings.oauth.clientSecret': 'Client-Secret',
|
||||
'settings.oauth.deleteClient': 'Client löschen',
|
||||
'settings.oauth.deleteClientMessage': 'Dieser Client und alle aktiven Sessions werden dauerhaft entfernt. Jede Anwendung, die ihn nutzt, verliert sofort den Zugriff.',
|
||||
'settings.oauth.rotateSecret': 'Secret erneuern',
|
||||
'settings.oauth.rotateSecretMessage': 'Ein neues Client-Secret wird generiert und alle bestehenden Sessions werden sofort ungültig. Aktualisiere deine Anwendung, bevor du diesen Dialog schließt.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Erneuern',
|
||||
'settings.oauth.rotateSecretConfirming': 'Wird erneuert…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Neues Secret generiert',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Dieses Secret wird nur einmal angezeigt. Kopiere es jetzt und aktualisiere deine Anwendung — alle vorherigen Sessions wurden ungültig gemacht.',
|
||||
'settings.oauth.activeSessions': 'Aktive OAuth-Sessions',
|
||||
'settings.oauth.sessionScopes': 'Berechtigungen',
|
||||
'settings.oauth.sessionExpires': 'Läuft ab',
|
||||
'settings.oauth.revoke': 'Widerrufen',
|
||||
'settings.oauth.revokeSession': 'Session widerrufen',
|
||||
'settings.oauth.revokeSessionMessage': 'Dadurch wird der Zugriff für diese OAuth-Session sofort widerrufen.',
|
||||
'settings.oauth.modal.createTitle': 'OAuth-Client registrieren',
|
||||
'settings.oauth.modal.presets': 'Schnellvorlagen',
|
||||
'settings.oauth.modal.clientName': 'Anwendungsname',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'z. B. Claude Web, Meine MCP-App',
|
||||
'settings.oauth.modal.redirectUris': 'Redirect-URIs',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Eine URI pro Zeile. HTTPS erforderlich (localhost ausgenommen). Exakte Übereinstimmung erforderlich.',
|
||||
'settings.oauth.modal.scopes': 'Erlaubte Berechtigungen',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips und get_trip_summary sind immer verfügbar — keine Berechtigung nötig. Sie helfen der KI, Trip-IDs zu ermitteln.',
|
||||
'settings.oauth.modal.selectAll': 'Alle auswählen',
|
||||
'settings.oauth.modal.deselectAll': 'Alle abwählen',
|
||||
'settings.oauth.modal.creating': 'Wird registriert…',
|
||||
'settings.oauth.modal.create': 'Client registrieren',
|
||||
'settings.oauth.modal.createdTitle': 'Client registriert',
|
||||
'settings.oauth.modal.createdWarning': 'Das Client-Secret wird nur einmal angezeigt. Kopiere es jetzt — es kann nicht wiederhergestellt werden.',
|
||||
'settings.oauth.toast.createError': 'OAuth-Client konnte nicht registriert werden',
|
||||
'settings.oauth.toast.deleted': 'OAuth-Client gelöscht',
|
||||
'settings.oauth.toast.deleteError': 'OAuth-Client konnte nicht gelöscht werden',
|
||||
'settings.oauth.toast.revoked': 'Session widerrufen',
|
||||
'settings.oauth.toast.revokeError': 'Session konnte nicht widerrufen werden',
|
||||
'settings.oauth.toast.rotateError': 'Client-Secret konnte nicht erneuert werden',
|
||||
'settings.account': 'Konto',
|
||||
'settings.about': 'Über',
|
||||
'settings.about.reportBug': 'Bug melden',
|
||||
@@ -371,6 +422,10 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Google Authenticator, Authy oder eine andere TOTP-App öffnen.',
|
||||
'login.mfaBack': '← Zurück zur Anmeldung',
|
||||
'login.mfaVerify': 'Bestätigen',
|
||||
'login.invalidInviteLink': 'Ungültiger oder abgelaufener Einladungslink',
|
||||
'login.oidcFailed': 'OIDC-Anmeldung fehlgeschlagen',
|
||||
'login.usernameRequired': 'Benutzername ist erforderlich',
|
||||
'login.passwordMinLength': 'Das Passwort muss mindestens 8 Zeichen lang sein',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'Passwörter stimmen nicht überein',
|
||||
@@ -450,15 +505,26 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Einstellungen',
|
||||
'admin.allowRegistration': 'Registrierung erlauben',
|
||||
'admin.allowRegistrationHint': 'Neue Benutzer können sich selbst registrieren',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Zwei-Faktor-Authentifizierung (2FA) für alle verlangen',
|
||||
'admin.requireMfaHint': 'Benutzer ohne 2FA müssen die Einrichtung unter Einstellungen abschließen, bevor sie die App nutzen können.',
|
||||
'admin.apiKeys': 'API-Schlüssel',
|
||||
'admin.apiKeysHint': 'Optional. Aktiviert erweiterte Ortsdaten wie Fotos und Wetter.',
|
||||
'admin.mapsKey': 'Google Maps API Key',
|
||||
'admin.mapsKey': 'Google Maps API-Schlüssel',
|
||||
'admin.mapsKeyHint': 'Für Ortsuche benötigt. Erstellen unter console.cloud.google.com',
|
||||
'admin.mapsKeyHintLong': 'Ohne API Key wird OpenStreetMap für die Ortssuche genutzt. Mit Google API Key können zusätzlich Bilder, Bewertungen und Öffnungszeiten geladen werden. Erstellen unter console.cloud.google.com.',
|
||||
'admin.recommended': 'Empfohlen',
|
||||
'admin.weatherKey': 'OpenWeatherMap API Key',
|
||||
'admin.weatherKey': 'OpenWeatherMap API-Schlüssel',
|
||||
'admin.weatherKeyHint': 'Für Wetterdaten. Kostenlos unter openweathermap.org',
|
||||
'admin.validateKey': 'Test',
|
||||
'admin.keyValid': 'Verbunden',
|
||||
@@ -526,7 +592,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.addons.subtitleAfter': ' nach deinen Wünschen anzupassen.',
|
||||
'admin.addons.enabled': 'Aktiviert',
|
||||
'admin.addons.disabled': 'Deaktiviert',
|
||||
'admin.addons.type.trip': 'Trip',
|
||||
'admin.addons.type.trip': 'Reise',
|
||||
'admin.addons.type.global': 'Global',
|
||||
'admin.addons.type.integration': 'Integration',
|
||||
'admin.addons.tripHint': 'Verfügbar als Tab innerhalb jedes Trips',
|
||||
@@ -548,9 +614,10 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.weather.locationHint': 'Das Wetter wird anhand des ersten Ortes mit Koordinaten im jeweiligen Tag berechnet. Ist kein Ort am Tag eingeplant, wird ein beliebiger Ort aus der Ortsliste als Referenz verwendet.',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP-Tokens',
|
||||
'admin.mcpTokens.title': 'MCP-Tokens',
|
||||
'admin.mcpTokens.subtitle': 'API-Tokens aller Benutzer verwalten',
|
||||
'admin.tabs.mcpTokens': 'MCP-Zugang',
|
||||
'admin.mcpTokens.title': 'MCP-Zugang',
|
||||
'admin.mcpTokens.subtitle': 'OAuth-Sitzungen und API-Tokens aller Benutzer verwalten',
|
||||
'admin.mcpTokens.sectionTitle': 'API-Tokens',
|
||||
'admin.mcpTokens.owner': 'Besitzer',
|
||||
'admin.mcpTokens.tokenName': 'Token-Name',
|
||||
'admin.mcpTokens.created': 'Erstellt',
|
||||
@@ -562,6 +629,17 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token gelöscht',
|
||||
'admin.mcpTokens.deleteError': 'Token konnte nicht gelöscht werden',
|
||||
'admin.mcpTokens.loadError': 'Tokens konnten nicht geladen werden',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth-Sitzungen',
|
||||
'admin.oauthSessions.clientName': 'Client',
|
||||
'admin.oauthSessions.owner': 'Besitzer',
|
||||
'admin.oauthSessions.scopes': 'Berechtigungen',
|
||||
'admin.oauthSessions.created': 'Erstellt',
|
||||
'admin.oauthSessions.empty': 'Keine aktiven OAuth-Sitzungen',
|
||||
'admin.oauthSessions.revokeTitle': 'Sitzung widerrufen',
|
||||
'admin.oauthSessions.revokeMessage': 'Diese OAuth-Sitzung wird sofort widerrufen. Der Client verliert den MCP-Zugang.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sitzung widerrufen',
|
||||
'admin.oauthSessions.revokeError': 'Sitzung konnte nicht widerrufen werden',
|
||||
'admin.oauthSessions.loadError': 'OAuth-Sitzungen konnten nicht geladen werden',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -661,6 +739,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Betriebsferien',
|
||||
'vacay.companyHolidaysHint': 'Erlaubt das Markieren von unternehmensweiten Feiertagen',
|
||||
'vacay.companyHolidaysNoDeduct': 'Betriebsferien werden nicht vom Urlaubskontingent abgezogen.',
|
||||
'vacay.weekStart': 'Woche beginnt am',
|
||||
'vacay.weekStartHint': 'Wähle ob die Kalenderwoche am Montag oder Sonntag beginnt',
|
||||
'vacay.carryOver': 'Urlaubsmitnahme',
|
||||
'vacay.carryOverHint': 'Resturlaub automatisch ins Folgejahr übertragen',
|
||||
'vacay.sharing': 'Teilen',
|
||||
@@ -718,7 +798,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'atlas.addToBucketHint': 'Als Wunschziel speichern',
|
||||
'atlas.bucketWhen': 'Wann möchtest du dorthin reisen?',
|
||||
'atlas.statsTab': 'Statistik',
|
||||
'atlas.bucketTab': 'Bucket List',
|
||||
'atlas.bucketTab': 'Wunschliste',
|
||||
'atlas.addBucket': 'Zur Bucket List hinzufügen',
|
||||
'atlas.bucketNotesPlaceholder': 'Notizen (optional)',
|
||||
'atlas.bucketEmpty': 'Deine Bucket List ist leer',
|
||||
@@ -731,7 +811,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'atlas.lastTrip': 'Letzter Trip',
|
||||
'atlas.nextTrip': 'Nächster Trip',
|
||||
'atlas.daysLeft': 'Tage',
|
||||
'atlas.streak': 'Streak',
|
||||
'atlas.streak': 'Serie',
|
||||
'atlas.years': 'Jahre',
|
||||
'atlas.yearInRow': 'Jahr in Folge',
|
||||
'atlas.yearsInRow': 'Jahre in Folge',
|
||||
@@ -847,7 +927,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'places.noCategory': 'Keine Kategorie',
|
||||
'places.categoryNamePlaceholder': 'Kategoriename',
|
||||
'places.formTime': 'Uhrzeit',
|
||||
'places.startTime': 'Start',
|
||||
'places.startTime': 'Startzeit',
|
||||
'places.endTime': 'Ende',
|
||||
'places.endTimeBeforeStart': 'Endzeit liegt vor der Startzeit',
|
||||
'places.timeCollision': 'Zeitliche Überschneidung mit:',
|
||||
@@ -870,6 +950,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'Dateien',
|
||||
'inspector.filesCount': '{count} Dateien',
|
||||
'inspector.removeFromDay': 'Vom Tag entfernen',
|
||||
'inspector.remove': 'Entfernen',
|
||||
'inspector.addToDay': 'Zum Tag hinzufügen',
|
||||
'inspector.confirmedRes': 'Bestätigte Reservierung',
|
||||
'inspector.pendingRes': 'Ausstehende Reservierung',
|
||||
@@ -902,7 +983,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'reservations.timeAlt': 'Uhrzeit (alternativ, z.B. 19:30)',
|
||||
'reservations.notes': 'Notizen',
|
||||
'reservations.notesPlaceholder': 'Zusätzliche Notizen...',
|
||||
'reservations.meta.airline': 'Airline',
|
||||
'reservations.meta.airline': 'Fluggesellschaft',
|
||||
'reservations.meta.flightNumber': 'Flugnr.',
|
||||
'reservations.meta.from': 'Von',
|
||||
'reservations.meta.to': 'Nach',
|
||||
@@ -1023,6 +1104,9 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
|
||||
// Files
|
||||
'files.title': 'Dateien',
|
||||
'files.pageTitle': 'Dateien & Dokumente',
|
||||
'files.subtitle': '{count} Dateien für {trip}',
|
||||
'files.downloadPdf': 'PDF herunterladen',
|
||||
'files.count': '{count} Dateien',
|
||||
'files.countSingular': '1 Datei',
|
||||
'files.uploaded': '{count} hochgeladen',
|
||||
@@ -1113,7 +1197,6 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.saveAsTemplate': 'Als Vorlage speichern',
|
||||
'packing.templateName': 'Vorlagenname',
|
||||
'packing.templateSaved': 'Packliste als Vorlage gespeichert',
|
||||
'packing.assignUser': 'Person zuweisen',
|
||||
'packing.bags': 'Gepäck',
|
||||
'packing.noBag': 'Nicht zugeordnet',
|
||||
'packing.totalWeight': 'Gesamtgewicht',
|
||||
@@ -1269,6 +1352,13 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Immer behalten',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Fotos',
|
||||
'photos.subtitle': '{count} Fotos für {trip}',
|
||||
'photos.dropHere': 'Fotos hier ablegen...',
|
||||
'photos.dropHereActive': 'Fotos hier ablegen',
|
||||
'photos.captionForAll': 'Beschriftung (für alle)',
|
||||
'photos.captionPlaceholder': 'Optionale Beschriftung...',
|
||||
'photos.addCaption': 'Beschriftung hinzufügen...',
|
||||
'photos.allDays': 'Alle Tage',
|
||||
'photos.noPhotos': 'Noch keine Fotos',
|
||||
'photos.uploadHint': 'Lade deine Reisefotos hoch',
|
||||
@@ -1276,6 +1366,12 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Ort verknüpfen',
|
||||
'photos.noPlace': 'Kein Ort',
|
||||
'photos.uploadN': '{n} Foto(s) hochladen',
|
||||
'photos.linkDay': 'Tag verknüpfen',
|
||||
'photos.noDay': 'Kein Tag',
|
||||
'photos.dayLabel': 'Tag {number}',
|
||||
'photos.photoSelected': 'Foto ausgewählt',
|
||||
'photos.photosSelected': 'Fotos ausgewählt',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · bis zu 30 Fotos',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Backup wiederherstellen?',
|
||||
@@ -1302,6 +1398,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Route berechnet',
|
||||
'planner.routeCalcFailed': 'Route konnte nicht berechnet werden',
|
||||
'planner.routeError': 'Fehler bei der Routenberechnung',
|
||||
'planner.icsExportFailed': 'ICS-Export fehlgeschlagen',
|
||||
'planner.routeOptimized': 'Route optimiert',
|
||||
'planner.reservationUpdated': 'Reservierung aktualisiert',
|
||||
'planner.reservationAdded': 'Reservierung hinzugefügt',
|
||||
@@ -1387,6 +1484,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich nicht verbunden',
|
||||
'memories.notConnectedHint': 'Verbinde deine Immich-Instanz in den Einstellungen, um deine Reisefotos hier zu sehen.',
|
||||
'memories.notConnectedMultipleHint': 'Verbinde einen dieser Fotoanbieter: {provider_names} in den Einstellungen, um Fotos zu dieser Reise hinzufügen zu können.',
|
||||
'memories.noDates': 'Füge Daten zu deiner Reise hinzu, um Fotos zu laden.',
|
||||
'memories.noPhotos': 'Keine Fotos gefunden',
|
||||
'memories.noPhotosHint': 'Keine Fotos in Immich für den Zeitraum dieser Reise gefunden.',
|
||||
@@ -1397,23 +1495,35 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Deine Fotos prüfen',
|
||||
'memories.reviewHint': 'Klicke auf Fotos, um sie vom Teilen auszuschließen.',
|
||||
'memories.shareCount': '{count} Fotos teilen',
|
||||
'memories.immichUrl': 'Immich Server URL',
|
||||
'memories.immichApiKey': 'API-Schlüssel',
|
||||
'memories.providerUrl': 'Server-URL',
|
||||
'memories.providerApiKey': 'API-Schlüssel',
|
||||
'memories.providerUsername': 'Benutzername',
|
||||
'memories.providerPassword': 'Passwort',
|
||||
'memories.providerOTP': 'MFA-Code (falls aktiviert)',
|
||||
'memories.skipSSLVerification': 'SSL-Zertifikatsprüfung überspringen',
|
||||
'memories.providerUrlHintSynology': 'Füge den Fotos-App-Pfad in die URL ein, z.B. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Verbindung testen',
|
||||
'memories.testFirst': 'Verbindung zuerst testen',
|
||||
'memories.connected': 'Verbunden',
|
||||
'memories.disconnected': 'Nicht verbunden',
|
||||
'memories.connectionSuccess': 'Verbindung zu Immich hergestellt',
|
||||
'memories.connectionError': 'Verbindung zu Immich fehlgeschlagen',
|
||||
'memories.saved': 'Immich-Einstellungen gespeichert',
|
||||
'memories.saved': '{provider_name}-Einstellungen gespeichert',
|
||||
'memories.providerDisconnectedBanner': 'Deine {provider_name}-Verbindung wurde getrennt. Verbinde erneut in den Einstellungen, um Fotos anzuzeigen.',
|
||||
'memories.saveError': '{provider_name}-Einstellungen konnten nicht gespeichert werden',
|
||||
'memories.saveRouteNotConfigured': 'Speicherroute ist für diesen Anbieter nicht konfiguriert',
|
||||
'memories.testRouteNotConfigured': 'Testroute ist für diesen Anbieter nicht konfiguriert',
|
||||
'memories.fillRequiredFields': 'Bitte füllen Sie alle Pflichtfelder aus',
|
||||
'memories.addPhotos': 'Fotos hinzufügen',
|
||||
'memories.linkAlbum': 'Album verknüpfen',
|
||||
'memories.selectAlbum': 'Immich-Album auswählen',
|
||||
'memories.selectAlbumMultiple': 'Album auswählen',
|
||||
'memories.noAlbums': 'Keine Alben gefunden',
|
||||
'memories.syncAlbum': 'Album synchronisieren',
|
||||
'memories.unlinkAlbum': 'Album trennen',
|
||||
'memories.photos': 'Fotos',
|
||||
'memories.selectPhotos': 'Fotos aus Immich auswählen',
|
||||
'memories.selectPhotosMultiple': 'Fotos auswählen',
|
||||
'memories.selectHint': 'Tippe auf Fotos um sie auszuwählen.',
|
||||
'memories.selected': 'ausgewählt',
|
||||
'memories.addSelected': '{count} Fotos hinzufügen',
|
||||
@@ -1574,6 +1684,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Als ungelesen markieren',
|
||||
'notifications.delete': 'Löschen',
|
||||
'notifications.system': 'System',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos getrennt',
|
||||
'notifications.synologySessionCleared.text': 'Dein Server oder Konto hat sich geändert — gehe zu Einstellungen, um deine Verbindung erneut zu testen.',
|
||||
'memories.error.loadAlbums': 'Alben konnten nicht geladen werden',
|
||||
'memories.error.linkAlbum': 'Album konnte nicht verknüpft werden',
|
||||
'memories.error.unlinkAlbum': 'Album konnte nicht getrennt werden',
|
||||
@@ -1600,7 +1712,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
|
||||
// Todo
|
||||
'todo.subtab.packing': 'Packliste',
|
||||
'todo.subtab.todo': 'To-Do',
|
||||
'todo.subtab.todo': 'Aufgaben',
|
||||
'todo.completed': 'erledigt',
|
||||
'todo.filter.all': 'Alle',
|
||||
'todo.filter.open': 'Offen',
|
||||
@@ -1635,7 +1747,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
// Notification system (added from feat/notification-system)
|
||||
'settings.notifyVersionAvailable': 'Neue Version verfügbar',
|
||||
'settings.notificationPreferences.noChannels': 'Keine Benachrichtigungskanäle konfiguriert. Bitte einen Administrator, E-Mail- oder Webhook-Benachrichtigungen einzurichten.',
|
||||
'settings.webhookUrl.label': 'Webhook URL',
|
||||
'settings.webhookUrl.label': 'Webhook-URL',
|
||||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||||
'settings.webhookUrl.hint': 'Gib deine Discord-, Slack- oder benutzerdefinierte Webhook-URL ein, um Benachrichtigungen zu erhalten.',
|
||||
'settings.webhookUrl.save': 'Speichern',
|
||||
@@ -1696,6 +1808,302 @@ const de: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Du hast eine neue Benachrichtigung',
|
||||
'notif.dev.unknown_event.title': '[DEV] Unbekanntes Ereignis',
|
||||
'notif.dev.unknown_event.text': 'Ereignistyp "{event}" ist nicht in EVENT_NOTIFICATION_CONFIG registriert',
|
||||
|
||||
// Journey Addon
|
||||
'journey.title': 'Journey',
|
||||
'journey.subtitle': 'Dokumentiere deine Reisen unterwegs',
|
||||
'journey.new': 'Neue Journey',
|
||||
'journey.create': 'Erstellen',
|
||||
'journey.titlePlaceholder': 'Wohin geht die Reise?',
|
||||
'journey.empty': 'Noch keine Journeys',
|
||||
'journey.emptyHint': 'Starte die Dokumentation deiner naechsten Reise',
|
||||
'journey.deleted': 'Journey geloescht',
|
||||
'journey.createError': 'Journey konnte nicht erstellt werden',
|
||||
'journey.deleteError': 'Journey konnte nicht geloescht werden',
|
||||
'journey.deleteConfirmTitle': 'Loeschen',
|
||||
'journey.deleteConfirmMessage': '"{title}" loeschen? Das kann nicht rueckgaengig gemacht werden.',
|
||||
'journey.deleteConfirmGeneric': 'Bist du sicher, dass du das loeschen moechtest?',
|
||||
'journey.notFound': 'Journey nicht gefunden',
|
||||
'journey.photos': 'Fotos',
|
||||
'journey.timelineEmpty': 'Noch keine Stationen',
|
||||
'journey.timelineEmptyHint': 'Fuege einen Check-in hinzu oder schreibe einen Tagebucheintrag',
|
||||
'journey.status.draft': 'Entwurf',
|
||||
'journey.status.active': 'Aktiv',
|
||||
'journey.status.completed': 'Abgeschlossen',
|
||||
'journey.status.upcoming': 'Anstehend',
|
||||
'journey.checkin.add': 'Einchecken',
|
||||
'journey.checkin.namePlaceholder': 'Ortsname',
|
||||
'journey.checkin.notesPlaceholder': 'Notizen (optional)',
|
||||
'journey.checkin.save': 'Speichern',
|
||||
'journey.checkin.error': 'Check-in konnte nicht gespeichert werden',
|
||||
'journey.entry.add': 'Tagebuch',
|
||||
'journey.entry.edit': 'Eintrag bearbeiten',
|
||||
'journey.entry.titlePlaceholder': 'Titel (optional)',
|
||||
'journey.entry.bodyPlaceholder': 'Was ist heute passiert?',
|
||||
'journey.entry.save': 'Speichern',
|
||||
'journey.entry.error': 'Eintrag konnte nicht gespeichert werden',
|
||||
'journey.photo.add': 'Foto',
|
||||
'journey.photo.uploadError': 'Upload fehlgeschlagen',
|
||||
'journey.share.share': 'Teilen',
|
||||
'journey.share.public': 'Oeffentlich',
|
||||
'journey.share.linkCopied': 'Oeffentlicher Link kopiert',
|
||||
'journey.share.disabled': 'Oeffentliches Teilen deaktiviert',
|
||||
'journey.editor.titlePlaceholder': 'Gib diesem Moment einen Namen...',
|
||||
'journey.editor.bodyPlaceholder': 'Erzaehl die Geschichte dieses Tages...',
|
||||
'journey.editor.placePlaceholder': 'Ort (optional)',
|
||||
'journey.editor.tagsPlaceholder': 'Tags: Geheimtipp, bestes Essen, nochmal hin...',
|
||||
'journey.visibility.private': 'Privat',
|
||||
'journey.visibility.shared': 'Geteilt',
|
||||
'journey.visibility.public': 'Oeffentlich',
|
||||
'journey.emptyState.title': 'Deine Geschichte beginnt hier',
|
||||
'journey.emptyState.subtitle': 'Checke an einem Ort ein oder schreibe deinen ersten Tagebucheintrag',
|
||||
'admin.addons.catalog.journey.name': 'Journey',
|
||||
'admin.addons.catalog.journey.description': 'Reise-Tracking & Tagebuch mit Check-ins, Fotos und Tagesberichten',
|
||||
|
||||
// Journey & Mobile translations
|
||||
'journey.frontpage.subtitle': 'Verwandle deine Reisen in Geschichten, die du nie vergisst',
|
||||
'journey.frontpage.createJourney': 'Journey erstellen',
|
||||
'journey.frontpage.activeJourney': 'Aktive Journey',
|
||||
'journey.frontpage.allJourneys': 'Alle Journeys',
|
||||
'journey.frontpage.journeys': 'Journeys',
|
||||
'journey.frontpage.createNew': 'Neue Journey erstellen',
|
||||
'journey.frontpage.createNewSub': 'Trips auswählen, Geschichten schreiben, Abenteuer teilen',
|
||||
'journey.frontpage.live': 'Live',
|
||||
'journey.frontpage.synced': 'Synchronisiert',
|
||||
'journey.frontpage.continueWriting': 'Weiterschreiben',
|
||||
'journey.frontpage.updated': 'Aktualisiert {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Trip gerade beendet',
|
||||
'journey.frontpage.suggestionText': 'Verwandle <strong>{title}</strong> in eine Journey',
|
||||
'journey.frontpage.dismiss': 'Schließen',
|
||||
'journey.frontpage.journeyName': 'Journey-Name',
|
||||
'journey.frontpage.namePlaceholder': 'z.B. Südostasien 2026',
|
||||
'journey.frontpage.selectTrips': 'Trips auswählen',
|
||||
'journey.frontpage.tripsSelected': 'Trips ausgewählt',
|
||||
'journey.frontpage.trips': 'Trips',
|
||||
'journey.frontpage.placesImported': 'Orte werden importiert',
|
||||
'journey.frontpage.places': 'Orte',
|
||||
'journey.detail.backToJourney': 'Zurück zur Journey',
|
||||
'journey.detail.syncedWithTrips': 'Mit Trips synchronisiert',
|
||||
'journey.detail.addEntry': 'Eintrag hinzufügen',
|
||||
'journey.detail.newEntry': 'Neuer Eintrag',
|
||||
'journey.detail.editEntry': 'Eintrag bearbeiten',
|
||||
'journey.detail.noEntries': 'Noch keine Einträge',
|
||||
'journey.detail.noEntriesHint': 'Füge einen Trip hinzu, um mit Skelett-Einträgen zu starten',
|
||||
'journey.detail.noPhotos': 'Noch keine Fotos',
|
||||
'journey.detail.noPhotosHint': 'Lade Fotos hoch oder durchsuche deine Immich/Synology-Bibliothek',
|
||||
'journey.detail.journeyStats': 'Journey-Statistiken',
|
||||
'journey.detail.syncedTrips': 'Verknüpfte Trips',
|
||||
'journey.detail.noTripsLinked': 'Noch keine Trips verknüpft',
|
||||
'journey.detail.contributors': 'Mitwirkende',
|
||||
'journey.detail.readMore': 'Mehr lesen',
|
||||
'journey.detail.prosCons': 'Pro & Contra',
|
||||
'journey.stats.days': 'Tage',
|
||||
'journey.stats.cities': 'Städte',
|
||||
'journey.stats.entries': 'Einträge',
|
||||
'journey.stats.photos': 'Fotos',
|
||||
'journey.stats.places': 'Orte',
|
||||
'journey.verdict.lovedIt': 'Toll',
|
||||
'journey.verdict.couldBeBetter': 'Verbesserungswürdig',
|
||||
'journey.synced.places': 'Orte',
|
||||
'journey.synced.synced': 'synchronisiert',
|
||||
'journey.editor.uploadPhotos': 'Fotos hochladen',
|
||||
'journey.editor.fromGallery': 'Aus Galerie',
|
||||
'journey.editor.allPhotosAdded': 'Alle Fotos bereits hinzugefügt',
|
||||
'journey.editor.writeStory': 'Erzähle deine Geschichte...',
|
||||
'journey.editor.prosCons': 'Pro & Contra',
|
||||
'journey.editor.pros': 'Pro',
|
||||
'journey.editor.cons': 'Contra',
|
||||
'journey.editor.proPlaceholder': 'Etwas Positives...',
|
||||
'journey.editor.conPlaceholder': 'Nicht so toll...',
|
||||
'journey.editor.addAnother': 'Hinzufügen',
|
||||
'journey.editor.date': 'Datum',
|
||||
'journey.editor.location': 'Ort',
|
||||
'journey.editor.searchLocation': 'Ort suchen...',
|
||||
'journey.editor.mood': 'Stimmung',
|
||||
'journey.editor.weather': 'Wetter',
|
||||
'journey.editor.photoFirst': '1.',
|
||||
'journey.editor.makeFirst': 'Als 1. setzen',
|
||||
'journey.mood.amazing': 'Großartig',
|
||||
'journey.mood.good': 'Gut',
|
||||
'journey.mood.neutral': 'Neutral',
|
||||
'journey.mood.rough': 'Schwierig',
|
||||
'journey.weather.sunny': 'Sonnig',
|
||||
'journey.weather.partly': 'Teilweise bewölkt',
|
||||
'journey.weather.cloudy': 'Bewölkt',
|
||||
'journey.weather.rainy': 'Regnerisch',
|
||||
'journey.weather.stormy': 'Stürmisch',
|
||||
'journey.weather.cold': 'Schnee',
|
||||
'journey.trips.linkTrip': 'Trip verknüpfen',
|
||||
'journey.trips.searchTrip': 'Trip suchen',
|
||||
'journey.trips.searchPlaceholder': 'Tripname oder Reiseziel...',
|
||||
'journey.trips.noTripsAvailable': 'Keine Trips verfügbar',
|
||||
'journey.trips.link': 'Verknüpfen',
|
||||
'journey.trips.tripLinked': 'Trip verknüpft',
|
||||
'journey.trips.linkFailed': 'Verknüpfung fehlgeschlagen',
|
||||
'journey.trips.addTrip': 'Trip hinzufügen',
|
||||
'journey.trips.unlinkTrip': 'Trip trennen',
|
||||
'journey.trips.unlinkMessage': '"{title}" trennen? Alle synchronisierten Einträge und Fotos dieses Trips werden unwiderruflich gelöscht.',
|
||||
'journey.trips.unlink': 'Trennen',
|
||||
'journey.trips.tripUnlinked': 'Trip getrennt',
|
||||
'journey.trips.unlinkFailed': 'Trennung fehlgeschlagen',
|
||||
'journey.trips.noTripsLinkedSettings': 'Keine Trips verknüpft',
|
||||
'journey.contributors.invite': 'Mitwirkenden einladen',
|
||||
'journey.contributors.searchUser': 'Benutzer suchen',
|
||||
'journey.contributors.searchPlaceholder': 'Benutzername oder E-Mail...',
|
||||
'journey.contributors.noUsers': 'Keine Benutzer gefunden',
|
||||
'journey.contributors.role': 'Rolle',
|
||||
'journey.contributors.added': 'Mitwirkender hinzugefügt',
|
||||
'journey.contributors.addFailed': 'Hinzufügen fehlgeschlagen',
|
||||
'journey.share.publicShare': 'Öffentlicher Link',
|
||||
'journey.share.createLink': 'Link erstellen',
|
||||
'journey.share.linkCreated': 'Link erstellt',
|
||||
'journey.share.createFailed': 'Link konnte nicht erstellt werden',
|
||||
'journey.share.copy': 'Kopieren',
|
||||
'journey.share.copied': 'Kopiert!',
|
||||
'journey.share.timeline': 'Zeitstrahl',
|
||||
'journey.share.gallery': 'Galerie',
|
||||
'journey.share.map': 'Karte',
|
||||
'journey.share.removeLink': 'Link entfernen',
|
||||
'journey.share.linkDeleted': 'Link entfernt',
|
||||
'journey.share.deleteFailed': 'Entfernen fehlgeschlagen',
|
||||
'journey.share.updateFailed': 'Aktualisierung fehlgeschlagen',
|
||||
'journey.settings.title': 'Journey-Einstellungen',
|
||||
'journey.settings.coverImage': 'Titelbild',
|
||||
'journey.settings.changeCover': 'Titelbild ändern',
|
||||
'journey.settings.addCover': 'Titelbild hinzufügen',
|
||||
'journey.settings.name': 'Name',
|
||||
'journey.settings.subtitle': 'Untertitel',
|
||||
'journey.settings.subtitlePlaceholder': 'z.B. Thailand, Vietnam & Kambodscha',
|
||||
'journey.settings.delete': 'Löschen',
|
||||
'journey.settings.deleteJourney': 'Journey löschen',
|
||||
'journey.settings.deleteMessage': '"{title}" löschen? Alle Einträge und Fotos gehen verloren.',
|
||||
'journey.settings.saved': 'Einstellungen gespeichert',
|
||||
'journey.settings.saveFailed': 'Speichern fehlgeschlagen',
|
||||
'journey.settings.coverUpdated': 'Titelbild aktualisiert',
|
||||
'journey.settings.coverFailed': 'Upload fehlgeschlagen',
|
||||
'journey.settings.failedToDelete': 'Löschen fehlgeschlagen',
|
||||
'journey.entries.deleteTitle': 'Eintrag löschen',
|
||||
'journey.photosUploaded': '{count} Fotos hochgeladen',
|
||||
'journey.photosAdded': '{count} Fotos hinzugefügt',
|
||||
'journey.public.notFound': 'Nicht gefunden',
|
||||
'journey.public.notFoundMessage': 'Diese Journey existiert nicht oder der Link ist abgelaufen.',
|
||||
'journey.public.readOnly': 'Nur lesen · Öffentliche Journey',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Geteilt über',
|
||||
'journey.public.madeWith': 'Erstellt mit',
|
||||
'journey.pdf.journeyBook': 'Reisebuch',
|
||||
'journey.pdf.madeWith': 'Erstellt mit TREK',
|
||||
'journey.pdf.day': 'Tag',
|
||||
'journey.pdf.theEnd': 'Ende',
|
||||
'journey.pdf.saveAsPdf': 'Als PDF speichern',
|
||||
'journey.pdf.pages': 'Seiten',
|
||||
'dashboard.greeting.morning': 'Guten Morgen,',
|
||||
'dashboard.greeting.afternoon': 'Guten Tag,',
|
||||
'dashboard.greeting.evening': 'Guten Abend,',
|
||||
'dashboard.mobile.liveNow': 'Jetzt live',
|
||||
'dashboard.mobile.tripProgress': 'Reisefortschritt',
|
||||
'dashboard.mobile.daysLeft': '{count} Tage übrig',
|
||||
'dashboard.mobile.places': 'Orte',
|
||||
'dashboard.mobile.buddies': 'Freunde',
|
||||
'dashboard.mobile.newTrip': 'Neuer Trip',
|
||||
'dashboard.mobile.currency': 'Währung',
|
||||
'dashboard.mobile.timezone': 'Zeitzone',
|
||||
'dashboard.mobile.upcomingTrips': 'Anstehende Trips',
|
||||
'dashboard.mobile.yourTrips': 'Deine Trips',
|
||||
'dashboard.mobile.trips': 'Trips',
|
||||
'dashboard.mobile.starts': 'Beginn',
|
||||
'dashboard.mobile.duration': 'Dauer',
|
||||
'dashboard.mobile.day': 'Tag',
|
||||
'dashboard.mobile.days': 'Tage',
|
||||
'dashboard.mobile.ongoing': 'Laufend',
|
||||
'dashboard.mobile.startsToday': 'Beginnt heute',
|
||||
'dashboard.mobile.tomorrow': 'Morgen',
|
||||
'dashboard.mobile.inDays': 'In {count} Tagen',
|
||||
'dashboard.mobile.inMonths': 'In {count} Monaten',
|
||||
'dashboard.mobile.completed': 'Abgeschlossen',
|
||||
'dashboard.mobile.currencyConverter': 'Währungsrechner',
|
||||
'nav.profile': 'Profil',
|
||||
'nav.bottomSettings': 'Einstellungen',
|
||||
'nav.bottomAdmin': 'Admin-Einstellungen',
|
||||
'nav.bottomLogout': 'Abmelden',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Ort hinzufügen',
|
||||
'dayplan.mobile.searchPlaces': 'Orte suchen...',
|
||||
'dayplan.mobile.allAssigned': 'Alle Orte zugeordnet',
|
||||
'dayplan.mobile.noMatch': 'Kein Treffer',
|
||||
'dayplan.mobile.createNew': 'Neuen Ort erstellen',
|
||||
'memories.notConnectedMultipleHint': 'Connect any of these photo providers: {provider_names} in Settings to be able add photos to this trip.',
|
||||
'memories.providerUrl': 'Server URL',
|
||||
'memories.providerApiKey': 'API Key',
|
||||
'memories.providerUsername': 'Username',
|
||||
'memories.providerPassword': 'Password',
|
||||
'memories.saveError': 'Could not save {provider_name} settings',
|
||||
'memories.selectAlbumMultiple': 'Select Album',
|
||||
'memories.selectPhotosMultiple': 'Select Photos',
|
||||
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Reisen',
|
||||
'oauth.scope.group.places': 'Orte',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Packliste',
|
||||
'oauth.scope.group.todos': 'Aufgaben',
|
||||
'oauth.scope.group.budget': 'Budget',
|
||||
'oauth.scope.group.reservations': 'Buchungen',
|
||||
'oauth.scope.group.collab': 'Zusammenarbeit',
|
||||
'oauth.scope.group.notifications': 'Benachrichtigungen',
|
||||
'oauth.scope.group.vacay': 'Urlaub',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Wetter',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Reisen und Reisepläne anzeigen',
|
||||
'oauth.scope.trips:read.description': 'Reisen, Tage, Tagesnotizen und Mitglieder lesen',
|
||||
'oauth.scope.trips:write.label': 'Reisen und Reisepläne bearbeiten',
|
||||
'oauth.scope.trips:write.description': 'Reisen, Tage und Notizen erstellen, aktualisieren und Mitglieder verwalten',
|
||||
'oauth.scope.trips:delete.label': 'Reisen löschen',
|
||||
'oauth.scope.trips:delete.description': 'Reisen dauerhaft löschen — diese Aktion ist unwiderruflich',
|
||||
'oauth.scope.trips:share.label': 'Freigabelinks verwalten',
|
||||
'oauth.scope.trips:share.description': 'Öffentliche Freigabelinks erstellen, aktualisieren und widerrufen',
|
||||
'oauth.scope.places:read.label': 'Orte und Kartendaten anzeigen',
|
||||
'oauth.scope.places:read.description': 'Orte, Tageszuweisungen, Tags und Kategorien lesen',
|
||||
'oauth.scope.places:write.label': 'Orte verwalten',
|
||||
'oauth.scope.places:write.description': 'Orte, Zuweisungen und Tags erstellen, aktualisieren und löschen',
|
||||
'oauth.scope.atlas:read.label': 'Atlas anzeigen',
|
||||
'oauth.scope.atlas:read.description': 'Besuchte Länder, Regionen und Wunschliste lesen',
|
||||
'oauth.scope.atlas:write.label': 'Atlas verwalten',
|
||||
'oauth.scope.atlas:write.description': 'Länder und Regionen als besucht markieren, Wunschliste verwalten',
|
||||
'oauth.scope.packing:read.label': 'Packlisten anzeigen',
|
||||
'oauth.scope.packing:read.description': 'Packgegenstände, Taschen und Kategoriezuweisungen lesen',
|
||||
'oauth.scope.packing:write.label': 'Packlisten verwalten',
|
||||
'oauth.scope.packing:write.description': 'Packgegenstände und Taschen hinzufügen, aktualisieren, löschen, abhaken und sortieren',
|
||||
'oauth.scope.todos:read.label': 'Aufgabenlisten anzeigen',
|
||||
'oauth.scope.todos:read.description': 'Reiseaufgaben und Kategoriezuweisungen lesen',
|
||||
'oauth.scope.todos:write.label': 'Aufgabenlisten verwalten',
|
||||
'oauth.scope.todos:write.description': 'Aufgaben erstellen, aktualisieren, abhaken, löschen und sortieren',
|
||||
'oauth.scope.budget:read.label': 'Budget anzeigen',
|
||||
'oauth.scope.budget:read.description': 'Budgeteinträge und Ausgabenaufschlüsselung lesen',
|
||||
'oauth.scope.budget:write.label': 'Budget verwalten',
|
||||
'oauth.scope.budget:write.description': 'Budgeteinträge erstellen, aktualisieren und löschen',
|
||||
'oauth.scope.reservations:read.label': 'Buchungen anzeigen',
|
||||
'oauth.scope.reservations:read.description': 'Buchungen und Unterkunftsdetails lesen',
|
||||
'oauth.scope.reservations:write.label': 'Buchungen verwalten',
|
||||
'oauth.scope.reservations:write.description': 'Buchungen erstellen, aktualisieren, löschen und sortieren',
|
||||
'oauth.scope.collab:read.label': 'Zusammenarbeit anzeigen',
|
||||
'oauth.scope.collab:read.description': 'Kollaborationsnotizen, Umfragen und Nachrichten lesen',
|
||||
'oauth.scope.collab:write.label': 'Zusammenarbeit verwalten',
|
||||
'oauth.scope.collab:write.description': 'Kollaborationsnotizen, Umfragen und Nachrichten erstellen, aktualisieren und löschen',
|
||||
'oauth.scope.notifications:read.label': 'Benachrichtigungen anzeigen',
|
||||
'oauth.scope.notifications:read.description': 'In-App-Benachrichtigungen und ungelesene Zählungen lesen',
|
||||
'oauth.scope.notifications:write.label': 'Benachrichtigungen verwalten',
|
||||
'oauth.scope.notifications:write.description': 'Benachrichtigungen als gelesen markieren und darauf reagieren',
|
||||
'oauth.scope.vacay:read.label': 'Urlaubspläne anzeigen',
|
||||
'oauth.scope.vacay:read.description': 'Urlaubsplanungsdaten, Einträge und Statistiken lesen',
|
||||
'oauth.scope.vacay:write.label': 'Urlaubspläne verwalten',
|
||||
'oauth.scope.vacay:write.description': 'Urlaubseinträge, Feiertage und Teampläne erstellen und verwalten',
|
||||
'oauth.scope.geo:read.label': 'Karten & Geocodierung',
|
||||
'oauth.scope.geo:read.description': 'Orte suchen, Karten-URLs auflösen und Koordinaten rückwärts geokodieren',
|
||||
'oauth.scope.weather:read.label': 'Wettervorhersagen',
|
||||
'oauth.scope.weather:read.description': 'Wettervorhersagen für Reiseorte und -daten abrufen',
|
||||
}
|
||||
|
||||
export default de
|
||||
|
||||
@@ -8,6 +8,8 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Loading...',
|
||||
'common.import': 'Import',
|
||||
'common.error': 'Error',
|
||||
'common.unknownError': 'Unknown error',
|
||||
'common.tooManyAttempts': 'Too many attempts. Please try again later.',
|
||||
'common.back': 'Back',
|
||||
'common.all': 'All',
|
||||
'common.close': 'Close',
|
||||
@@ -26,7 +28,14 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.email': 'Email',
|
||||
'common.password': 'Password',
|
||||
'common.saving': 'Saving...',
|
||||
'common.justNow': 'just now',
|
||||
'common.hoursAgo': '{count}h ago',
|
||||
'common.daysAgo': '{count}d ago',
|
||||
'common.saved': 'Saved',
|
||||
'trips.memberRemoved': '{username} removed',
|
||||
'trips.memberRemoveError': 'Failed to remove',
|
||||
'trips.memberAdded': '{username} added',
|
||||
'trips.memberAddError': 'Failed to add',
|
||||
'trips.reminder': 'Reminder',
|
||||
'trips.reminderNone': 'None',
|
||||
'trips.reminderDay': 'day',
|
||||
@@ -39,6 +48,8 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.uploading': 'Uploading…',
|
||||
'common.backToPlanning': 'Back to Planning',
|
||||
'common.reset': 'Reset',
|
||||
'common.expand': 'Expand',
|
||||
'common.collapse': 'Collapse',
|
||||
|
||||
// Navbar
|
||||
'nav.trip': 'Trip',
|
||||
@@ -249,6 +260,7 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'MCP Endpoint',
|
||||
'settings.mcp.clientConfig': 'Client Configuration',
|
||||
'settings.mcp.clientConfigHint': 'Replace <your_token> with an API token from the list below. The path to npx may need to be adjusted for your system (e.g. C:\\PROGRA~1\\nodejs\\npx.cmd on Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:\PROGRA~1\nodejs\npx.cmd on Windows).',
|
||||
'settings.mcp.copy': 'Copy',
|
||||
'settings.mcp.copied': 'Copied!',
|
||||
'settings.mcp.apiTokens': 'API Tokens',
|
||||
@@ -270,6 +282,48 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Failed to create token',
|
||||
'settings.mcp.toast.deleted': 'Token deleted',
|
||||
'settings.mcp.toast.deleteError': 'Failed to delete token',
|
||||
'settings.mcp.apiTokensDeprecated': 'API Tokens are deprecated and will be removed in a future release. Please use OAuth 2.1 Clients instead.',
|
||||
'settings.oauth.clients': 'OAuth 2.1 Clients',
|
||||
'settings.oauth.clientsHint': 'Register OAuth 2.1 clients to let third-party MCP applications (Claude Web, Cursor, etc.) connect without static tokens.',
|
||||
'settings.oauth.createClient': 'New Client',
|
||||
'settings.oauth.noClients': 'No OAuth clients registered.',
|
||||
'settings.oauth.clientId': 'Client ID',
|
||||
'settings.oauth.clientSecret': 'Client Secret',
|
||||
'settings.oauth.deleteClient': 'Delete Client',
|
||||
'settings.oauth.deleteClientMessage': 'This client and all active sessions will be permanently removed. Any application using it will lose access immediately.',
|
||||
'settings.oauth.rotateSecret': 'Rotate Secret',
|
||||
'settings.oauth.rotateSecretMessage': 'A new client secret will be generated and all existing sessions will be invalidated immediately. Update your application before closing this dialog.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Rotate',
|
||||
'settings.oauth.rotateSecretConfirming': 'Rotating…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'New Secret Generated',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'This secret is shown only once. Copy it now and update your application — all previous sessions have been invalidated.',
|
||||
'settings.oauth.activeSessions': 'Active OAuth Sessions',
|
||||
'settings.oauth.sessionScopes': 'Scopes',
|
||||
'settings.oauth.sessionExpires': 'Expires',
|
||||
'settings.oauth.revoke': 'Revoke',
|
||||
'settings.oauth.revokeSession': 'Revoke Session',
|
||||
'settings.oauth.revokeSessionMessage': 'This will immediately revoke access for this OAuth session.',
|
||||
'settings.oauth.modal.createTitle': 'Register OAuth Client',
|
||||
'settings.oauth.modal.presets': 'Quick presets',
|
||||
'settings.oauth.modal.clientName': 'Application Name',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'e.g. Claude Web, My MCP App',
|
||||
'settings.oauth.modal.redirectUris': 'Redirect URIs',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'One URI per line. HTTPS required (localhost exempt). Exact match enforced.',
|
||||
'settings.oauth.modal.scopes': 'Allowed Scopes',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips and get_trip_summary are always available — no scope required. They let the AI discover trip IDs needed to use any other tool.',
|
||||
'settings.oauth.modal.selectAll': 'Select all',
|
||||
'settings.oauth.modal.deselectAll': 'Deselect all',
|
||||
'settings.oauth.modal.creating': 'Registering…',
|
||||
'settings.oauth.modal.create': 'Register Client',
|
||||
'settings.oauth.modal.createdTitle': 'Client Registered',
|
||||
'settings.oauth.modal.createdWarning': 'The client secret is shown only once. Copy it now — it cannot be recovered.',
|
||||
'settings.oauth.toast.createError': 'Failed to register OAuth client',
|
||||
'settings.oauth.toast.deleted': 'OAuth client deleted',
|
||||
'settings.oauth.toast.deleteError': 'Failed to delete OAuth client',
|
||||
'settings.oauth.toast.revoked': 'Session revoked',
|
||||
'settings.oauth.toast.revokeError': 'Failed to revoke session',
|
||||
'settings.oauth.toast.rotateError': 'Failed to rotate client secret',
|
||||
'settings.account': 'Account',
|
||||
'settings.about': 'About',
|
||||
'settings.about.reportBug': 'Report a Bug',
|
||||
@@ -392,6 +446,10 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Open Google Authenticator, Authy, or another TOTP app.',
|
||||
'login.mfaBack': '← Back to sign in',
|
||||
'login.mfaVerify': 'Verify',
|
||||
'login.invalidInviteLink': 'Invalid or expired invite link',
|
||||
'login.oidcFailed': 'OIDC login failed',
|
||||
'login.usernameRequired': 'Username is required',
|
||||
'login.passwordMinLength': 'Password must be at least 8 characters',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'Passwords do not match',
|
||||
@@ -472,6 +530,17 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Settings',
|
||||
'admin.allowRegistration': 'Allow Registration',
|
||||
'admin.allowRegistrationHint': 'New users can register themselves',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Require two-factor authentication (2FA)',
|
||||
'admin.requireMfaHint': 'Users without 2FA must complete setup in Settings before using the app.',
|
||||
'admin.apiKeys': 'API Keys',
|
||||
@@ -570,9 +639,10 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.weather.locationHint': 'Weather is based on the first place with coordinates in each day. If no place is assigned to a day, any place from the place list is used as a reference.',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.mcpTokens': 'MCP Tokens',
|
||||
'admin.mcpTokens.title': 'MCP Tokens',
|
||||
'admin.mcpTokens.subtitle': 'Manage API tokens across all users',
|
||||
'admin.tabs.mcpTokens': 'MCP Access',
|
||||
'admin.mcpTokens.title': 'MCP Access',
|
||||
'admin.mcpTokens.subtitle': 'Manage OAuth sessions and API tokens across all users',
|
||||
'admin.mcpTokens.sectionTitle': 'API Tokens',
|
||||
'admin.mcpTokens.owner': 'Owner',
|
||||
'admin.mcpTokens.tokenName': 'Token Name',
|
||||
'admin.mcpTokens.created': 'Created',
|
||||
@@ -584,6 +654,17 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token deleted',
|
||||
'admin.mcpTokens.deleteError': 'Failed to delete token',
|
||||
'admin.mcpTokens.loadError': 'Failed to load tokens',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth Sessions',
|
||||
'admin.oauthSessions.clientName': 'Client',
|
||||
'admin.oauthSessions.owner': 'Owner',
|
||||
'admin.oauthSessions.scopes': 'Scopes',
|
||||
'admin.oauthSessions.created': 'Created',
|
||||
'admin.oauthSessions.empty': 'No active OAuth sessions',
|
||||
'admin.oauthSessions.revokeTitle': 'Revoke Session',
|
||||
'admin.oauthSessions.revokeMessage': 'This will revoke the OAuth session immediately. The client will lose MCP access.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Session revoked',
|
||||
'admin.oauthSessions.revokeError': 'Failed to revoke session',
|
||||
'admin.oauthSessions.loadError': 'Failed to load OAuth sessions',
|
||||
'admin.tabs.github': 'GitHub',
|
||||
|
||||
'admin.audit.subtitle': 'Security-sensitive and administration events (backups, users, MFA, settings).',
|
||||
@@ -680,6 +761,8 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Company Holidays',
|
||||
'vacay.companyHolidaysHint': 'Allow marking company-wide holiday days',
|
||||
'vacay.companyHolidaysNoDeduct': 'Company holidays do not count towards vacation days.',
|
||||
'vacay.weekStart': 'Week starts on',
|
||||
'vacay.weekStartHint': 'Choose whether the calendar week starts on Monday or Sunday',
|
||||
'vacay.carryOver': 'Carry Over',
|
||||
'vacay.carryOverHint': 'Automatically carry remaining vacation days into the next year',
|
||||
'vacay.sharing': 'Sharing',
|
||||
@@ -889,6 +972,7 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.showHours': 'Show opening hours',
|
||||
'inspector.files': 'Files',
|
||||
'inspector.filesCount': '{count} files',
|
||||
'inspector.remove': 'Remove',
|
||||
'inspector.removeFromDay': 'Remove from Day',
|
||||
'inspector.addToDay': 'Add to Day',
|
||||
'inspector.confirmedRes': 'Confirmed Reservation',
|
||||
@@ -1043,6 +1127,9 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
|
||||
// Files
|
||||
'files.title': 'Files',
|
||||
'files.pageTitle': 'Files & Documents',
|
||||
'files.subtitle': '{count} files for {trip}',
|
||||
'files.downloadPdf': 'Download PDF',
|
||||
'files.count': '{count} files',
|
||||
'files.countSingular': '1 file',
|
||||
'files.uploaded': '{count} uploaded',
|
||||
@@ -1133,7 +1220,6 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.saveAsTemplate': 'Save as template',
|
||||
'packing.templateName': 'Template name',
|
||||
'packing.templateSaved': 'Packing list saved as template',
|
||||
'packing.assignUser': 'Assign user',
|
||||
'packing.bags': 'Bags',
|
||||
'packing.noBag': 'Unassigned',
|
||||
'packing.totalWeight': 'Total weight',
|
||||
@@ -1289,6 +1375,13 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Keep forever',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Photos',
|
||||
'photos.subtitle': '{count} photos for {trip}',
|
||||
'photos.dropHere': 'Drop photos here...',
|
||||
'photos.dropHereActive': 'Drop photos here',
|
||||
'photos.captionForAll': 'Caption (for all)',
|
||||
'photos.captionPlaceholder': 'Optional caption...',
|
||||
'photos.addCaption': 'Add caption...',
|
||||
'photos.allDays': 'All Days',
|
||||
'photos.noPhotos': 'No photos yet',
|
||||
'photos.uploadHint': 'Upload your travel photos',
|
||||
@@ -1296,6 +1389,12 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Link Place',
|
||||
'photos.noPlace': 'No Place',
|
||||
'photos.uploadN': '{n} photo(s) upload',
|
||||
'photos.linkDay': 'Link Day',
|
||||
'photos.noDay': 'No Day',
|
||||
'photos.dayLabel': 'Day {number}',
|
||||
'photos.photoSelected': 'Photo selected',
|
||||
'photos.photosSelected': 'Photos selected',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · up to 30 photos',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Restore Backup?',
|
||||
@@ -1322,6 +1421,7 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Route calculated',
|
||||
'planner.routeCalcFailed': 'Route could not be calculated',
|
||||
'planner.routeError': 'Error calculating route',
|
||||
'planner.icsExportFailed': 'ICS export failed',
|
||||
'planner.routeOptimized': 'Route optimized',
|
||||
'planner.reservationUpdated': 'Reservation updated',
|
||||
'planner.reservationAdded': 'Reservation added',
|
||||
@@ -1424,6 +1524,9 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.providerApiKey': 'API Key',
|
||||
'memories.providerUsername': 'Username',
|
||||
'memories.providerPassword': 'Password',
|
||||
'memories.providerOTP': 'MFA code (if enabled)',
|
||||
'memories.skipSSLVerification': 'Skip SSL certificate verification',
|
||||
'memories.providerUrlHintSynology': 'Include the Photos app path in the URL, e.g. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Test connection',
|
||||
'memories.testFirst': 'Test connection first',
|
||||
'memories.connected': 'Connected',
|
||||
@@ -1431,6 +1534,7 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.connectionSuccess': 'Connected to {provider_name}',
|
||||
'memories.connectionError': 'Could not connect to {provider_name}',
|
||||
'memories.saved': '{provider_name} settings saved',
|
||||
'memories.providerDisconnectedBanner': 'Your {provider_name} connection is lost. Reconnect in Settings to view photos.',
|
||||
'memories.saveError': 'Could not save {provider_name} settings',
|
||||
//------------------------
|
||||
'memories.addPhotos': 'Add photos',
|
||||
@@ -1465,6 +1569,9 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.error.addPhotos': 'Failed to add photos',
|
||||
'memories.error.removePhoto': 'Failed to remove photo',
|
||||
'memories.error.toggleSharing': 'Failed to update sharing',
|
||||
'memories.saveRouteNotConfigured': 'Save route is not configured for this provider',
|
||||
'memories.testRouteNotConfigured': 'Test route is not configured for this provider',
|
||||
'memories.fillRequiredFields': 'Please fill all required fields',
|
||||
|
||||
// Collab Addon
|
||||
'collab.tabs.chat': 'Chat',
|
||||
@@ -1614,6 +1721,8 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Mark as unread',
|
||||
'notifications.delete': 'Delete',
|
||||
'notifications.system': 'System',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos disconnected',
|
||||
'notifications.synologySessionCleared.text': 'Your server or account changed — go to Settings to test your connection again.',
|
||||
|
||||
// Notification test keys (dev only)
|
||||
'notifications.versionAvailable.title': 'Update Available',
|
||||
@@ -1703,6 +1812,327 @@ const en: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'You have a new notification',
|
||||
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
|
||||
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey addon
|
||||
'journey.title': 'Journey',
|
||||
'journey.subtitle': 'Track your travels as they happen',
|
||||
'journey.new': 'New Journey',
|
||||
'journey.create': 'Create',
|
||||
'journey.titlePlaceholder': 'Where are you going?',
|
||||
'journey.empty': 'No journeys yet',
|
||||
'journey.emptyHint': 'Start documenting your next trip',
|
||||
'journey.deleted': 'Journey deleted',
|
||||
'journey.createError': 'Could not create journey',
|
||||
'journey.deleteError': 'Could not delete journey',
|
||||
'journey.deleteConfirmTitle': 'Delete',
|
||||
'journey.deleteConfirmMessage': 'Delete "{title}"? This cannot be undone.',
|
||||
'journey.deleteConfirmGeneric': 'Are you sure you want to delete this?',
|
||||
'journey.notFound': 'Journey not found',
|
||||
'journey.photos': 'Photos',
|
||||
'journey.timelineEmpty': 'No stops yet',
|
||||
'journey.timelineEmptyHint': 'Add a check-in or write a journal entry to get started',
|
||||
'journey.status.draft': 'Draft',
|
||||
'journey.status.active': 'Active',
|
||||
'journey.status.completed': 'Completed',
|
||||
'journey.status.upcoming': 'Upcoming',
|
||||
'journey.checkin.add': 'Check in',
|
||||
'journey.checkin.namePlaceholder': 'Location name',
|
||||
'journey.checkin.notesPlaceholder': 'Notes (optional)',
|
||||
'journey.checkin.save': 'Save',
|
||||
'journey.checkin.error': 'Could not save check-in',
|
||||
'journey.entry.add': 'Journal',
|
||||
'journey.entry.edit': 'Edit entry',
|
||||
'journey.entry.titlePlaceholder': 'Title (optional)',
|
||||
'journey.entry.bodyPlaceholder': 'What happened today?',
|
||||
'journey.entry.save': 'Save',
|
||||
'journey.entry.error': 'Could not save entry',
|
||||
'journey.photo.add': 'Photo',
|
||||
'journey.photo.uploadError': 'Upload failed',
|
||||
'journey.share.share': 'Share',
|
||||
'journey.share.public': 'Public',
|
||||
'journey.share.linkCopied': 'Public link copied',
|
||||
'journey.share.disabled': 'Public sharing disabled',
|
||||
'journey.editor.titlePlaceholder': 'Give this moment a name...',
|
||||
'journey.editor.bodyPlaceholder': 'Tell the story of this day...',
|
||||
'journey.editor.placePlaceholder': 'Location (optional)',
|
||||
'journey.editor.tagsPlaceholder': 'Tags: hidden gem, best meal, must revisit...',
|
||||
'journey.visibility.private': 'Private',
|
||||
'journey.visibility.shared': 'Shared',
|
||||
'journey.visibility.public': 'Public',
|
||||
'journey.emptyState.title': 'Your story starts here',
|
||||
'journey.emptyState.subtitle': 'Check in at a place or write your first journal entry',
|
||||
|
||||
// Journey Frontpage
|
||||
'journey.frontpage.subtitle': 'Turn your trips into stories you\'ll never forget',
|
||||
'journey.frontpage.createJourney': 'Create Journey',
|
||||
'journey.frontpage.activeJourney': 'Active Journey',
|
||||
'journey.frontpage.allJourneys': 'All Journeys',
|
||||
'journey.frontpage.journeys': 'journeys',
|
||||
'journey.frontpage.createNew': 'Create a new Journey',
|
||||
'journey.frontpage.createNewSub': 'Pick trips, write stories, share your adventures',
|
||||
'journey.frontpage.live': 'Live',
|
||||
'journey.frontpage.synced': 'Synced',
|
||||
'journey.frontpage.continueWriting': 'Continue writing',
|
||||
'journey.frontpage.updated': 'Updated {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Trip just ended',
|
||||
'journey.frontpage.suggestionText': 'Turn <strong>{title}</strong> into a Journey',
|
||||
'journey.frontpage.dismiss': 'Dismiss',
|
||||
'journey.frontpage.journeyName': 'Journey Name',
|
||||
'journey.frontpage.namePlaceholder': 'e.g. Southeast Asia 2026',
|
||||
'journey.frontpage.selectTrips': 'Select Trips',
|
||||
'journey.frontpage.tripsSelected': 'trips selected',
|
||||
'journey.frontpage.trips': 'trips',
|
||||
'journey.frontpage.placesImported': 'places will be imported',
|
||||
'journey.frontpage.places': 'places',
|
||||
|
||||
// Journey Detail
|
||||
'journey.detail.backToJourney': 'Back to Journey',
|
||||
'journey.detail.syncedWithTrips': 'Synced with Trips',
|
||||
'journey.detail.addEntry': 'Add Entry',
|
||||
'journey.detail.newEntry': 'New Entry',
|
||||
'journey.detail.editEntry': 'Edit Entry',
|
||||
'journey.detail.noEntries': 'No entries yet',
|
||||
'journey.detail.noEntriesHint': 'Add a trip to get started with skeleton entries',
|
||||
'journey.detail.noPhotos': 'No photos yet',
|
||||
'journey.detail.noPhotosHint': 'Upload photos to entries or browse your Immich/Synology library',
|
||||
'journey.detail.journeyStats': 'Journey Stats',
|
||||
'journey.detail.syncedTrips': 'Synced Trips',
|
||||
'journey.detail.noTripsLinked': 'No trips linked yet',
|
||||
'journey.detail.contributors': 'Contributors',
|
||||
'journey.detail.readMore': 'Read more',
|
||||
'journey.detail.prosCons': 'Pros & Cons',
|
||||
|
||||
// Journey Detail — Stats
|
||||
'journey.stats.days': 'Days',
|
||||
'journey.stats.cities': 'Cities',
|
||||
'journey.stats.entries': 'Entries',
|
||||
'journey.stats.photos': 'Photos',
|
||||
'journey.stats.places': 'Places',
|
||||
|
||||
// Journey Detail — Verdict
|
||||
'journey.verdict.lovedIt': 'Loved it',
|
||||
'journey.verdict.couldBeBetter': 'Could be better',
|
||||
|
||||
// Journey Detail — Synced badge
|
||||
'journey.synced.places': 'places',
|
||||
'journey.synced.synced': 'synced',
|
||||
|
||||
// Journey Entry Editor
|
||||
'journey.editor.uploadPhotos': 'Upload photos',
|
||||
'journey.editor.fromGallery': 'From Gallery',
|
||||
'journey.editor.allPhotosAdded': 'All photos already added',
|
||||
'journey.editor.writeStory': 'Write your story...',
|
||||
'journey.editor.prosCons': 'Pros & Cons',
|
||||
'journey.editor.pros': 'Pros',
|
||||
'journey.editor.cons': 'Cons',
|
||||
'journey.editor.proPlaceholder': 'Something great...',
|
||||
'journey.editor.conPlaceholder': 'Not so great...',
|
||||
'journey.editor.addAnother': 'Add another',
|
||||
'journey.editor.date': 'Date',
|
||||
'journey.editor.location': 'Location',
|
||||
'journey.editor.searchLocation': 'Search location...',
|
||||
'journey.editor.mood': 'Mood',
|
||||
'journey.editor.weather': 'Weather',
|
||||
'journey.editor.photoFirst': '1st',
|
||||
'journey.editor.makeFirst': 'Make 1st',
|
||||
|
||||
// Journey Entry — Moods
|
||||
'journey.mood.amazing': 'Amazing',
|
||||
'journey.mood.good': 'Good',
|
||||
'journey.mood.neutral': 'Neutral',
|
||||
'journey.mood.rough': 'Rough',
|
||||
|
||||
// Journey Entry — Weather
|
||||
'journey.weather.sunny': 'Sunny',
|
||||
'journey.weather.partly': 'Partly cloudy',
|
||||
'journey.weather.cloudy': 'Cloudy',
|
||||
'journey.weather.rainy': 'Rainy',
|
||||
'journey.weather.stormy': 'Stormy',
|
||||
'journey.weather.cold': 'Snowy',
|
||||
|
||||
// Journey — Trip Linking
|
||||
'journey.trips.linkTrip': 'Link Trip',
|
||||
'journey.trips.searchTrip': 'Search Trip',
|
||||
'journey.trips.searchPlaceholder': 'Trip name or destination...',
|
||||
'journey.trips.noTripsAvailable': 'No trips available',
|
||||
'journey.trips.link': 'Link',
|
||||
'journey.trips.tripLinked': 'Trip linked',
|
||||
'journey.trips.linkFailed': 'Failed to link trip',
|
||||
'journey.trips.addTrip': 'Add Trip',
|
||||
'journey.trips.unlinkTrip': 'Unlink Trip',
|
||||
'journey.trips.unlinkMessage': 'Unlink "{title}"? All synced entries and photos from this trip will be permanently deleted. This cannot be undone.',
|
||||
'journey.trips.unlink': 'Unlink',
|
||||
'journey.trips.tripUnlinked': 'Trip unlinked',
|
||||
'journey.trips.unlinkFailed': 'Failed to unlink trip',
|
||||
'journey.trips.noTripsLinkedSettings': 'No trips linked',
|
||||
|
||||
// Journey — Contributors
|
||||
'journey.contributors.invite': 'Invite Contributor',
|
||||
'journey.contributors.searchUser': 'Search User',
|
||||
'journey.contributors.searchPlaceholder': 'Username or email...',
|
||||
'journey.contributors.noUsers': 'No users found',
|
||||
'journey.contributors.role': 'Role',
|
||||
'journey.contributors.added': 'Contributor added',
|
||||
'journey.contributors.addFailed': 'Failed to add contributor',
|
||||
|
||||
// Journey — Share
|
||||
'journey.share.publicShare': 'Public Share',
|
||||
'journey.share.createLink': 'Create share link',
|
||||
'journey.share.linkCreated': 'Share link created',
|
||||
'journey.share.createFailed': 'Failed to create link',
|
||||
'journey.share.copy': 'Copy',
|
||||
'journey.share.copied': 'Copied!',
|
||||
'journey.share.timeline': 'Timeline',
|
||||
'journey.share.gallery': 'Gallery',
|
||||
'journey.share.map': 'Map',
|
||||
'journey.share.removeLink': 'Remove share link',
|
||||
'journey.share.linkDeleted': 'Share link deleted',
|
||||
'journey.share.deleteFailed': 'Failed to delete',
|
||||
'journey.share.updateFailed': 'Failed to update',
|
||||
|
||||
// Journey — Settings Dialog
|
||||
'journey.settings.title': 'Journey Settings',
|
||||
'journey.settings.coverImage': 'Cover Image',
|
||||
'journey.settings.changeCover': 'Change cover',
|
||||
'journey.settings.addCover': 'Add cover image',
|
||||
'journey.settings.name': 'Name',
|
||||
'journey.settings.subtitle': 'Subtitle',
|
||||
'journey.settings.subtitlePlaceholder': 'e.g. Thailand, Vietnam & Cambodia',
|
||||
'journey.settings.delete': 'Delete',
|
||||
'journey.settings.deleteJourney': 'Delete Journey',
|
||||
'journey.settings.deleteMessage': 'Delete "{title}"? All entries and photos will be lost.',
|
||||
'journey.settings.saved': 'Settings saved',
|
||||
'journey.settings.saveFailed': 'Failed to save',
|
||||
'journey.settings.coverUpdated': 'Cover updated',
|
||||
'journey.settings.coverFailed': 'Upload failed',
|
||||
'journey.settings.failedToDelete': 'Failed to delete',
|
||||
'journey.entries.deleteTitle': 'Delete Entry',
|
||||
'journey.photosUploaded': '{count} photos uploaded',
|
||||
'journey.photosAdded': '{count} photos added',
|
||||
|
||||
// Journey — Public Page
|
||||
'journey.public.notFound': 'Not Found',
|
||||
'journey.public.notFoundMessage': 'This journey doesn\'t exist or the link has expired.',
|
||||
'journey.public.readOnly': 'Read-only · Public Journey',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Shared via',
|
||||
'journey.public.madeWith': 'Made with',
|
||||
|
||||
// Journey — PDF Export
|
||||
'journey.pdf.journeyBook': 'Journey Book',
|
||||
'journey.pdf.madeWith': 'Made with TREK',
|
||||
'journey.pdf.day': 'Day',
|
||||
'journey.pdf.theEnd': 'The End',
|
||||
'journey.pdf.saveAsPdf': 'Save as PDF',
|
||||
'journey.pdf.pages': 'pages',
|
||||
|
||||
// Dashboard Mobile
|
||||
'dashboard.greeting.morning': 'Good morning,',
|
||||
'dashboard.greeting.afternoon': 'Good afternoon,',
|
||||
'dashboard.greeting.evening': 'Good evening,',
|
||||
'dashboard.mobile.liveNow': 'Live Now',
|
||||
'dashboard.mobile.tripProgress': 'Trip progress',
|
||||
'dashboard.mobile.daysLeft': '{count} days left',
|
||||
'dashboard.mobile.places': 'Places',
|
||||
'dashboard.mobile.buddies': 'Buddies',
|
||||
'dashboard.mobile.newTrip': 'New Trip',
|
||||
'dashboard.mobile.currency': 'Currency',
|
||||
'dashboard.mobile.timezone': 'Timezone',
|
||||
'dashboard.mobile.upcomingTrips': 'Upcoming Trips',
|
||||
'dashboard.mobile.yourTrips': 'Your Trips',
|
||||
'dashboard.mobile.trips': 'trips',
|
||||
'dashboard.mobile.starts': 'Starts',
|
||||
'dashboard.mobile.duration': 'Duration',
|
||||
'dashboard.mobile.day': 'day',
|
||||
'dashboard.mobile.days': 'days',
|
||||
'dashboard.mobile.ongoing': 'Ongoing',
|
||||
'dashboard.mobile.startsToday': 'Starts today',
|
||||
'dashboard.mobile.tomorrow': 'Tomorrow',
|
||||
'dashboard.mobile.inDays': 'In {count} days',
|
||||
'dashboard.mobile.inMonths': 'In {count} months',
|
||||
'dashboard.mobile.completed': 'Completed',
|
||||
'dashboard.mobile.currencyConverter': 'Currency Converter',
|
||||
|
||||
// BottomNav & Profile
|
||||
'nav.profile': 'Profile',
|
||||
'nav.bottomSettings': 'Settings',
|
||||
'nav.bottomAdmin': 'Admin Settings',
|
||||
'nav.bottomLogout': 'Logout',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
|
||||
// DayPlan Mobile
|
||||
'dayplan.mobile.addPlace': 'Add Place',
|
||||
'dayplan.mobile.searchPlaces': 'Search places...',
|
||||
'dayplan.mobile.allAssigned': 'All places assigned',
|
||||
'dayplan.mobile.noMatch': 'No match',
|
||||
'dayplan.mobile.createNew': 'Create new place',
|
||||
|
||||
'admin.addons.catalog.journey.name': 'Journey',
|
||||
'admin.addons.catalog.journey.description': 'Trip tracking & travel journal with check-ins, photos, and daily stories',
|
||||
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Trips',
|
||||
'oauth.scope.group.places': 'Places',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Packing',
|
||||
'oauth.scope.group.todos': 'To-dos',
|
||||
'oauth.scope.group.budget': 'Budget',
|
||||
'oauth.scope.group.reservations': 'Reservations',
|
||||
'oauth.scope.group.collab': 'Collaboration',
|
||||
'oauth.scope.group.notifications': 'Notifications',
|
||||
'oauth.scope.group.vacay': 'Vacation',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Weather',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'View trips & itineraries',
|
||||
'oauth.scope.trips:read.description': 'Read trips, days, day notes, and members',
|
||||
'oauth.scope.trips:write.label': 'Edit trips & itineraries',
|
||||
'oauth.scope.trips:write.description': 'Create and update trips, days, notes, and manage members',
|
||||
'oauth.scope.trips:delete.label': 'Delete trips',
|
||||
'oauth.scope.trips:delete.description': 'Permanently delete entire trips — this action is irreversible',
|
||||
'oauth.scope.trips:share.label': 'Manage share links',
|
||||
'oauth.scope.trips:share.description': 'Create, update, and revoke public share links for trips',
|
||||
'oauth.scope.places:read.label': 'View places & map data',
|
||||
'oauth.scope.places:read.description': 'Read places, day assignments, tags, and categories',
|
||||
'oauth.scope.places:write.label': 'Manage places',
|
||||
'oauth.scope.places:write.description': 'Create, update, and delete places, assignments, and tags',
|
||||
'oauth.scope.atlas:read.label': 'View Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Read visited countries, regions, and bucket list',
|
||||
'oauth.scope.atlas:write.label': 'Manage Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Mark countries and regions visited, manage bucket list',
|
||||
'oauth.scope.packing:read.label': 'View packing lists',
|
||||
'oauth.scope.packing:read.description': 'Read packing items, bags, and category assignees',
|
||||
'oauth.scope.packing:write.label': 'Manage packing lists',
|
||||
'oauth.scope.packing:write.description': 'Add, update, delete, toggle, and reorder packing items and bags',
|
||||
'oauth.scope.todos:read.label': 'View to-do lists',
|
||||
'oauth.scope.todos:read.description': 'Read trip to-do items and category assignees',
|
||||
'oauth.scope.todos:write.label': 'Manage to-do lists',
|
||||
'oauth.scope.todos:write.description': 'Create, update, toggle, delete, and reorder to-do items',
|
||||
'oauth.scope.budget:read.label': 'View budget',
|
||||
'oauth.scope.budget:read.description': 'Read budget items and expense breakdown',
|
||||
'oauth.scope.budget:write.label': 'Manage budget',
|
||||
'oauth.scope.budget:write.description': 'Create, update, and delete budget items',
|
||||
'oauth.scope.reservations:read.label': 'View reservations',
|
||||
'oauth.scope.reservations:read.description': 'Read reservations and accommodation details',
|
||||
'oauth.scope.reservations:write.label': 'Manage reservations',
|
||||
'oauth.scope.reservations:write.description': 'Create, update, delete, and reorder reservations',
|
||||
'oauth.scope.collab:read.label': 'View collaboration',
|
||||
'oauth.scope.collab:read.description': 'Read collab notes, polls, and messages',
|
||||
'oauth.scope.collab:write.label': 'Manage collaboration',
|
||||
'oauth.scope.collab:write.description': 'Create, update, and delete collab notes, polls, and messages',
|
||||
'oauth.scope.notifications:read.label': 'View notifications',
|
||||
'oauth.scope.notifications:read.description': 'Read in-app notifications and unread counts',
|
||||
'oauth.scope.notifications:write.label': 'Manage notifications',
|
||||
'oauth.scope.notifications:write.description': 'Mark notifications as read and respond to them',
|
||||
'oauth.scope.vacay:read.label': 'View vacation plans',
|
||||
'oauth.scope.vacay:read.description': 'Read vacation planning data, entries, and stats',
|
||||
'oauth.scope.vacay:write.label': 'Manage vacation plans',
|
||||
'oauth.scope.vacay:write.description': 'Create and manage vacation entries, holidays, and team plans',
|
||||
'oauth.scope.geo:read.label': 'Maps & geocoding',
|
||||
'oauth.scope.geo:read.description': 'Search locations, resolve map URLs, and reverse geocode coordinates',
|
||||
'oauth.scope.weather:read.label': 'Weather forecasts',
|
||||
'oauth.scope.weather:read.description': 'Fetch weather forecasts for trip locations and dates',
|
||||
}
|
||||
|
||||
export default en
|
||||
|
||||
@@ -8,6 +8,8 @@ const es: Record<string, string> = {
|
||||
'common.loading': 'Cargando...',
|
||||
'common.import': 'Importar',
|
||||
'common.error': 'Error',
|
||||
'common.unknownError': 'Error desconocido',
|
||||
'common.tooManyAttempts': 'Demasiados intentos. Inténtelo de nuevo más tarde.',
|
||||
'common.back': 'Atrás',
|
||||
'common.all': 'Todo',
|
||||
'common.close': 'Cerrar',
|
||||
@@ -27,11 +29,17 @@ const es: Record<string, string> = {
|
||||
'common.password': 'Contraseña',
|
||||
'common.saving': 'Guardando...',
|
||||
'common.saved': 'Guardado',
|
||||
'common.expand': 'Expandir',
|
||||
'common.collapse': 'Contraer',
|
||||
'trips.reminder': 'Recordatorio',
|
||||
'trips.reminderNone': 'Ninguno',
|
||||
'trips.reminderDay': 'día',
|
||||
'trips.reminderDays': 'días',
|
||||
'trips.reminderCustom': 'Personalizado',
|
||||
'trips.memberRemoved': '{username} eliminado',
|
||||
'trips.memberRemoveError': 'Error al eliminar',
|
||||
'trips.memberAdded': '{username} añadido',
|
||||
'trips.memberAddError': 'Error al añadir',
|
||||
'trips.reminderDaysBefore': 'días antes de la salida',
|
||||
'trips.reminderDisabledHint': 'Los recordatorios de viaje están desactivados. Actívalos en Admin > Configuración > Notificaciones.',
|
||||
'common.update': 'Actualizar',
|
||||
@@ -180,9 +188,6 @@ const es: Record<string, string> = {
|
||||
'admin.notifications.none': 'Desactivado',
|
||||
'admin.notifications.email': 'Correo (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Eventos de notificación',
|
||||
'admin.notifications.eventsHint': 'Elige qué eventos activan notificaciones para todos los usuarios.',
|
||||
'admin.notifications.configureFirst': 'Configura primero los ajustes SMTP o webhook a continuación, luego activa los eventos.',
|
||||
'admin.notifications.save': 'Guardar configuración de notificaciones',
|
||||
'admin.notifications.saved': 'Configuración de notificaciones guardada',
|
||||
'admin.notifications.testWebhook': 'Enviar webhook de prueba',
|
||||
@@ -229,6 +234,7 @@ const es: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'Endpoint MCP',
|
||||
'settings.mcp.clientConfig': 'Configuración del cliente',
|
||||
'settings.mcp.clientConfigHint': 'Reemplaza <your_token> con un token de la lista de abajo. Es posible que debas ajustar la ruta de npx según tu sistema (p. ej. C:\\PROGRA~1\\nodejs\\npx.cmd en Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Reemplaza <your_client_id> y <your_client_secret> con las credenciales del cliente OAuth 2.1 que creaste arriba. mcp-remote abrirá el navegador para completar la autorización la primera vez que te conectes. Es posible que debas ajustar la ruta de npx según tu sistema (p. ej. C:\\PROGRA~1\\nodejs\\npx.cmd en Windows).',
|
||||
'settings.mcp.copy': 'Copiar',
|
||||
'settings.mcp.copied': '¡Copiado!',
|
||||
'settings.mcp.apiTokens': 'Tokens de API',
|
||||
@@ -250,6 +256,48 @@ const es: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': 'Error al crear el token',
|
||||
'settings.mcp.toast.deleted': 'Token eliminado',
|
||||
'settings.mcp.toast.deleteError': 'Error al eliminar el token',
|
||||
'settings.mcp.apiTokensDeprecated': 'Los tokens de API están obsoletos y se eliminarán en una versión futura. Utilice los clientes OAuth 2.1 en su lugar.',
|
||||
'settings.oauth.clients': 'Clientes OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Registre clientes OAuth 2.1 para que las aplicaciones MCP de terceros (Claude Web, Cursor, etc.) puedan conectarse sin tokens estáticos.',
|
||||
'settings.oauth.createClient': 'Nuevo cliente',
|
||||
'settings.oauth.noClients': 'No hay clientes OAuth registrados.',
|
||||
'settings.oauth.clientId': 'ID de cliente',
|
||||
'settings.oauth.clientSecret': 'Secreto de cliente',
|
||||
'settings.oauth.deleteClient': 'Eliminar cliente',
|
||||
'settings.oauth.deleteClientMessage': 'Este cliente y todas las sesiones activas se eliminarán permanentemente. Cualquier aplicación que lo use perderá el acceso inmediatamente.',
|
||||
'settings.oauth.rotateSecret': 'Renovar secreto',
|
||||
'settings.oauth.rotateSecretMessage': 'Se generará un nuevo secreto de cliente y todas las sesiones existentes se invalidarán de inmediato. Actualice su aplicación antes de cerrar este diálogo.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Renovar',
|
||||
'settings.oauth.rotateSecretConfirming': 'Renovando…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Nuevo secreto generado',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Este secreto solo se muestra una vez. Cópielo ahora y actualice su aplicación — todas las sesiones anteriores han sido invalidadas.',
|
||||
'settings.oauth.activeSessions': 'Sesiones OAuth activas',
|
||||
'settings.oauth.sessionScopes': 'Ámbitos',
|
||||
'settings.oauth.sessionExpires': 'Expira',
|
||||
'settings.oauth.revoke': 'Revocar',
|
||||
'settings.oauth.revokeSession': 'Revocar sesión',
|
||||
'settings.oauth.revokeSessionMessage': 'Esto revocará inmediatamente el acceso de esta sesión OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Registrar cliente OAuth',
|
||||
'settings.oauth.modal.presets': 'Ajustes rápidos',
|
||||
'settings.oauth.modal.clientName': 'Nombre de la aplicación',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'ej. Claude Web, Mi app MCP',
|
||||
'settings.oauth.modal.redirectUris': 'URIs de redirección',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Un URI por línea. HTTPS obligatorio (localhost exento). Coincidencia exacta.',
|
||||
'settings.oauth.modal.scopes': 'Ámbitos permitidos',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips y get_trip_summary siempre están disponibles — sin ámbito requerido. Permiten a la IA descubrir los IDs de viaje necesarios.',
|
||||
'settings.oauth.modal.selectAll': 'Seleccionar todo',
|
||||
'settings.oauth.modal.deselectAll': 'Deseleccionar todo',
|
||||
'settings.oauth.modal.creating': 'Registrando…',
|
||||
'settings.oauth.modal.create': 'Registrar cliente',
|
||||
'settings.oauth.modal.createdTitle': 'Cliente registrado',
|
||||
'settings.oauth.modal.createdWarning': 'El secreto del cliente solo se muestra una vez. Cópielo ahora — no se puede recuperar.',
|
||||
'settings.oauth.toast.createError': 'Error al registrar el cliente OAuth',
|
||||
'settings.oauth.toast.deleted': 'Cliente OAuth eliminado',
|
||||
'settings.oauth.toast.deleteError': 'Error al eliminar el cliente OAuth',
|
||||
'settings.oauth.toast.revoked': 'Sesión revocada',
|
||||
'settings.oauth.toast.revokeError': 'Error al revocar la sesión',
|
||||
'settings.oauth.toast.rotateError': 'Error al renovar el secreto del cliente',
|
||||
'settings.account': 'Cuenta',
|
||||
'settings.about': 'Acerca de',
|
||||
'settings.about.reportBug': 'Reportar un error',
|
||||
@@ -363,6 +411,10 @@ const es: Record<string, string> = {
|
||||
'login.mfaHint': 'Abre Google Authenticator, Authy u otra app TOTP.',
|
||||
'login.mfaBack': '← Volver al inicio de sesión',
|
||||
'login.mfaVerify': 'Verificar',
|
||||
'login.invalidInviteLink': 'Enlace de invitación inválido o expirado',
|
||||
'login.oidcFailed': 'Error de inicio de sesión OIDC',
|
||||
'login.usernameRequired': 'El nombre de usuario es obligatorio',
|
||||
'login.passwordMinLength': 'La contraseña debe tener al menos 8 caracteres',
|
||||
'login.oidc.tokenFailed': 'La autenticación falló.',
|
||||
'login.oidc.invalidState': 'Sesión no válida. Inténtalo de nuevo.',
|
||||
'login.demoFailed': 'Falló el acceso a la demo',
|
||||
@@ -397,7 +449,7 @@ const es: Record<string, string> = {
|
||||
'admin.tabs.users': 'Usuarios',
|
||||
'admin.tabs.categories': 'Categorías',
|
||||
'admin.tabs.backup': 'Copia de seguridad',
|
||||
'admin.tabs.audit': 'Audit',
|
||||
'admin.tabs.audit': 'Auditoría',
|
||||
'admin.stats.users': 'Usuarios',
|
||||
'admin.stats.trips': 'Viajes',
|
||||
'admin.stats.places': 'Lugares',
|
||||
@@ -447,6 +499,17 @@ const es: Record<string, string> = {
|
||||
'admin.tabs.settings': 'Ajustes',
|
||||
'admin.allowRegistration': 'Permitir el registro',
|
||||
'admin.allowRegistrationHint': 'Los nuevos usuarios pueden registrarse por sí mismos',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Exigir autenticación en dos factores (2FA)',
|
||||
'admin.requireMfaHint': 'Los usuarios sin 2FA deben completar la configuración en Ajustes antes de usar la aplicación.',
|
||||
'admin.apiKeys': 'Claves API',
|
||||
@@ -525,9 +588,10 @@ const es: Record<string, string> = {
|
||||
'admin.weather.locationHint': 'El tiempo se basa en el primer lugar con coordenadas de cada día. Si no hay ningún lugar asignado a un día, se usa como referencia cualquier lugar de la lista.',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'Tokens MCP',
|
||||
'admin.mcpTokens.title': 'Tokens MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gestionar tokens de API de todos los usuarios',
|
||||
'admin.tabs.mcpTokens': 'Acceso MCP',
|
||||
'admin.mcpTokens.title': 'Acceso MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gestionar sesiones OAuth y tokens de API de todos los usuarios',
|
||||
'admin.mcpTokens.sectionTitle': 'Tokens de API',
|
||||
'admin.mcpTokens.owner': 'Propietario',
|
||||
'admin.mcpTokens.tokenName': 'Nombre del token',
|
||||
'admin.mcpTokens.created': 'Creado',
|
||||
@@ -539,6 +603,17 @@ const es: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token eliminado',
|
||||
'admin.mcpTokens.deleteError': 'No se pudo eliminar el token',
|
||||
'admin.mcpTokens.loadError': 'No se pudieron cargar los tokens',
|
||||
'admin.oauthSessions.sectionTitle': 'Sesiones OAuth',
|
||||
'admin.oauthSessions.clientName': 'Cliente',
|
||||
'admin.oauthSessions.owner': 'Propietario',
|
||||
'admin.oauthSessions.scopes': 'Permisos',
|
||||
'admin.oauthSessions.created': 'Creado',
|
||||
'admin.oauthSessions.empty': 'No hay sesiones OAuth activas',
|
||||
'admin.oauthSessions.revokeTitle': 'Revocar sesión',
|
||||
'admin.oauthSessions.revokeMessage': 'Esto revocará la sesión OAuth inmediatamente. El cliente perderá el acceso MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sesión revocada',
|
||||
'admin.oauthSessions.revokeError': 'No se pudo revocar la sesión',
|
||||
'admin.oauthSessions.loadError': 'No se pudieron cargar las sesiones OAuth',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -633,6 +708,8 @@ const es: Record<string, string> = {
|
||||
'vacay.companyHolidays': 'Festivos de empresa',
|
||||
'vacay.companyHolidaysHint': 'Permitir marcar días festivos comunes de la empresa',
|
||||
'vacay.companyHolidaysNoDeduct': 'Los festivos de empresa no descuentan días de vacaciones.',
|
||||
'vacay.weekStart': 'La semana comienza el',
|
||||
'vacay.weekStartHint': 'Elige si la semana comienza el lunes o el domingo',
|
||||
'vacay.carryOver': 'Arrastrar saldo',
|
||||
'vacay.carryOverHint': 'Trasladar automáticamente los días restantes al año siguiente',
|
||||
'vacay.sharing': 'Compartir',
|
||||
@@ -668,7 +745,7 @@ const es: Record<string, string> = {
|
||||
'vacay.fuseInfo4': 'Ajustes como festivos y festivos de empresa se comparten.',
|
||||
'vacay.fuseInfo5': 'La fusión puede disolverse en cualquier momento por cualquiera de las partes. Tus entradas se conservarán.',
|
||||
'vacay.addCalendar': 'Añadir calendario',
|
||||
'vacay.calendarColor': 'Color',
|
||||
'vacay.calendarColor': 'Color del calendario',
|
||||
'vacay.calendarLabel': 'Etiqueta',
|
||||
'vacay.noCalendars': 'Sin calendarios',
|
||||
|
||||
@@ -846,6 +923,7 @@ const es: Record<string, string> = {
|
||||
'inspector.files': 'Archivos',
|
||||
'inspector.filesCount': '{count} archivos',
|
||||
'inspector.removeFromDay': 'Quitar del día',
|
||||
'inspector.remove': 'Eliminar',
|
||||
'inspector.addToDay': 'Añadir al día',
|
||||
'inspector.confirmedRes': 'Reserva confirmada',
|
||||
'inspector.pendingRes': 'Reserva pendiente',
|
||||
@@ -885,7 +963,7 @@ const es: Record<string, string> = {
|
||||
'reservations.type.car': 'Coche de alquiler',
|
||||
'reservations.type.cruise': 'Crucero',
|
||||
'reservations.type.event': 'Evento',
|
||||
'reservations.type.tour': 'Tour',
|
||||
'reservations.type.tour': 'Excursión',
|
||||
'reservations.type.other': 'Otro',
|
||||
'reservations.confirm.delete': '¿Seguro que quieres eliminar la reserva "{name}"?',
|
||||
'reservations.confirm.deleteTitle': '¿Eliminar reserva?',
|
||||
@@ -969,6 +1047,7 @@ const es: Record<string, string> = {
|
||||
'budget.totalBudget': 'Presupuesto total',
|
||||
'budget.byCategory': 'Por categoría',
|
||||
'budget.editTooltip': 'Haz clic para editar',
|
||||
'budget.linkedToReservation': 'Vinculado a una reserva — edite el nombre allí',
|
||||
'budget.confirm.deleteCategory': '¿Seguro que quieres eliminar la categoría "{name}" con {count} entradas?',
|
||||
'budget.deleteCategory': 'Eliminar categoría',
|
||||
'budget.perPerson': 'Por persona',
|
||||
@@ -978,9 +1057,13 @@ const es: Record<string, string> = {
|
||||
'budget.settlement': 'Liquidación',
|
||||
'budget.settlementInfo': 'Haz clic en el avatar de un miembro en una partida del presupuesto para marcarlo en verde — esto significa que ha pagado. La liquidación muestra quién debe cuánto a quién.',
|
||||
'budget.netBalances': 'Saldos netos',
|
||||
'budget.linkedToReservation': 'Vinculado a una reserva — edita el nombre allí',
|
||||
|
||||
// Files
|
||||
'files.title': 'Archivos',
|
||||
'files.pageTitle': 'Archivos y documentos',
|
||||
'files.subtitle': '{count} archivos para {trip}',
|
||||
'files.downloadPdf': 'Descargar PDF',
|
||||
'files.count': '{count} archivos',
|
||||
'files.countSingular': '1 archivo',
|
||||
'files.uploaded': '{count} archivos subidos',
|
||||
@@ -1045,7 +1128,9 @@ const es: Record<string, string> = {
|
||||
'packing.template': 'Plantilla',
|
||||
'packing.templateApplied': '{count} artículos añadidos desde plantilla',
|
||||
'packing.templateError': 'Error al aplicar plantilla',
|
||||
'packing.assignUser': 'Asignar usuario',
|
||||
'packing.saveAsTemplate': 'Guardar como plantilla',
|
||||
'packing.templateName': 'Nombre de la plantilla',
|
||||
'packing.templateSaved': 'Lista de equipaje guardada como plantilla',
|
||||
'packing.noMembers': 'Sin miembros',
|
||||
'packing.bags': 'Equipaje',
|
||||
'packing.noBag': 'Sin asignar',
|
||||
@@ -1202,6 +1287,13 @@ const es: Record<string, string> = {
|
||||
'backup.keep.forever': 'Conservar para siempre',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Fotos',
|
||||
'photos.subtitle': '{count} fotos para {trip}',
|
||||
'photos.dropHere': 'Suelta fotos aquí...',
|
||||
'photos.dropHereActive': 'Suelta fotos aquí',
|
||||
'photos.captionForAll': 'Leyenda (para todos)',
|
||||
'photos.captionPlaceholder': 'Leyenda opcional...',
|
||||
'photos.addCaption': 'Añadir leyenda...',
|
||||
'photos.allDays': 'Todos los días',
|
||||
'photos.noPhotos': 'Aún no hay fotos',
|
||||
'photos.uploadHint': 'Sube y organiza las fotos compartidas de este viaje',
|
||||
@@ -1209,6 +1301,12 @@ const es: Record<string, string> = {
|
||||
'photos.linkPlace': 'Vincular lugar',
|
||||
'photos.noPlace': 'Sin lugar',
|
||||
'photos.uploadN': 'Subida de {n} foto(s)',
|
||||
'photos.linkDay': 'Vincular día',
|
||||
'photos.noDay': 'Ningún día',
|
||||
'photos.dayLabel': 'Día {number}',
|
||||
'photos.photoSelected': 'Foto seleccionada',
|
||||
'photos.photosSelected': 'Fotos seleccionadas',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · máx. 10 MB · hasta 30 fotos',
|
||||
'admin.addons.catalog.memories.name': 'Fotos (Immich)',
|
||||
'admin.addons.catalog.memories.description': 'Comparte fotos de viaje a través de tu instancia de Immich',
|
||||
'admin.addons.catalog.mcp.name': 'MCP',
|
||||
@@ -1251,6 +1349,7 @@ const es: Record<string, string> = {
|
||||
'planner.routeCalculated': 'Ruta calculada',
|
||||
'planner.routeCalcFailed': 'No se pudo calcular la ruta',
|
||||
'planner.routeError': 'Error al calcular la ruta',
|
||||
'planner.icsExportFailed': 'Error al exportar ICS',
|
||||
'planner.routeOptimized': 'Ruta optimizada',
|
||||
'planner.reservationUpdated': 'Reserva actualizada',
|
||||
'planner.reservationAdded': 'Reserva añadida',
|
||||
@@ -1325,8 +1424,8 @@ const es: Record<string, string> = {
|
||||
'day.hotelDayRange': 'Aplicar a los días',
|
||||
'day.noPlacesForHotel': 'Añade primero lugares al viaje',
|
||||
'day.allDays': 'Todos',
|
||||
'day.checkIn': 'Check-in',
|
||||
'day.checkOut': 'Check-out',
|
||||
'day.checkIn': 'Registro de entrada',
|
||||
'day.checkOut': 'Registro de salida',
|
||||
'day.confirmation': 'Confirmación',
|
||||
'day.editAccommodation': 'Editar alojamiento',
|
||||
'day.reservations': 'Reservas',
|
||||
@@ -1335,6 +1434,7 @@ const es: Record<string, string> = {
|
||||
'memories.title': 'Fotos',
|
||||
'memories.notConnected': 'Immich no conectado',
|
||||
'memories.notConnectedHint': 'Conecta tu instancia de Immich en Ajustes para ver tus fotos de viaje aquí.',
|
||||
'memories.notConnectedMultipleHint': 'Conecta alguno de estos proveedores de fotos: {provider_names} en Configuración para poder añadir fotos a este viaje.',
|
||||
'memories.noDates': 'Añade fechas a tu viaje para cargar fotos.',
|
||||
'memories.noPhotos': 'No se encontraron fotos',
|
||||
'memories.noPhotosHint': 'No se encontraron fotos en Immich para el rango de fechas de este viaje.',
|
||||
@@ -1345,26 +1445,38 @@ const es: Record<string, string> = {
|
||||
'memories.reviewTitle': 'Revisar tus fotos',
|
||||
'memories.reviewHint': 'Haz clic en las fotos para excluirlas de compartir.',
|
||||
'memories.shareCount': 'Compartir {count} fotos',
|
||||
'memories.immichUrl': 'URL del servidor Immich',
|
||||
'memories.immichApiKey': 'Clave API',
|
||||
'memories.providerUrl': 'URL del servidor',
|
||||
'memories.providerApiKey': 'Clave API',
|
||||
'memories.providerUsername': 'Nombre de usuario',
|
||||
'memories.providerPassword': 'Contraseña',
|
||||
'memories.providerOTP': 'Código MFA (si está habilitado)',
|
||||
'memories.skipSSLVerification': 'Omitir verificación del certificado SSL',
|
||||
'memories.providerUrlHintSynology': 'Incluye la ruta de la aplicación Photos en la URL, p.ej. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Probar conexión',
|
||||
'memories.testFirst': 'Probar conexión primero',
|
||||
'memories.connected': 'Conectado',
|
||||
'memories.disconnected': 'No conectado',
|
||||
'memories.connectionSuccess': 'Conectado a Immich',
|
||||
'memories.connectionError': 'No se pudo conectar a Immich',
|
||||
'memories.saved': 'Configuración de Immich guardada',
|
||||
'memories.saved': 'Configuración de {provider_name} guardada',
|
||||
'memories.providerDisconnectedBanner': 'Se perdió la conexión con {provider_name}. Vuelve a conectar en Configuración para ver las fotos.',
|
||||
'memories.saveError': 'No se pudieron guardar los ajustes de {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'La ruta de guardado no está configurada para este proveedor',
|
||||
'memories.testRouteNotConfigured': 'La ruta de prueba no está configurada para este proveedor',
|
||||
'memories.fillRequiredFields': 'Por favor complete todos los campos requeridos',
|
||||
'memories.oldest': 'Más antiguas',
|
||||
'memories.newest': 'Más recientes',
|
||||
'memories.allLocations': 'Todas las ubicaciones',
|
||||
'memories.addPhotos': 'Añadir fotos',
|
||||
'memories.linkAlbum': 'Vincular álbum',
|
||||
'memories.selectAlbum': 'Seleccionar álbum de Immich',
|
||||
'memories.selectAlbumMultiple': 'Seleccionar álbum',
|
||||
'memories.noAlbums': 'No se encontraron álbumes',
|
||||
'memories.syncAlbum': 'Sincronizar álbum',
|
||||
'memories.unlinkAlbum': 'Desvincular',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': 'Seleccionar fotos de Immich',
|
||||
'memories.selectPhotosMultiple': 'Seleccionar fotos',
|
||||
'memories.selectHint': 'Toca las fotos para seleccionarlas.',
|
||||
'memories.selected': 'seleccionado(s)',
|
||||
'memories.addSelected': 'Añadir {count} fotos',
|
||||
@@ -1479,8 +1591,8 @@ const es: Record<string, string> = {
|
||||
'reservations.meta.trainNumber': 'N° de tren',
|
||||
'reservations.meta.platform': 'Andén',
|
||||
'reservations.meta.seat': 'Asiento',
|
||||
'reservations.meta.checkIn': 'Check-in',
|
||||
'reservations.meta.checkOut': 'Check-out',
|
||||
'reservations.meta.checkIn': 'Registro de entrada',
|
||||
'reservations.meta.checkOut': 'Registro de salida',
|
||||
'reservations.meta.linkAccommodation': 'Alojamiento',
|
||||
'reservations.meta.pickAccommodation': 'Vincular con alojamiento',
|
||||
'reservations.meta.noAccommodation': 'Ninguno',
|
||||
@@ -1575,6 +1687,8 @@ const es: Record<string, string> = {
|
||||
'notifications.markUnread': 'Marcar como no leída',
|
||||
'notifications.delete': 'Eliminar',
|
||||
'notifications.system': 'Sistema',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos desconectado',
|
||||
'notifications.synologySessionCleared.text': 'Tu servidor o cuenta ha cambiado — ve a Configuración para probar la conexión de nuevo.',
|
||||
'memories.error.loadAlbums': 'Error al cargar los álbumes',
|
||||
'memories.error.linkAlbum': 'Error al vincular el álbum',
|
||||
'memories.error.unlinkAlbum': 'Error al desvincular el álbum',
|
||||
@@ -1697,6 +1811,306 @@ const es: Record<string, string> = {
|
||||
'notif.generic.text': 'Tienes una nueva notificación',
|
||||
'notif.dev.unknown_event.title': '[DEV] Evento desconocido',
|
||||
'notif.dev.unknown_event.text': 'El tipo de evento "{event}" no está registrado en EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'justo ahora',
|
||||
'common.hoursAgo': 'hace {count}h',
|
||||
'common.daysAgo': 'hace {count}d',
|
||||
'budget.linkedToReservation': 'Vinculado a una reserva — edita el nombre allí',
|
||||
'packing.saveAsTemplate': 'Guardar como plantilla',
|
||||
'packing.templateName': 'Nombre de la plantilla',
|
||||
'packing.templateSaved': 'Lista de equipaje guardada como plantilla',
|
||||
'memories.notConnectedMultipleHint': 'Conecta cualquiera de estos proveedores de fotos: {provider_names} en Ajustes para poder añadir fotos a este viaje.',
|
||||
'memories.providerUrl': 'URL del servidor',
|
||||
'memories.providerApiKey': 'Clave API',
|
||||
'memories.providerUsername': 'Nombre de usuario',
|
||||
'memories.providerPassword': 'Contraseña',
|
||||
'memories.saveError': 'No se pudo guardar la configuración de {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Seleccionar álbum',
|
||||
'memories.selectPhotosMultiple': 'Seleccionar fotos',
|
||||
'journey.title': 'Travesía',
|
||||
'journey.subtitle': 'Registra tus viajes en tiempo real',
|
||||
'journey.new': 'Nueva travesía',
|
||||
'journey.create': 'Crear',
|
||||
'journey.titlePlaceholder': '¿A dónde vas?',
|
||||
'journey.empty': 'Aún no hay travesías',
|
||||
'journey.emptyHint': 'Empieza a documentar tu próximo viaje',
|
||||
'journey.deleted': 'Travesía eliminada',
|
||||
'journey.createError': 'No se pudo crear la travesía',
|
||||
'journey.deleteError': 'No se pudo eliminar la travesía',
|
||||
'journey.deleteConfirmTitle': 'Eliminar',
|
||||
'journey.deleteConfirmMessage': '¿Eliminar "{title}"? Esta acción no se puede deshacer.',
|
||||
'journey.deleteConfirmGeneric': '¿Estás seguro de que quieres eliminar esto?',
|
||||
'journey.notFound': 'Travesía no encontrada',
|
||||
'journey.photos': 'Fotos',
|
||||
'journey.timelineEmpty': 'Aún no hay paradas',
|
||||
'journey.timelineEmptyHint': 'Añade un registro de ubicación o escribe una entrada de diario para empezar',
|
||||
'journey.status.draft': 'Borrador',
|
||||
'journey.status.active': 'Activa',
|
||||
'journey.status.completed': 'Completada',
|
||||
'journey.status.upcoming': 'Próxima',
|
||||
'journey.checkin.add': 'Registrar ubicación',
|
||||
'journey.checkin.namePlaceholder': 'Nombre del lugar',
|
||||
'journey.checkin.notesPlaceholder': 'Notas (opcional)',
|
||||
'journey.checkin.save': 'Guardar',
|
||||
'journey.checkin.error': 'No se pudo guardar el registro',
|
||||
'journey.entry.add': 'Diario',
|
||||
'journey.entry.edit': 'Editar entrada',
|
||||
'journey.entry.titlePlaceholder': 'Título (opcional)',
|
||||
'journey.entry.bodyPlaceholder': '¿Qué pasó hoy?',
|
||||
'journey.entry.save': 'Guardar',
|
||||
'journey.entry.error': 'No se pudo guardar la entrada',
|
||||
'journey.photo.add': 'Foto',
|
||||
'journey.photo.uploadError': 'Error al subir',
|
||||
'journey.share.share': 'Compartir',
|
||||
'journey.share.public': 'Público',
|
||||
'journey.share.linkCopied': 'Enlace público copiado',
|
||||
'journey.share.disabled': 'Compartir público desactivado',
|
||||
'journey.editor.titlePlaceholder': 'Dale un nombre a este momento...',
|
||||
'journey.editor.bodyPlaceholder': 'Cuenta la historia de este día...',
|
||||
'journey.editor.placePlaceholder': 'Ubicación (opcional)',
|
||||
'journey.editor.tagsPlaceholder': 'Etiquetas: joya oculta, mejor comida, hay que volver...',
|
||||
'journey.visibility.private': 'Privado',
|
||||
'journey.visibility.shared': 'Compartido',
|
||||
'journey.visibility.public': 'Público',
|
||||
'journey.emptyState.title': 'Tu historia empieza aquí',
|
||||
'journey.emptyState.subtitle': 'Registra una ubicación o escribe tu primera entrada de diario',
|
||||
'journey.frontpage.subtitle': 'Convierte tus viajes en historias que nunca olvidarás',
|
||||
'journey.frontpage.createJourney': 'Crear travesía',
|
||||
'journey.frontpage.activeJourney': 'Travesía activa',
|
||||
'journey.frontpage.allJourneys': 'Todas las travesías',
|
||||
'journey.frontpage.journeys': 'travesías',
|
||||
'journey.frontpage.createNew': 'Crear una nueva travesía',
|
||||
'journey.frontpage.createNewSub': 'Elige viajes, escribe historias, comparte tus aventuras',
|
||||
'journey.frontpage.live': 'En vivo',
|
||||
'journey.frontpage.synced': 'Sincronizado',
|
||||
'journey.frontpage.continueWriting': 'Seguir escribiendo',
|
||||
'journey.frontpage.updated': 'Actualizado {time}',
|
||||
'journey.frontpage.suggestionLabel': 'El viaje acaba de terminar',
|
||||
'journey.frontpage.suggestionText': 'Convierte <strong>{title}</strong> en una travesía',
|
||||
'journey.frontpage.dismiss': 'Descartar',
|
||||
'journey.frontpage.journeyName': 'Nombre de la travesía',
|
||||
'journey.frontpage.namePlaceholder': 'p. ej. Sudeste Asiático 2026',
|
||||
'journey.frontpage.selectTrips': 'Seleccionar viajes',
|
||||
'journey.frontpage.tripsSelected': 'viajes seleccionados',
|
||||
'journey.frontpage.trips': 'viajes',
|
||||
'journey.frontpage.placesImported': 'lugares serán importados',
|
||||
'journey.frontpage.places': 'lugares',
|
||||
'journey.detail.backToJourney': 'Volver a la travesía',
|
||||
'journey.detail.syncedWithTrips': 'Sincronizado con viajes',
|
||||
'journey.detail.addEntry': 'Añadir entrada',
|
||||
'journey.detail.newEntry': 'Nueva entrada',
|
||||
'journey.detail.editEntry': 'Editar entrada',
|
||||
'journey.detail.noEntries': 'Aún no hay entradas',
|
||||
'journey.detail.noEntriesHint': 'Añade un viaje para empezar con entradas preliminares',
|
||||
'journey.detail.noPhotos': 'Aún no hay fotos',
|
||||
'journey.detail.noPhotosHint': 'Sube fotos a las entradas o explora tu biblioteca de Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Estadísticas de la travesía',
|
||||
'journey.detail.syncedTrips': 'Viajes sincronizados',
|
||||
'journey.detail.noTripsLinked': 'Aún no hay viajes vinculados',
|
||||
'journey.detail.contributors': 'Colaboradores',
|
||||
'journey.detail.readMore': 'Leer más',
|
||||
'journey.detail.prosCons': 'Pros y contras',
|
||||
'journey.stats.days': 'Días',
|
||||
'journey.stats.cities': 'Ciudades',
|
||||
'journey.stats.entries': 'Entradas',
|
||||
'journey.stats.photos': 'Fotos',
|
||||
'journey.stats.places': 'Lugares',
|
||||
'journey.verdict.lovedIt': 'Me encantó',
|
||||
'journey.verdict.couldBeBetter': 'Podría mejorar',
|
||||
'journey.synced.places': 'lugares',
|
||||
'journey.synced.synced': 'sincronizado',
|
||||
'journey.editor.uploadPhotos': 'Subir fotos',
|
||||
'journey.editor.fromGallery': 'Desde galería',
|
||||
'journey.editor.allPhotosAdded': 'Todas las fotos ya fueron añadidas',
|
||||
'journey.editor.writeStory': 'Escribe tu historia...',
|
||||
'journey.editor.prosCons': 'Pros y contras',
|
||||
'journey.editor.pros': 'Pros',
|
||||
'journey.editor.cons': 'Contras',
|
||||
'journey.editor.proPlaceholder': 'Algo genial...',
|
||||
'journey.editor.conPlaceholder': 'No tan genial...',
|
||||
'journey.editor.addAnother': 'Añadir otro',
|
||||
'journey.editor.date': 'Fecha',
|
||||
'journey.editor.location': 'Ubicación',
|
||||
'journey.editor.searchLocation': 'Buscar ubicación...',
|
||||
'journey.editor.mood': 'Estado de ánimo',
|
||||
'journey.editor.weather': 'Clima',
|
||||
'journey.editor.photoFirst': '1º',
|
||||
'journey.editor.makeFirst': 'Hacer 1º',
|
||||
'journey.mood.amazing': 'Increíble',
|
||||
'journey.mood.good': 'Bien',
|
||||
'journey.mood.neutral': 'Neutral',
|
||||
'journey.mood.rough': 'Difícil',
|
||||
'journey.weather.sunny': 'Soleado',
|
||||
'journey.weather.partly': 'Parcialmente nublado',
|
||||
'journey.weather.cloudy': 'Nublado',
|
||||
'journey.weather.rainy': 'Lluvioso',
|
||||
'journey.weather.stormy': 'Tormentoso',
|
||||
'journey.weather.cold': 'Nevado',
|
||||
'journey.trips.linkTrip': 'Vincular viaje',
|
||||
'journey.trips.searchTrip': 'Buscar viaje',
|
||||
'journey.trips.searchPlaceholder': 'Nombre del viaje o destino...',
|
||||
'journey.trips.noTripsAvailable': 'No hay viajes disponibles',
|
||||
'journey.trips.link': 'Vincular',
|
||||
'journey.trips.tripLinked': 'Viaje vinculado',
|
||||
'journey.trips.linkFailed': 'No se pudo vincular el viaje',
|
||||
'journey.trips.addTrip': 'Añadir viaje',
|
||||
'journey.trips.unlinkTrip': 'Desvincular viaje',
|
||||
'journey.trips.unlinkMessage': '¿Desvincular "{title}"? Todas las entradas y fotos sincronizadas de este viaje se eliminarán permanentemente. Esta acción no se puede deshacer.',
|
||||
'journey.trips.unlink': 'Desvincular',
|
||||
'journey.trips.tripUnlinked': 'Viaje desvinculado',
|
||||
'journey.trips.unlinkFailed': 'No se pudo desvincular el viaje',
|
||||
'journey.trips.noTripsLinkedSettings': 'No hay viajes vinculados',
|
||||
'journey.contributors.invite': 'Invitar colaborador',
|
||||
'journey.contributors.searchUser': 'Buscar usuario',
|
||||
'journey.contributors.searchPlaceholder': 'Nombre de usuario o correo...',
|
||||
'journey.contributors.noUsers': 'No se encontraron usuarios',
|
||||
'journey.contributors.role': 'Rol',
|
||||
'journey.contributors.added': 'Colaborador añadido',
|
||||
'journey.contributors.addFailed': 'No se pudo añadir al colaborador',
|
||||
'journey.share.publicShare': 'Compartir público',
|
||||
'journey.share.createLink': 'Crear enlace para compartir',
|
||||
'journey.share.linkCreated': 'Enlace para compartir creado',
|
||||
'journey.share.createFailed': 'No se pudo crear el enlace',
|
||||
'journey.share.copy': 'Copiar',
|
||||
'journey.share.copied': '¡Copiado!',
|
||||
'journey.share.timeline': 'Cronología',
|
||||
'journey.share.gallery': 'Galería',
|
||||
'journey.share.map': 'Mapa',
|
||||
'journey.share.removeLink': 'Eliminar enlace para compartir',
|
||||
'journey.share.linkDeleted': 'Enlace para compartir eliminado',
|
||||
'journey.share.deleteFailed': 'No se pudo eliminar',
|
||||
'journey.share.updateFailed': 'No se pudo actualizar',
|
||||
'journey.settings.title': 'Ajustes de la travesía',
|
||||
'journey.settings.coverImage': 'Imagen de portada',
|
||||
'journey.settings.changeCover': 'Cambiar portada',
|
||||
'journey.settings.addCover': 'Añadir imagen de portada',
|
||||
'journey.settings.name': 'Nombre',
|
||||
'journey.settings.subtitle': 'Subtítulo',
|
||||
'journey.settings.subtitlePlaceholder': 'p. ej. Tailandia, Vietnam y Camboya',
|
||||
'journey.settings.delete': 'Eliminar',
|
||||
'journey.settings.deleteJourney': 'Eliminar travesía',
|
||||
'journey.settings.deleteMessage': '¿Eliminar "{title}"? Todas las entradas y fotos se perderán.',
|
||||
'journey.settings.saved': 'Ajustes guardados',
|
||||
'journey.settings.saveFailed': 'No se pudo guardar',
|
||||
'journey.settings.coverUpdated': 'Portada actualizada',
|
||||
'journey.settings.coverFailed': 'Error al subir',
|
||||
'journey.settings.failedToDelete': 'Error al eliminar',
|
||||
'journey.entries.deleteTitle': 'Eliminar entrada',
|
||||
'journey.photosUploaded': '{count} fotos subidas',
|
||||
'journey.photosAdded': '{count} fotos añadidas',
|
||||
'journey.public.notFound': 'No encontrado',
|
||||
'journey.public.notFoundMessage': 'Esta travesía no existe o el enlace ha expirado.',
|
||||
'journey.public.readOnly': 'Solo lectura · Travesía pública',
|
||||
'journey.public.tagline': 'Kit de recursos y exploración de viajes',
|
||||
'journey.public.sharedVia': 'Compartido mediante',
|
||||
'journey.public.madeWith': 'Hecho con',
|
||||
'journey.pdf.journeyBook': 'Libro de travesía',
|
||||
'journey.pdf.madeWith': 'Hecho con TREK',
|
||||
'journey.pdf.day': 'Día',
|
||||
'journey.pdf.theEnd': 'Fin',
|
||||
'journey.pdf.saveAsPdf': 'Guardar como PDF',
|
||||
'journey.pdf.pages': 'páginas',
|
||||
'dashboard.greeting.morning': 'Buenos días,',
|
||||
'dashboard.greeting.afternoon': 'Buenas tardes,',
|
||||
'dashboard.greeting.evening': 'Buenas noches,',
|
||||
'dashboard.mobile.liveNow': 'En vivo ahora',
|
||||
'dashboard.mobile.tripProgress': 'Progreso del viaje',
|
||||
'dashboard.mobile.daysLeft': '{count} días restantes',
|
||||
'dashboard.mobile.places': 'Lugares',
|
||||
'dashboard.mobile.buddies': 'Compañeros',
|
||||
'dashboard.mobile.newTrip': 'Nuevo viaje',
|
||||
'dashboard.mobile.currency': 'Moneda',
|
||||
'dashboard.mobile.timezone': 'Zona horaria',
|
||||
'dashboard.mobile.upcomingTrips': 'Próximos viajes',
|
||||
'dashboard.mobile.yourTrips': 'Tus viajes',
|
||||
'dashboard.mobile.trips': 'viajes',
|
||||
'dashboard.mobile.starts': 'Comienza',
|
||||
'dashboard.mobile.duration': 'Duración',
|
||||
'dashboard.mobile.day': 'día',
|
||||
'dashboard.mobile.days': 'días',
|
||||
'dashboard.mobile.ongoing': 'En curso',
|
||||
'dashboard.mobile.startsToday': 'Comienza hoy',
|
||||
'dashboard.mobile.tomorrow': 'Mañana',
|
||||
'dashboard.mobile.inDays': 'En {count} días',
|
||||
'dashboard.mobile.inMonths': 'En {count} meses',
|
||||
'dashboard.mobile.completed': 'Completado',
|
||||
'dashboard.mobile.currencyConverter': 'Conversor de monedas',
|
||||
'nav.profile': 'Perfil',
|
||||
'nav.bottomSettings': 'Ajustes',
|
||||
'nav.bottomAdmin': 'Administración',
|
||||
'nav.bottomLogout': 'Cerrar sesión',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Añadir lugar',
|
||||
'dayplan.mobile.searchPlaces': 'Buscar lugares...',
|
||||
'dayplan.mobile.allAssigned': 'Todos los lugares asignados',
|
||||
'dayplan.mobile.noMatch': 'Sin coincidencias',
|
||||
'dayplan.mobile.createNew': 'Crear nuevo lugar',
|
||||
'admin.addons.catalog.journey.name': 'Travesía',
|
||||
'admin.addons.catalog.journey.description': 'Seguimiento de viajes y diario de viajero con registros de ubicación, fotos e historias diarias',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Viajes',
|
||||
'oauth.scope.group.places': 'Lugares',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Equipaje',
|
||||
'oauth.scope.group.todos': 'Tareas',
|
||||
'oauth.scope.group.budget': 'Presupuesto',
|
||||
'oauth.scope.group.reservations': 'Reservas',
|
||||
'oauth.scope.group.collab': 'Colaboración',
|
||||
'oauth.scope.group.notifications': 'Notificaciones',
|
||||
'oauth.scope.group.vacay': 'Vacaciones',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Clima',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Ver viajes e itinerarios',
|
||||
'oauth.scope.trips:read.description': 'Leer viajes, días, notas y miembros',
|
||||
'oauth.scope.trips:write.label': 'Editar viajes e itinerarios',
|
||||
'oauth.scope.trips:write.description': 'Crear y actualizar viajes, días, notas y gestionar miembros',
|
||||
'oauth.scope.trips:delete.label': 'Eliminar viajes',
|
||||
'oauth.scope.trips:delete.description': 'Eliminar viajes permanentemente — esta acción es irreversible',
|
||||
'oauth.scope.trips:share.label': 'Gestionar enlaces de compartir',
|
||||
'oauth.scope.trips:share.description': 'Crear, actualizar y revocar enlaces públicos de viaje',
|
||||
'oauth.scope.places:read.label': 'Ver lugares y datos del mapa',
|
||||
'oauth.scope.places:read.description': 'Leer lugares, asignaciones de días, etiquetas y categorías',
|
||||
'oauth.scope.places:write.label': 'Gestionar lugares',
|
||||
'oauth.scope.places:write.description': 'Crear, actualizar y eliminar lugares, asignaciones y etiquetas',
|
||||
'oauth.scope.atlas:read.label': 'Ver Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Leer países visitados, regiones y lista de deseos',
|
||||
'oauth.scope.atlas:write.label': 'Gestionar Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Marcar países y regiones como visitados, gestionar lista de deseos',
|
||||
'oauth.scope.packing:read.label': 'Ver listas de equipaje',
|
||||
'oauth.scope.packing:read.description': 'Leer artículos, maletas y responsables de categoría',
|
||||
'oauth.scope.packing:write.label': 'Gestionar listas de equipaje',
|
||||
'oauth.scope.packing:write.description': 'Agregar, actualizar, eliminar, marcar y reordenar artículos y maletas',
|
||||
'oauth.scope.todos:read.label': 'Ver listas de tareas',
|
||||
'oauth.scope.todos:read.description': 'Leer tareas del viaje y responsables de categoría',
|
||||
'oauth.scope.todos:write.label': 'Gestionar listas de tareas',
|
||||
'oauth.scope.todos:write.description': 'Crear, actualizar, marcar, eliminar y reordenar tareas',
|
||||
'oauth.scope.budget:read.label': 'Ver presupuesto',
|
||||
'oauth.scope.budget:read.description': 'Leer partidas de presupuesto y desglose de gastos',
|
||||
'oauth.scope.budget:write.label': 'Gestionar presupuesto',
|
||||
'oauth.scope.budget:write.description': 'Crear, actualizar y eliminar partidas de presupuesto',
|
||||
'oauth.scope.reservations:read.label': 'Ver reservas',
|
||||
'oauth.scope.reservations:read.description': 'Leer reservas y detalles de alojamiento',
|
||||
'oauth.scope.reservations:write.label': 'Gestionar reservas',
|
||||
'oauth.scope.reservations:write.description': 'Crear, actualizar, eliminar y reordenar reservas',
|
||||
'oauth.scope.collab:read.label': 'Ver colaboración',
|
||||
'oauth.scope.collab:read.description': 'Leer notas colaborativas, encuestas y mensajes',
|
||||
'oauth.scope.collab:write.label': 'Gestionar colaboración',
|
||||
'oauth.scope.collab:write.description': 'Crear, actualizar y eliminar notas, encuestas y mensajes',
|
||||
'oauth.scope.notifications:read.label': 'Ver notificaciones',
|
||||
'oauth.scope.notifications:read.description': 'Leer notificaciones y conteos no leídos',
|
||||
'oauth.scope.notifications:write.label': 'Gestionar notificaciones',
|
||||
'oauth.scope.notifications:write.description': 'Marcar notificaciones como leídas y responderlas',
|
||||
'oauth.scope.vacay:read.label': 'Ver planes de vacaciones',
|
||||
'oauth.scope.vacay:read.description': 'Leer datos de planificación, entradas y estadísticas de vacaciones',
|
||||
'oauth.scope.vacay:write.label': 'Gestionar planes de vacaciones',
|
||||
'oauth.scope.vacay:write.description': 'Crear y gestionar entradas de vacaciones, festivos y planes de equipo',
|
||||
'oauth.scope.geo:read.label': 'Mapas y geocodificación',
|
||||
'oauth.scope.geo:read.description': 'Buscar lugares, resolver URLs de mapa y geocodificar coordenadas',
|
||||
'oauth.scope.weather:read.label': 'Previsiones meteorológicas',
|
||||
'oauth.scope.weather:read.description': 'Obtener previsiones meteorológicas para lugares y fechas del viaje',
|
||||
}
|
||||
|
||||
export default es
|
||||
|
||||
@@ -8,6 +8,8 @@ const fr: Record<string, string> = {
|
||||
'common.loading': 'Chargement…',
|
||||
'common.import': 'Importer',
|
||||
'common.error': 'Erreur',
|
||||
'common.unknownError': 'Erreur inconnue',
|
||||
'common.tooManyAttempts': 'Trop de tentatives. Veuillez réessayer plus tard.',
|
||||
'common.back': 'Retour',
|
||||
'common.all': 'Tout',
|
||||
'common.close': 'Fermer',
|
||||
@@ -27,6 +29,12 @@ const fr: Record<string, string> = {
|
||||
'common.password': 'Mot de passe',
|
||||
'common.saving': 'Enregistrement…',
|
||||
'common.saved': 'Enregistré',
|
||||
'trips.memberRemoved': '{username} supprimé',
|
||||
'trips.memberRemoveError': 'Échec de la suppression',
|
||||
'trips.memberAdded': '{username} ajouté',
|
||||
'trips.memberAddError': "Échec de l'ajout",
|
||||
'common.expand': 'Développer',
|
||||
'common.collapse': 'Réduire',
|
||||
'trips.reminder': 'Rappel',
|
||||
'trips.reminderNone': 'Aucun',
|
||||
'trips.reminderDay': 'jour',
|
||||
@@ -179,9 +187,6 @@ const fr: Record<string, string> = {
|
||||
'admin.notifications.none': 'Désactivé',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Événements de notification',
|
||||
'admin.notifications.eventsHint': 'Choisissez quels événements déclenchent des notifications pour tous les utilisateurs.',
|
||||
'admin.notifications.configureFirst': 'Configurez d\'abord les paramètres SMTP ou webhook ci-dessous, puis activez les événements.',
|
||||
'admin.notifications.save': 'Enregistrer les paramètres de notification',
|
||||
'admin.notifications.saved': 'Paramètres de notification enregistrés',
|
||||
'admin.notifications.testWebhook': 'Envoyer un webhook de test',
|
||||
@@ -228,6 +233,7 @@ const fr: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'Point de terminaison MCP',
|
||||
'settings.mcp.clientConfig': 'Configuration du client',
|
||||
'settings.mcp.clientConfigHint': 'Remplacez <your_token> par un token API de la liste ci-dessous. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Remplacez <your_client_id> et <your_client_secret> par les identifiants affichés dans le client OAuth 2.1 créé ci-dessus. mcp-remote ouvrira votre navigateur pour finaliser l\'autorisation lors de la première connexion. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).',
|
||||
'settings.mcp.copy': 'Copier',
|
||||
'settings.mcp.copied': 'Copié !',
|
||||
'settings.mcp.apiTokens': 'Tokens API',
|
||||
@@ -249,6 +255,48 @@ const fr: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': 'Impossible de créer le token',
|
||||
'settings.mcp.toast.deleted': 'Token supprimé',
|
||||
'settings.mcp.toast.deleteError': 'Impossible de supprimer le token',
|
||||
'settings.mcp.apiTokensDeprecated': 'Les tokens API sont dépréciés et seront supprimés dans une prochaine version. Veuillez utiliser les clients OAuth 2.1 à la place.',
|
||||
'settings.oauth.clients': 'Clients OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Enregistrez des clients OAuth 2.1 pour permettre à des applications MCP tierces (Claude Web, Cursor, etc.) de se connecter sans tokens statiques.',
|
||||
'settings.oauth.createClient': 'Nouveau client',
|
||||
'settings.oauth.noClients': 'Aucun client OAuth enregistré.',
|
||||
'settings.oauth.clientId': 'ID client',
|
||||
'settings.oauth.clientSecret': 'Secret client',
|
||||
'settings.oauth.deleteClient': 'Supprimer le client',
|
||||
'settings.oauth.deleteClientMessage': 'Ce client et toutes les sessions actives seront définitivement supprimés. Toute application l\'utilisant perdra immédiatement l\'accès.',
|
||||
'settings.oauth.rotateSecret': 'Renouveler le secret',
|
||||
'settings.oauth.rotateSecretMessage': 'Un nouveau secret client sera généré et toutes les sessions existantes seront immédiatement invalidées. Mettez à jour votre application avant de fermer cette fenêtre.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Renouveler',
|
||||
'settings.oauth.rotateSecretConfirming': 'Renouvellement…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Nouveau secret généré',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Ce secret n\'est affiché qu\'une seule fois. Copiez-le maintenant et mettez à jour votre application — toutes les sessions précédentes ont été invalidées.',
|
||||
'settings.oauth.activeSessions': 'Sessions OAuth actives',
|
||||
'settings.oauth.sessionScopes': 'Portées',
|
||||
'settings.oauth.sessionExpires': 'Expire',
|
||||
'settings.oauth.revoke': 'Révoquer',
|
||||
'settings.oauth.revokeSession': 'Révoquer la session',
|
||||
'settings.oauth.revokeSessionMessage': 'Cela révoquera immédiatement l\'accès pour cette session OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Enregistrer un client OAuth',
|
||||
'settings.oauth.modal.presets': 'Préréglages rapides',
|
||||
'settings.oauth.modal.clientName': 'Nom de l\'application',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'ex. Claude Web, Mon app MCP',
|
||||
'settings.oauth.modal.redirectUris': 'URIs de redirection',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Une URI par ligne. HTTPS requis (localhost exempté). Correspondance exacte.',
|
||||
'settings.oauth.modal.scopes': 'Portées autorisées',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips et get_trip_summary sont toujours disponibles — aucune portée requise. Ils permettent à l\'IA de découvrir les IDs de voyage nécessaires.',
|
||||
'settings.oauth.modal.selectAll': 'Tout sélectionner',
|
||||
'settings.oauth.modal.deselectAll': 'Tout désélectionner',
|
||||
'settings.oauth.modal.creating': 'Enregistrement…',
|
||||
'settings.oauth.modal.create': 'Enregistrer le client',
|
||||
'settings.oauth.modal.createdTitle': 'Client enregistré',
|
||||
'settings.oauth.modal.createdWarning': 'Le secret client n\'est affiché qu\'une seule fois. Copiez-le maintenant — il ne peut pas être récupéré.',
|
||||
'settings.oauth.toast.createError': 'Impossible d\'enregistrer le client OAuth',
|
||||
'settings.oauth.toast.deleted': 'Client OAuth supprimé',
|
||||
'settings.oauth.toast.deleteError': 'Impossible de supprimer le client OAuth',
|
||||
'settings.oauth.toast.revoked': 'Session révoquée',
|
||||
'settings.oauth.toast.revokeError': 'Impossible de révoquer la session',
|
||||
'settings.oauth.toast.rotateError': 'Impossible de renouveler le secret client',
|
||||
'settings.account': 'Compte',
|
||||
'settings.about': 'À propos',
|
||||
'settings.about.reportBug': 'Signaler un bug',
|
||||
@@ -364,6 +412,10 @@ const fr: Record<string, string> = {
|
||||
'login.mfaHint': 'Ouvrez Google Authenticator, Authy ou une autre application TOTP.',
|
||||
'login.mfaBack': '← Retour à la connexion',
|
||||
'login.mfaVerify': 'Vérifier',
|
||||
'login.invalidInviteLink': 'Lien d\'invitation invalide ou expiré',
|
||||
'login.oidcFailed': 'Échec de connexion OIDC',
|
||||
'login.usernameRequired': 'Le nom d\'utilisateur est obligatoire',
|
||||
'login.passwordMinLength': 'Le mot de passe doit comporter au moins 8 caractères',
|
||||
'login.oidc.tokenFailed': 'L\'authentification a échoué.',
|
||||
'login.oidc.invalidState': 'Session invalide. Veuillez réessayer.',
|
||||
'login.demoFailed': 'Échec de la connexion démo',
|
||||
@@ -449,6 +501,17 @@ const fr: Record<string, string> = {
|
||||
'admin.tabs.settings': 'Paramètres',
|
||||
'admin.allowRegistration': 'Autoriser les inscriptions',
|
||||
'admin.allowRegistrationHint': 'Les nouveaux utilisateurs peuvent s\'inscrire eux-mêmes',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Exiger l\'authentification à deux facteurs (2FA)',
|
||||
'admin.requireMfaHint': 'Les utilisateurs sans 2FA doivent terminer la configuration dans Paramètres avant d\'utiliser l\'application.',
|
||||
'admin.apiKeys': 'Clés API',
|
||||
@@ -560,9 +623,10 @@ const fr: Record<string, string> = {
|
||||
'admin.audit.col.details': 'Détails',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'Tokens MCP',
|
||||
'admin.mcpTokens.title': 'Tokens MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gérer les tokens API de tous les utilisateurs',
|
||||
'admin.tabs.mcpTokens': 'Accès MCP',
|
||||
'admin.mcpTokens.title': 'Accès MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gérer les sessions OAuth et les tokens API de tous les utilisateurs',
|
||||
'admin.mcpTokens.sectionTitle': 'Tokens API',
|
||||
'admin.mcpTokens.owner': 'Propriétaire',
|
||||
'admin.mcpTokens.tokenName': 'Nom du token',
|
||||
'admin.mcpTokens.created': 'Créé',
|
||||
@@ -574,6 +638,17 @@ const fr: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token supprimé',
|
||||
'admin.mcpTokens.deleteError': 'Impossible de supprimer le token',
|
||||
'admin.mcpTokens.loadError': 'Impossible de charger les tokens',
|
||||
'admin.oauthSessions.sectionTitle': 'Sessions OAuth',
|
||||
'admin.oauthSessions.clientName': 'Client',
|
||||
'admin.oauthSessions.owner': 'Propriétaire',
|
||||
'admin.oauthSessions.scopes': 'Portées',
|
||||
'admin.oauthSessions.created': 'Créé',
|
||||
'admin.oauthSessions.empty': 'Aucune session OAuth active',
|
||||
'admin.oauthSessions.revokeTitle': 'Révoquer la session',
|
||||
'admin.oauthSessions.revokeMessage': 'Cette session OAuth sera révoquée immédiatement. Le client perdra l\'accès MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Session révoquée',
|
||||
'admin.oauthSessions.revokeError': 'Impossible de révoquer la session',
|
||||
'admin.oauthSessions.loadError': 'Impossible de charger les sessions OAuth',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -656,6 +731,8 @@ const fr: Record<string, string> = {
|
||||
'vacay.companyHolidays': 'Jours fériés d\'entreprise',
|
||||
'vacay.companyHolidaysHint': 'Autoriser le marquage des jours fériés d\'entreprise',
|
||||
'vacay.companyHolidaysNoDeduct': 'Les jours fériés d\'entreprise ne sont pas déduits des jours de vacances.',
|
||||
'vacay.weekStart': 'La semaine commence le',
|
||||
'vacay.weekStartHint': 'Choisissez si la semaine commence le lundi ou le dimanche',
|
||||
'vacay.carryOver': 'Report',
|
||||
'vacay.carryOverHint': 'Reporter automatiquement les jours de vacances restants à l\'année suivante',
|
||||
'vacay.sharing': 'Partage',
|
||||
@@ -870,6 +947,7 @@ const fr: Record<string, string> = {
|
||||
'inspector.files': 'Fichiers',
|
||||
'inspector.filesCount': '{count} fichiers',
|
||||
'inspector.removeFromDay': 'Retirer du jour',
|
||||
'inspector.remove': 'Supprimer',
|
||||
'inspector.addToDay': 'Ajouter au jour',
|
||||
'inspector.confirmedRes': 'Réservation confirmée',
|
||||
'inspector.pendingRes': 'Réservation en attente',
|
||||
@@ -1010,6 +1088,7 @@ const fr: Record<string, string> = {
|
||||
'budget.totalBudget': 'Budget total',
|
||||
'budget.byCategory': 'Par catégorie',
|
||||
'budget.editTooltip': 'Cliquez pour modifier',
|
||||
'budget.linkedToReservation': 'Lié à une réservation — modifiez le nom depuis celle-ci',
|
||||
'budget.confirm.deleteCategory': 'Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} entrées ?',
|
||||
'budget.deleteCategory': 'Supprimer la catégorie',
|
||||
'budget.perPerson': 'Par personne',
|
||||
@@ -1019,9 +1098,13 @@ const fr: Record<string, string> = {
|
||||
'budget.settlement': 'Règlement',
|
||||
'budget.settlementInfo': 'Cliquez sur l\'avatar d\'un membre sur un poste budgétaire pour le marquer en vert — cela signifie qu\'il a payé. Le règlement indique ensuite qui doit combien à qui.',
|
||||
'budget.netBalances': 'Soldes nets',
|
||||
'budget.linkedToReservation': 'Lié à une réservation — modifiez le nom là-bas',
|
||||
|
||||
// Files
|
||||
'files.title': 'Fichiers',
|
||||
'files.pageTitle': 'Fichiers et documents',
|
||||
'files.subtitle': '{count} fichiers pour {trip}',
|
||||
'files.downloadPdf': 'Télécharger le PDF',
|
||||
'files.count': '{count} fichiers',
|
||||
'files.countSingular': '1 fichier',
|
||||
'files.uploaded': '{count} importés',
|
||||
@@ -1108,7 +1191,9 @@ const fr: Record<string, string> = {
|
||||
'packing.template': 'Modèle',
|
||||
'packing.templateApplied': '{count} articles ajoutés depuis le modèle',
|
||||
'packing.templateError': 'Erreur lors de l\'application du modèle',
|
||||
'packing.assignUser': 'Assigner un utilisateur',
|
||||
'packing.saveAsTemplate': 'Enregistrer comme modèle',
|
||||
'packing.templateName': 'Nom du modèle',
|
||||
'packing.templateSaved': 'Liste de voyage enregistrée comme modèle',
|
||||
'packing.noMembers': 'Aucun membre',
|
||||
'packing.bags': 'Bagages',
|
||||
'packing.noBag': 'Non assigné',
|
||||
@@ -1265,6 +1350,13 @@ const fr: Record<string, string> = {
|
||||
'backup.keep.forever': 'Conserver indéfiniment',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Photos',
|
||||
'photos.subtitle': '{count} photos pour {trip}',
|
||||
'photos.dropHere': 'Déposez des photos ici...',
|
||||
'photos.dropHereActive': 'Déposez des photos ici',
|
||||
'photos.captionForAll': 'Légende (pour tous)',
|
||||
'photos.captionPlaceholder': 'Légende optionnelle...',
|
||||
'photos.addCaption': 'Ajouter une légende...',
|
||||
'photos.allDays': 'Tous les jours',
|
||||
'photos.noPhotos': 'Aucune photo',
|
||||
'photos.uploadHint': 'Importez vos photos de voyage',
|
||||
@@ -1272,6 +1364,12 @@ const fr: Record<string, string> = {
|
||||
'photos.linkPlace': 'Lier au lieu',
|
||||
'photos.noPlace': 'Aucun lieu',
|
||||
'photos.uploadN': '{n} photo(s) importée(s)',
|
||||
'photos.linkDay': 'Lier le jour',
|
||||
'photos.noDay': 'Aucun jour',
|
||||
'photos.dayLabel': 'Jour {number}',
|
||||
'photos.photoSelected': 'Photo sélectionnée',
|
||||
'photos.photosSelected': 'Photos sélectionnées',
|
||||
'photos.fileTypeHint': "JPG, PNG, WebP · max. 10 Mo · jusqu'à 30 photos",
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Restaurer la sauvegarde ?',
|
||||
@@ -1298,6 +1396,7 @@ const fr: Record<string, string> = {
|
||||
'planner.routeCalculated': 'Itinéraire calculé',
|
||||
'planner.routeCalcFailed': 'L\'itinéraire n\'a pas pu être calculé',
|
||||
'planner.routeError': 'Erreur lors du calcul de l\'itinéraire',
|
||||
'planner.icsExportFailed': 'Échec de l\'export ICS',
|
||||
'planner.routeOptimized': 'Itinéraire optimisé',
|
||||
'planner.reservationUpdated': 'Réservation mise à jour',
|
||||
'planner.reservationAdded': 'Réservation ajoutée',
|
||||
@@ -1383,6 +1482,7 @@ const fr: Record<string, string> = {
|
||||
'memories.title': 'Photos',
|
||||
'memories.notConnected': 'Immich non connecté',
|
||||
'memories.notConnectedHint': 'Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.',
|
||||
'memories.notConnectedMultipleHint': 'Connectez un de ces fournisseurs de photos : {provider_names} dans les Paramètres pour pouvoir ajouter des photos à ce voyage.',
|
||||
'memories.noDates': 'Ajoutez des dates à votre voyage pour charger les photos.',
|
||||
'memories.noPhotos': 'Aucune photo trouvée',
|
||||
'memories.noPhotosHint': 'Aucune photo trouvée dans Immich pour la période de ce voyage.',
|
||||
@@ -1393,26 +1493,38 @@ const fr: Record<string, string> = {
|
||||
'memories.reviewTitle': 'Vérifier vos photos',
|
||||
'memories.reviewHint': 'Cliquez sur les photos pour les exclure du partage.',
|
||||
'memories.shareCount': 'Partager {count} photos',
|
||||
'memories.immichUrl': 'URL du serveur Immich',
|
||||
'memories.immichApiKey': 'Clé API',
|
||||
'memories.providerUrl': 'URL du serveur',
|
||||
'memories.providerApiKey': 'Clé API',
|
||||
'memories.providerUsername': 'Nom d\'utilisateur',
|
||||
'memories.providerPassword': 'Mot de passe',
|
||||
'memories.providerOTP': 'Code MFA (si activé)',
|
||||
'memories.skipSSLVerification': 'Ignorer la vérification du certificat SSL',
|
||||
'memories.providerUrlHintSynology': 'Incluez le chemin de l\'application Photos dans l\'URL, ex. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Tester la connexion',
|
||||
'memories.testFirst': 'Testez la connexion avant de sauvegarder',
|
||||
'memories.connected': 'Connecté',
|
||||
'memories.disconnected': 'Non connecté',
|
||||
'memories.connectionSuccess': 'Connecté à Immich',
|
||||
'memories.connectionError': 'Impossible de se connecter à Immich',
|
||||
'memories.saved': 'Paramètres Immich enregistrés',
|
||||
'memories.saved': 'Paramètres {provider_name} enregistrés',
|
||||
'memories.providerDisconnectedBanner': 'Votre connexion {provider_name} est perdue. Reconnectez-vous dans les Paramètres pour voir les photos.',
|
||||
'memories.saveError': 'Impossible d\'enregistrer les paramètres de {provider_name}',
|
||||
'memories.saveRouteNotConfigured': "La route de sauvegarde n'est pas configurée pour ce fournisseur",
|
||||
'memories.testRouteNotConfigured': "La route de test n'est pas configurée pour ce fournisseur",
|
||||
'memories.fillRequiredFields': 'Veuillez remplir tous les champs obligatoires',
|
||||
'memories.oldest': 'Plus anciennes',
|
||||
'memories.newest': 'Plus récentes',
|
||||
'memories.allLocations': 'Tous les lieux',
|
||||
'memories.addPhotos': 'Ajouter des photos',
|
||||
'memories.linkAlbum': 'Lier un album',
|
||||
'memories.selectAlbum': 'Choisir un album Immich',
|
||||
'memories.selectAlbumMultiple': 'Sélectionner un album',
|
||||
'memories.noAlbums': 'Aucun album trouvé',
|
||||
'memories.syncAlbum': 'Synchroniser',
|
||||
'memories.unlinkAlbum': 'Délier',
|
||||
'memories.photos': 'photos',
|
||||
'memories.selectPhotos': 'Sélectionner des photos depuis Immich',
|
||||
'memories.selectPhotosMultiple': 'Sélectionner des photos',
|
||||
'memories.selectHint': 'Appuyez sur les photos pour les sélectionner.',
|
||||
'memories.selected': 'sélectionné(s)',
|
||||
'memories.addSelected': 'Ajouter {count} photos',
|
||||
@@ -1570,6 +1682,8 @@ const fr: Record<string, string> = {
|
||||
'notifications.markUnread': 'Marquer comme non lu',
|
||||
'notifications.delete': 'Supprimer',
|
||||
'notifications.system': 'Système',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos déconnecté',
|
||||
'notifications.synologySessionCleared.text': 'Votre serveur ou compte a changé — allez dans Paramètres pour tester à nouveau votre connexion.',
|
||||
'memories.error.loadAlbums': 'Impossible de charger les albums',
|
||||
'memories.error.linkAlbum': 'Impossible de lier l\'album',
|
||||
'memories.error.unlinkAlbum': 'Impossible de dissocier l\'album',
|
||||
@@ -1692,6 +1806,306 @@ const fr: Record<string, string> = {
|
||||
'notif.generic.text': 'Vous avez une nouvelle notification',
|
||||
'notif.dev.unknown_event.title': '[DEV] Événement inconnu',
|
||||
'notif.dev.unknown_event.text': 'Le type d\'événement "{event}" n\'est pas enregistré dans EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'à l\'instant',
|
||||
'common.hoursAgo': 'il y a {count}h',
|
||||
'common.daysAgo': 'il y a {count}j',
|
||||
'budget.linkedToReservation': 'Lié à une réservation — modifiez le nom là-bas',
|
||||
'packing.saveAsTemplate': 'Enregistrer comme modèle',
|
||||
'packing.templateName': 'Nom du modèle',
|
||||
'packing.templateSaved': 'Liste de bagages enregistrée comme modèle',
|
||||
'memories.notConnectedMultipleHint': 'Connectez l\'un de ces fournisseurs de photos : {provider_names} dans les Paramètres pour pouvoir ajouter des photos à ce voyage.',
|
||||
'memories.providerUrl': 'URL du serveur',
|
||||
'memories.providerApiKey': 'Clé API',
|
||||
'memories.providerUsername': 'Nom d\'utilisateur',
|
||||
'memories.providerPassword': 'Mot de passe',
|
||||
'memories.saveError': 'Impossible d\'enregistrer les paramètres de {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Sélectionner un album',
|
||||
'memories.selectPhotosMultiple': 'Sélectionner des photos',
|
||||
'journey.title': 'Journal de voyage',
|
||||
'journey.subtitle': 'Suivez vos voyages en temps réel',
|
||||
'journey.new': 'Nouveau journal',
|
||||
'journey.create': 'Créer',
|
||||
'journey.titlePlaceholder': 'Où allez-vous ?',
|
||||
'journey.empty': 'Aucun journal pour le moment',
|
||||
'journey.emptyHint': 'Commencez à documenter votre prochain voyage',
|
||||
'journey.deleted': 'Journal supprimé',
|
||||
'journey.createError': 'Impossible de créer le journal',
|
||||
'journey.deleteError': 'Impossible de supprimer le journal',
|
||||
'journey.deleteConfirmTitle': 'Supprimer',
|
||||
'journey.deleteConfirmMessage': 'Supprimer « {title} » ? Cette action est irréversible.',
|
||||
'journey.deleteConfirmGeneric': 'Êtes-vous sûr de vouloir supprimer ceci ?',
|
||||
'journey.notFound': 'Journal introuvable',
|
||||
'journey.photos': 'Photos',
|
||||
'journey.timelineEmpty': 'Aucune étape pour le moment',
|
||||
'journey.timelineEmptyHint': 'Ajoutez un check-in ou écrivez une entrée de journal pour commencer',
|
||||
'journey.status.draft': 'Brouillon',
|
||||
'journey.status.active': 'Actif',
|
||||
'journey.status.completed': 'Terminé',
|
||||
'journey.status.upcoming': 'À venir',
|
||||
'journey.checkin.add': 'Check-in',
|
||||
'journey.checkin.namePlaceholder': 'Nom du lieu',
|
||||
'journey.checkin.notesPlaceholder': 'Notes (facultatif)',
|
||||
'journey.checkin.save': 'Enregistrer',
|
||||
'journey.checkin.error': 'Impossible d\'enregistrer le check-in',
|
||||
'journey.entry.add': 'Journal',
|
||||
'journey.entry.edit': 'Modifier l\'entrée',
|
||||
'journey.entry.titlePlaceholder': 'Titre (facultatif)',
|
||||
'journey.entry.bodyPlaceholder': 'Que s\'est-il passé aujourd\'hui ?',
|
||||
'journey.entry.save': 'Enregistrer',
|
||||
'journey.entry.error': 'Impossible d\'enregistrer l\'entrée',
|
||||
'journey.photo.add': 'Photo',
|
||||
'journey.photo.uploadError': 'Échec du téléversement',
|
||||
'journey.share.share': 'Partager',
|
||||
'journey.share.public': 'Public',
|
||||
'journey.share.linkCopied': 'Lien public copié',
|
||||
'journey.share.disabled': 'Partage public désactivé',
|
||||
'journey.editor.titlePlaceholder': 'Donnez un nom à ce moment...',
|
||||
'journey.editor.bodyPlaceholder': 'Racontez l\'histoire de cette journée...',
|
||||
'journey.editor.placePlaceholder': 'Lieu (facultatif)',
|
||||
'journey.editor.tagsPlaceholder': 'Tags : pépite cachée, meilleur repas, à revisiter...',
|
||||
'journey.visibility.private': 'Privé',
|
||||
'journey.visibility.shared': 'Partagé',
|
||||
'journey.visibility.public': 'Public',
|
||||
'journey.emptyState.title': 'Votre histoire commence ici',
|
||||
'journey.emptyState.subtitle': 'Faites un check-in ou écrivez votre première entrée de journal',
|
||||
'journey.frontpage.subtitle': 'Transformez vos voyages en histoires inoubliables',
|
||||
'journey.frontpage.createJourney': 'Créer un journal',
|
||||
'journey.frontpage.activeJourney': 'Journal actif',
|
||||
'journey.frontpage.allJourneys': 'Tous les journaux',
|
||||
'journey.frontpage.journeys': 'journaux',
|
||||
'journey.frontpage.createNew': 'Créer un nouveau journal',
|
||||
'journey.frontpage.createNewSub': 'Choisissez des voyages, écrivez des récits, partagez vos aventures',
|
||||
'journey.frontpage.live': 'En direct',
|
||||
'journey.frontpage.synced': 'Synchronisé',
|
||||
'journey.frontpage.continueWriting': 'Continuer à écrire',
|
||||
'journey.frontpage.updated': 'Mis à jour {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Voyage terminé récemment',
|
||||
'journey.frontpage.suggestionText': 'Transformez <strong>{title}</strong> en journal de voyage',
|
||||
'journey.frontpage.dismiss': 'Ignorer',
|
||||
'journey.frontpage.journeyName': 'Nom du journal',
|
||||
'journey.frontpage.namePlaceholder': 'ex. Asie du Sud-Est 2026',
|
||||
'journey.frontpage.selectTrips': 'Sélectionner des voyages',
|
||||
'journey.frontpage.tripsSelected': 'voyages sélectionnés',
|
||||
'journey.frontpage.trips': 'voyages',
|
||||
'journey.frontpage.placesImported': 'lieux seront importés',
|
||||
'journey.frontpage.places': 'lieux',
|
||||
'journey.detail.backToJourney': 'Retour au journal',
|
||||
'journey.detail.syncedWithTrips': 'Synchronisé avec les voyages',
|
||||
'journey.detail.addEntry': 'Ajouter une entrée',
|
||||
'journey.detail.newEntry': 'Nouvelle entrée',
|
||||
'journey.detail.editEntry': 'Modifier l\'entrée',
|
||||
'journey.detail.noEntries': 'Aucune entrée pour le moment',
|
||||
'journey.detail.noEntriesHint': 'Ajoutez un voyage pour commencer avec des entrées préremplies',
|
||||
'journey.detail.noPhotos': 'Aucune photo pour le moment',
|
||||
'journey.detail.noPhotosHint': 'Téléversez des photos dans les entrées ou parcourez votre bibliothèque Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Statistiques du journal',
|
||||
'journey.detail.syncedTrips': 'Voyages synchronisés',
|
||||
'journey.detail.noTripsLinked': 'Aucun voyage lié pour le moment',
|
||||
'journey.detail.contributors': 'Contributeurs',
|
||||
'journey.detail.readMore': 'Lire la suite',
|
||||
'journey.detail.prosCons': 'Pour et contre',
|
||||
'journey.stats.days': 'Jours',
|
||||
'journey.stats.cities': 'Villes',
|
||||
'journey.stats.entries': 'Entrées',
|
||||
'journey.stats.photos': 'Photos',
|
||||
'journey.stats.places': 'Lieux',
|
||||
'journey.verdict.lovedIt': 'Adoré',
|
||||
'journey.verdict.couldBeBetter': 'Pourrait être mieux',
|
||||
'journey.synced.places': 'lieux',
|
||||
'journey.synced.synced': 'synchronisé',
|
||||
'journey.editor.uploadPhotos': 'Téléverser des photos',
|
||||
'journey.editor.fromGallery': 'Depuis la galerie',
|
||||
'journey.editor.allPhotosAdded': 'Toutes les photos ont déjà été ajoutées',
|
||||
'journey.editor.writeStory': 'Écrivez votre histoire...',
|
||||
'journey.editor.prosCons': 'Pour et contre',
|
||||
'journey.editor.pros': 'Pour',
|
||||
'journey.editor.cons': 'Contre',
|
||||
'journey.editor.proPlaceholder': 'Quelque chose de génial...',
|
||||
'journey.editor.conPlaceholder': 'Pas si génial...',
|
||||
'journey.editor.addAnother': 'Ajouter un autre',
|
||||
'journey.editor.date': 'Date',
|
||||
'journey.editor.location': 'Lieu',
|
||||
'journey.editor.searchLocation': 'Rechercher un lieu...',
|
||||
'journey.editor.mood': 'Humeur',
|
||||
'journey.editor.weather': 'Météo',
|
||||
'journey.editor.photoFirst': '1er',
|
||||
'journey.editor.makeFirst': 'Mettre en 1er',
|
||||
'journey.mood.amazing': 'Incroyable',
|
||||
'journey.mood.good': 'Bien',
|
||||
'journey.mood.neutral': 'Neutre',
|
||||
'journey.mood.rough': 'Difficile',
|
||||
'journey.weather.sunny': 'Ensoleillé',
|
||||
'journey.weather.partly': 'Partiellement nuageux',
|
||||
'journey.weather.cloudy': 'Nuageux',
|
||||
'journey.weather.rainy': 'Pluvieux',
|
||||
'journey.weather.stormy': 'Orageux',
|
||||
'journey.weather.cold': 'Neigeux',
|
||||
'journey.trips.linkTrip': 'Lier un voyage',
|
||||
'journey.trips.searchTrip': 'Rechercher un voyage',
|
||||
'journey.trips.searchPlaceholder': 'Nom du voyage ou destination...',
|
||||
'journey.trips.noTripsAvailable': 'Aucun voyage disponible',
|
||||
'journey.trips.link': 'Lier',
|
||||
'journey.trips.tripLinked': 'Voyage lié',
|
||||
'journey.trips.linkFailed': 'Échec de la liaison du voyage',
|
||||
'journey.trips.addTrip': 'Ajouter un voyage',
|
||||
'journey.trips.unlinkTrip': 'Délier le voyage',
|
||||
'journey.trips.unlinkMessage': 'Délier « {title} » ? Toutes les entrées et photos synchronisées de ce voyage seront définitivement supprimées. Cette action est irréversible.',
|
||||
'journey.trips.unlink': 'Délier',
|
||||
'journey.trips.tripUnlinked': 'Voyage délié',
|
||||
'journey.trips.unlinkFailed': 'Échec de la suppression du lien',
|
||||
'journey.trips.noTripsLinkedSettings': 'Aucun voyage lié',
|
||||
'journey.contributors.invite': 'Inviter un contributeur',
|
||||
'journey.contributors.searchUser': 'Rechercher un utilisateur',
|
||||
'journey.contributors.searchPlaceholder': 'Nom d\'utilisateur ou e-mail...',
|
||||
'journey.contributors.noUsers': 'Aucun utilisateur trouvé',
|
||||
'journey.contributors.role': 'Rôle',
|
||||
'journey.contributors.added': 'Contributeur ajouté',
|
||||
'journey.contributors.addFailed': 'Échec de l\'ajout du contributeur',
|
||||
'journey.share.publicShare': 'Partage public',
|
||||
'journey.share.createLink': 'Créer un lien de partage',
|
||||
'journey.share.linkCreated': 'Lien de partage créé',
|
||||
'journey.share.createFailed': 'Échec de la création du lien',
|
||||
'journey.share.copy': 'Copier',
|
||||
'journey.share.copied': 'Copié !',
|
||||
'journey.share.timeline': 'Chronologie',
|
||||
'journey.share.gallery': 'Galerie',
|
||||
'journey.share.map': 'Carte',
|
||||
'journey.share.removeLink': 'Supprimer le lien de partage',
|
||||
'journey.share.linkDeleted': 'Lien de partage supprimé',
|
||||
'journey.share.deleteFailed': 'Échec de la suppression',
|
||||
'journey.share.updateFailed': 'Échec de la mise à jour',
|
||||
'journey.settings.title': 'Paramètres du journal',
|
||||
'journey.settings.coverImage': 'Image de couverture',
|
||||
'journey.settings.changeCover': 'Changer la couverture',
|
||||
'journey.settings.addCover': 'Ajouter une image de couverture',
|
||||
'journey.settings.name': 'Nom',
|
||||
'journey.settings.subtitle': 'Sous-titre',
|
||||
'journey.settings.subtitlePlaceholder': 'ex. Thaïlande, Vietnam et Cambodge',
|
||||
'journey.settings.delete': 'Supprimer',
|
||||
'journey.settings.deleteJourney': 'Supprimer le journal',
|
||||
'journey.settings.deleteMessage': 'Supprimer « {title} » ? Toutes les entrées et photos seront perdues.',
|
||||
'journey.settings.saved': 'Paramètres enregistrés',
|
||||
'journey.settings.saveFailed': 'Échec de l\'enregistrement',
|
||||
'journey.settings.coverUpdated': 'Couverture mise à jour',
|
||||
'journey.settings.coverFailed': 'Échec du téléversement',
|
||||
'journey.settings.failedToDelete': 'Échec de la suppression',
|
||||
'journey.entries.deleteTitle': "Supprimer l'entrée",
|
||||
'journey.photosUploaded': '{count} photos téléversées',
|
||||
'journey.photosAdded': '{count} photos ajoutées',
|
||||
'journey.public.notFound': 'Introuvable',
|
||||
'journey.public.notFoundMessage': 'Ce journal n\'existe pas ou le lien a expiré.',
|
||||
'journey.public.readOnly': 'Lecture seule · Journal public',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Partagé via',
|
||||
'journey.public.madeWith': 'Créé avec',
|
||||
'journey.pdf.journeyBook': 'Carnet de voyage',
|
||||
'journey.pdf.madeWith': 'Créé avec TREK',
|
||||
'journey.pdf.day': 'Jour',
|
||||
'journey.pdf.theEnd': 'Fin',
|
||||
'journey.pdf.saveAsPdf': 'Enregistrer en PDF',
|
||||
'journey.pdf.pages': 'pages',
|
||||
'dashboard.greeting.morning': 'Bonjour,',
|
||||
'dashboard.greeting.afternoon': 'Bon après-midi,',
|
||||
'dashboard.greeting.evening': 'Bonsoir,',
|
||||
'dashboard.mobile.liveNow': 'En direct',
|
||||
'dashboard.mobile.tripProgress': 'Progression du voyage',
|
||||
'dashboard.mobile.daysLeft': '{count} jours restants',
|
||||
'dashboard.mobile.places': 'Lieux',
|
||||
'dashboard.mobile.buddies': 'Compagnons',
|
||||
'dashboard.mobile.newTrip': 'Nouveau voyage',
|
||||
'dashboard.mobile.currency': 'Devise',
|
||||
'dashboard.mobile.timezone': 'Fuseau horaire',
|
||||
'dashboard.mobile.upcomingTrips': 'Voyages à venir',
|
||||
'dashboard.mobile.yourTrips': 'Vos voyages',
|
||||
'dashboard.mobile.trips': 'voyages',
|
||||
'dashboard.mobile.starts': 'Début',
|
||||
'dashboard.mobile.duration': 'Durée',
|
||||
'dashboard.mobile.day': 'jour',
|
||||
'dashboard.mobile.days': 'jours',
|
||||
'dashboard.mobile.ongoing': 'En cours',
|
||||
'dashboard.mobile.startsToday': 'Commence aujourd\'hui',
|
||||
'dashboard.mobile.tomorrow': 'Demain',
|
||||
'dashboard.mobile.inDays': 'Dans {count} jours',
|
||||
'dashboard.mobile.inMonths': 'Dans {count} mois',
|
||||
'dashboard.mobile.completed': 'Terminé',
|
||||
'dashboard.mobile.currencyConverter': 'Convertisseur de devises',
|
||||
'nav.profile': 'Profil',
|
||||
'nav.bottomSettings': 'Paramètres',
|
||||
'nav.bottomAdmin': 'Administration',
|
||||
'nav.bottomLogout': 'Déconnexion',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Ajouter un lieu',
|
||||
'dayplan.mobile.searchPlaces': 'Rechercher des lieux...',
|
||||
'dayplan.mobile.allAssigned': 'Tous les lieux attribués',
|
||||
'dayplan.mobile.noMatch': 'Aucun résultat',
|
||||
'dayplan.mobile.createNew': 'Créer un nouveau lieu',
|
||||
'admin.addons.catalog.journey.name': 'Journal de voyage',
|
||||
'admin.addons.catalog.journey.description': 'Suivi de voyages et journal avec check-ins, photos et récits quotidiens',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Voyages',
|
||||
'oauth.scope.group.places': 'Lieux',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Bagages',
|
||||
'oauth.scope.group.todos': 'Tâches',
|
||||
'oauth.scope.group.budget': 'Budget',
|
||||
'oauth.scope.group.reservations': 'Réservations',
|
||||
'oauth.scope.group.collab': 'Collaboration',
|
||||
'oauth.scope.group.notifications': 'Notifications',
|
||||
'oauth.scope.group.vacay': 'Congés',
|
||||
'oauth.scope.group.geo': 'Géo',
|
||||
'oauth.scope.group.weather': 'Météo',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Voir les voyages et itinéraires',
|
||||
'oauth.scope.trips:read.description': 'Lire les voyages, jours, notes et membres',
|
||||
'oauth.scope.trips:write.label': 'Modifier les voyages et itinéraires',
|
||||
'oauth.scope.trips:write.description': 'Créer et mettre à jour les voyages, jours, notes et gérer les membres',
|
||||
'oauth.scope.trips:delete.label': 'Supprimer des voyages',
|
||||
'oauth.scope.trips:delete.description': 'Supprimer définitivement des voyages entiers — cette action est irréversible',
|
||||
'oauth.scope.trips:share.label': 'Gérer les liens de partage',
|
||||
'oauth.scope.trips:share.description': 'Créer, modifier et révoquer des liens de partage publics',
|
||||
'oauth.scope.places:read.label': 'Voir les lieux et données cartographiques',
|
||||
'oauth.scope.places:read.description': 'Lire les lieux, affectations de jours, étiquettes et catégories',
|
||||
'oauth.scope.places:write.label': 'Gérer les lieux',
|
||||
'oauth.scope.places:write.description': 'Créer, modifier et supprimer des lieux, affectations et étiquettes',
|
||||
'oauth.scope.atlas:read.label': 'Voir l\'Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Lire les pays visités, régions et liste de souhaits',
|
||||
'oauth.scope.atlas:write.label': 'Gérer l\'Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Marquer des pays et régions visités, gérer la liste de souhaits',
|
||||
'oauth.scope.packing:read.label': 'Voir les listes de bagages',
|
||||
'oauth.scope.packing:read.description': 'Lire les articles, sacs et assignations de catégories',
|
||||
'oauth.scope.packing:write.label': 'Gérer les listes de bagages',
|
||||
'oauth.scope.packing:write.description': 'Ajouter, modifier, supprimer, cocher et réordonner les articles et sacs',
|
||||
'oauth.scope.todos:read.label': 'Voir les listes de tâches',
|
||||
'oauth.scope.todos:read.description': 'Lire les tâches et assignations de catégories',
|
||||
'oauth.scope.todos:write.label': 'Gérer les listes de tâches',
|
||||
'oauth.scope.todos:write.description': 'Créer, modifier, cocher, supprimer et réordonner les tâches',
|
||||
'oauth.scope.budget:read.label': 'Voir le budget',
|
||||
'oauth.scope.budget:read.description': 'Lire les dépenses et la répartition du budget',
|
||||
'oauth.scope.budget:write.label': 'Gérer le budget',
|
||||
'oauth.scope.budget:write.description': 'Créer, modifier et supprimer des dépenses',
|
||||
'oauth.scope.reservations:read.label': 'Voir les réservations',
|
||||
'oauth.scope.reservations:read.description': 'Lire les réservations et détails d\'hébergement',
|
||||
'oauth.scope.reservations:write.label': 'Gérer les réservations',
|
||||
'oauth.scope.reservations:write.description': 'Créer, modifier, supprimer et réordonner les réservations',
|
||||
'oauth.scope.collab:read.label': 'Voir la collaboration',
|
||||
'oauth.scope.collab:read.description': 'Lire les notes, sondages et messages collaboratifs',
|
||||
'oauth.scope.collab:write.label': 'Gérer la collaboration',
|
||||
'oauth.scope.collab:write.description': 'Créer, modifier et supprimer des notes, sondages et messages',
|
||||
'oauth.scope.notifications:read.label': 'Voir les notifications',
|
||||
'oauth.scope.notifications:read.description': 'Lire les notifications et le nombre de non-lus',
|
||||
'oauth.scope.notifications:write.label': 'Gérer les notifications',
|
||||
'oauth.scope.notifications:write.description': 'Marquer les notifications comme lues et y répondre',
|
||||
'oauth.scope.vacay:read.label': 'Voir les plans de congés',
|
||||
'oauth.scope.vacay:read.description': 'Lire les données, entrées et statistiques de congés',
|
||||
'oauth.scope.vacay:write.label': 'Gérer les plans de congés',
|
||||
'oauth.scope.vacay:write.description': 'Créer et gérer les entrées de congés, jours fériés et plans d\'équipe',
|
||||
'oauth.scope.geo:read.label': 'Cartes et géocodage',
|
||||
'oauth.scope.geo:read.description': 'Chercher des lieux, résoudre des URL cartographiques et géocoder des coordonnées',
|
||||
'oauth.scope.weather:read.label': 'Prévisions météo',
|
||||
'oauth.scope.weather:read.description': 'Obtenir les prévisions météo pour les lieux et dates de voyage',
|
||||
}
|
||||
|
||||
export default fr
|
||||
|
||||
@@ -8,6 +8,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Betöltés...',
|
||||
'common.import': 'Importálás',
|
||||
'common.error': 'Hiba',
|
||||
'common.unknownError': 'Ismeretlen hiba',
|
||||
'common.tooManyAttempts': 'Túl sok próbálkozás. Kérjük, próbálja újra később.',
|
||||
'common.back': 'Vissza',
|
||||
'common.all': 'Összes',
|
||||
'common.close': 'Bezárás',
|
||||
@@ -26,6 +28,12 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.email': 'E-mail',
|
||||
'common.password': 'Jelszó',
|
||||
'common.saving': 'Mentés...',
|
||||
'trips.memberRemoved': '{username} eltávolítva',
|
||||
'trips.memberRemoveError': 'Eltávolítás sikertelen',
|
||||
'trips.memberAdded': '{username} hozzáadva',
|
||||
'trips.memberAddError': 'Hozzáadás sikertelen',
|
||||
'common.expand': 'Kibontás',
|
||||
'common.collapse': 'Összecsukás',
|
||||
'common.saved': 'Mentve',
|
||||
'trips.reminder': 'Emlékeztető',
|
||||
'trips.reminderNone': 'Nincs',
|
||||
@@ -180,6 +188,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'MCP végpont',
|
||||
'settings.mcp.clientConfig': 'Kliens konfiguráció',
|
||||
'settings.mcp.clientConfigHint': 'Cserélje ki a <your_token> részt egy API tokenre az alábbi listából. Az npx elérési útját szükség lehet módosítani a rendszeréhez (pl. C:\\PROGRA~1\\nodejs\\npx.cmd Windows-on).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Cserélje ki a <your_client_id> és <your_client_secret> részeket a fent létrehozott OAuth 2.1 kliens adataival. Az mcp-remote megnyitja a böngészőt az első csatlakozáskor az engedélyezés elvégzéséhez. Az npx elérési útját szükség lehet módosítani a rendszeréhez (pl. C:\\PROGRA~1\\nodejs\\npx.cmd Windows-on).',
|
||||
'settings.mcp.copy': 'Másolás',
|
||||
'settings.mcp.copied': 'Másolva!',
|
||||
'settings.mcp.apiTokens': 'API tokenek',
|
||||
@@ -201,6 +210,48 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Nem sikerült létrehozni a tokent',
|
||||
'settings.mcp.toast.deleted': 'Token törölve',
|
||||
'settings.mcp.toast.deleteError': 'Nem sikerült törölni a tokent',
|
||||
'settings.mcp.apiTokensDeprecated': 'Az API tokenek elavultak és egy jövőbeli verzióban eltávolításra kerülnek. Kérjük, használjon helyettük OAuth 2.1 klienseket.',
|
||||
'settings.oauth.clients': 'OAuth 2.1 kliensek',
|
||||
'settings.oauth.clientsHint': 'Regisztráljon OAuth 2.1 klienseket, hogy a harmadik féltől származó MCP alkalmazások (Claude Web, Cursor stb.) statikus tokenek nélkül csatlakozhassanak.',
|
||||
'settings.oauth.createClient': 'Új kliens',
|
||||
'settings.oauth.noClients': 'Nincs regisztrált OAuth kliens.',
|
||||
'settings.oauth.clientId': 'Kliens azonosító',
|
||||
'settings.oauth.clientSecret': 'Kliens titok',
|
||||
'settings.oauth.deleteClient': 'Kliens törlése',
|
||||
'settings.oauth.deleteClientMessage': 'Ez a kliens és az összes aktív munkamenet véglegesen törlésre kerül. Minden alkalmazás, amely ezt használja, azonnal elveszíti a hozzáférést.',
|
||||
'settings.oauth.rotateSecret': 'Titok megújítása',
|
||||
'settings.oauth.rotateSecretMessage': 'Új kliens titok kerül generálásra és az összes meglévő munkamenet azonnal érvénytelenné válik. Frissítse alkalmazását a párbeszéd bezárása előtt.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Megújítás',
|
||||
'settings.oauth.rotateSecretConfirming': 'Megújítás…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Új titok generálva',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Ez a titok csak egyszer jelenik meg. Másolja most és frissítse alkalmazását — az összes korábbi munkamenet érvénytelenné vált.',
|
||||
'settings.oauth.activeSessions': 'Aktív OAuth munkamenetek',
|
||||
'settings.oauth.sessionScopes': 'Jogosultságok',
|
||||
'settings.oauth.sessionExpires': 'Lejár',
|
||||
'settings.oauth.revoke': 'Visszavonás',
|
||||
'settings.oauth.revokeSession': 'Munkamenet visszavonása',
|
||||
'settings.oauth.revokeSessionMessage': 'Ez azonnal visszavonja a hozzáférést ehhez az OAuth munkamenethez.',
|
||||
'settings.oauth.modal.createTitle': 'OAuth kliens regisztrálása',
|
||||
'settings.oauth.modal.presets': 'Gyors beállítások',
|
||||
'settings.oauth.modal.clientName': 'Alkalmazás neve',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'pl. Claude Web, Az én MCP appom',
|
||||
'settings.oauth.modal.redirectUris': 'Átirányítási URI-k',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Soronként egy URI. HTTPS szükséges (localhost kivételével). Pontos egyezés szükséges.',
|
||||
'settings.oauth.modal.scopes': 'Engedélyezett jogosultságok',
|
||||
'settings.oauth.modal.scopesHint': 'A list_trips és get_trip_summary mindig elérhető — jogosultság nélkül. Segítenek az AI-nak megtalálni az utazás azonosítókat.',
|
||||
'settings.oauth.modal.selectAll': 'Összes kijelölése',
|
||||
'settings.oauth.modal.deselectAll': 'Összes kijelölés törlése',
|
||||
'settings.oauth.modal.creating': 'Regisztrálás…',
|
||||
'settings.oauth.modal.create': 'Kliens regisztrálása',
|
||||
'settings.oauth.modal.createdTitle': 'Kliens regisztrálva',
|
||||
'settings.oauth.modal.createdWarning': 'A kliens titok csak egyszer jelenik meg. Másolja most — nem állítható helyre.',
|
||||
'settings.oauth.toast.createError': 'Az OAuth kliens regisztrálása sikertelen',
|
||||
'settings.oauth.toast.deleted': 'OAuth kliens törölve',
|
||||
'settings.oauth.toast.deleteError': 'Az OAuth kliens törlése sikertelen',
|
||||
'settings.oauth.toast.revoked': 'Munkamenet visszavonva',
|
||||
'settings.oauth.toast.revokeError': 'A munkamenet visszavonása sikertelen',
|
||||
'settings.oauth.toast.rotateError': 'A kliens titok megújítása sikertelen',
|
||||
'settings.account': 'Fiók',
|
||||
'settings.about': 'Névjegy',
|
||||
'settings.about.reportBug': 'Hiba bejelentése',
|
||||
@@ -274,9 +325,6 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'Kikapcsolva',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Értesítési események',
|
||||
'admin.notifications.eventsHint': 'Válaszd ki, mely események indítsanak értesítéseket minden felhasználó számára.',
|
||||
'admin.notifications.configureFirst': 'Először konfiguráld az SMTP vagy webhook beállításokat lent, majd engedélyezd az eseményeket.',
|
||||
'admin.notifications.save': 'Értesítési beállítások mentése',
|
||||
'admin.notifications.saved': 'Értesítési beállítások mentve',
|
||||
'admin.notifications.testWebhook': 'Teszt webhook küldése',
|
||||
@@ -371,6 +419,10 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Nyisd meg a Google Authenticator, Authy vagy más TOTP alkalmazást.',
|
||||
'login.mfaBack': '← Vissza a bejelentkezéshez',
|
||||
'login.mfaVerify': 'Ellenőrzés',
|
||||
'login.invalidInviteLink': 'Érvénytelen vagy lejárt meghívólink',
|
||||
'login.oidcFailed': 'OIDC bejelentkezés sikertelen',
|
||||
'login.usernameRequired': 'A felhasználónév kötelező',
|
||||
'login.passwordMinLength': 'A jelszónak legalább 8 karakter hosszúnak kell lennie',
|
||||
|
||||
// Regisztráció
|
||||
'register.passwordMismatch': 'A jelszavak nem egyeznek',
|
||||
@@ -449,6 +501,17 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Beállítások',
|
||||
'admin.allowRegistration': 'Regisztráció engedélyezése',
|
||||
'admin.allowRegistrationHint': 'Új felhasználók regisztrálhatják magukat',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Kétlépcsős hitelesítés (2FA) kötelezővé tétele',
|
||||
'admin.requireMfaHint': 'A 2FA nélküli felhasználóknak a Beállításokban kell befejezniük a beállítást az alkalmazás használata előtt.',
|
||||
'admin.apiKeys': 'API kulcsok',
|
||||
@@ -561,9 +624,10 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.audit.col.details': 'Részletek',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP tokenek',
|
||||
'admin.mcpTokens.title': 'MCP tokenek',
|
||||
'admin.mcpTokens.subtitle': 'Összes felhasználó API tokeneinek kezelése',
|
||||
'admin.tabs.mcpTokens': 'MCP hozzáférés',
|
||||
'admin.mcpTokens.title': 'MCP hozzáférés',
|
||||
'admin.mcpTokens.subtitle': 'OAuth munkamenetek és API tokenek kezelése az összes felhasználó számára',
|
||||
'admin.mcpTokens.sectionTitle': 'API tokenek',
|
||||
'admin.mcpTokens.owner': 'Tulajdonos',
|
||||
'admin.mcpTokens.tokenName': 'Token neve',
|
||||
'admin.mcpTokens.created': 'Létrehozva',
|
||||
@@ -575,6 +639,17 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token törölve',
|
||||
'admin.mcpTokens.deleteError': 'Nem sikerült törölni a tokent',
|
||||
'admin.mcpTokens.loadError': 'Nem sikerült betölteni a tokeneket',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth munkamenetek',
|
||||
'admin.oauthSessions.clientName': 'Kliens',
|
||||
'admin.oauthSessions.owner': 'Tulajdonos',
|
||||
'admin.oauthSessions.scopes': 'Jogosultságok',
|
||||
'admin.oauthSessions.created': 'Létrehozva',
|
||||
'admin.oauthSessions.empty': 'Nincsenek aktív OAuth munkamenetek',
|
||||
'admin.oauthSessions.revokeTitle': 'Munkamenet visszavonása',
|
||||
'admin.oauthSessions.revokeMessage': 'Ez az OAuth munkamenet azonnal visszavonásra kerül. A kliens elveszíti az MCP hozzáférést.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Munkamenet visszavonva',
|
||||
'admin.oauthSessions.revokeError': 'Nem sikerült visszavonni a munkamenetet',
|
||||
'admin.oauthSessions.loadError': 'Nem sikerült betölteni az OAuth munkameneteket',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -661,6 +736,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Céges szabadnapok',
|
||||
'vacay.companyHolidaysHint': 'Céges szintű szabadnapok megjelölésének engedélyezése',
|
||||
'vacay.companyHolidaysNoDeduct': 'A céges szabadnapok nem számítanak bele a szabadságkeretbe.',
|
||||
'vacay.weekStart': 'A hét kezdőnapja',
|
||||
'vacay.weekStartHint': 'Válaszd ki, hogy a hét hétfőn vagy vasárnap kezdődjön',
|
||||
'vacay.carryOver': 'Szabadság átvitele',
|
||||
'vacay.carryOverHint': 'Megmaradt szabadságnapok automatikus átvitele a következő évre',
|
||||
'vacay.sharing': 'Megosztás',
|
||||
@@ -871,6 +948,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'Fájlok',
|
||||
'inspector.filesCount': '{count} fájl',
|
||||
'inspector.removeFromDay': 'Eltávolítás a napról',
|
||||
'inspector.remove': 'Eltávolítás',
|
||||
'inspector.addToDay': 'Hozzáadás a naphoz',
|
||||
'inspector.confirmedRes': 'Megerősített foglalás',
|
||||
'inspector.pendingRes': 'Függőben lévő foglalás',
|
||||
@@ -1011,6 +1089,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'Teljes költségvetés',
|
||||
'budget.byCategory': 'Kategóriánként',
|
||||
'budget.editTooltip': 'Kattints a szerkesztéshez',
|
||||
'budget.linkedToReservation': 'Foglaláshoz kapcsolva — ott szerkessze a nevet',
|
||||
'budget.confirm.deleteCategory': 'Biztosan törölni szeretnéd a(z) "{name}" kategóriát {count} bejegyzéssel?',
|
||||
'budget.deleteCategory': 'Kategória törlése',
|
||||
'budget.perPerson': 'Személyenként',
|
||||
@@ -1020,9 +1099,13 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.settlement': 'Elszámolás',
|
||||
'budget.settlementInfo': 'Kattints egy tag avatárjára egy költségvetési tételen a zöld jelöléshez — ez azt jelenti, hogy fizetett. Az elszámolás ezután mutatja, ki kinek mennyivel tartozik.',
|
||||
'budget.netBalances': 'Nettó egyenlegek',
|
||||
'budget.linkedToReservation': 'Foglaláshoz kapcsolva — ott módosítsa a nevet',
|
||||
|
||||
// Fájlok
|
||||
'files.title': 'Fájlok',
|
||||
'files.pageTitle': 'Fájlok és dokumentumok',
|
||||
'files.subtitle': '{count} fájl a következőhöz: {trip}',
|
||||
'files.downloadPdf': 'PDF letöltése',
|
||||
'files.count': '{count} fájl',
|
||||
'files.countSingular': '1 fájl',
|
||||
'files.uploaded': '{count} feltöltve',
|
||||
@@ -1101,7 +1184,6 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'Összes kipipálása',
|
||||
'packing.menuUncheckAll': 'Összes jelölés törlése',
|
||||
'packing.menuDeleteCat': 'Kategória törlése',
|
||||
'packing.assignUser': 'Felhasználó hozzárendelése',
|
||||
'packing.noMembers': 'Nincsenek utazási tagok',
|
||||
'packing.addItem': 'Tétel hozzáadása',
|
||||
'packing.addItemPlaceholder': 'Tétel neve...',
|
||||
@@ -1111,6 +1193,9 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'Sablon',
|
||||
'packing.templateApplied': '{count} tétel hozzáadva a sablonból',
|
||||
'packing.templateError': 'Nem sikerült alkalmazni a sablont',
|
||||
'packing.saveAsTemplate': 'Mentés sablonként',
|
||||
'packing.templateName': 'Sablon neve',
|
||||
'packing.templateSaved': 'Csomaglista elmentve sablonként',
|
||||
'packing.bags': 'Táskák',
|
||||
'packing.noBag': 'Nincs hozzárendelve',
|
||||
'packing.totalWeight': 'Összsúly',
|
||||
@@ -1266,6 +1351,13 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Örökre megőrzés',
|
||||
|
||||
// Fotók
|
||||
'photos.title': 'Fotók',
|
||||
'photos.subtitle': '{count} fotó a következőhöz: {trip}',
|
||||
'photos.dropHere': 'Húzza ide a fényképeket...',
|
||||
'photos.dropHereActive': 'Húzza ide a fényképeket',
|
||||
'photos.captionForAll': 'Felirat (mindenkinek)',
|
||||
'photos.captionPlaceholder': 'Opcionális felirat...',
|
||||
'photos.addCaption': 'Felirat hozzáadása...',
|
||||
'photos.allDays': 'Minden nap',
|
||||
'photos.noPhotos': 'Még nincsenek fotók',
|
||||
'photos.uploadHint': 'Töltsd fel az úti fotóidat',
|
||||
@@ -1273,6 +1365,12 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Hely társítása',
|
||||
'photos.noPlace': 'Nincs hely',
|
||||
'photos.uploadN': '{n} fotó feltöltése',
|
||||
'photos.linkDay': 'Nap csatolása',
|
||||
'photos.noDay': 'Nincs nap',
|
||||
'photos.dayLabel': '{number}. nap',
|
||||
'photos.photoSelected': 'Fotó kiválasztva',
|
||||
'photos.photosSelected': 'Fotók kiválasztva',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · legfeljebb 30 fotó',
|
||||
|
||||
// Mentés visszaállítása modal
|
||||
'backup.restoreConfirmTitle': 'Mentés visszaállítása?',
|
||||
@@ -1299,6 +1397,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Útvonal kiszámítva',
|
||||
'planner.routeCalcFailed': 'Nem sikerült kiszámítani az útvonalat',
|
||||
'planner.routeError': 'Hiba az útvonalszámítás során',
|
||||
'planner.icsExportFailed': 'Az ICS-exportálás sikertelen',
|
||||
'planner.routeOptimized': 'Útvonal optimalizálva',
|
||||
'planner.reservationUpdated': 'Foglalás frissítve',
|
||||
'planner.reservationAdded': 'Foglalás hozzáadva',
|
||||
@@ -1454,6 +1553,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Fotók',
|
||||
'memories.notConnected': 'Immich nincs csatlakoztatva',
|
||||
'memories.notConnectedHint': 'Csatlakoztasd az Immich példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.',
|
||||
'memories.notConnectedMultipleHint': 'A fényképek hozzáadásához csatlakoztasson egyet a következő fényképszolgáltatók közül a Beállításokban: {provider_names}.',
|
||||
'memories.noDates': 'Adj hozzá dátumokat az utazáshoz a fotók betöltéséhez.',
|
||||
'memories.noPhotos': 'Nem találhatók fotók',
|
||||
'memories.noPhotosHint': 'Nem találhatók fotók az Immichben erre az utazási időszakra.',
|
||||
@@ -1464,23 +1564,32 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Nézd át a fotóidat',
|
||||
'memories.reviewHint': 'Kattints a fotókra a megosztásból való kizáráshoz.',
|
||||
'memories.shareCount': '{count} fotó megosztása',
|
||||
'memories.immichUrl': 'Immich szerver URL',
|
||||
'memories.immichApiKey': 'API kulcs',
|
||||
'memories.providerUrl': 'Szerver URL',
|
||||
'memories.providerApiKey': 'API kulcs',
|
||||
'memories.providerUsername': 'Felhasználónév',
|
||||
'memories.providerPassword': 'Jelszó',
|
||||
'memories.providerOTP': 'MFA kód (ha engedélyezve van)',
|
||||
'memories.skipSSLVerification': 'SSL tanúsítvány ellenőrzésének kihagyása',
|
||||
'memories.providerUrlHintSynology': 'Adja meg a Photos alkalmazás elérési útját az URL-ben, pl. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Kapcsolat tesztelése',
|
||||
'memories.testFirst': 'Először teszteld a kapcsolatot',
|
||||
'memories.connected': 'Csatlakoztatva',
|
||||
'memories.disconnected': 'Nincs csatlakoztatva',
|
||||
'memories.connectionSuccess': 'Csatlakozva az Immichhez',
|
||||
'memories.connectionError': 'Nem sikerült csatlakozni az Immichhez',
|
||||
'memories.saved': 'Immich beállítások mentve',
|
||||
'memories.saved': '{provider_name} beállítások mentve',
|
||||
'memories.providerDisconnectedBanner': 'A {provider_name} kapcsolat megszakadt. Csatlakozzon újra a Beállításokban a fényképek megtekintéséhez.',
|
||||
'memories.saveError': 'Nem sikerült menteni a(z) {provider_name} beállításait',
|
||||
'memories.addPhotos': 'Fotók hozzáadása',
|
||||
'memories.linkAlbum': 'Album csatolása',
|
||||
'memories.selectAlbum': 'Immich album kiválasztása',
|
||||
'memories.selectAlbumMultiple': 'Album kiválasztása',
|
||||
'memories.noAlbums': 'Nem található album',
|
||||
'memories.syncAlbum': 'Album szinkronizálása',
|
||||
'memories.unlinkAlbum': 'Leválasztás',
|
||||
'memories.photos': 'fotó',
|
||||
'memories.selectPhotos': 'Fotók kiválasztása az Immichből',
|
||||
'memories.selectPhotosMultiple': 'Fényképek kiválasztása',
|
||||
'memories.selectHint': 'Koppints a fotókra a kijelölésükhöz.',
|
||||
'memories.selected': 'kijelölve',
|
||||
'memories.addSelected': '{count} fotó hozzáadása',
|
||||
@@ -1571,6 +1680,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Olvasatlannak jelölés',
|
||||
'notifications.delete': 'Törlés',
|
||||
'notifications.system': 'Rendszer',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos leválasztva',
|
||||
'notifications.synologySessionCleared.text': 'A szerver vagy a fiók megváltozott — lépjen a Beállításokba a kapcsolat újrateszteléséhez.',
|
||||
'memories.error.loadAlbums': 'Az albumok betöltése sikertelen',
|
||||
'memories.error.linkAlbum': 'Az album csatolása sikertelen',
|
||||
'memories.error.unlinkAlbum': 'Az album leválasztása sikertelen',
|
||||
@@ -1693,6 +1804,309 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Új értesítésed érkezett',
|
||||
'notif.dev.unknown_event.title': '[DEV] Ismeretlen esemény',
|
||||
'notif.dev.unknown_event.text': 'A(z) "{event}" eseménytípus nincs regisztrálva az EVENT_NOTIFICATION_CONFIG-ban',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'az imént',
|
||||
'common.hoursAgo': '{count} órája',
|
||||
'common.daysAgo': '{count} napja',
|
||||
'budget.linkedToReservation': 'Foglaláshoz kapcsolva — a nevet ott módosítsd',
|
||||
'packing.saveAsTemplate': 'Mentés sablonként',
|
||||
'packing.templateName': 'Sablon neve',
|
||||
'packing.templateSaved': 'Csomaglista sablonként mentve',
|
||||
'memories.notConnectedMultipleHint': 'Csatlakoztasd valamelyik fotószolgáltatót: {provider_names} a Beállításokban, hogy fotókat adhass hozzá ehhez az úthoz.',
|
||||
'memories.providerUrl': 'Szerver URL',
|
||||
'memories.providerApiKey': 'API-kulcs',
|
||||
'memories.providerUsername': 'Felhasználónév',
|
||||
'memories.providerPassword': 'Jelszó',
|
||||
'memories.saveError': 'Nem sikerült menteni a(z) {provider_name} beállításait',
|
||||
'memories.saveRouteNotConfigured': 'A mentési útvonal nincs konfigurálva ehhez a szolgáltatóhoz',
|
||||
'memories.testRouteNotConfigured': 'A tesztútvonal nincs konfigurálva ehhez a szolgáltatóhoz',
|
||||
'memories.fillRequiredFields': 'Kérjük töltse ki az összes kötelező mezőt',
|
||||
'memories.selectAlbumMultiple': 'Album kiválasztása',
|
||||
'memories.selectPhotosMultiple': 'Fotók kiválasztása',
|
||||
'journey.title': 'Útinaplók',
|
||||
'journey.subtitle': 'Kövesse nyomon utazásait valós időben',
|
||||
'journey.new': 'Új útinapló',
|
||||
'journey.create': 'Létrehozás',
|
||||
'journey.titlePlaceholder': 'Hová utazol?',
|
||||
'journey.empty': 'Még nincsenek útinaplók',
|
||||
'journey.emptyHint': 'Kezdd el dokumentálni a következő utazásod',
|
||||
'journey.deleted': 'Útinapló törölve',
|
||||
'journey.createError': 'Nem sikerült létrehozni az útinaplót',
|
||||
'journey.deleteError': 'Nem sikerült törölni az útinaplót',
|
||||
'journey.deleteConfirmTitle': 'Törlés',
|
||||
'journey.deleteConfirmMessage': 'Törlöd a(z) „{title}" útinaplót? Ez nem vonható vissza.',
|
||||
'journey.deleteConfirmGeneric': 'Biztosan törölni szeretnéd?',
|
||||
'journey.notFound': 'Útinapló nem található',
|
||||
'journey.photos': 'Fotók',
|
||||
'journey.timelineEmpty': 'Még nincsenek megállók',
|
||||
'journey.timelineEmptyHint': 'Adj hozzá egy bejelentkezést vagy írj naplóbejegyzést a kezdéshez',
|
||||
'journey.status.draft': 'Vázlat',
|
||||
'journey.status.active': 'Aktív',
|
||||
'journey.status.completed': 'Befejezett',
|
||||
'journey.status.upcoming': 'Közelgő',
|
||||
'journey.checkin.add': 'Bejelentkezés',
|
||||
'journey.checkin.namePlaceholder': 'Helyszín neve',
|
||||
'journey.checkin.notesPlaceholder': 'Jegyzetek (opcionális)',
|
||||
'journey.checkin.save': 'Mentés',
|
||||
'journey.checkin.error': 'Nem sikerült menteni a bejelentkezést',
|
||||
'journey.entry.add': 'Napló',
|
||||
'journey.entry.edit': 'Bejegyzés szerkesztése',
|
||||
'journey.entry.titlePlaceholder': 'Cím (opcionális)',
|
||||
'journey.entry.bodyPlaceholder': 'Mi történt ma?',
|
||||
'journey.entry.save': 'Mentés',
|
||||
'journey.entry.error': 'Nem sikerült menteni a bejegyzést',
|
||||
'journey.photo.add': 'Fotó',
|
||||
'journey.photo.uploadError': 'A feltöltés sikertelen',
|
||||
'journey.share.share': 'Megosztás',
|
||||
'journey.share.public': 'Nyilvános',
|
||||
'journey.share.linkCopied': 'Nyilvános link másolva',
|
||||
'journey.share.disabled': 'Nyilvános megosztás letiltva',
|
||||
'journey.editor.titlePlaceholder': 'Adj nevet ennek a pillanatnak...',
|
||||
'journey.editor.bodyPlaceholder': 'Meséld el ennek a napnak a történetét...',
|
||||
'journey.editor.placePlaceholder': 'Helyszín (opcionális)',
|
||||
'journey.editor.tagsPlaceholder': 'Címkék: rejtett kincs, legjobb étel, újra meglátogatandó...',
|
||||
'journey.visibility.private': 'Privát',
|
||||
'journey.visibility.shared': 'Megosztott',
|
||||
'journey.visibility.public': 'Nyilvános',
|
||||
'journey.emptyState.title': 'Itt kezdődik a történeted',
|
||||
'journey.emptyState.subtitle': 'Jelentkezz be egy helyszínen vagy írd meg az első naplóbejegyzésed',
|
||||
'journey.frontpage.subtitle': 'Alakítsd utazásaidat történetekké, amelyeket soha nem felejtesz el',
|
||||
'journey.frontpage.createJourney': 'Útinapló létrehozása',
|
||||
'journey.frontpage.activeJourney': 'Aktív útinapló',
|
||||
'journey.frontpage.allJourneys': 'Összes útinapló',
|
||||
'journey.frontpage.journeys': 'útinapló',
|
||||
'journey.frontpage.createNew': 'Új útinapló létrehozása',
|
||||
'journey.frontpage.createNewSub': 'Válassz utakat, írj történeteket, oszd meg kalandjaidat',
|
||||
'journey.frontpage.live': 'Élő',
|
||||
'journey.frontpage.synced': 'Szinkronizálva',
|
||||
'journey.frontpage.continueWriting': 'Írás folytatása',
|
||||
'journey.frontpage.updated': 'Frissítve: {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Az út épp véget ért',
|
||||
'journey.frontpage.suggestionText': 'Alakítsd a(z) <strong>{title}</strong> útinaplóvá',
|
||||
'journey.frontpage.dismiss': 'Elvetés',
|
||||
'journey.frontpage.journeyName': 'Útinapló neve',
|
||||
'journey.frontpage.namePlaceholder': 'pl. Délkelet-Ázsia 2026',
|
||||
'journey.frontpage.selectTrips': 'Utak kiválasztása',
|
||||
'journey.frontpage.tripsSelected': 'út kiválasztva',
|
||||
'journey.frontpage.trips': 'út',
|
||||
'journey.frontpage.placesImported': 'helyszín importálásra kerül',
|
||||
'journey.frontpage.places': 'helyszín',
|
||||
'journey.detail.backToJourney': 'Vissza az útinaplóhoz',
|
||||
'journey.detail.syncedWithTrips': 'Szinkronizálva az utakkal',
|
||||
'journey.detail.addEntry': 'Bejegyzés hozzáadása',
|
||||
'journey.detail.newEntry': 'Új bejegyzés',
|
||||
'journey.detail.editEntry': 'Bejegyzés szerkesztése',
|
||||
'journey.detail.noEntries': 'Még nincsenek bejegyzések',
|
||||
'journey.detail.noEntriesHint': 'Adj hozzá egy utat a vázlatos bejegyzések elkészítéséhez',
|
||||
'journey.detail.noPhotos': 'Még nincsenek fotók',
|
||||
'journey.detail.noPhotosHint': 'Tölts fel fotókat a bejegyzésekhez vagy böngészd az Immich/Synology könyvtárat',
|
||||
'journey.detail.journeyStats': 'Útinapló statisztika',
|
||||
'journey.detail.syncedTrips': 'Szinkronizált utak',
|
||||
'journey.detail.noTripsLinked': 'Még nincsenek kapcsolt utak',
|
||||
'journey.detail.contributors': 'Közreműködők',
|
||||
'journey.detail.readMore': 'Tovább olvasás',
|
||||
'journey.detail.prosCons': 'Előnyök és hátrányok',
|
||||
'journey.stats.days': 'Napok',
|
||||
'journey.stats.cities': 'Városok',
|
||||
'journey.stats.entries': 'Bejegyzések',
|
||||
'journey.stats.photos': 'Fotók',
|
||||
'journey.stats.places': 'Helyszínek',
|
||||
'journey.verdict.lovedIt': 'Imádtam',
|
||||
'journey.verdict.couldBeBetter': 'Lehetne jobb',
|
||||
'journey.synced.places': 'helyszín',
|
||||
'journey.synced.synced': 'szinkronizálva',
|
||||
'journey.editor.uploadPhotos': 'Fotók feltöltése',
|
||||
'journey.editor.fromGallery': 'Galériából',
|
||||
'journey.editor.allPhotosAdded': 'Minden fotó már hozzáadva',
|
||||
'journey.editor.writeStory': 'Írd meg a történeted...',
|
||||
'journey.editor.prosCons': 'Előnyök és hátrányok',
|
||||
'journey.editor.pros': 'Előnyök',
|
||||
'journey.editor.cons': 'Hátrányok',
|
||||
'journey.editor.proPlaceholder': 'Valami remek...',
|
||||
'journey.editor.conPlaceholder': 'Nem annyira jó...',
|
||||
'journey.editor.addAnother': 'Még egy hozzáadása',
|
||||
'journey.editor.date': 'Dátum',
|
||||
'journey.editor.location': 'Helyszín',
|
||||
'journey.editor.searchLocation': 'Helyszín keresése...',
|
||||
'journey.editor.mood': 'Hangulat',
|
||||
'journey.editor.weather': 'Időjárás',
|
||||
'journey.editor.photoFirst': '1.',
|
||||
'journey.editor.makeFirst': 'Legyen az 1.',
|
||||
'journey.mood.amazing': 'Fantasztikus',
|
||||
'journey.mood.good': 'Jó',
|
||||
'journey.mood.neutral': 'Semleges',
|
||||
'journey.mood.rough': 'Nehéz',
|
||||
'journey.weather.sunny': 'Napos',
|
||||
'journey.weather.partly': 'Részben felhős',
|
||||
'journey.weather.cloudy': 'Felhős',
|
||||
'journey.weather.rainy': 'Esős',
|
||||
'journey.weather.stormy': 'Viharos',
|
||||
'journey.weather.cold': 'Havas',
|
||||
'journey.trips.linkTrip': 'Út kapcsolása',
|
||||
'journey.trips.searchTrip': 'Út keresése',
|
||||
'journey.trips.searchPlaceholder': 'Út neve vagy úti cél...',
|
||||
'journey.trips.noTripsAvailable': 'Nincsenek elérhető utak',
|
||||
'journey.trips.link': 'Kapcsolás',
|
||||
'journey.trips.tripLinked': 'Út kapcsolva',
|
||||
'journey.trips.linkFailed': 'Nem sikerült az utat kapcsolni',
|
||||
'journey.trips.addTrip': 'Út hozzáadása',
|
||||
'journey.trips.unlinkTrip': 'Út leválasztása',
|
||||
'journey.trips.unlinkMessage': 'Leválasztod a(z) „{title}" utat? Az összes szinkronizált bejegyzés és fotó véglegesen törlődik. Ez nem vonható vissza.',
|
||||
'journey.trips.unlink': 'Leválasztás',
|
||||
'journey.trips.tripUnlinked': 'Út leválasztva',
|
||||
'journey.trips.unlinkFailed': 'Nem sikerült az utat leválasztani',
|
||||
'journey.trips.noTripsLinkedSettings': 'Nincsenek kapcsolt utak',
|
||||
'journey.contributors.invite': 'Közreműködő meghívása',
|
||||
'journey.contributors.searchUser': 'Felhasználó keresése',
|
||||
'journey.contributors.searchPlaceholder': 'Felhasználónév vagy e-mail...',
|
||||
'journey.contributors.noUsers': 'Nem található felhasználó',
|
||||
'journey.contributors.role': 'Szerep',
|
||||
'journey.contributors.added': 'Közreműködő hozzáadva',
|
||||
'journey.contributors.addFailed': 'Nem sikerült hozzáadni a közreműködőt',
|
||||
'journey.share.publicShare': 'Nyilvános megosztás',
|
||||
'journey.share.createLink': 'Megosztó link létrehozása',
|
||||
'journey.share.linkCreated': 'Megosztó link létrehozva',
|
||||
'journey.share.createFailed': 'Nem sikerült létrehozni a linket',
|
||||
'journey.share.copy': 'Másolás',
|
||||
'journey.share.copied': 'Másolva!',
|
||||
'journey.share.timeline': 'Idővonal',
|
||||
'journey.share.gallery': 'Galéria',
|
||||
'journey.share.map': 'Térkép',
|
||||
'journey.share.removeLink': 'Megosztó link eltávolítása',
|
||||
'journey.share.linkDeleted': 'Megosztó link törölve',
|
||||
'journey.share.deleteFailed': 'Nem sikerült törölni',
|
||||
'journey.share.updateFailed': 'Nem sikerült frissíteni',
|
||||
'journey.settings.title': 'Útinapló beállításai',
|
||||
'journey.settings.coverImage': 'Borítókép',
|
||||
'journey.settings.changeCover': 'Borító módosítása',
|
||||
'journey.settings.addCover': 'Borítókép hozzáadása',
|
||||
'journey.settings.name': 'Név',
|
||||
'journey.settings.subtitle': 'Alcím',
|
||||
'journey.settings.subtitlePlaceholder': 'pl. Thaiföld, Vietnam és Kambodzsa',
|
||||
'journey.settings.delete': 'Törlés',
|
||||
'journey.settings.deleteJourney': 'Útinapló törlése',
|
||||
'journey.settings.deleteMessage': 'Törlöd a(z) „{title}" útinaplót? Minden bejegyzés és fotó elveszik.',
|
||||
'journey.settings.saved': 'Beállítások mentve',
|
||||
'journey.settings.saveFailed': 'Nem sikerült menteni',
|
||||
'journey.settings.coverUpdated': 'Borítókép frissítve',
|
||||
'journey.settings.coverFailed': 'A feltöltés sikertelen',
|
||||
'journey.settings.failedToDelete': 'Törlés sikertelen',
|
||||
'journey.entries.deleteTitle': 'Bejegyzés törlése',
|
||||
'journey.photosUploaded': '{count} fotó feltöltve',
|
||||
'journey.photosAdded': '{count} fotó hozzáadva',
|
||||
'journey.public.notFound': 'Nem található',
|
||||
'journey.public.notFoundMessage': 'Ez az útinapló nem létezik vagy a link lejárt.',
|
||||
'journey.public.readOnly': 'Csak olvasható · Nyilvános útinapló',
|
||||
'journey.public.tagline': 'Utazástervező és felfedező eszköz',
|
||||
'journey.public.sharedVia': 'Megosztva a következőn keresztül:',
|
||||
'journey.public.madeWith': 'Készítve a következővel:',
|
||||
'journey.pdf.journeyBook': 'Útinaplókönyv',
|
||||
'journey.pdf.madeWith': 'Készítve a TREK segítségével',
|
||||
'journey.pdf.day': 'Nap',
|
||||
'journey.pdf.theEnd': 'Vége',
|
||||
'journey.pdf.saveAsPdf': 'Mentés PDF-ként',
|
||||
'journey.pdf.pages': 'oldal',
|
||||
'dashboard.greeting.morning': 'Jó reggelt,',
|
||||
'dashboard.greeting.afternoon': 'Jó napot,',
|
||||
'dashboard.greeting.evening': 'Jó estét,',
|
||||
'dashboard.mobile.liveNow': 'Most élőben',
|
||||
'dashboard.mobile.tripProgress': 'Út előrehaladása',
|
||||
'dashboard.mobile.daysLeft': 'még {count} nap',
|
||||
'dashboard.mobile.places': 'Helyszínek',
|
||||
'dashboard.mobile.buddies': 'Útitársak',
|
||||
'dashboard.mobile.newTrip': 'Új út',
|
||||
'dashboard.mobile.currency': 'Pénznem',
|
||||
'dashboard.mobile.timezone': 'Időzóna',
|
||||
'dashboard.mobile.upcomingTrips': 'Közelgő utak',
|
||||
'dashboard.mobile.yourTrips': 'Utaid',
|
||||
'dashboard.mobile.trips': 'út',
|
||||
'dashboard.mobile.starts': 'Kezdés',
|
||||
'dashboard.mobile.duration': 'Időtartam',
|
||||
'dashboard.mobile.day': 'nap',
|
||||
'dashboard.mobile.days': 'nap',
|
||||
'dashboard.mobile.ongoing': 'Folyamatban',
|
||||
'dashboard.mobile.startsToday': 'Ma kezdődik',
|
||||
'dashboard.mobile.tomorrow': 'Holnap',
|
||||
'dashboard.mobile.inDays': '{count} nap múlva',
|
||||
'dashboard.mobile.inMonths': '{count} hónap múlva',
|
||||
'dashboard.mobile.completed': 'Befejezett',
|
||||
'dashboard.mobile.currencyConverter': 'Pénznemváltó',
|
||||
'nav.profile': 'Profil',
|
||||
'nav.bottomSettings': 'Beállítások',
|
||||
'nav.bottomAdmin': 'Adminisztráció',
|
||||
'nav.bottomLogout': 'Kijelentkezés',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Helyszín hozzáadása',
|
||||
'dayplan.mobile.searchPlaces': 'Helyszínek keresése...',
|
||||
'dayplan.mobile.allAssigned': 'Minden helyszín kiosztva',
|
||||
'dayplan.mobile.noMatch': 'Nincs találat',
|
||||
'dayplan.mobile.createNew': 'Új helyszín létrehozása',
|
||||
'admin.addons.catalog.journey.name': 'Útinaplók',
|
||||
'admin.addons.catalog.journey.description': 'Utazáskövetés és útinapló bejelentkezésekkel, fotókkal és napi történetekkel',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Utazások',
|
||||
'oauth.scope.group.places': 'Helyek',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Csomagolás',
|
||||
'oauth.scope.group.todos': 'Feladatok',
|
||||
'oauth.scope.group.budget': 'Költségvetés',
|
||||
'oauth.scope.group.reservations': 'Foglalások',
|
||||
'oauth.scope.group.collab': 'Együttműködés',
|
||||
'oauth.scope.group.notifications': 'Értesítések',
|
||||
'oauth.scope.group.vacay': 'Szabadság',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Időjárás',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Utazások és útvonalak megtekintése',
|
||||
'oauth.scope.trips:read.description': 'Utazások, napok, napi feljegyzések és tagok olvasása',
|
||||
'oauth.scope.trips:write.label': 'Utazások és útvonalak szerkesztése',
|
||||
'oauth.scope.trips:write.description': 'Utazások, napok és feljegyzések létrehozása, frissítése és tagok kezelése',
|
||||
'oauth.scope.trips:delete.label': 'Utazások törlése',
|
||||
'oauth.scope.trips:delete.description': 'Teljes utazások végleges törlése — ez a művelet visszafordíthatatlan',
|
||||
'oauth.scope.trips:share.label': 'Megosztási linkek kezelése',
|
||||
'oauth.scope.trips:share.description': 'Nyilvános megosztási linkek létrehozása, frissítése és visszavonása',
|
||||
'oauth.scope.places:read.label': 'Helyek és térképadatok megtekintése',
|
||||
'oauth.scope.places:read.description': 'Helyek, napi hozzárendelések, címkék és kategóriák olvasása',
|
||||
'oauth.scope.places:write.label': 'Helyek kezelése',
|
||||
'oauth.scope.places:write.description': 'Helyek, hozzárendelések és címkék létrehozása, frissítése és törlése',
|
||||
'oauth.scope.atlas:read.label': 'Atlas megtekintése',
|
||||
'oauth.scope.atlas:read.description': 'Meglátogatott országok, régiók és bakancslisták olvasása',
|
||||
'oauth.scope.atlas:write.label': 'Atlas kezelése',
|
||||
'oauth.scope.atlas:write.description': 'Országok és régiók meglátogatottként jelölése, bakancslisták kezelése',
|
||||
'oauth.scope.packing:read.label': 'Csomaglisták megtekintése',
|
||||
'oauth.scope.packing:read.description': 'Csomagolási tételek, táskák és kategória-hozzárendelések olvasása',
|
||||
'oauth.scope.packing:write.label': 'Csomaglisták kezelése',
|
||||
'oauth.scope.packing:write.description': 'Csomagolási tételek és táskák hozzáadása, frissítése, törlése, jelölése és átrendezése',
|
||||
'oauth.scope.todos:read.label': 'Feladatlisták megtekintése',
|
||||
'oauth.scope.todos:read.description': 'Utazás feladatai és kategória-hozzárendelések olvasása',
|
||||
'oauth.scope.todos:write.label': 'Feladatlisták kezelése',
|
||||
'oauth.scope.todos:write.description': 'Feladatok létrehozása, frissítése, jelölése, törlése és átrendezése',
|
||||
'oauth.scope.budget:read.label': 'Költségvetés megtekintése',
|
||||
'oauth.scope.budget:read.description': 'Költségvetési tételek és kiadások részletezésének olvasása',
|
||||
'oauth.scope.budget:write.label': 'Költségvetés kezelése',
|
||||
'oauth.scope.budget:write.description': 'Költségvetési tételek létrehozása, frissítése és törlése',
|
||||
'oauth.scope.reservations:read.label': 'Foglalások megtekintése',
|
||||
'oauth.scope.reservations:read.description': 'Foglalások és szállásadatok olvasása',
|
||||
'oauth.scope.reservations:write.label': 'Foglalások kezelése',
|
||||
'oauth.scope.reservations:write.description': 'Foglalások létrehozása, frissítése, törlése és átrendezése',
|
||||
'oauth.scope.collab:read.label': 'Együttműködés megtekintése',
|
||||
'oauth.scope.collab:read.description': 'Együttműködési feljegyzések, szavazások és üzenetek olvasása',
|
||||
'oauth.scope.collab:write.label': 'Együttműködés kezelése',
|
||||
'oauth.scope.collab:write.description': 'Együttműködési feljegyzések, szavazások és üzenetek létrehozása, frissítése és törlése',
|
||||
'oauth.scope.notifications:read.label': 'Értesítések megtekintése',
|
||||
'oauth.scope.notifications:read.description': 'Alkalmazáson belüli értesítések és olvasatlan számok olvasása',
|
||||
'oauth.scope.notifications:write.label': 'Értesítések kezelése',
|
||||
'oauth.scope.notifications:write.description': 'Értesítések olvasottként jelölése és válaszadás rájuk',
|
||||
'oauth.scope.vacay:read.label': 'Szabadságtervek megtekintése',
|
||||
'oauth.scope.vacay:read.description': 'Szabadságtervezési adatok, bejegyzések és statisztikák olvasása',
|
||||
'oauth.scope.vacay:write.label': 'Szabadságtervek kezelése',
|
||||
'oauth.scope.vacay:write.description': 'Szabadságbejegyzések, ünnepnapok és csapattervek létrehozása és kezelése',
|
||||
'oauth.scope.geo:read.label': 'Térképek és geokódolás',
|
||||
'oauth.scope.geo:read.description': 'Helyek keresése, térkép URL-ek feloldása és koordináták fordított geokódolása',
|
||||
'oauth.scope.weather:read.label': 'Időjárás-előrejelzések',
|
||||
'oauth.scope.weather:read.description': 'Időjárás-előrejelzések lekérése az utazási helyszínekre és dátumokra',
|
||||
}
|
||||
|
||||
export default hu
|
||||
|
||||
@@ -8,6 +8,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.loading': 'Caricamento...',
|
||||
'common.import': 'Importa',
|
||||
'common.error': 'Errore',
|
||||
'common.unknownError': 'Errore sconosciuto',
|
||||
'common.tooManyAttempts': 'Troppi tentativi. Riprova più tardi.',
|
||||
'common.back': 'Indietro',
|
||||
'common.all': 'Tutti',
|
||||
'common.close': 'Chiudi',
|
||||
@@ -27,6 +29,12 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.password': 'Password',
|
||||
'common.saving': 'Salvataggio...',
|
||||
'common.saved': 'Salvato',
|
||||
'trips.memberRemoved': '{username} rimosso',
|
||||
'trips.memberRemoveError': 'Rimozione non riuscita',
|
||||
'trips.memberAdded': '{username} aggiunto',
|
||||
'trips.memberAddError': 'Aggiunta non riuscita',
|
||||
'common.expand': 'Espandi',
|
||||
'common.collapse': 'Comprimi',
|
||||
'trips.reminder': 'Promemoria',
|
||||
'trips.reminderNone': 'Nessuno',
|
||||
'trips.reminderDay': 'giorno',
|
||||
@@ -180,6 +188,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'Endpoint MCP',
|
||||
'settings.mcp.clientConfig': 'Configurazione client',
|
||||
'settings.mcp.clientConfigHint': 'Sostituisci <your_token> con un token API dalla lista sottostante. Il percorso di npx potrebbe dover essere adattato per il tuo sistema (es. C:\\PROGRA~1\\nodejs\\npx.cmd su Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:\PROGRA~1\nodejs\npx.cmd on Windows).',
|
||||
'settings.mcp.copy': 'Copia',
|
||||
'settings.mcp.copied': 'Copiato!',
|
||||
'settings.mcp.apiTokens': 'Token API',
|
||||
@@ -201,6 +210,48 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Impossibile creare il token',
|
||||
'settings.mcp.toast.deleted': 'Token eliminato',
|
||||
'settings.mcp.toast.deleteError': 'Impossibile eliminare il token',
|
||||
'settings.mcp.apiTokensDeprecated': 'I token API sono deprecati e verranno rimossi in una versione futura. Utilizza invece i client OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Client OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Registra client OAuth 2.1 per consentire alle applicazioni MCP di terze parti (Claude Web, Cursor, ecc.) di connettersi senza token statici.',
|
||||
'settings.oauth.createClient': 'Nuovo client',
|
||||
'settings.oauth.noClients': 'Nessun client OAuth registrato.',
|
||||
'settings.oauth.clientId': 'ID client',
|
||||
'settings.oauth.clientSecret': 'Segreto client',
|
||||
'settings.oauth.deleteClient': 'Elimina client',
|
||||
'settings.oauth.deleteClientMessage': 'Questo client e tutte le sessioni attive verranno eliminati definitivamente. Qualsiasi applicazione che lo utilizza perderà immediatamente l\'accesso.',
|
||||
'settings.oauth.rotateSecret': 'Rinnova segreto',
|
||||
'settings.oauth.rotateSecretMessage': 'Verrà generato un nuovo segreto client e tutte le sessioni esistenti verranno invalidate immediatamente. Aggiorna la tua applicazione prima di chiudere questa finestra.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Rinnova',
|
||||
'settings.oauth.rotateSecretConfirming': 'Rinnovo in corso…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Nuovo segreto generato',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Questo segreto viene mostrato una sola volta. Copialo ora e aggiorna la tua applicazione — tutte le sessioni precedenti sono state invalidate.',
|
||||
'settings.oauth.activeSessions': 'Sessioni OAuth attive',
|
||||
'settings.oauth.sessionScopes': 'Ambiti',
|
||||
'settings.oauth.sessionExpires': 'Scade',
|
||||
'settings.oauth.revoke': 'Revoca',
|
||||
'settings.oauth.revokeSession': 'Revoca sessione',
|
||||
'settings.oauth.revokeSessionMessage': 'Questo revocherà immediatamente l\'accesso per questa sessione OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Registra client OAuth',
|
||||
'settings.oauth.modal.presets': 'Preimpostazioni rapide',
|
||||
'settings.oauth.modal.clientName': 'Nome applicazione',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'es. Claude Web, La mia app MCP',
|
||||
'settings.oauth.modal.redirectUris': 'URI di reindirizzamento',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Un URI per riga. HTTPS richiesto (localhost esente). Corrispondenza esatta richiesta.',
|
||||
'settings.oauth.modal.scopes': 'Ambiti consentiti',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips e get_trip_summary sono sempre disponibili — nessun ambito richiesto. Permettono all\'IA di scoprire gli ID viaggio necessari.',
|
||||
'settings.oauth.modal.selectAll': 'Seleziona tutto',
|
||||
'settings.oauth.modal.deselectAll': 'Deseleziona tutto',
|
||||
'settings.oauth.modal.creating': 'Registrazione…',
|
||||
'settings.oauth.modal.create': 'Registra client',
|
||||
'settings.oauth.modal.createdTitle': 'Client registrato',
|
||||
'settings.oauth.modal.createdWarning': 'Il segreto client viene mostrato una sola volta. Copialo ora — non può essere recuperato.',
|
||||
'settings.oauth.toast.createError': 'Impossibile registrare il client OAuth',
|
||||
'settings.oauth.toast.deleted': 'Client OAuth eliminato',
|
||||
'settings.oauth.toast.deleteError': 'Impossibile eliminare il client OAuth',
|
||||
'settings.oauth.toast.revoked': 'Sessione revocata',
|
||||
'settings.oauth.toast.revokeError': 'Impossibile revocare la sessione',
|
||||
'settings.oauth.toast.rotateError': 'Impossibile rinnovare il segreto client',
|
||||
'settings.account': 'Account',
|
||||
'settings.about': 'Informazioni',
|
||||
'settings.about.reportBug': 'Segnala un bug',
|
||||
@@ -211,7 +262,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.about.description': 'TREK è un pianificatore di viaggi self-hosted che ti aiuta a organizzare i tuoi viaggi dalla prima idea all\'ultimo ricordo. Pianificazione giornaliera, budget, liste bagagli, foto e molto altro — tutto in un unico posto, sul tuo server.',
|
||||
'settings.about.madeWith': 'Fatto con',
|
||||
'settings.about.madeBy': 'da Maurice e una crescente comunità open-source.',
|
||||
'settings.username': 'Username',
|
||||
'settings.username': 'Nome utente',
|
||||
'settings.email': 'Email',
|
||||
'settings.role': 'Ruolo',
|
||||
'settings.roleAdmin': 'Amministratore',
|
||||
@@ -274,9 +325,6 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.none': 'Disattivato',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Eventi di notifica',
|
||||
'admin.notifications.eventsHint': 'Scegli quali eventi attivano le notifiche per tutti gli utenti.',
|
||||
'admin.notifications.configureFirst': 'Configura prima le impostazioni SMTP o webhook qui sotto, poi abilita gli eventi.',
|
||||
'admin.notifications.save': 'Salva impostazioni notifiche',
|
||||
'admin.notifications.saved': 'Impostazioni notifiche salvate',
|
||||
'admin.notifications.testWebhook': 'Invia webhook di test',
|
||||
@@ -354,7 +402,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.hasAccount': 'Hai già un account?',
|
||||
'login.register': 'Registrati',
|
||||
'login.emailPlaceholder': 'tua@email.com',
|
||||
'login.username': 'Username',
|
||||
'login.username': 'Nome utente',
|
||||
'login.oidc.registrationDisabled': 'La registrazione è disabilitata. Contatta il tuo amministratore.',
|
||||
'login.oidc.noEmail': 'Nessuna email ricevuta dal provider.',
|
||||
'login.oidc.tokenFailed': 'Autenticazione fallita.',
|
||||
@@ -371,6 +419,10 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Apri Google Authenticator, Authy o un\'altra app TOTP.',
|
||||
'login.mfaBack': '← Torna all\'accesso',
|
||||
'login.mfaVerify': 'Verifica',
|
||||
'login.invalidInviteLink': 'Link di invito non valido o scaduto',
|
||||
'login.oidcFailed': 'Accesso OIDC non riuscito',
|
||||
'login.usernameRequired': 'Il nome utente è obbligatorio',
|
||||
'login.passwordMinLength': 'La password deve contenere almeno 8 caratteri',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'Le password non corrispondono',
|
||||
@@ -449,6 +501,17 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Impostazioni',
|
||||
'admin.allowRegistration': 'Consenti Registrazione',
|
||||
'admin.allowRegistrationHint': 'I nuovi utenti possono registrarsi autonomamente',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Richiedi autenticazione a due fattori (2FA)',
|
||||
'admin.requireMfaHint': 'Gli utenti senza 2FA devono completare la configurazione in Impostazioni prima di usare l\'app.',
|
||||
'admin.apiKeys': 'Chiavi API',
|
||||
@@ -561,9 +624,10 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.audit.col.details': 'Dettagli',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'Token MCP',
|
||||
'admin.mcpTokens.title': 'Token MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gestisci i token API di tutti gli utenti',
|
||||
'admin.tabs.mcpTokens': 'Accesso MCP',
|
||||
'admin.mcpTokens.title': 'Accesso MCP',
|
||||
'admin.mcpTokens.subtitle': 'Gestisci le sessioni OAuth e i token API di tutti gli utenti',
|
||||
'admin.mcpTokens.sectionTitle': 'Token API',
|
||||
'admin.mcpTokens.owner': 'Proprietario',
|
||||
'admin.mcpTokens.tokenName': 'Nome token',
|
||||
'admin.mcpTokens.created': 'Creato',
|
||||
@@ -575,6 +639,17 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token eliminato',
|
||||
'admin.mcpTokens.deleteError': 'Impossibile eliminare il token',
|
||||
'admin.mcpTokens.loadError': 'Impossibile caricare i token',
|
||||
'admin.oauthSessions.sectionTitle': 'Sessioni OAuth',
|
||||
'admin.oauthSessions.clientName': 'Client',
|
||||
'admin.oauthSessions.owner': 'Proprietario',
|
||||
'admin.oauthSessions.scopes': 'Ambiti',
|
||||
'admin.oauthSessions.created': 'Creato',
|
||||
'admin.oauthSessions.empty': 'Nessuna sessione OAuth attiva',
|
||||
'admin.oauthSessions.revokeTitle': 'Revoca sessione',
|
||||
'admin.oauthSessions.revokeMessage': 'Questa sessione OAuth verrà revocata immediatamente. Il client perderà l\'accesso MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sessione revocata',
|
||||
'admin.oauthSessions.revokeError': 'Impossibile revocare la sessione',
|
||||
'admin.oauthSessions.loadError': 'Impossibile caricare le sessioni OAuth',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -661,6 +736,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Ferie aziendali',
|
||||
'vacay.companyHolidaysHint': 'Consenti di segnare giorni di ferie aziendali',
|
||||
'vacay.companyHolidaysNoDeduct': 'Le ferie aziendali non vengono conteggiate nei giorni di ferie.',
|
||||
'vacay.weekStart': 'La settimana inizia il',
|
||||
'vacay.weekStartHint': 'Scegli se la settimana inizia il lunedì o la domenica',
|
||||
'vacay.carryOver': 'Riporto',
|
||||
'vacay.carryOverHint': 'Riporta automaticamente i giorni di ferie rimanenti all\'anno successivo',
|
||||
'vacay.sharing': 'Condivisione',
|
||||
@@ -871,6 +948,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'File',
|
||||
'inspector.filesCount': '{count} file',
|
||||
'inspector.removeFromDay': 'Rimuovi dal giorno',
|
||||
'inspector.remove': 'Rimuovi',
|
||||
'inspector.addToDay': 'Aggiungi al giorno',
|
||||
'inspector.confirmedRes': 'Prenotazione confermata',
|
||||
'inspector.pendingRes': 'Prenotazione in attesa',
|
||||
@@ -1011,6 +1089,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'Budget totale',
|
||||
'budget.byCategory': 'Per categoria',
|
||||
'budget.editTooltip': 'Clicca per modificare',
|
||||
'budget.linkedToReservation': 'Collegato a una prenotazione — modifica il nome lì',
|
||||
'budget.confirm.deleteCategory': 'Sei sicuro di voler eliminare la categoria "{name}" con {count} voci?',
|
||||
'budget.deleteCategory': 'Elimina categoria',
|
||||
'budget.perPerson': 'Per persona',
|
||||
@@ -1020,9 +1099,13 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.settlement': 'Regolamento',
|
||||
'budget.settlementInfo': 'Clicca sull\'avatar di un membro su una voce di budget per contrassegnarlo in verde — significa che ha pagato. Il regolamento mostra poi chi deve quanto a chi.',
|
||||
'budget.netBalances': 'Saldi netti',
|
||||
'budget.linkedToReservation': 'Collegato a una prenotazione — modifica il nome lì',
|
||||
|
||||
// Files
|
||||
'files.title': 'File',
|
||||
'files.pageTitle': 'File e documenti',
|
||||
'files.subtitle': '{count} file per {trip}',
|
||||
'files.downloadPdf': 'Scarica PDF',
|
||||
'files.count': '{count} file',
|
||||
'files.countSingular': '1 documento',
|
||||
'files.uploaded': '{count} caricati',
|
||||
@@ -1101,7 +1184,6 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'Seleziona tutti',
|
||||
'packing.menuUncheckAll': 'Deseleziona tutti',
|
||||
'packing.menuDeleteCat': 'Elimina categoria',
|
||||
'packing.assignUser': 'Assegna utente',
|
||||
'packing.noMembers': 'Nessun membro del viaggio',
|
||||
'packing.addItem': 'Aggiungi elemento',
|
||||
'packing.addItemPlaceholder': 'Nome elemento...',
|
||||
@@ -1111,6 +1193,9 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'Modello',
|
||||
'packing.templateApplied': '{count} elementi aggiunti dal modello',
|
||||
'packing.templateError': 'Impossibile applicare il modello',
|
||||
'packing.saveAsTemplate': 'Salva come modello',
|
||||
'packing.templateName': 'Nome modello',
|
||||
'packing.templateSaved': 'Lista bagagli salvata come modello',
|
||||
'packing.bags': 'Valigie',
|
||||
'packing.noBag': 'Non assegnato',
|
||||
'packing.totalWeight': 'Peso totale',
|
||||
@@ -1266,6 +1351,13 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Conserva per sempre',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Foto',
|
||||
'photos.subtitle': '{count} foto per {trip}',
|
||||
'photos.dropHere': 'Trascina le foto qui...',
|
||||
'photos.dropHereActive': 'Trascina le foto qui',
|
||||
'photos.captionForAll': 'Didascalia (per tutti)',
|
||||
'photos.captionPlaceholder': 'Didascalia opzionale...',
|
||||
'photos.addCaption': 'Aggiungi didascalia...',
|
||||
'photos.allDays': 'Tutti i giorni',
|
||||
'photos.noPhotos': 'Ancora nessuna foto',
|
||||
'photos.uploadHint': 'Carica le foto del tuo viaggio',
|
||||
@@ -1273,6 +1365,12 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Collega luogo',
|
||||
'photos.noPlace': 'Nessun luogo',
|
||||
'photos.uploadN': 'Caricamento di {n} foto',
|
||||
'photos.linkDay': 'Collega giorno',
|
||||
'photos.noDay': 'Nessun giorno',
|
||||
'photos.dayLabel': 'Giorno {number}',
|
||||
'photos.photoSelected': 'Foto selezionata',
|
||||
'photos.photosSelected': 'Foto selezionate',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · fino a 30 foto',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Ripristinare il backup?',
|
||||
@@ -1299,6 +1397,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Percorso calcolato',
|
||||
'planner.routeCalcFailed': 'Il percorso non è stato calcolato',
|
||||
'planner.routeError': 'Errore nel calcolo del percorso',
|
||||
'planner.icsExportFailed': 'Esportazione ICS non riuscita',
|
||||
'planner.routeOptimized': 'Percorso ottimizzato',
|
||||
'planner.reservationUpdated': 'Prenotazione aggiornata',
|
||||
'planner.reservationAdded': 'Prenotazione aggiunta',
|
||||
@@ -1384,6 +1483,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Foto',
|
||||
'memories.notConnected': 'Immich non connesso',
|
||||
'memories.notConnectedHint': 'Connetti la tua istanza Immich nelle Impostazioni per vedere qui le foto del tuo viaggio.',
|
||||
'memories.notConnectedMultipleHint': 'Collega uno di questi provider di foto: {provider_names} nelle Impostazioni per poter aggiungere foto a questo viaggio.',
|
||||
'memories.noDates': 'Aggiungi le date al tuo viaggio per caricare le foto.',
|
||||
'memories.noPhotos': 'Nessuna foto trovata',
|
||||
'memories.noPhotosHint': 'Nessuna foto trovata in Immich per l\'intervallo di date di questo viaggio.',
|
||||
@@ -1394,23 +1494,35 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Rivedi le tue foto',
|
||||
'memories.reviewHint': 'Clicca sulle foto per escluderle dalla condivisione.',
|
||||
'memories.shareCount': 'Condividi {count} foto',
|
||||
'memories.immichUrl': 'URL Server Immich',
|
||||
'memories.immichApiKey': 'Chiave API',
|
||||
'memories.providerUrl': 'URL del server',
|
||||
'memories.providerApiKey': 'Chiave API',
|
||||
'memories.providerUsername': 'Nome utente',
|
||||
'memories.providerPassword': 'Password',
|
||||
'memories.providerOTP': 'Codice MFA (se abilitato)',
|
||||
'memories.skipSSLVerification': 'Ignora la verifica del certificato SSL',
|
||||
'memories.providerUrlHintSynology': 'Includi il percorso dell\'app Foto nell\'URL, es. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Test connessione',
|
||||
'memories.testFirst': 'Testa prima la connessione',
|
||||
'memories.connected': 'Connesso',
|
||||
'memories.disconnected': 'Non connesso',
|
||||
'memories.connectionSuccess': 'Connesso a Immich',
|
||||
'memories.connectionError': 'Impossibile connettersi a Immich',
|
||||
'memories.saved': 'Impostazioni Immich salvate',
|
||||
'memories.saved': 'Impostazioni {provider_name} salvate',
|
||||
'memories.providerDisconnectedBanner': 'La connessione a {provider_name} è persa. Riconnetti nelle Impostazioni per visualizzare le foto.',
|
||||
'memories.saveError': 'Impossibile salvare le impostazioni di {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'La route di salvataggio non è configurata per questo provider',
|
||||
'memories.testRouteNotConfigured': 'La route di test non è configurata per questo provider',
|
||||
'memories.fillRequiredFields': 'Per favore compila tutti i campi obbligatori',
|
||||
'memories.addPhotos': 'Aggiungi foto',
|
||||
'memories.linkAlbum': 'Collega album',
|
||||
'memories.selectAlbum': 'Seleziona album Immich',
|
||||
'memories.selectAlbumMultiple': 'Seleziona album',
|
||||
'memories.noAlbums': 'Nessun album trovato',
|
||||
'memories.syncAlbum': 'Sincronizza album',
|
||||
'memories.unlinkAlbum': 'Scollega',
|
||||
'memories.photos': 'foto',
|
||||
'memories.selectPhotos': 'Seleziona foto da Immich',
|
||||
'memories.selectPhotosMultiple': 'Seleziona foto',
|
||||
'memories.selectHint': 'Tocca le foto per selezionarle.',
|
||||
'memories.selected': 'selezionate',
|
||||
'memories.addSelected': 'Aggiungi {count} foto',
|
||||
@@ -1573,6 +1685,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Segna come non letto',
|
||||
'notifications.delete': 'Elimina',
|
||||
'notifications.system': 'Sistema',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos disconnesso',
|
||||
'notifications.synologySessionCleared.text': 'Il server o l\'account è cambiato — vai alle Impostazioni per testare nuovamente la connessione.',
|
||||
'memories.error.loadAlbums': 'Caricamento album non riuscito',
|
||||
'memories.error.linkAlbum': 'Collegamento album non riuscito',
|
||||
'memories.error.unlinkAlbum': 'Scollegamento album non riuscito',
|
||||
@@ -1654,7 +1768,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.adminWebhookPanel.testFailed': 'Invio webhook di test fallito',
|
||||
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Il webhook admin si attiva automaticamente quando è configurato un URL',
|
||||
'admin.notifications.adminNotificationsHint': 'Configura quali canali consegnano le notifiche admin (es. avvisi di versione). Il webhook si attiva automaticamente se è impostato un URL webhook admin.',
|
||||
'admin.tabs.notifications': 'Notifications',
|
||||
'admin.tabs.notifications': 'Notifiche',
|
||||
'notifications.versionAvailable.title': 'Aggiornamento disponibile',
|
||||
'notifications.versionAvailable.text': 'TREK {version} è ora disponibile.',
|
||||
'notifications.versionAvailable.button': 'Visualizza dettagli',
|
||||
@@ -1693,6 +1807,306 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Hai una nuova notifica',
|
||||
'notif.dev.unknown_event.title': '[DEV] Evento sconosciuto',
|
||||
'notif.dev.unknown_event.text': 'Il tipo di evento "{event}" non è registrato in EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'proprio ora',
|
||||
'common.hoursAgo': '{count}h fa',
|
||||
'common.daysAgo': '{count}g fa',
|
||||
'budget.linkedToReservation': 'Collegato a una prenotazione — modifica il nome lì',
|
||||
'packing.saveAsTemplate': 'Salva come modello',
|
||||
'packing.templateName': 'Nome del modello',
|
||||
'packing.templateSaved': 'Lista bagagli salvata come modello',
|
||||
'memories.notConnectedMultipleHint': 'Collega uno di questi fornitori di foto: {provider_names} nelle Impostazioni per poter aggiungere foto a questo viaggio.',
|
||||
'memories.providerUrl': 'URL del server',
|
||||
'memories.providerApiKey': 'Chiave API',
|
||||
'memories.providerUsername': 'Nome utente',
|
||||
'memories.providerPassword': 'Password',
|
||||
'memories.saveError': 'Impossibile salvare le impostazioni di {provider_name}',
|
||||
'memories.selectAlbumMultiple': 'Seleziona album',
|
||||
'memories.selectPhotosMultiple': 'Seleziona foto',
|
||||
'journey.title': 'Diario di viaggio',
|
||||
'journey.subtitle': 'Segui i tuoi viaggi in tempo reale',
|
||||
'journey.new': 'Nuovo diario',
|
||||
'journey.create': 'Crea',
|
||||
'journey.titlePlaceholder': 'Dove stai andando?',
|
||||
'journey.empty': 'Nessun diario ancora',
|
||||
'journey.emptyHint': 'Inizia a documentare il tuo prossimo viaggio',
|
||||
'journey.deleted': 'Diario eliminato',
|
||||
'journey.createError': 'Impossibile creare il diario',
|
||||
'journey.deleteError': 'Impossibile eliminare il diario',
|
||||
'journey.deleteConfirmTitle': 'Elimina',
|
||||
'journey.deleteConfirmMessage': 'Eliminare "{title}"? Questa azione non può essere annullata.',
|
||||
'journey.deleteConfirmGeneric': 'Sei sicuro di voler eliminare questo?',
|
||||
'journey.notFound': 'Diario non trovato',
|
||||
'journey.photos': 'Foto',
|
||||
'journey.timelineEmpty': 'Nessuna tappa ancora',
|
||||
'journey.timelineEmptyHint': 'Aggiungi un check-in o scrivi una voce di diario per iniziare',
|
||||
'journey.status.draft': 'Bozza',
|
||||
'journey.status.active': 'Attivo',
|
||||
'journey.status.completed': 'Completato',
|
||||
'journey.status.upcoming': 'In arrivo',
|
||||
'journey.checkin.add': 'Check-in',
|
||||
'journey.checkin.namePlaceholder': 'Nome del luogo',
|
||||
'journey.checkin.notesPlaceholder': 'Note (facoltativo)',
|
||||
'journey.checkin.save': 'Salva',
|
||||
'journey.checkin.error': 'Impossibile salvare il check-in',
|
||||
'journey.entry.add': 'Diario',
|
||||
'journey.entry.edit': 'Modifica voce',
|
||||
'journey.entry.titlePlaceholder': 'Titolo (facoltativo)',
|
||||
'journey.entry.bodyPlaceholder': 'Cosa è successo oggi?',
|
||||
'journey.entry.save': 'Salva',
|
||||
'journey.entry.error': 'Impossibile salvare la voce',
|
||||
'journey.photo.add': 'Foto',
|
||||
'journey.photo.uploadError': 'Caricamento fallito',
|
||||
'journey.share.share': 'Condividi',
|
||||
'journey.share.public': 'Pubblico',
|
||||
'journey.share.linkCopied': 'Link pubblico copiato',
|
||||
'journey.share.disabled': 'Condivisione pubblica disattivata',
|
||||
'journey.editor.titlePlaceholder': 'Dai un nome a questo momento...',
|
||||
'journey.editor.bodyPlaceholder': 'Racconta la storia di questa giornata...',
|
||||
'journey.editor.placePlaceholder': 'Luogo (facoltativo)',
|
||||
'journey.editor.tagsPlaceholder': 'Tag: gioiello nascosto, miglior pasto, da rivisitare...',
|
||||
'journey.visibility.private': 'Privato',
|
||||
'journey.visibility.shared': 'Condiviso',
|
||||
'journey.visibility.public': 'Pubblico',
|
||||
'journey.emptyState.title': 'La tua storia inizia qui',
|
||||
'journey.emptyState.subtitle': 'Fai un check-in o scrivi la tua prima voce di diario',
|
||||
'journey.frontpage.subtitle': 'Trasforma i tuoi viaggi in storie indimenticabili',
|
||||
'journey.frontpage.createJourney': 'Crea diario',
|
||||
'journey.frontpage.activeJourney': 'Diario attivo',
|
||||
'journey.frontpage.allJourneys': 'Tutti i diari',
|
||||
'journey.frontpage.journeys': 'diari',
|
||||
'journey.frontpage.createNew': 'Crea un nuovo diario',
|
||||
'journey.frontpage.createNewSub': 'Scegli viaggi, scrivi storie, condividi le tue avventure',
|
||||
'journey.frontpage.live': 'In diretta',
|
||||
'journey.frontpage.synced': 'Sincronizzato',
|
||||
'journey.frontpage.continueWriting': 'Continua a scrivere',
|
||||
'journey.frontpage.updated': 'Aggiornato {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Viaggio appena terminato',
|
||||
'journey.frontpage.suggestionText': 'Trasforma <strong>{title}</strong> in un diario di viaggio',
|
||||
'journey.frontpage.dismiss': 'Ignora',
|
||||
'journey.frontpage.journeyName': 'Nome del diario',
|
||||
'journey.frontpage.namePlaceholder': 'es. Sud-est asiatico 2026',
|
||||
'journey.frontpage.selectTrips': 'Seleziona viaggi',
|
||||
'journey.frontpage.tripsSelected': 'viaggi selezionati',
|
||||
'journey.frontpage.trips': 'viaggi',
|
||||
'journey.frontpage.placesImported': 'luoghi saranno importati',
|
||||
'journey.frontpage.places': 'luoghi',
|
||||
'journey.detail.backToJourney': 'Torna al diario',
|
||||
'journey.detail.syncedWithTrips': 'Sincronizzato con i viaggi',
|
||||
'journey.detail.addEntry': 'Aggiungi voce',
|
||||
'journey.detail.newEntry': 'Nuova voce',
|
||||
'journey.detail.editEntry': 'Modifica voce',
|
||||
'journey.detail.noEntries': 'Nessuna voce ancora',
|
||||
'journey.detail.noEntriesHint': 'Aggiungi un viaggio per iniziare con voci precompilate',
|
||||
'journey.detail.noPhotos': 'Nessuna foto ancora',
|
||||
'journey.detail.noPhotosHint': 'Carica foto nelle voci o sfoglia la tua libreria Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Statistiche del diario',
|
||||
'journey.detail.syncedTrips': 'Viaggi sincronizzati',
|
||||
'journey.detail.noTripsLinked': 'Nessun viaggio collegato ancora',
|
||||
'journey.detail.contributors': 'Contributori',
|
||||
'journey.detail.readMore': 'Leggi di più',
|
||||
'journey.detail.prosCons': 'Pro e contro',
|
||||
'journey.stats.days': 'Giorni',
|
||||
'journey.stats.cities': 'Città',
|
||||
'journey.stats.entries': 'Voci',
|
||||
'journey.stats.photos': 'Foto',
|
||||
'journey.stats.places': 'Luoghi',
|
||||
'journey.verdict.lovedIt': 'Adorato',
|
||||
'journey.verdict.couldBeBetter': 'Potrebbe essere meglio',
|
||||
'journey.synced.places': 'luoghi',
|
||||
'journey.synced.synced': 'sincronizzato',
|
||||
'journey.editor.uploadPhotos': 'Carica foto',
|
||||
'journey.editor.fromGallery': 'Dalla galleria',
|
||||
'journey.editor.allPhotosAdded': 'Tutte le foto sono già state aggiunte',
|
||||
'journey.editor.writeStory': 'Scrivi la tua storia...',
|
||||
'journey.editor.prosCons': 'Pro e contro',
|
||||
'journey.editor.pros': 'Pro',
|
||||
'journey.editor.cons': 'Contro',
|
||||
'journey.editor.proPlaceholder': 'Qualcosa di fantastico...',
|
||||
'journey.editor.conPlaceholder': 'Non così fantastico...',
|
||||
'journey.editor.addAnother': 'Aggiungi un altro',
|
||||
'journey.editor.date': 'Data',
|
||||
'journey.editor.location': 'Luogo',
|
||||
'journey.editor.searchLocation': 'Cerca luogo...',
|
||||
'journey.editor.mood': 'Umore',
|
||||
'journey.editor.weather': 'Meteo',
|
||||
'journey.editor.photoFirst': '1°',
|
||||
'journey.editor.makeFirst': 'Metti 1°',
|
||||
'journey.mood.amazing': 'Fantastico',
|
||||
'journey.mood.good': 'Buono',
|
||||
'journey.mood.neutral': 'Neutro',
|
||||
'journey.mood.rough': 'Difficile',
|
||||
'journey.weather.sunny': 'Soleggiato',
|
||||
'journey.weather.partly': 'Parzialmente nuvoloso',
|
||||
'journey.weather.cloudy': 'Nuvoloso',
|
||||
'journey.weather.rainy': 'Piovoso',
|
||||
'journey.weather.stormy': 'Temporalesco',
|
||||
'journey.weather.cold': 'Nevoso',
|
||||
'journey.trips.linkTrip': 'Collega viaggio',
|
||||
'journey.trips.searchTrip': 'Cerca viaggio',
|
||||
'journey.trips.searchPlaceholder': 'Nome del viaggio o destinazione...',
|
||||
'journey.trips.noTripsAvailable': 'Nessun viaggio disponibile',
|
||||
'journey.trips.link': 'Collega',
|
||||
'journey.trips.tripLinked': 'Viaggio collegato',
|
||||
'journey.trips.linkFailed': 'Collegamento del viaggio fallito',
|
||||
'journey.trips.addTrip': 'Aggiungi viaggio',
|
||||
'journey.trips.unlinkTrip': 'Scollega viaggio',
|
||||
'journey.trips.unlinkMessage': 'Scollegare "{title}"? Tutte le voci e le foto sincronizzate da questo viaggio saranno eliminate definitivamente. Questa azione non può essere annullata.',
|
||||
'journey.trips.unlink': 'Scollega',
|
||||
'journey.trips.tripUnlinked': 'Viaggio scollegato',
|
||||
'journey.trips.unlinkFailed': 'Scollegamento del viaggio fallito',
|
||||
'journey.trips.noTripsLinkedSettings': 'Nessun viaggio collegato',
|
||||
'journey.contributors.invite': 'Invita contributore',
|
||||
'journey.contributors.searchUser': 'Cerca utente',
|
||||
'journey.contributors.searchPlaceholder': 'Nome utente o e-mail...',
|
||||
'journey.contributors.noUsers': 'Nessun utente trovato',
|
||||
'journey.contributors.role': 'Ruolo',
|
||||
'journey.contributors.added': 'Contributore aggiunto',
|
||||
'journey.contributors.addFailed': 'Impossibile aggiungere il contributore',
|
||||
'journey.share.publicShare': 'Condivisione pubblica',
|
||||
'journey.share.createLink': 'Crea link di condivisione',
|
||||
'journey.share.linkCreated': 'Link di condivisione creato',
|
||||
'journey.share.createFailed': 'Creazione del link fallita',
|
||||
'journey.share.copy': 'Copia',
|
||||
'journey.share.copied': 'Copiato!',
|
||||
'journey.share.timeline': 'Cronologia',
|
||||
'journey.share.gallery': 'Galleria',
|
||||
'journey.share.map': 'Mappa',
|
||||
'journey.share.removeLink': 'Rimuovi link di condivisione',
|
||||
'journey.share.linkDeleted': 'Link di condivisione eliminato',
|
||||
'journey.share.deleteFailed': 'Eliminazione fallita',
|
||||
'journey.share.updateFailed': 'Aggiornamento fallito',
|
||||
'journey.settings.title': 'Impostazioni del diario',
|
||||
'journey.settings.coverImage': 'Immagine di copertina',
|
||||
'journey.settings.changeCover': 'Cambia copertina',
|
||||
'journey.settings.addCover': 'Aggiungi immagine di copertina',
|
||||
'journey.settings.name': 'Nome',
|
||||
'journey.settings.subtitle': 'Sottotitolo',
|
||||
'journey.settings.subtitlePlaceholder': 'es. Thailandia, Vietnam e Cambogia',
|
||||
'journey.settings.delete': 'Elimina',
|
||||
'journey.settings.deleteJourney': 'Elimina diario',
|
||||
'journey.settings.deleteMessage': 'Eliminare "{title}"? Tutte le voci e le foto andranno perse.',
|
||||
'journey.settings.saved': 'Impostazioni salvate',
|
||||
'journey.settings.saveFailed': 'Salvataggio fallito',
|
||||
'journey.settings.coverUpdated': 'Copertina aggiornata',
|
||||
'journey.settings.coverFailed': 'Caricamento fallito',
|
||||
'journey.settings.failedToDelete': 'Eliminazione non riuscita',
|
||||
'journey.entries.deleteTitle': 'Elimina voce',
|
||||
'journey.photosUploaded': '{count} foto caricate',
|
||||
'journey.photosAdded': '{count} foto aggiunte',
|
||||
'journey.public.notFound': 'Non trovato',
|
||||
'journey.public.notFoundMessage': 'Questo diario non esiste o il link è scaduto.',
|
||||
'journey.public.readOnly': 'Sola lettura · Diario pubblico',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Condiviso tramite',
|
||||
'journey.public.madeWith': 'Creato con',
|
||||
'journey.pdf.journeyBook': 'Diario di viaggio',
|
||||
'journey.pdf.madeWith': 'Creato con TREK',
|
||||
'journey.pdf.day': 'Giorno',
|
||||
'journey.pdf.theEnd': 'Fine',
|
||||
'journey.pdf.saveAsPdf': 'Salva come PDF',
|
||||
'journey.pdf.pages': 'pagine',
|
||||
'dashboard.greeting.morning': 'Buongiorno,',
|
||||
'dashboard.greeting.afternoon': 'Buon pomeriggio,',
|
||||
'dashboard.greeting.evening': 'Buonasera,',
|
||||
'dashboard.mobile.liveNow': 'In diretta',
|
||||
'dashboard.mobile.tripProgress': 'Progresso del viaggio',
|
||||
'dashboard.mobile.daysLeft': '{count} giorni rimanenti',
|
||||
'dashboard.mobile.places': 'Luoghi',
|
||||
'dashboard.mobile.buddies': 'Compagni',
|
||||
'dashboard.mobile.newTrip': 'Nuovo viaggio',
|
||||
'dashboard.mobile.currency': 'Valuta',
|
||||
'dashboard.mobile.timezone': 'Fuso orario',
|
||||
'dashboard.mobile.upcomingTrips': 'Viaggi in arrivo',
|
||||
'dashboard.mobile.yourTrips': 'I tuoi viaggi',
|
||||
'dashboard.mobile.trips': 'viaggi',
|
||||
'dashboard.mobile.starts': 'Inizio',
|
||||
'dashboard.mobile.duration': 'Durata',
|
||||
'dashboard.mobile.day': 'giorno',
|
||||
'dashboard.mobile.days': 'giorni',
|
||||
'dashboard.mobile.ongoing': 'In corso',
|
||||
'dashboard.mobile.startsToday': 'Inizia oggi',
|
||||
'dashboard.mobile.tomorrow': 'Domani',
|
||||
'dashboard.mobile.inDays': 'Tra {count} giorni',
|
||||
'dashboard.mobile.inMonths': 'Tra {count} mesi',
|
||||
'dashboard.mobile.completed': 'Completato',
|
||||
'dashboard.mobile.currencyConverter': 'Convertitore di valuta',
|
||||
'nav.profile': 'Profilo',
|
||||
'nav.bottomSettings': 'Impostazioni',
|
||||
'nav.bottomAdmin': 'Amministrazione',
|
||||
'nav.bottomLogout': 'Disconnetti',
|
||||
'nav.bottomAdminBadge': 'Admin',
|
||||
'dayplan.mobile.addPlace': 'Aggiungi luogo',
|
||||
'dayplan.mobile.searchPlaces': 'Cerca luoghi...',
|
||||
'dayplan.mobile.allAssigned': 'Tutti i luoghi assegnati',
|
||||
'dayplan.mobile.noMatch': 'Nessun risultato',
|
||||
'dayplan.mobile.createNew': 'Crea nuovo luogo',
|
||||
'admin.addons.catalog.journey.name': 'Diario di viaggio',
|
||||
'admin.addons.catalog.journey.description': 'Tracciamento viaggi e diario con check-in, foto e storie quotidiane',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Viaggi',
|
||||
'oauth.scope.group.places': 'Luoghi',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Bagagli',
|
||||
'oauth.scope.group.todos': 'Attività',
|
||||
'oauth.scope.group.budget': 'Budget',
|
||||
'oauth.scope.group.reservations': 'Prenotazioni',
|
||||
'oauth.scope.group.collab': 'Collaborazione',
|
||||
'oauth.scope.group.notifications': 'Notifiche',
|
||||
'oauth.scope.group.vacay': 'Ferie',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Meteo',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Visualizza viaggi e itinerari',
|
||||
'oauth.scope.trips:read.description': 'Leggi viaggi, giorni, note giornaliere e membri',
|
||||
'oauth.scope.trips:write.label': 'Modifica viaggi e itinerari',
|
||||
'oauth.scope.trips:write.description': 'Crea e aggiorna viaggi, giorni, note e gestisci membri',
|
||||
'oauth.scope.trips:delete.label': 'Elimina viaggi',
|
||||
'oauth.scope.trips:delete.description': 'Elimina definitivamente interi viaggi — questa azione è irreversibile',
|
||||
'oauth.scope.trips:share.label': 'Gestisci link di condivisione',
|
||||
'oauth.scope.trips:share.description': 'Crea, aggiorna e revoca link di condivisione pubblici per i viaggi',
|
||||
'oauth.scope.places:read.label': 'Visualizza luoghi e dati mappa',
|
||||
'oauth.scope.places:read.description': 'Leggi luoghi, assegnazioni giornaliere, tag e categorie',
|
||||
'oauth.scope.places:write.label': 'Gestisci luoghi',
|
||||
'oauth.scope.places:write.description': 'Crea, aggiorna ed elimina luoghi, assegnazioni e tag',
|
||||
'oauth.scope.atlas:read.label': 'Visualizza Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Leggi paesi visitati, regioni e lista dei desideri',
|
||||
'oauth.scope.atlas:write.label': 'Gestisci Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Segna paesi e regioni come visitati, gestisci la lista dei desideri',
|
||||
'oauth.scope.packing:read.label': 'Visualizza liste bagagli',
|
||||
'oauth.scope.packing:read.description': 'Leggi articoli, borse e assegnatari di categoria',
|
||||
'oauth.scope.packing:write.label': 'Gestisci liste bagagli',
|
||||
'oauth.scope.packing:write.description': 'Aggiungi, aggiorna, elimina, spunta e riordina articoli e borse',
|
||||
'oauth.scope.todos:read.label': 'Visualizza liste attività',
|
||||
'oauth.scope.todos:read.description': 'Leggi attività del viaggio e assegnatari di categoria',
|
||||
'oauth.scope.todos:write.label': 'Gestisci liste attività',
|
||||
'oauth.scope.todos:write.description': 'Crea, aggiorna, spunta, elimina e riordina attività',
|
||||
'oauth.scope.budget:read.label': 'Visualizza budget',
|
||||
'oauth.scope.budget:read.description': 'Leggi voci di budget e ripartizione delle spese',
|
||||
'oauth.scope.budget:write.label': 'Gestisci budget',
|
||||
'oauth.scope.budget:write.description': 'Crea, aggiorna ed elimina voci di budget',
|
||||
'oauth.scope.reservations:read.label': 'Visualizza prenotazioni',
|
||||
'oauth.scope.reservations:read.description': 'Leggi prenotazioni e dettagli alloggio',
|
||||
'oauth.scope.reservations:write.label': 'Gestisci prenotazioni',
|
||||
'oauth.scope.reservations:write.description': 'Crea, aggiorna, elimina e riordina prenotazioni',
|
||||
'oauth.scope.collab:read.label': 'Visualizza collaborazione',
|
||||
'oauth.scope.collab:read.description': 'Leggi note collaborative, sondaggi e messaggi',
|
||||
'oauth.scope.collab:write.label': 'Gestisci collaborazione',
|
||||
'oauth.scope.collab:write.description': 'Crea, aggiorna ed elimina note collaborative, sondaggi e messaggi',
|
||||
'oauth.scope.notifications:read.label': 'Visualizza notifiche',
|
||||
'oauth.scope.notifications:read.description': 'Leggi notifiche in-app e conteggi non letti',
|
||||
'oauth.scope.notifications:write.label': 'Gestisci notifiche',
|
||||
'oauth.scope.notifications:write.description': 'Segna notifiche come lette e rispondi',
|
||||
'oauth.scope.vacay:read.label': 'Visualizza piani ferie',
|
||||
'oauth.scope.vacay:read.description': 'Leggi dati di pianificazione ferie, voci e statistiche',
|
||||
'oauth.scope.vacay:write.label': 'Gestisci piani ferie',
|
||||
'oauth.scope.vacay:write.description': 'Crea e gestisci voci ferie, festività e piani del team',
|
||||
'oauth.scope.geo:read.label': 'Mappe e geocodifica',
|
||||
'oauth.scope.geo:read.description': 'Cerca luoghi, risolvi URL mappa e geocodifica inversa coordinate',
|
||||
'oauth.scope.weather:read.label': 'Previsioni meteo',
|
||||
'oauth.scope.weather:read.description': 'Ottieni previsioni meteo per luoghi e date del viaggio',
|
||||
}
|
||||
|
||||
export default it
|
||||
|
||||
@@ -8,6 +8,8 @@ const nl: Record<string, string> = {
|
||||
'common.loading': 'Laden...',
|
||||
'common.import': 'Importeren',
|
||||
'common.error': 'Fout',
|
||||
'common.unknownError': 'Onbekende fout',
|
||||
'common.tooManyAttempts': 'Te veel pogingen. Probeer het later opnieuw.',
|
||||
'common.back': 'Terug',
|
||||
'common.all': 'Alles',
|
||||
'common.close': 'Sluiten',
|
||||
@@ -27,6 +29,12 @@ const nl: Record<string, string> = {
|
||||
'common.password': 'Wachtwoord',
|
||||
'common.saving': 'Opslaan...',
|
||||
'common.saved': 'Opgeslagen',
|
||||
'trips.memberRemoved': '{username} verwijderd',
|
||||
'trips.memberRemoveError': 'Verwijderen mislukt',
|
||||
'trips.memberAdded': '{username} toegevoegd',
|
||||
'trips.memberAddError': 'Toevoegen mislukt',
|
||||
'common.expand': 'Uitvouwen',
|
||||
'common.collapse': 'Inklappen',
|
||||
'trips.reminder': 'Herinnering',
|
||||
'trips.reminderNone': 'Geen',
|
||||
'trips.reminderDay': 'dag',
|
||||
@@ -179,9 +187,6 @@ const nl: Record<string, string> = {
|
||||
'admin.notifications.none': 'Uitgeschakeld',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Meldingsgebeurtenissen',
|
||||
'admin.notifications.eventsHint': 'Kies welke gebeurtenissen meldingen activeren voor alle gebruikers.',
|
||||
'admin.notifications.configureFirst': 'Configureer eerst de SMTP- of webhook-instellingen hieronder en schakel dan de events in.',
|
||||
'admin.notifications.save': 'Meldingsinstellingen opslaan',
|
||||
'admin.notifications.saved': 'Meldingsinstellingen opgeslagen',
|
||||
'admin.notifications.testWebhook': 'Testwebhook verzenden',
|
||||
@@ -228,6 +233,7 @@ const nl: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'MCP-eindpunt',
|
||||
'settings.mcp.clientConfig': 'Clientconfiguratie',
|
||||
'settings.mcp.clientConfigHint': 'Vervang <your_token> door een API-token uit de onderstaande lijst. Het pad naar npx moet mogelijk worden aangepast voor jouw systeem (bijv. C:\\PROGRA~1\\nodejs\\npx.cmd op Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:\PROGRA~1\nodejs\npx.cmd on Windows).',
|
||||
'settings.mcp.copy': 'Kopiëren',
|
||||
'settings.mcp.copied': 'Gekopieerd!',
|
||||
'settings.mcp.apiTokens': 'API-tokens',
|
||||
@@ -249,6 +255,48 @@ const nl: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': 'Token aanmaken mislukt',
|
||||
'settings.mcp.toast.deleted': 'Token verwijderd',
|
||||
'settings.mcp.toast.deleteError': 'Token verwijderen mislukt',
|
||||
'settings.mcp.apiTokensDeprecated': 'API-tokens zijn verouderd en worden in een toekomstige versie verwijderd. Gebruik OAuth 2.1-clients in plaats daarvan.',
|
||||
'settings.oauth.clients': 'OAuth 2.1-clients',
|
||||
'settings.oauth.clientsHint': 'Registreer OAuth 2.1-clients zodat externe MCP-toepassingen (Claude Web, Cursor, enz.) verbinding kunnen maken zonder statische tokens.',
|
||||
'settings.oauth.createClient': 'Nieuwe client',
|
||||
'settings.oauth.noClients': 'Geen OAuth-clients geregistreerd.',
|
||||
'settings.oauth.clientId': 'Client-ID',
|
||||
'settings.oauth.clientSecret': 'Clientgeheim',
|
||||
'settings.oauth.deleteClient': 'Client verwijderen',
|
||||
'settings.oauth.deleteClientMessage': 'Deze client en alle actieve sessies worden permanent verwijderd. Elke toepassing die deze client gebruikt, verliest onmiddellijk de toegang.',
|
||||
'settings.oauth.rotateSecret': 'Geheim vernieuwen',
|
||||
'settings.oauth.rotateSecretMessage': 'Er wordt een nieuw clientgeheim gegenereerd en alle bestaande sessies worden direct ongeldig. Werk uw toepassing bij voordat u dit venster sluit.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Vernieuwen',
|
||||
'settings.oauth.rotateSecretConfirming': 'Vernieuwen…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Nieuw geheim gegenereerd',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Dit geheim wordt slechts eenmalig getoond. Kopieer het nu en werk uw toepassing bij — alle vorige sessies zijn ongeldig gemaakt.',
|
||||
'settings.oauth.activeSessions': 'Actieve OAuth-sessies',
|
||||
'settings.oauth.sessionScopes': 'Rechten',
|
||||
'settings.oauth.sessionExpires': 'Verloopt',
|
||||
'settings.oauth.revoke': 'Intrekken',
|
||||
'settings.oauth.revokeSession': 'Sessie intrekken',
|
||||
'settings.oauth.revokeSessionMessage': 'Dit trekt onmiddellijk de toegang voor deze OAuth-sessie in.',
|
||||
'settings.oauth.modal.createTitle': 'OAuth-client registreren',
|
||||
'settings.oauth.modal.presets': 'Snelle instellingen',
|
||||
'settings.oauth.modal.clientName': 'Toepassingsnaam',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'bijv. Claude Web, Mijn MCP-app',
|
||||
'settings.oauth.modal.redirectUris': 'Redirect-URI\'s',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Eén URI per regel. HTTPS vereist (localhost uitgezonderd). Exacte overeenkomst vereist.',
|
||||
'settings.oauth.modal.scopes': 'Toegestane rechten',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips en get_trip_summary zijn altijd beschikbaar — geen recht vereist. Ze helpen de AI trip-ID\'s te ontdekken.',
|
||||
'settings.oauth.modal.selectAll': 'Alles selecteren',
|
||||
'settings.oauth.modal.deselectAll': 'Alles deselecteren',
|
||||
'settings.oauth.modal.creating': 'Registreren…',
|
||||
'settings.oauth.modal.create': 'Client registreren',
|
||||
'settings.oauth.modal.createdTitle': 'Client geregistreerd',
|
||||
'settings.oauth.modal.createdWarning': 'Het clientgeheim wordt slechts eenmalig getoond. Kopieer het nu — het kan niet worden hersteld.',
|
||||
'settings.oauth.toast.createError': 'OAuth-client kon niet worden geregistreerd',
|
||||
'settings.oauth.toast.deleted': 'OAuth-client verwijderd',
|
||||
'settings.oauth.toast.deleteError': 'OAuth-client kon niet worden verwijderd',
|
||||
'settings.oauth.toast.revoked': 'Sessie ingetrokken',
|
||||
'settings.oauth.toast.revokeError': 'Sessie kon niet worden ingetrokken',
|
||||
'settings.oauth.toast.rotateError': 'Clientgeheim kon niet worden vernieuwd',
|
||||
'settings.account': 'Account',
|
||||
'settings.about': 'Over',
|
||||
'settings.about.reportBug': 'Bug melden',
|
||||
@@ -364,6 +412,10 @@ const nl: Record<string, string> = {
|
||||
'login.mfaHint': 'Open Google Authenticator, Authy of een andere TOTP-app.',
|
||||
'login.mfaBack': '← Terug naar inloggen',
|
||||
'login.mfaVerify': 'Verifiëren',
|
||||
'login.invalidInviteLink': 'Ongeldige of verlopen uitnodigingslink',
|
||||
'login.oidcFailed': 'OIDC-aanmelding mislukt',
|
||||
'login.usernameRequired': 'Gebruikersnaam is vereist',
|
||||
'login.passwordMinLength': 'Wachtwoord moet minimaal 8 tekens bevatten',
|
||||
'login.oidc.tokenFailed': 'Authenticatie mislukt.',
|
||||
'login.oidc.invalidState': 'Ongeldige sessie. Probeer het opnieuw.',
|
||||
'login.demoFailed': 'Demo-login mislukt',
|
||||
@@ -450,6 +502,17 @@ const nl: Record<string, string> = {
|
||||
'admin.tabs.settings': 'Instellingen',
|
||||
'admin.allowRegistration': 'Registratie toestaan',
|
||||
'admin.allowRegistrationHint': 'Nieuwe gebruikers kunnen zichzelf registreren',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Tweestapsverificatie (2FA) verplicht stellen',
|
||||
'admin.requireMfaHint': 'Gebruikers zonder 2FA moeten de installatie in Instellingen voltooien voordat ze de app kunnen gebruiken.',
|
||||
'admin.apiKeys': 'API-sleutels',
|
||||
@@ -515,11 +578,11 @@ const nl: Record<string, string> = {
|
||||
'admin.addons.catalog.budget.description': 'Houd uitgaven bij en plan je reisbudget',
|
||||
'admin.addons.catalog.documents.name': 'Documenten',
|
||||
'admin.addons.catalog.documents.description': 'Bewaar en beheer reisdocumenten',
|
||||
'admin.addons.catalog.vacay.name': 'Vacay',
|
||||
'admin.addons.catalog.vacay.name': 'Vakantie',
|
||||
'admin.addons.catalog.vacay.description': 'Persoonlijke vakantieplanner met kalenderweergave',
|
||||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||||
'admin.addons.catalog.atlas.description': 'Wereldkaart met bezochte landen en reisstatistieken',
|
||||
'admin.addons.catalog.collab.name': 'Collab',
|
||||
'admin.addons.catalog.collab.name': 'Samenwerking',
|
||||
'admin.addons.catalog.collab.description': 'Realtime notities, polls en chat voor het plannen van reizen',
|
||||
'admin.addons.subtitleBefore': 'Schakel functies in of uit om je ',
|
||||
'admin.addons.subtitleAfter': '-ervaring aan te passen.',
|
||||
@@ -547,9 +610,10 @@ const nl: Record<string, string> = {
|
||||
'admin.weather.locationHint': 'Het weer is gebaseerd op de eerste plaats met coördinaten op elke dag. Als er geen plaats aan een dag is toegewezen, wordt een plaats uit de lijst als referentie gebruikt.',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP-tokens',
|
||||
'admin.mcpTokens.title': 'MCP-tokens',
|
||||
'admin.mcpTokens.subtitle': 'API-tokens van alle gebruikers beheren',
|
||||
'admin.tabs.mcpTokens': 'MCP-toegang',
|
||||
'admin.mcpTokens.title': 'MCP-toegang',
|
||||
'admin.mcpTokens.subtitle': 'OAuth-sessies en API-tokens van alle gebruikers beheren',
|
||||
'admin.mcpTokens.sectionTitle': 'API-tokens',
|
||||
'admin.mcpTokens.owner': 'Eigenaar',
|
||||
'admin.mcpTokens.tokenName': 'Tokennaam',
|
||||
'admin.mcpTokens.created': 'Aangemaakt',
|
||||
@@ -561,6 +625,17 @@ const nl: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token verwijderd',
|
||||
'admin.mcpTokens.deleteError': 'Token kon niet worden verwijderd',
|
||||
'admin.mcpTokens.loadError': 'Tokens konden niet worden geladen',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth-sessies',
|
||||
'admin.oauthSessions.clientName': 'Client',
|
||||
'admin.oauthSessions.owner': 'Eigenaar',
|
||||
'admin.oauthSessions.scopes': 'Rechten',
|
||||
'admin.oauthSessions.created': 'Aangemaakt',
|
||||
'admin.oauthSessions.empty': 'Geen actieve OAuth-sessies',
|
||||
'admin.oauthSessions.revokeTitle': 'Sessie intrekken',
|
||||
'admin.oauthSessions.revokeMessage': 'Deze OAuth-sessie wordt onmiddellijk ingetrokken. De client verliest MCP-toegang.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sessie ingetrokken',
|
||||
'admin.oauthSessions.revokeError': 'Sessie kon niet worden ingetrokken',
|
||||
'admin.oauthSessions.loadError': 'OAuth-sessies konden niet worden geladen',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -656,6 +731,8 @@ const nl: Record<string, string> = {
|
||||
'vacay.companyHolidays': 'Bedrijfsvakanties',
|
||||
'vacay.companyHolidaysHint': 'Sta het markeren van bedrijfsbrede vakantiedagen toe',
|
||||
'vacay.companyHolidaysNoDeduct': 'Bedrijfsvakanties worden niet afgetrokken van vakantiedagen.',
|
||||
'vacay.weekStart': 'Week begint op',
|
||||
'vacay.weekStartHint': 'Kies of de kalenderweek op maandag of zondag begint',
|
||||
'vacay.carryOver': 'Overdracht',
|
||||
'vacay.carryOverHint': 'Draag resterende vakantiedagen automatisch over naar het volgende jaar',
|
||||
'vacay.sharing': 'Delen',
|
||||
@@ -731,7 +808,7 @@ const nl: Record<string, string> = {
|
||||
'atlas.placeVisited': 'Bezochte plaats',
|
||||
'atlas.placesVisited': 'Bezochte plaatsen',
|
||||
'atlas.statsTab': 'Statistieken',
|
||||
'atlas.bucketTab': 'Bucket List',
|
||||
'atlas.bucketTab': 'Bucketlist',
|
||||
'atlas.addBucket': 'Toevoegen aan bucket list',
|
||||
'atlas.bucketNamePlaceholder': 'Plaats of bestemming...',
|
||||
'atlas.bucketNotesPlaceholder': 'Notities (optioneel)',
|
||||
@@ -847,7 +924,7 @@ const nl: Record<string, string> = {
|
||||
'places.noCategory': 'Geen categorie',
|
||||
'places.categoryNamePlaceholder': 'Categorienaam',
|
||||
'places.formTime': 'Tijd',
|
||||
'places.startTime': 'Start',
|
||||
'places.startTime': 'Starttijd',
|
||||
'places.endTime': 'Einde',
|
||||
'places.endTimeBeforeStart': 'Eindtijd is vóór de starttijd',
|
||||
'places.timeCollision': 'Tijdoverlap met:',
|
||||
@@ -863,13 +940,14 @@ const nl: Record<string, string> = {
|
||||
'places.nameRequired': 'Voer een naam in',
|
||||
'places.saveError': 'Opslaan mislukt',
|
||||
// Place Inspector
|
||||
'inspector.opened': 'Open',
|
||||
'inspector.opened': 'Openingstijden',
|
||||
'inspector.closed': 'Gesloten',
|
||||
'inspector.openingHours': 'Openingstijden',
|
||||
'inspector.showHours': 'Openingstijden tonen',
|
||||
'inspector.files': 'Bestanden',
|
||||
'inspector.filesCount': '{count} bestanden',
|
||||
'inspector.removeFromDay': 'Verwijderen van dag',
|
||||
'inspector.remove': 'Verwijderen',
|
||||
'inspector.addToDay': 'Toevoegen aan dag',
|
||||
'inspector.confirmedRes': 'Bevestigde reservering',
|
||||
'inspector.pendingRes': 'Reservering in behandeling',
|
||||
@@ -909,8 +987,8 @@ const nl: Record<string, string> = {
|
||||
'reservations.meta.trainNumber': 'Treinnr.',
|
||||
'reservations.meta.platform': 'Perron',
|
||||
'reservations.meta.seat': 'Stoel',
|
||||
'reservations.meta.checkIn': 'Check-in',
|
||||
'reservations.meta.checkOut': 'Check-out',
|
||||
'reservations.meta.checkIn': 'Inchecken',
|
||||
'reservations.meta.checkOut': 'Uitchecken',
|
||||
'reservations.meta.linkAccommodation': 'Accommodatie',
|
||||
'reservations.meta.pickAccommodation': 'Koppel aan accommodatie',
|
||||
'reservations.meta.noAccommodation': 'Geen',
|
||||
@@ -1010,18 +1088,23 @@ const nl: Record<string, string> = {
|
||||
'budget.totalBudget': 'Totaal budget',
|
||||
'budget.byCategory': 'Per categorie',
|
||||
'budget.editTooltip': 'Klik om te bewerken',
|
||||
'budget.linkedToReservation': 'Gekoppeld aan een reservering — bewerk de naam daar',
|
||||
'budget.confirm.deleteCategory': 'Weet je zeker dat je de categorie "{name}" met {count} invoeren wilt verwijderen?',
|
||||
'budget.deleteCategory': 'Categorie verwijderen',
|
||||
'budget.perPerson': 'Per persoon',
|
||||
'budget.paid': 'Betaald',
|
||||
'budget.open': 'Open',
|
||||
'budget.open': 'Openstaand',
|
||||
'budget.noMembers': 'Geen leden toegewezen',
|
||||
'budget.settlement': 'Afrekening',
|
||||
'budget.settlementInfo': 'Klik op de avatar van een lid bij een budgetpost om deze groen te markeren — dit betekent dat diegene heeft betaald. De afrekening toont vervolgens wie wie hoeveel verschuldigd is.',
|
||||
'budget.netBalances': 'Nettosaldi',
|
||||
'budget.linkedToReservation': 'Gekoppeld aan een reservering — bewerk de naam daar',
|
||||
|
||||
// Files
|
||||
'files.title': 'Bestanden',
|
||||
'files.pageTitle': 'Bestanden en documenten',
|
||||
'files.subtitle': '{count} bestanden voor {trip}',
|
||||
'files.downloadPdf': 'PDF downloaden',
|
||||
'files.count': '{count} bestanden',
|
||||
'files.countSingular': '1 bestand',
|
||||
'files.uploaded': '{count} geüpload',
|
||||
@@ -1091,7 +1174,7 @@ const nl: Record<string, string> = {
|
||||
'packing.addPlaceholder': 'Nieuw item toevoegen...',
|
||||
'packing.categoryPlaceholder': 'Categorie...',
|
||||
'packing.filterAll': 'Alle',
|
||||
'packing.filterOpen': 'Open',
|
||||
'packing.filterOpen': 'Openstaand',
|
||||
'packing.filterDone': 'Klaar',
|
||||
'packing.emptyTitle': 'Paklijst is leeg',
|
||||
'packing.emptyHint': 'Voeg items toe of gebruik de suggesties',
|
||||
@@ -1108,7 +1191,9 @@ const nl: Record<string, string> = {
|
||||
'packing.template': 'Sjabloon',
|
||||
'packing.templateApplied': '{count} items toegevoegd vanuit sjabloon',
|
||||
'packing.templateError': 'Fout bij toepassen van sjabloon',
|
||||
'packing.assignUser': 'Gebruiker toewijzen',
|
||||
'packing.saveAsTemplate': 'Opslaan als sjabloon',
|
||||
'packing.templateName': 'Sjabloonnaam',
|
||||
'packing.templateSaved': 'Paklijst opgeslagen als sjabloon',
|
||||
'packing.noMembers': 'Geen leden',
|
||||
'packing.bags': 'Bagage',
|
||||
'packing.noBag': 'Niet toegewezen',
|
||||
@@ -1265,6 +1350,13 @@ const nl: Record<string, string> = {
|
||||
'backup.keep.forever': 'Voor altijd bewaren',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Foto\'s',
|
||||
'photos.subtitle': '{count} foto\'s voor {trip}',
|
||||
'photos.dropHere': 'Foto\'s hier neerzetten...',
|
||||
'photos.dropHereActive': 'Foto\'s hier neerzetten',
|
||||
'photos.captionForAll': 'Bijschrift (voor alle)',
|
||||
'photos.captionPlaceholder': 'Optioneel bijschrift...',
|
||||
'photos.addCaption': 'Bijschrift toevoegen...',
|
||||
'photos.allDays': 'Alle dagen',
|
||||
'photos.noPhotos': 'Nog geen foto\'s',
|
||||
'photos.uploadHint': 'Upload je reisfoto\'s',
|
||||
@@ -1272,6 +1364,12 @@ const nl: Record<string, string> = {
|
||||
'photos.linkPlace': 'Koppel plaats',
|
||||
'photos.noPlace': 'Geen plaats',
|
||||
'photos.uploadN': '{n} foto(\'s) uploaden',
|
||||
'photos.linkDay': 'Dag koppelen',
|
||||
'photos.noDay': 'Geen dag',
|
||||
'photos.dayLabel': 'Dag {number}',
|
||||
'photos.photoSelected': 'Foto geselecteerd',
|
||||
'photos.photosSelected': "Foto's geselecteerd",
|
||||
'photos.fileTypeHint': "JPG, PNG, WebP · max. 10 MB · tot 30 foto's",
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Back-up herstellen?',
|
||||
@@ -1298,6 +1396,7 @@ const nl: Record<string, string> = {
|
||||
'planner.routeCalculated': 'Route berekend',
|
||||
'planner.routeCalcFailed': 'Route kon niet worden berekend',
|
||||
'planner.routeError': 'Fout bij routeberekening',
|
||||
'planner.icsExportFailed': 'ICS-export mislukt',
|
||||
'planner.routeOptimized': 'Route geoptimaliseerd',
|
||||
'planner.reservationUpdated': 'Reservering bijgewerkt',
|
||||
'planner.reservationAdded': 'Reservering toegevoegd',
|
||||
@@ -1373,8 +1472,8 @@ const nl: Record<string, string> = {
|
||||
'day.hotelDayRange': 'Toepassen op dagen',
|
||||
'day.noPlacesForHotel': 'Voeg eerst plaatsen toe aan je reis',
|
||||
'day.allDays': 'Alle',
|
||||
'day.checkIn': 'Check-in',
|
||||
'day.checkOut': 'Check-out',
|
||||
'day.checkIn': 'Inchecken',
|
||||
'day.checkOut': 'Uitchecken',
|
||||
'day.confirmation': 'Bevestiging',
|
||||
'day.editAccommodation': 'Accommodatie bewerken',
|
||||
'day.reservations': 'Reserveringen',
|
||||
@@ -1383,6 +1482,7 @@ const nl: Record<string, string> = {
|
||||
'memories.title': 'Foto\'s',
|
||||
'memories.notConnected': 'Immich niet verbonden',
|
||||
'memories.notConnectedHint': 'Verbind je Immich-instantie in Instellingen om je reisfoto\'s hier te zien.',
|
||||
'memories.notConnectedMultipleHint': 'Verbind een van deze fotoproviders: {provider_names} in Instellingen om foto\'s aan dit reisplan toe te voegen.',
|
||||
'memories.noDates': 'Voeg data toe aan je reis om foto\'s te laden.',
|
||||
'memories.noPhotos': 'Geen foto\'s gevonden',
|
||||
'memories.noPhotosHint': 'Geen foto\'s gevonden in Immich voor de datumreeks van deze reis.',
|
||||
@@ -1393,26 +1493,38 @@ const nl: Record<string, string> = {
|
||||
'memories.reviewTitle': 'Je foto\'s bekijken',
|
||||
'memories.reviewHint': 'Klik op foto\'s om ze uit te sluiten van delen.',
|
||||
'memories.shareCount': '{count} foto\'s delen',
|
||||
'memories.immichUrl': 'Immich Server URL',
|
||||
'memories.immichApiKey': 'API-sleutel',
|
||||
'memories.providerUrl': 'Server-URL',
|
||||
'memories.providerApiKey': 'API-sleutel',
|
||||
'memories.providerUsername': 'Gebruikersnaam',
|
||||
'memories.providerPassword': 'Wachtwoord',
|
||||
'memories.providerOTP': 'MFA-code (indien ingeschakeld)',
|
||||
'memories.skipSSLVerification': 'SSL-certificaatverificatie overslaan',
|
||||
'memories.providerUrlHintSynology': 'Voeg het pad van de Photos-app toe aan de URL, bijv. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Verbinding testen',
|
||||
'memories.testFirst': 'Test eerst de verbinding',
|
||||
'memories.connected': 'Verbonden',
|
||||
'memories.disconnected': 'Niet verbonden',
|
||||
'memories.connectionSuccess': 'Verbonden met Immich',
|
||||
'memories.connectionError': 'Kon niet verbinden met Immich',
|
||||
'memories.saved': 'Immich-instellingen opgeslagen',
|
||||
'memories.saved': '{provider_name}-instellingen opgeslagen',
|
||||
'memories.providerDisconnectedBanner': 'Je {provider_name}-verbinding is verbroken. Maak opnieuw verbinding in Instellingen om foto\'s te bekijken.',
|
||||
'memories.saveError': '{provider_name}-instellingen konden niet worden opgeslagen',
|
||||
'memories.saveRouteNotConfigured': 'Opslagroute is niet geconfigureerd voor deze provider',
|
||||
'memories.testRouteNotConfigured': 'Testroute is niet geconfigureerd voor deze provider',
|
||||
'memories.fillRequiredFields': 'Vul alle verplichte velden in',
|
||||
'memories.oldest': 'Oudste eerst',
|
||||
'memories.newest': 'Nieuwste eerst',
|
||||
'memories.allLocations': 'Alle locaties',
|
||||
'memories.addPhotos': 'Foto\'s toevoegen',
|
||||
'memories.linkAlbum': 'Album koppelen',
|
||||
'memories.selectAlbum': 'Immich-album selecteren',
|
||||
'memories.selectAlbumMultiple': 'Album selecteren',
|
||||
'memories.noAlbums': 'Geen albums gevonden',
|
||||
'memories.syncAlbum': 'Album synchroniseren',
|
||||
'memories.unlinkAlbum': 'Ontkoppelen',
|
||||
'memories.photos': 'fotos',
|
||||
'memories.selectPhotos': 'Selecteer foto\'s uit Immich',
|
||||
'memories.selectPhotosMultiple': 'Foto\'s selecteren',
|
||||
'memories.selectHint': 'Tik op foto\'s om ze te selecteren.',
|
||||
'memories.selected': 'geselecteerd',
|
||||
'memories.addSelected': '{count} foto\'s toevoegen',
|
||||
@@ -1570,6 +1682,8 @@ const nl: Record<string, string> = {
|
||||
'notifications.markUnread': 'Markeren als ongelezen',
|
||||
'notifications.delete': 'Verwijderen',
|
||||
'notifications.system': 'Systeem',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos verbroken',
|
||||
'notifications.synologySessionCleared.text': 'Je server of account is gewijzigd — ga naar Instellingen om je verbinding opnieuw te testen.',
|
||||
'memories.error.loadAlbums': 'Albums laden mislukt',
|
||||
'memories.error.linkAlbum': 'Album koppelen mislukt',
|
||||
'memories.error.unlinkAlbum': 'Album ontkoppelen mislukt',
|
||||
@@ -1599,7 +1713,7 @@ const nl: Record<string, string> = {
|
||||
'todo.subtab.todo': 'Taken',
|
||||
'todo.completed': 'voltooid',
|
||||
'todo.filter.all': 'Alles',
|
||||
'todo.filter.open': 'Open',
|
||||
'todo.filter.open': 'Openstaand',
|
||||
'todo.filter.done': 'Klaar',
|
||||
'todo.uncategorized': 'Zonder categorie',
|
||||
'todo.namePlaceholder': 'Taaknaam',
|
||||
@@ -1692,6 +1806,306 @@ const nl: Record<string, string> = {
|
||||
'notif.generic.text': 'Je hebt een nieuwe melding',
|
||||
'notif.dev.unknown_event.title': '[DEV] Onbekende gebeurtenis',
|
||||
'notif.dev.unknown_event.text': 'Gebeurtenistype "{event}" is niet geregistreerd in EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'zojuist',
|
||||
'common.hoursAgo': '{count}u geleden',
|
||||
'common.daysAgo': '{count}d geleden',
|
||||
'budget.linkedToReservation': 'Gekoppeld aan een reservering — bewerk de naam daar',
|
||||
'packing.saveAsTemplate': 'Opslaan als sjabloon',
|
||||
'packing.templateName': 'Sjabloonnaam',
|
||||
'packing.templateSaved': 'Paklijst opgeslagen als sjabloon',
|
||||
'memories.notConnectedMultipleHint': 'Verbind een van deze foto-aanbieders: {provider_names} in Instellingen om foto\'s aan deze reis toe te voegen.',
|
||||
'memories.providerUrl': 'Server-URL',
|
||||
'memories.providerApiKey': 'API-sleutel',
|
||||
'memories.providerUsername': 'Gebruikersnaam',
|
||||
'memories.providerPassword': 'Wachtwoord',
|
||||
'memories.saveError': 'Kon {provider_name}-instellingen niet opslaan',
|
||||
'memories.selectAlbumMultiple': 'Selecteer album',
|
||||
'memories.selectPhotosMultiple': 'Selecteer foto\'s',
|
||||
'journey.title': 'Reisverslag',
|
||||
'journey.subtitle': 'Leg je reizen vast terwijl je onderweg bent',
|
||||
'journey.new': 'Nieuw reisverslag',
|
||||
'journey.create': 'Aanmaken',
|
||||
'journey.titlePlaceholder': 'Waar ga je naartoe?',
|
||||
'journey.empty': 'Nog geen reisverslagen',
|
||||
'journey.emptyHint': 'Begin met het vastleggen van je volgende reis',
|
||||
'journey.deleted': 'Reisverslag verwijderd',
|
||||
'journey.createError': 'Kon reisverslag niet aanmaken',
|
||||
'journey.deleteError': 'Kon reisverslag niet verwijderen',
|
||||
'journey.deleteConfirmTitle': 'Verwijderen',
|
||||
'journey.deleteConfirmMessage': '"{title}" verwijderen? Dit kan niet ongedaan worden gemaakt.',
|
||||
'journey.deleteConfirmGeneric': 'Weet je zeker dat je dit wilt verwijderen?',
|
||||
'journey.notFound': 'Reisverslag niet gevonden',
|
||||
'journey.photos': 'Foto\'s',
|
||||
'journey.timelineEmpty': 'Nog geen stops',
|
||||
'journey.timelineEmptyHint': 'Voeg een check-in toe of schrijf een dagboekvermelding om te beginnen',
|
||||
'journey.status.draft': 'Concept',
|
||||
'journey.status.active': 'Actief',
|
||||
'journey.status.completed': 'Voltooid',
|
||||
'journey.status.upcoming': 'Gepland',
|
||||
'journey.checkin.add': 'Inchecken',
|
||||
'journey.checkin.namePlaceholder': 'Locatienaam',
|
||||
'journey.checkin.notesPlaceholder': 'Notities (optioneel)',
|
||||
'journey.checkin.save': 'Opslaan',
|
||||
'journey.checkin.error': 'Kon check-in niet opslaan',
|
||||
'journey.entry.add': 'Dagboek',
|
||||
'journey.entry.edit': 'Vermelding bewerken',
|
||||
'journey.entry.titlePlaceholder': 'Titel (optioneel)',
|
||||
'journey.entry.bodyPlaceholder': 'Wat is er vandaag gebeurd?',
|
||||
'journey.entry.save': 'Opslaan',
|
||||
'journey.entry.error': 'Kon vermelding niet opslaan',
|
||||
'journey.photo.add': 'Foto',
|
||||
'journey.photo.uploadError': 'Uploaden mislukt',
|
||||
'journey.share.share': 'Delen',
|
||||
'journey.share.public': 'Openbaar',
|
||||
'journey.share.linkCopied': 'Openbare link gekopieerd',
|
||||
'journey.share.disabled': 'Openbaar delen uitgeschakeld',
|
||||
'journey.editor.titlePlaceholder': 'Geef dit moment een naam...',
|
||||
'journey.editor.bodyPlaceholder': 'Vertel het verhaal van deze dag...',
|
||||
'journey.editor.placePlaceholder': 'Locatie (optioneel)',
|
||||
'journey.editor.tagsPlaceholder': 'Tags: verborgen parel, beste maaltijd, moet terugkomen...',
|
||||
'journey.visibility.private': 'Privé',
|
||||
'journey.visibility.shared': 'Gedeeld',
|
||||
'journey.visibility.public': 'Openbaar',
|
||||
'journey.emptyState.title': 'Je verhaal begint hier',
|
||||
'journey.emptyState.subtitle': 'Check in op een plek of schrijf je eerste dagboekvermelding',
|
||||
'journey.frontpage.subtitle': 'Maak van je reizen verhalen die je nooit vergeet',
|
||||
'journey.frontpage.createJourney': 'Reisverslag aanmaken',
|
||||
'journey.frontpage.activeJourney': 'Actief reisverslag',
|
||||
'journey.frontpage.allJourneys': 'Alle reisverslagen',
|
||||
'journey.frontpage.journeys': 'reisverslagen',
|
||||
'journey.frontpage.createNew': 'Nieuw reisverslag aanmaken',
|
||||
'journey.frontpage.createNewSub': 'Kies reizen, schrijf verhalen, deel je avonturen',
|
||||
'journey.frontpage.live': 'Live',
|
||||
'journey.frontpage.synced': 'Gesynchroniseerd',
|
||||
'journey.frontpage.continueWriting': 'Verder schrijven',
|
||||
'journey.frontpage.updated': 'Bijgewerkt {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Reis net afgelopen',
|
||||
'journey.frontpage.suggestionText': 'Maak van <strong>{title}</strong> een reisverslag',
|
||||
'journey.frontpage.dismiss': 'Sluiten',
|
||||
'journey.frontpage.journeyName': 'Naam reisverslag',
|
||||
'journey.frontpage.namePlaceholder': 'bijv. Zuidoost-Azië 2026',
|
||||
'journey.frontpage.selectTrips': 'Selecteer reizen',
|
||||
'journey.frontpage.tripsSelected': 'reizen geselecteerd',
|
||||
'journey.frontpage.trips': 'reizen',
|
||||
'journey.frontpage.placesImported': 'plaatsen worden geïmporteerd',
|
||||
'journey.frontpage.places': 'plaatsen',
|
||||
'journey.detail.backToJourney': 'Terug naar reisverslag',
|
||||
'journey.detail.syncedWithTrips': 'Gesynchroniseerd met reizen',
|
||||
'journey.detail.addEntry': 'Vermelding toevoegen',
|
||||
'journey.detail.newEntry': 'Nieuwe vermelding',
|
||||
'journey.detail.editEntry': 'Vermelding bewerken',
|
||||
'journey.detail.noEntries': 'Nog geen vermeldingen',
|
||||
'journey.detail.noEntriesHint': 'Voeg een reis toe om te beginnen met skeletvermeldingen',
|
||||
'journey.detail.noPhotos': 'Nog geen foto\'s',
|
||||
'journey.detail.noPhotosHint': 'Upload foto\'s naar vermeldingen of blader door je Immich/Synology-bibliotheek',
|
||||
'journey.detail.journeyStats': 'Reisstatistieken',
|
||||
'journey.detail.syncedTrips': 'Gesynchroniseerde reizen',
|
||||
'journey.detail.noTripsLinked': 'Nog geen reizen gekoppeld',
|
||||
'journey.detail.contributors': 'Bijdragers',
|
||||
'journey.detail.readMore': 'Lees meer',
|
||||
'journey.detail.prosCons': 'Voor- & nadelen',
|
||||
'journey.stats.days': 'Dagen',
|
||||
'journey.stats.cities': 'Steden',
|
||||
'journey.stats.entries': 'Vermeldingen',
|
||||
'journey.stats.photos': 'Foto\'s',
|
||||
'journey.stats.places': 'Plaatsen',
|
||||
'journey.verdict.lovedIt': 'Geweldig',
|
||||
'journey.verdict.couldBeBetter': 'Kan beter',
|
||||
'journey.synced.places': 'plaatsen',
|
||||
'journey.synced.synced': 'gesynchroniseerd',
|
||||
'journey.editor.uploadPhotos': 'Foto\'s uploaden',
|
||||
'journey.editor.fromGallery': 'Uit galerij',
|
||||
'journey.editor.allPhotosAdded': 'Alle foto\'s al toegevoegd',
|
||||
'journey.editor.writeStory': 'Schrijf je verhaal...',
|
||||
'journey.editor.prosCons': 'Voor- & nadelen',
|
||||
'journey.editor.pros': 'Voordelen',
|
||||
'journey.editor.cons': 'Nadelen',
|
||||
'journey.editor.proPlaceholder': 'Iets geweldigs...',
|
||||
'journey.editor.conPlaceholder': 'Niet zo geweldig...',
|
||||
'journey.editor.addAnother': 'Nog een toevoegen',
|
||||
'journey.editor.date': 'Datum',
|
||||
'journey.editor.location': 'Locatie',
|
||||
'journey.editor.searchLocation': 'Locatie zoeken...',
|
||||
'journey.editor.mood': 'Stemming',
|
||||
'journey.editor.weather': 'Weer',
|
||||
'journey.editor.photoFirst': '1e',
|
||||
'journey.editor.makeFirst': 'Maak 1e',
|
||||
'journey.mood.amazing': 'Fantastisch',
|
||||
'journey.mood.good': 'Goed',
|
||||
'journey.mood.neutral': 'Neutraal',
|
||||
'journey.mood.rough': 'Zwaar',
|
||||
'journey.weather.sunny': 'Zonnig',
|
||||
'journey.weather.partly': 'Halfbewolkt',
|
||||
'journey.weather.cloudy': 'Bewolkt',
|
||||
'journey.weather.rainy': 'Regenachtig',
|
||||
'journey.weather.stormy': 'Stormachtig',
|
||||
'journey.weather.cold': 'Sneeuw',
|
||||
'journey.trips.linkTrip': 'Reis koppelen',
|
||||
'journey.trips.searchTrip': 'Reis zoeken',
|
||||
'journey.trips.searchPlaceholder': 'Reisnaam of bestemming...',
|
||||
'journey.trips.noTripsAvailable': 'Geen reizen beschikbaar',
|
||||
'journey.trips.link': 'Koppelen',
|
||||
'journey.trips.tripLinked': 'Reis gekoppeld',
|
||||
'journey.trips.linkFailed': 'Koppelen van reis mislukt',
|
||||
'journey.trips.addTrip': 'Reis toevoegen',
|
||||
'journey.trips.unlinkTrip': 'Reis ontkoppelen',
|
||||
'journey.trips.unlinkMessage': '"{title}" ontkoppelen? Alle gesynchroniseerde vermeldingen en foto\'s van deze reis worden permanent verwijderd. Dit kan niet ongedaan worden gemaakt.',
|
||||
'journey.trips.unlink': 'Ontkoppelen',
|
||||
'journey.trips.tripUnlinked': 'Reis ontkoppeld',
|
||||
'journey.trips.unlinkFailed': 'Ontkoppelen van reis mislukt',
|
||||
'journey.trips.noTripsLinkedSettings': 'Geen reizen gekoppeld',
|
||||
'journey.contributors.invite': 'Bijdrager uitnodigen',
|
||||
'journey.contributors.searchUser': 'Gebruiker zoeken',
|
||||
'journey.contributors.searchPlaceholder': 'Gebruikersnaam of e-mail...',
|
||||
'journey.contributors.noUsers': 'Geen gebruikers gevonden',
|
||||
'journey.contributors.role': 'Rol',
|
||||
'journey.contributors.added': 'Bijdrager toegevoegd',
|
||||
'journey.contributors.addFailed': 'Toevoegen van bijdrager mislukt',
|
||||
'journey.share.publicShare': 'Openbaar delen',
|
||||
'journey.share.createLink': 'Deellink aanmaken',
|
||||
'journey.share.linkCreated': 'Deellink aangemaakt',
|
||||
'journey.share.createFailed': 'Aanmaken van link mislukt',
|
||||
'journey.share.copy': 'Kopiëren',
|
||||
'journey.share.copied': 'Gekopieerd!',
|
||||
'journey.share.timeline': 'Tijdlijn',
|
||||
'journey.share.gallery': 'Galerij',
|
||||
'journey.share.map': 'Kaart',
|
||||
'journey.share.removeLink': 'Deellink verwijderen',
|
||||
'journey.share.linkDeleted': 'Deellink verwijderd',
|
||||
'journey.share.deleteFailed': 'Verwijderen mislukt',
|
||||
'journey.share.updateFailed': 'Bijwerken mislukt',
|
||||
'journey.settings.title': 'Reisverslaginstellingen',
|
||||
'journey.settings.coverImage': 'Omslagfoto',
|
||||
'journey.settings.changeCover': 'Omslag wijzigen',
|
||||
'journey.settings.addCover': 'Omslagfoto toevoegen',
|
||||
'journey.settings.name': 'Naam',
|
||||
'journey.settings.subtitle': 'Ondertitel',
|
||||
'journey.settings.subtitlePlaceholder': 'bijv. Thailand, Vietnam & Cambodja',
|
||||
'journey.settings.delete': 'Verwijderen',
|
||||
'journey.settings.deleteJourney': 'Reisverslag verwijderen',
|
||||
'journey.settings.deleteMessage': '"{title}" verwijderen? Alle vermeldingen en foto\'s gaan verloren.',
|
||||
'journey.settings.saved': 'Instellingen opgeslagen',
|
||||
'journey.settings.saveFailed': 'Opslaan mislukt',
|
||||
'journey.settings.coverUpdated': 'Omslag bijgewerkt',
|
||||
'journey.settings.coverFailed': 'Uploaden mislukt',
|
||||
'journey.settings.failedToDelete': 'Verwijderen mislukt',
|
||||
'journey.entries.deleteTitle': 'Vermelding verwijderen',
|
||||
'journey.photosUploaded': "{count} foto's geüpload",
|
||||
'journey.photosAdded': "{count} foto's toegevoegd",
|
||||
'journey.public.notFound': 'Niet gevonden',
|
||||
'journey.public.notFoundMessage': 'Dit reisverslag bestaat niet of de link is verlopen.',
|
||||
'journey.public.readOnly': 'Alleen-lezen · Openbaar reisverslag',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Gedeeld via',
|
||||
'journey.public.madeWith': 'Gemaakt met',
|
||||
'journey.pdf.journeyBook': 'Reisboek',
|
||||
'journey.pdf.madeWith': 'Gemaakt met TREK',
|
||||
'journey.pdf.day': 'Dag',
|
||||
'journey.pdf.theEnd': 'Einde',
|
||||
'journey.pdf.saveAsPdf': 'Opslaan als PDF',
|
||||
'journey.pdf.pages': 'pagina\'s',
|
||||
'dashboard.greeting.morning': 'Goedemorgen,',
|
||||
'dashboard.greeting.afternoon': 'Goedemiddag,',
|
||||
'dashboard.greeting.evening': 'Goedenavond,',
|
||||
'dashboard.mobile.liveNow': 'Nu live',
|
||||
'dashboard.mobile.tripProgress': 'Reisvoortgang',
|
||||
'dashboard.mobile.daysLeft': '{count} dagen over',
|
||||
'dashboard.mobile.places': 'Plaatsen',
|
||||
'dashboard.mobile.buddies': 'Reisgenoten',
|
||||
'dashboard.mobile.newTrip': 'Nieuwe reis',
|
||||
'dashboard.mobile.currency': 'Valuta',
|
||||
'dashboard.mobile.timezone': 'Tijdzone',
|
||||
'dashboard.mobile.upcomingTrips': 'Aankomende reizen',
|
||||
'dashboard.mobile.yourTrips': 'Jouw reizen',
|
||||
'dashboard.mobile.trips': 'reizen',
|
||||
'dashboard.mobile.starts': 'Begint',
|
||||
'dashboard.mobile.duration': 'Duur',
|
||||
'dashboard.mobile.day': 'dag',
|
||||
'dashboard.mobile.days': 'dagen',
|
||||
'dashboard.mobile.ongoing': 'Bezig',
|
||||
'dashboard.mobile.startsToday': 'Begint vandaag',
|
||||
'dashboard.mobile.tomorrow': 'Morgen',
|
||||
'dashboard.mobile.inDays': 'Over {count} dagen',
|
||||
'dashboard.mobile.inMonths': 'Over {count} maanden',
|
||||
'dashboard.mobile.completed': 'Voltooid',
|
||||
'dashboard.mobile.currencyConverter': 'Valutaomrekener',
|
||||
'nav.profile': 'Profiel',
|
||||
'nav.bottomSettings': 'Instellingen',
|
||||
'nav.bottomAdmin': 'Beheerdersinstellingen',
|
||||
'nav.bottomLogout': 'Uitloggen',
|
||||
'nav.bottomAdminBadge': 'Beheerder',
|
||||
'dayplan.mobile.addPlace': 'Plaats toevoegen',
|
||||
'dayplan.mobile.searchPlaces': 'Plaatsen zoeken...',
|
||||
'dayplan.mobile.allAssigned': 'Alle plaatsen toegewezen',
|
||||
'dayplan.mobile.noMatch': 'Geen resultaat',
|
||||
'dayplan.mobile.createNew': 'Nieuwe plaats aanmaken',
|
||||
'admin.addons.catalog.journey.name': 'Reisverslag',
|
||||
'admin.addons.catalog.journey.description': 'Reistracking & reisdagboek met check-ins, foto\'s en dagelijkse verhalen',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Reizen',
|
||||
'oauth.scope.group.places': 'Plaatsen',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Paklijst',
|
||||
'oauth.scope.group.todos': 'Taken',
|
||||
'oauth.scope.group.budget': 'Budget',
|
||||
'oauth.scope.group.reservations': 'Reserveringen',
|
||||
'oauth.scope.group.collab': 'Samenwerking',
|
||||
'oauth.scope.group.notifications': 'Meldingen',
|
||||
'oauth.scope.group.vacay': 'Vakantie',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Weer',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Reizen en reisplannen bekijken',
|
||||
'oauth.scope.trips:read.description': 'Reizen, dagen, notities en leden lezen',
|
||||
'oauth.scope.trips:write.label': 'Reizen en reisplannen bewerken',
|
||||
'oauth.scope.trips:write.description': 'Reizen, dagen en notities aanmaken, bijwerken en leden beheren',
|
||||
'oauth.scope.trips:delete.label': 'Reizen verwijderen',
|
||||
'oauth.scope.trips:delete.description': 'Hele reizen permanent verwijderen — deze actie is onomkeerbaar',
|
||||
'oauth.scope.trips:share.label': 'Deellinks beheren',
|
||||
'oauth.scope.trips:share.description': 'Publieke deellinks aanmaken, bijwerken en intrekken',
|
||||
'oauth.scope.places:read.label': 'Plaatsen en kaartgegevens bekijken',
|
||||
'oauth.scope.places:read.description': 'Plaatsen, dagtoewijzingen, tags en categorieën lezen',
|
||||
'oauth.scope.places:write.label': 'Plaatsen beheren',
|
||||
'oauth.scope.places:write.description': 'Plaatsen, toewijzingen en tags aanmaken, bijwerken en verwijderen',
|
||||
'oauth.scope.atlas:read.label': 'Atlas bekijken',
|
||||
'oauth.scope.atlas:read.description': 'Bezochte landen, regio\'s en bucketlist lezen',
|
||||
'oauth.scope.atlas:write.label': 'Atlas beheren',
|
||||
'oauth.scope.atlas:write.description': 'Landen en regio\'s markeren als bezocht, bucketlist beheren',
|
||||
'oauth.scope.packing:read.label': 'Paklijsten bekijken',
|
||||
'oauth.scope.packing:read.description': 'Pakartikelen, tassen en categorietoewijzingen lezen',
|
||||
'oauth.scope.packing:write.label': 'Paklijsten beheren',
|
||||
'oauth.scope.packing:write.description': 'Pakartikelen en tassen toevoegen, bijwerken, verwijderen, omschakelen en herordenen',
|
||||
'oauth.scope.todos:read.label': 'Takenlijsten bekijken',
|
||||
'oauth.scope.todos:read.description': 'Reistaakitems en categorietoewijzingen lezen',
|
||||
'oauth.scope.todos:write.label': 'Takenlijsten beheren',
|
||||
'oauth.scope.todos:write.description': 'Taakitems aanmaken, bijwerken, omschakelen, verwijderen en herordenen',
|
||||
'oauth.scope.budget:read.label': 'Budget bekijken',
|
||||
'oauth.scope.budget:read.description': 'Budgetitems en kostenspecificatie lezen',
|
||||
'oauth.scope.budget:write.label': 'Budget beheren',
|
||||
'oauth.scope.budget:write.description': 'Budgetitems aanmaken, bijwerken en verwijderen',
|
||||
'oauth.scope.reservations:read.label': 'Reserveringen bekijken',
|
||||
'oauth.scope.reservations:read.description': 'Reserveringen en accommodatiedetails lezen',
|
||||
'oauth.scope.reservations:write.label': 'Reserveringen beheren',
|
||||
'oauth.scope.reservations:write.description': 'Reserveringen aanmaken, bijwerken, verwijderen en herordenen',
|
||||
'oauth.scope.collab:read.label': 'Samenwerking bekijken',
|
||||
'oauth.scope.collab:read.description': 'Samenwerkingsnotities, polls en berichten lezen',
|
||||
'oauth.scope.collab:write.label': 'Samenwerking beheren',
|
||||
'oauth.scope.collab:write.description': 'Samenwerkingsnotities, polls en berichten aanmaken, bijwerken en verwijderen',
|
||||
'oauth.scope.notifications:read.label': 'Meldingen bekijken',
|
||||
'oauth.scope.notifications:read.description': 'In-app meldingen en ongelezen aantallen lezen',
|
||||
'oauth.scope.notifications:write.label': 'Meldingen beheren',
|
||||
'oauth.scope.notifications:write.description': 'Meldingen als gelezen markeren en erop reageren',
|
||||
'oauth.scope.vacay:read.label': 'Vakantieplannen bekijken',
|
||||
'oauth.scope.vacay:read.description': 'Vakantieplanningsgegevens, invoeren en statistieken lezen',
|
||||
'oauth.scope.vacay:write.label': 'Vakantieplannen beheren',
|
||||
'oauth.scope.vacay:write.description': 'Vakantie-invoeren, feestdagen en teamplannen aanmaken en beheren',
|
||||
'oauth.scope.geo:read.label': 'Kaarten & geocodering',
|
||||
'oauth.scope.geo:read.description': 'Locaties zoeken, kaart-URL\'s oplossen en coördinaten omgekeerd geocoderen',
|
||||
'oauth.scope.weather:read.label': 'Weersverwachtingen',
|
||||
'oauth.scope.weather:read.description': 'Weersverwachtingen ophalen voor reislocaties en -datums',
|
||||
}
|
||||
|
||||
export default nl
|
||||
|
||||
@@ -7,6 +7,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.add': 'Dodaj',
|
||||
'common.loading': 'Ładowanie...',
|
||||
'common.error': 'Błąd',
|
||||
'common.unknownError': 'Nieznany błąd',
|
||||
'common.tooManyAttempts': 'Zbyt wiele prób. Spróbuj ponownie później.',
|
||||
'common.back': 'Wstecz',
|
||||
'common.all': 'Wszystko',
|
||||
'common.close': 'Zamknij',
|
||||
@@ -25,11 +27,17 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'common.email': 'E-mail',
|
||||
'common.password': 'Hasło',
|
||||
'common.saving': 'Zapisywanie...',
|
||||
'trips.memberRemoved': '{username} usunięty',
|
||||
'trips.memberRemoveError': 'Nie udało się usunąć',
|
||||
'trips.memberAdded': '{username} dodany',
|
||||
'trips.memberAddError': 'Nie udało się dodać',
|
||||
'common.expand': 'Rozwiń',
|
||||
'common.collapse': 'Zwiń',
|
||||
'common.update': 'Aktualizuj',
|
||||
'common.change': 'Zmień',
|
||||
'common.uploading': 'Przesyłanie...',
|
||||
'common.backToPlanning': 'Powrót do planowania',
|
||||
'common.reset': 'Reset',
|
||||
'common.reset': 'Resetuj',
|
||||
|
||||
// Navbar
|
||||
'nav.trip': 'Podróż',
|
||||
@@ -198,6 +206,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.endpoint': 'Endpoint MCP',
|
||||
'settings.mcp.clientConfig': 'Konfiguracja klienta',
|
||||
'settings.mcp.clientConfigHint': 'Zastąp <your_token> tokenem API z listy poniżej. Ścieżka do npx może wymagać dostosowania do Twojego systemu (np. C:\\PROGRA~1\\nodejs\\npx.cmd w systemie Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Zastąp <your_client_id> i <your_client_secret> danymi uwierzytelniającymi z klienta OAuth 2.1 utworzonego powyżej. mcp-remote otworzy przeglądarkę, aby dokończyć autoryzację przy pierwszym połączeniu. Ścieżka do npx może wymagać dostosowania do Twojego systemu (np. C:\\PROGRA~1\\nodejs\\npx.cmd w systemie Windows).',
|
||||
'settings.mcp.copy': 'Kopiuj',
|
||||
'settings.mcp.copied': 'Skopiowano!',
|
||||
'settings.mcp.apiTokens': 'Tokeny API',
|
||||
@@ -219,6 +228,48 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.mcp.toast.createError': 'Nie udało się utworzyć tokenu',
|
||||
'settings.mcp.toast.deleted': 'Token został usunięty',
|
||||
'settings.mcp.toast.deleteError': 'Nie udało się usunąć tokenu',
|
||||
'settings.mcp.apiTokensDeprecated': 'Tokeny API są przestarzałe i zostaną usunięte w przyszłej wersji. Użyj zamiast tego klientów OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Klienci OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Zarejestruj klientów OAuth 2.1, aby zewnętrzne aplikacje MCP (Claude Web, Cursor itp.) mogły się łączyć bez statycznych tokenów.',
|
||||
'settings.oauth.createClient': 'Nowy klient',
|
||||
'settings.oauth.noClients': 'Brak zarejestrowanych klientów OAuth.',
|
||||
'settings.oauth.clientId': 'ID klienta',
|
||||
'settings.oauth.clientSecret': 'Sekret klienta',
|
||||
'settings.oauth.deleteClient': 'Usuń klienta',
|
||||
'settings.oauth.deleteClientMessage': 'Ten klient i wszystkie aktywne sesje zostaną trwale usunięte. Każda aplikacja, która go używa, natychmiast utraci dostęp.',
|
||||
'settings.oauth.rotateSecret': 'Odnów sekret',
|
||||
'settings.oauth.rotateSecretMessage': 'Zostanie wygenerowany nowy sekret klienta, a wszystkie istniejące sesje zostaną natychmiast unieważnione. Zaktualizuj aplikację przed zamknięciem tego okna.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Odnów',
|
||||
'settings.oauth.rotateSecretConfirming': 'Odnawianie…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Wygenerowano nowy sekret',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Ten sekret jest wyświetlany tylko raz. Skopiuj go teraz i zaktualizuj aplikację — wszystkie poprzednie sesje zostały unieważnione.',
|
||||
'settings.oauth.activeSessions': 'Aktywne sesje OAuth',
|
||||
'settings.oauth.sessionScopes': 'Uprawnienia',
|
||||
'settings.oauth.sessionExpires': 'Wygasa',
|
||||
'settings.oauth.revoke': 'Unieważnij',
|
||||
'settings.oauth.revokeSession': 'Unieważnij sesję',
|
||||
'settings.oauth.revokeSessionMessage': 'Spowoduje to natychmiastowe unieważnienie dostępu dla tej sesji OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Zarejestruj klienta OAuth',
|
||||
'settings.oauth.modal.presets': 'Szybkie ustawienia',
|
||||
'settings.oauth.modal.clientName': 'Nazwa aplikacji',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'np. Claude Web, Moja aplikacja MCP',
|
||||
'settings.oauth.modal.redirectUris': 'URI przekierowania',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Jeden URI na linię. Wymagane HTTPS (localhost zwolniony). Wymagana dokładna zgodność.',
|
||||
'settings.oauth.modal.scopes': 'Dozwolone uprawnienia',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips i get_trip_summary są zawsze dostępne — bez wymaganych uprawnień. Umożliwiają AI odkrycie potrzebnych ID podróży.',
|
||||
'settings.oauth.modal.selectAll': 'Zaznacz wszystko',
|
||||
'settings.oauth.modal.deselectAll': 'Odznacz wszystko',
|
||||
'settings.oauth.modal.creating': 'Rejestrowanie…',
|
||||
'settings.oauth.modal.create': 'Zarejestruj klienta',
|
||||
'settings.oauth.modal.createdTitle': 'Klient zarejestrowany',
|
||||
'settings.oauth.modal.createdWarning': 'Sekret klienta jest wyświetlany tylko raz. Skopiuj go teraz — nie można go odzyskać.',
|
||||
'settings.oauth.toast.createError': 'Nie udało się zarejestrować klienta OAuth',
|
||||
'settings.oauth.toast.deleted': 'Klient OAuth usunięty',
|
||||
'settings.oauth.toast.deleteError': 'Nie udało się usunąć klienta OAuth',
|
||||
'settings.oauth.toast.revoked': 'Sesja unieważniona',
|
||||
'settings.oauth.toast.revokeError': 'Nie udało się unieważnić sesji',
|
||||
'settings.oauth.toast.rotateError': 'Nie udało się odnowić sekretu klienta',
|
||||
'settings.account': 'Konto',
|
||||
'settings.about': 'O aplikacji',
|
||||
'settings.about.reportBug': 'Zgłoś błąd',
|
||||
@@ -338,6 +389,10 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'login.mfaHint': 'Otwórz Google Authenticator, Authy lub inną aplikację TOTP.',
|
||||
'login.mfaBack': '← Powrót do logowania',
|
||||
'login.mfaVerify': 'Weryfikuj',
|
||||
'login.invalidInviteLink': 'Nieprawidłowy lub wygasły link zaproszenia',
|
||||
'login.oidcFailed': 'Logowanie OIDC nie powiodło się',
|
||||
'login.usernameRequired': 'Nazwa użytkownika jest wymagana',
|
||||
'login.passwordMinLength': 'Hasło musi mieć co najmniej 8 znaków',
|
||||
|
||||
// Register
|
||||
'register.passwordMismatch': 'Hasła nie są identyczne',
|
||||
@@ -418,6 +473,17 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.settings': 'Ustawienia',
|
||||
'admin.allowRegistration': 'Zezwól na rejestrację',
|
||||
'admin.allowRegistrationHint': 'Nowi użytkownicy mogą się rejestrować samodzielnie',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Wymagaj uwierzytelniania dwuskładnikowego (2FA)',
|
||||
'admin.requireMfaHint': 'Użytkownicy bez 2FA muszą ukończyć konfigurację w Ustawieniach zanim zaczną korzystać z aplikacji.',
|
||||
'admin.apiKeys': 'Klucze API',
|
||||
@@ -428,7 +494,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.recommended': 'Polecane',
|
||||
'admin.weatherKey': 'Klucz OpenWeatherMap API',
|
||||
'admin.weatherKeyHint': 'Do danych pogodowych. Uzyskaj go bezpłatnie na openweathermap.org',
|
||||
'admin.validateKey': 'Test',
|
||||
'admin.validateKey': 'Testuj',
|
||||
'admin.keyValid': 'Połączono',
|
||||
'admin.keyInvalid': 'Niepoprawny',
|
||||
'admin.keySaved': 'Klucze API zostały zapisane',
|
||||
@@ -484,7 +550,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.addons.catalog.vacay.description': 'Osobisty planer urlopu z widokiem kalendarza',
|
||||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||||
'admin.addons.catalog.atlas.description': 'Mapa świata z odwiedzonymi krajami i statystykami podróży',
|
||||
'admin.addons.catalog.collab.name': 'Collab',
|
||||
'admin.addons.catalog.collab.name': 'Współpraca',
|
||||
'admin.addons.catalog.collab.description': 'Notatki w czasie rzeczywistym, ankiety i czat do planowania podróży',
|
||||
'admin.addons.catalog.memories.name': 'Zdjęcia (Immich)',
|
||||
'admin.addons.catalog.memories.description': 'Udostępniaj zdjęcia z podróży za pośrednictwem swojej instancji Immich',
|
||||
@@ -516,9 +582,10 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.weather.locationHint': 'Pogoda jest określana na podstawie pierwszego miejsca z przypisanymi współrzędnymi w danym dniu. Jeśli do dnia nie przypisano żadnego miejsca, jako punkt odniesienia używane jest dowolne miejsce z listy.',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.mcpTokens': 'Tokeny MCP',
|
||||
'admin.mcpTokens.title': 'Tokeny MCP',
|
||||
'admin.mcpTokens.subtitle': 'Zarządzaj tokenami API dla wszystkich użytkowników',
|
||||
'admin.tabs.mcpTokens': 'Dostęp MCP',
|
||||
'admin.mcpTokens.title': 'Dostęp MCP',
|
||||
'admin.mcpTokens.subtitle': 'Zarządzaj sesjami OAuth i tokenami API dla wszystkich użytkowników',
|
||||
'admin.mcpTokens.sectionTitle': 'Tokeny API',
|
||||
'admin.mcpTokens.owner': 'Właściciel',
|
||||
'admin.mcpTokens.tokenName': 'Nazwa tokenu',
|
||||
'admin.mcpTokens.created': 'Utworzono',
|
||||
@@ -530,6 +597,17 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Token został usunięty',
|
||||
'admin.mcpTokens.deleteError': 'Nie udało się usunąć tokenu',
|
||||
'admin.mcpTokens.loadError': 'Nie udało się załadować tokenów',
|
||||
'admin.oauthSessions.sectionTitle': 'Sesje OAuth',
|
||||
'admin.oauthSessions.clientName': 'Klient',
|
||||
'admin.oauthSessions.owner': 'Właściciel',
|
||||
'admin.oauthSessions.scopes': 'Uprawnienia',
|
||||
'admin.oauthSessions.created': 'Utworzono',
|
||||
'admin.oauthSessions.empty': 'Brak aktywnych sesji OAuth',
|
||||
'admin.oauthSessions.revokeTitle': 'Unieważnij sesję',
|
||||
'admin.oauthSessions.revokeMessage': 'Ta sesja OAuth zostanie natychmiast unieważniona. Klient straci dostęp do MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Sesja unieważniona',
|
||||
'admin.oauthSessions.revokeError': 'Nie udało się unieważnić sesji',
|
||||
'admin.oauthSessions.loadError': 'Nie udało się załadować sesji OAuth',
|
||||
'admin.tabs.github': 'GitHub',
|
||||
|
||||
'admin.audit.subtitle': 'Zdarzenia związane z bezpieczeństwem i administracją (kopie zapasowe, użytkownicy, MFA, ustawienia).',
|
||||
@@ -597,7 +675,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.legend': 'Legenda',
|
||||
'vacay.publicHoliday': 'Święto państwowe',
|
||||
'vacay.companyHoliday': 'Urlop firmowy',
|
||||
'vacay.weekend': 'Weekend',
|
||||
'vacay.weekend': 'Weekendowy',
|
||||
'vacay.modeVacation': 'Urlop',
|
||||
'vacay.modeCompany': 'Urlop firmowy',
|
||||
'vacay.entitlement': 'Wymiar',
|
||||
@@ -626,6 +704,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'vacay.companyHolidays': 'Urlopy firmowe',
|
||||
'vacay.companyHolidaysHint': 'Pozwala oznaczać dni wolne od pracy w kalendarzu',
|
||||
'vacay.companyHolidaysNoDeduct': 'Urlopy firmowe nie są odejmowane od puli dni urlopowych.',
|
||||
'vacay.weekStart': 'Tydzień zaczyna się w',
|
||||
'vacay.weekStartHint': 'Wybierz czy tydzień zaczyna się w poniedziałek czy niedzielę',
|
||||
'vacay.carryOver': 'Przeniesienie na kolejny rok',
|
||||
'vacay.carryOverHint': 'Automatycznie przenosi pozostałe dni urlopowe na kolejny rok',
|
||||
'vacay.sharing': 'Udostępnianie',
|
||||
@@ -695,7 +775,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'atlas.lastTrip': 'Ostatnia podróż',
|
||||
'atlas.nextTrip': 'Następna podróż',
|
||||
'atlas.daysLeft': 'dni do wyjazdu',
|
||||
'atlas.streak': 'Streak',
|
||||
'atlas.streak': 'Seria',
|
||||
'atlas.years': 'lata',
|
||||
'atlas.yearInRow': 'rok z rzędu',
|
||||
'atlas.yearsInRow': 'lat z rzędu',
|
||||
@@ -824,6 +904,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.files': 'Pliki',
|
||||
'inspector.filesCount': '{count} plików',
|
||||
'inspector.removeFromDay': 'Usuń z dnia',
|
||||
'inspector.remove': 'Usuń',
|
||||
'inspector.addToDay': 'Dodaj do dnia',
|
||||
'inspector.confirmedRes': 'Potwierdzona rezerwacja',
|
||||
'inspector.pendingRes': 'Oczekująca rezerwacja',
|
||||
@@ -961,6 +1042,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'budget.totalBudget': 'Całkowity budżet',
|
||||
'budget.byCategory': 'Według kategorii',
|
||||
'budget.editTooltip': 'Kliknij, aby edytować',
|
||||
'budget.linkedToReservation': 'Powiązano z rezerwacją — edytuj nazwę tam',
|
||||
'budget.confirm.deleteCategory': 'Czy na pewno chcesz usunąć kategorię "{name}" z {count} wpisami?',
|
||||
'budget.deleteCategory': 'Usuń kategorię',
|
||||
'budget.perPerson': 'Za osobę',
|
||||
@@ -973,6 +1055,9 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
|
||||
// Files
|
||||
'files.title': 'Pliki',
|
||||
'files.pageTitle': 'Pliki i dokumenty',
|
||||
'files.subtitle': '{count} plików dla {trip}',
|
||||
'files.downloadPdf': 'Pobierz PDF',
|
||||
'files.count': '{count} plików',
|
||||
'files.countSingular': '1 plik',
|
||||
'files.uploaded': '{count} przesłanych',
|
||||
@@ -1051,7 +1136,9 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.menuCheckAll': 'Zaznacz wszystko',
|
||||
'packing.menuUncheckAll': 'Odznacz wszystko',
|
||||
'packing.menuDeleteCat': 'Usuń kategorię',
|
||||
'packing.assignUser': 'Przypisz użytkownika',
|
||||
'packing.saveAsTemplate': 'Zapisz jako szablon',
|
||||
'packing.templateName': 'Nazwa szablonu',
|
||||
'packing.templateSaved': 'Lista pakowania zapisana jako szablon',
|
||||
'packing.noMembers': 'Brak członków podróży',
|
||||
'packing.addItem': 'Dodaj przedmiot',
|
||||
'packing.addItemPlaceholder': 'Nazwa przedmiotu...',
|
||||
@@ -1061,6 +1148,9 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'packing.template': 'Szablon',
|
||||
'packing.templateApplied': '{count} przedmiotów dodanych z szablonu',
|
||||
'packing.templateError': 'Nie udało się zastosować szablonu',
|
||||
'packing.saveAsTemplate': 'Zapisz jako szablon',
|
||||
'packing.templateName': 'Nazwa szablonu',
|
||||
'packing.templateSaved': 'Lista pakowania zapisana jako szablon',
|
||||
'packing.bags': 'Torby',
|
||||
'packing.noBag': 'Nieprzypisane',
|
||||
'packing.totalWeight': 'Waga całkowita',
|
||||
@@ -1216,6 +1306,13 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'backup.keep.forever': 'Przechowuj na zawsze',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Zdjęcia',
|
||||
'photos.subtitle': '{count} zdjęć dla {trip}',
|
||||
'photos.dropHere': 'Przeciągnij zdjęcia tutaj...',
|
||||
'photos.dropHereActive': 'Przeciągnij zdjęcia tutaj',
|
||||
'photos.captionForAll': 'Podpis (dla wszystkich)',
|
||||
'photos.captionPlaceholder': 'Opcjonalny podpis...',
|
||||
'photos.addCaption': 'Dodaj podpis...',
|
||||
'photos.allDays': 'Wszystkie dni',
|
||||
'photos.noPhotos': 'Brak zdjęć',
|
||||
'photos.uploadHint': 'Prześlij zdjęcia z podróży',
|
||||
@@ -1223,6 +1320,12 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'photos.linkPlace': 'Połącz z miejscem',
|
||||
'photos.noPlace': 'Brak miejsca',
|
||||
'photos.uploadN': 'Prześlij {n} zdjęć',
|
||||
'photos.linkDay': 'Połącz dzień',
|
||||
'photos.noDay': 'Brak dnia',
|
||||
'photos.dayLabel': 'Dzień {number}',
|
||||
'photos.photoSelected': 'Zdjęcie wybrane',
|
||||
'photos.photosSelected': 'Zdjęcia wybrane',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · maks. 10 MB · do 30 zdjęć',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Przywrócić kopię zapasową?',
|
||||
@@ -1249,6 +1352,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'planner.routeCalculated': 'Trasa została obliczona',
|
||||
'planner.routeCalcFailed': 'Nie udało się obliczyć trasy',
|
||||
'planner.routeError': 'Błąd obliczania trasy',
|
||||
'planner.icsExportFailed': 'Eksport ICS nie powiódł się',
|
||||
'planner.routeOptimized': 'Trasa została zoptymalizowana',
|
||||
'planner.reservationUpdated': 'Rezerwacja została zaktualizowana',
|
||||
'planner.reservationAdded': 'Rezerwacja została dodana',
|
||||
@@ -1334,6 +1438,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.title': 'Zdjęcia',
|
||||
'memories.notConnected': 'Immich nie jest połączony',
|
||||
'memories.notConnectedHint': 'Połącz swoją instancję Immich w ustawieniach, aby przeglądać tutaj swoje zdjęcia z podróży.',
|
||||
'memories.notConnectedMultipleHint': 'Połącz jednego z tych dostawców zdjęć: {provider_names} w Ustawieniach, aby móc dodawać zdjęcia do tej podróży.',
|
||||
'memories.noDates': 'Dodaj daty do swojej podróży, aby załadować zdjęcia.',
|
||||
'memories.noPhotos': 'Nie znaleziono zdjęć',
|
||||
'memories.noPhotosHint': 'Nie znaleziono zdjęć w Immich dla tego zakresu dat podróży.',
|
||||
@@ -1344,16 +1449,24 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'memories.reviewTitle': 'Przejrzyj swoje zdjęcia',
|
||||
'memories.reviewHint': 'Kliknij w zdjęcia, aby wykluczyć je z udostępnienia.',
|
||||
'memories.shareCount': 'Udostępnij {count} zdjęć',
|
||||
'memories.immichUrl': 'URL serwera Immich',
|
||||
'memories.immichApiKey': 'Klucz API',
|
||||
'memories.providerUrl': 'URL serwera',
|
||||
'memories.providerApiKey': 'Klucz API',
|
||||
'memories.providerUsername': 'Nazwa użytkownika',
|
||||
'memories.providerPassword': 'Hasło',
|
||||
'memories.providerOTP': 'Kod MFA (jeśli włączony)',
|
||||
'memories.skipSSLVerification': 'Pomiń weryfikację certyfikatu SSL',
|
||||
'memories.providerUrlHintSynology': 'Uwzględnij ścieżkę aplikacji Photos w URL, np. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Test',
|
||||
'memories.connected': 'Połączono',
|
||||
'memories.disconnected': 'Nie połączono',
|
||||
'memories.connectionSuccess': 'Połączono z Immich',
|
||||
'memories.connectionError': 'Nie udało się połączyć z Immich',
|
||||
'memories.saved': 'Ustawienia Immich zostały zapisane',
|
||||
'memories.saved': 'Ustawienia {provider_name} zostały zapisane',
|
||||
'memories.providerDisconnectedBanner': 'Połączenie z {provider_name} zostało utracone. Połącz ponownie w Ustawieniach, aby wyświetlać zdjęcia.',
|
||||
'memories.saveError': 'Nie można zapisać ustawień {provider_name}',
|
||||
'memories.addPhotos': 'Dodaj zdjęcia',
|
||||
'memories.selectPhotos': 'Wybierz zdjęcia z Immich',
|
||||
'memories.selectPhotosMultiple': 'Wybierz zdjęcia',
|
||||
'memories.selectHint': 'Dotknij zdjęć, aby je zaznaczyć.',
|
||||
'memories.selected': 'wybranych',
|
||||
'memories.addSelected': 'Dodaj {count} zdjęć',
|
||||
@@ -1454,11 +1567,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'admin.notifications.title': 'Powiadomienia',
|
||||
'admin.notifications.hint': 'Wybierz jeden kanał powiadomień.',
|
||||
'admin.notifications.none': 'Wyłączone',
|
||||
'admin.notifications.email': 'Email (SMTP)',
|
||||
'admin.notifications.email': 'E-mail (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'Zdarzenia powiadomień',
|
||||
'admin.notifications.eventsHint': 'Wybierz zdarzenia wyzwalające powiadomienia.',
|
||||
'admin.notifications.configureFirst': 'Najpierw skonfiguruj ustawienia SMTP lub webhook.',
|
||||
'admin.notifications.save': 'Zapisz ustawienia powiadomień',
|
||||
'admin.notifications.saved': 'Ustawienia powiadomień zapisane',
|
||||
'admin.notifications.testWebhook': 'Wyślij testowy webhook',
|
||||
@@ -1483,7 +1593,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'settings.webhookUrl.hint': 'Wprowadź adres URL webhooka Discord, Slack lub własnego, aby otrzymywać powiadomienia.',
|
||||
'settings.webhookUrl.save': 'Zapisz',
|
||||
'settings.webhookUrl.saved': 'URL webhooka zapisany',
|
||||
'settings.webhookUrl.test': 'Test',
|
||||
'settings.webhookUrl.test': 'Testuj',
|
||||
'settings.webhookUrl.testSuccess': 'Testowy webhook wysłany pomyślnie',
|
||||
'settings.webhookUrl.testFailed': 'Wysyłanie testowego webhooka nie powiodło się',
|
||||
'settings.notificationPreferences.inapp': 'In-App',
|
||||
@@ -1509,9 +1619,11 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'inspector.trackStats': 'Statystyki trasy',
|
||||
'budget.exportCsv': 'Eksportuj CSV',
|
||||
'budget.table.date': 'Data',
|
||||
'budget.linkedToReservation': 'Powiązane z rezerwacją — edytuj nazwę tam',
|
||||
'memories.testFirst': 'Najpierw przetestuj połączenie',
|
||||
'memories.linkAlbum': 'Połącz album',
|
||||
'memories.selectAlbum': 'Wybierz album Immich',
|
||||
'memories.selectAlbumMultiple': 'Wybierz album',
|
||||
'memories.noAlbums': 'Nie znaleziono albumów',
|
||||
'memories.syncAlbum': 'Synchronizuj album',
|
||||
'memories.unlinkAlbum': 'Odłącz album',
|
||||
@@ -1598,6 +1710,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notifications.markUnread': 'Oznacz jako nieprzeczytane',
|
||||
'notifications.delete': 'Usuń',
|
||||
'notifications.system': 'System',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos rozłączone',
|
||||
'notifications.synologySessionCleared.text': 'Twój serwer lub konto zostało zmienione — przejdź do Ustawień, aby ponownie przetestować połączenie.',
|
||||
'notifications.versionAvailable.title': 'Dostępna aktualizacja',
|
||||
'notifications.versionAvailable.text': 'TREK {version} jest już dostępny.',
|
||||
'notifications.versionAvailable.button': 'Zobacz szczegóły',
|
||||
@@ -1685,6 +1799,309 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
|
||||
'notif.generic.text': 'Masz nowe powiadomienie',
|
||||
'notif.dev.unknown_event.title': '[DEV] Nieznane zdarzenie',
|
||||
'notif.dev.unknown_event.text': 'Typ zdarzenia "{event}" nie jest zarejestrowany w EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'przed chwilą',
|
||||
'common.hoursAgo': '{count} godz. temu',
|
||||
'common.daysAgo': '{count} dn. temu',
|
||||
'budget.linkedToReservation': 'Powiązane z rezerwacją — edytuj nazwę tam',
|
||||
'packing.saveAsTemplate': 'Zapisz jako szablon',
|
||||
'packing.templateName': 'Nazwa szablonu',
|
||||
'packing.templateSaved': 'Lista pakowania zapisana jako szablon',
|
||||
'memories.notConnectedMultipleHint': 'Połącz jednego z tych dostawców zdjęć: {provider_names} w Ustawieniach, aby dodawać zdjęcia do tej podróży.',
|
||||
'memories.providerUrl': 'Adres URL serwera',
|
||||
'memories.providerApiKey': 'Klucz API',
|
||||
'memories.providerUsername': 'Nazwa użytkownika',
|
||||
'memories.providerPassword': 'Hasło',
|
||||
'memories.saveError': 'Nie udało się zapisać ustawień {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'Trasa zapisu nie jest skonfigurowana dla tego dostawcy',
|
||||
'memories.testRouteNotConfigured': 'Trasa testowa nie jest skonfigurowana dla tego dostawcy',
|
||||
'memories.fillRequiredFields': 'Proszę wypełnić wszystkie wymagane pola',
|
||||
'memories.selectAlbumMultiple': 'Wybierz album',
|
||||
'memories.selectPhotosMultiple': 'Wybierz zdjęcia',
|
||||
'journey.title': 'Dziennik podróży',
|
||||
'journey.subtitle': 'Dokumentuj swoje podróże na bieżąco',
|
||||
'journey.new': 'Nowy dziennik podróży',
|
||||
'journey.create': 'Utwórz',
|
||||
'journey.titlePlaceholder': 'Dokąd jedziesz?',
|
||||
'journey.empty': 'Brak dzienników podróży',
|
||||
'journey.emptyHint': 'Zacznij dokumentować swoją następną podróż',
|
||||
'journey.deleted': 'Dziennik podróży usunięty',
|
||||
'journey.createError': 'Nie udało się utworzyć dziennika podróży',
|
||||
'journey.deleteError': 'Nie udało się usunąć dziennika podróży',
|
||||
'journey.deleteConfirmTitle': 'Usuń',
|
||||
'journey.deleteConfirmMessage': 'Usunąć „{title}"? Tej operacji nie można cofnąć.',
|
||||
'journey.deleteConfirmGeneric': 'Czy na pewno chcesz to usunąć?',
|
||||
'journey.notFound': 'Nie znaleziono dziennika podróży',
|
||||
'journey.photos': 'Zdjęcia',
|
||||
'journey.timelineEmpty': 'Brak przystanków',
|
||||
'journey.timelineEmptyHint': 'Dodaj zameldowanie lub napisz wpis w dzienniku, aby rozpocząć',
|
||||
'journey.status.draft': 'Szkic',
|
||||
'journey.status.active': 'Aktywny',
|
||||
'journey.status.completed': 'Zakończony',
|
||||
'journey.status.upcoming': 'Nadchodzący',
|
||||
'journey.checkin.add': 'Zamelduj się',
|
||||
'journey.checkin.namePlaceholder': 'Nazwa miejsca',
|
||||
'journey.checkin.notesPlaceholder': 'Notatki (opcjonalnie)',
|
||||
'journey.checkin.save': 'Zapisz',
|
||||
'journey.checkin.error': 'Nie udało się zapisać zameldowania',
|
||||
'journey.entry.add': 'Dziennik',
|
||||
'journey.entry.edit': 'Edytuj wpis',
|
||||
'journey.entry.titlePlaceholder': 'Tytuł (opcjonalnie)',
|
||||
'journey.entry.bodyPlaceholder': 'Co się dziś wydarzyło?',
|
||||
'journey.entry.save': 'Zapisz',
|
||||
'journey.entry.error': 'Nie udało się zapisać wpisu',
|
||||
'journey.photo.add': 'Zdjęcie',
|
||||
'journey.photo.uploadError': 'Przesyłanie nie powiodło się',
|
||||
'journey.share.share': 'Udostępnij',
|
||||
'journey.share.public': 'Publiczny',
|
||||
'journey.share.linkCopied': 'Publiczny link skopiowany',
|
||||
'journey.share.disabled': 'Udostępnianie publiczne wyłączone',
|
||||
'journey.editor.titlePlaceholder': 'Nadaj temu momentowi nazwę...',
|
||||
'journey.editor.bodyPlaceholder': 'Opowiedz historię tego dnia...',
|
||||
'journey.editor.placePlaceholder': 'Lokalizacja (opcjonalnie)',
|
||||
'journey.editor.tagsPlaceholder': 'Tagi: ukryty skarb, najlepszy posiłek, warto wrócić...',
|
||||
'journey.visibility.private': 'Prywatny',
|
||||
'journey.visibility.shared': 'Udostępniony',
|
||||
'journey.visibility.public': 'Publiczny',
|
||||
'journey.emptyState.title': 'Twoja historia zaczyna się tutaj',
|
||||
'journey.emptyState.subtitle': 'Zamelduj się w miejscu lub napisz swój pierwszy wpis w dzienniku',
|
||||
'journey.frontpage.subtitle': 'Zamień swoje podróże w historie, których nigdy nie zapomnisz',
|
||||
'journey.frontpage.createJourney': 'Utwórz dziennik podróży',
|
||||
'journey.frontpage.activeJourney': 'Aktywny dziennik podróży',
|
||||
'journey.frontpage.allJourneys': 'Wszystkie dzienniki podróży',
|
||||
'journey.frontpage.journeys': 'dzienniki podróży',
|
||||
'journey.frontpage.createNew': 'Utwórz nowy dziennik podróży',
|
||||
'journey.frontpage.createNewSub': 'Wybierz podróże, pisz historie, dziel się przygodami',
|
||||
'journey.frontpage.live': 'Na żywo',
|
||||
'journey.frontpage.synced': 'Zsynchronizowany',
|
||||
'journey.frontpage.continueWriting': 'Kontynuuj pisanie',
|
||||
'journey.frontpage.updated': 'Zaktualizowano {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Podróż właśnie się zakończyła',
|
||||
'journey.frontpage.suggestionText': 'Zamień <strong>{title}</strong> w dziennik podróży',
|
||||
'journey.frontpage.dismiss': 'Odrzuć',
|
||||
'journey.frontpage.journeyName': 'Nazwa dziennika podróży',
|
||||
'journey.frontpage.namePlaceholder': 'np. Azja Południowo-Wschodnia 2026',
|
||||
'journey.frontpage.selectTrips': 'Wybierz podróże',
|
||||
'journey.frontpage.tripsSelected': 'podróży wybranych',
|
||||
'journey.frontpage.trips': 'podróże',
|
||||
'journey.frontpage.placesImported': 'miejsc zostanie zaimportowanych',
|
||||
'journey.frontpage.places': 'miejsca',
|
||||
'journey.detail.backToJourney': 'Powrót do dziennika podróży',
|
||||
'journey.detail.syncedWithTrips': 'Zsynchronizowany z podróżami',
|
||||
'journey.detail.addEntry': 'Dodaj wpis',
|
||||
'journey.detail.newEntry': 'Nowy wpis',
|
||||
'journey.detail.editEntry': 'Edytuj wpis',
|
||||
'journey.detail.noEntries': 'Brak wpisów',
|
||||
'journey.detail.noEntriesHint': 'Dodaj podróż, aby rozpocząć ze szkieletowymi wpisami',
|
||||
'journey.detail.noPhotos': 'Brak zdjęć',
|
||||
'journey.detail.noPhotosHint': 'Prześlij zdjęcia do wpisów lub przeglądaj bibliotekę Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Statystyki podróży',
|
||||
'journey.detail.syncedTrips': 'Zsynchronizowane podróże',
|
||||
'journey.detail.noTripsLinked': 'Brak powiązanych podróży',
|
||||
'journey.detail.contributors': 'Współtwórcy',
|
||||
'journey.detail.readMore': 'Czytaj dalej',
|
||||
'journey.detail.prosCons': 'Zalety i wady',
|
||||
'journey.stats.days': 'Dni',
|
||||
'journey.stats.cities': 'Miasta',
|
||||
'journey.stats.entries': 'Wpisy',
|
||||
'journey.stats.photos': 'Zdjęcia',
|
||||
'journey.stats.places': 'Miejsca',
|
||||
'journey.verdict.lovedIt': 'Świetne',
|
||||
'journey.verdict.couldBeBetter': 'Mogłoby być lepiej',
|
||||
'journey.synced.places': 'miejsca',
|
||||
'journey.synced.synced': 'zsynchronizowane',
|
||||
'journey.editor.uploadPhotos': 'Prześlij zdjęcia',
|
||||
'journey.editor.fromGallery': 'Z galerii',
|
||||
'journey.editor.allPhotosAdded': 'Wszystkie zdjęcia już dodane',
|
||||
'journey.editor.writeStory': 'Napisz swoją historię...',
|
||||
'journey.editor.prosCons': 'Zalety i wady',
|
||||
'journey.editor.pros': 'Zalety',
|
||||
'journey.editor.cons': 'Wady',
|
||||
'journey.editor.proPlaceholder': 'Coś świetnego...',
|
||||
'journey.editor.conPlaceholder': 'Nie tak świetne...',
|
||||
'journey.editor.addAnother': 'Dodaj kolejny',
|
||||
'journey.editor.date': 'Data',
|
||||
'journey.editor.location': 'Lokalizacja',
|
||||
'journey.editor.searchLocation': 'Szukaj lokalizacji...',
|
||||
'journey.editor.mood': 'Nastrój',
|
||||
'journey.editor.weather': 'Pogoda',
|
||||
'journey.editor.photoFirst': '1.',
|
||||
'journey.editor.makeFirst': 'Ustaw jako 1.',
|
||||
'journey.mood.amazing': 'Niesamowity',
|
||||
'journey.mood.good': 'Dobry',
|
||||
'journey.mood.neutral': 'Neutralny',
|
||||
'journey.mood.rough': 'Ciężki',
|
||||
'journey.weather.sunny': 'Słonecznie',
|
||||
'journey.weather.partly': 'Częściowe zachmurzenie',
|
||||
'journey.weather.cloudy': 'Pochmurno',
|
||||
'journey.weather.rainy': 'Deszczowo',
|
||||
'journey.weather.stormy': 'Burzowo',
|
||||
'journey.weather.cold': 'Śnieżnie',
|
||||
'journey.trips.linkTrip': 'Powiąż podróż',
|
||||
'journey.trips.searchTrip': 'Szukaj podróży',
|
||||
'journey.trips.searchPlaceholder': 'Nazwa podróży lub cel...',
|
||||
'journey.trips.noTripsAvailable': 'Brak dostępnych podróży',
|
||||
'journey.trips.link': 'Powiąż',
|
||||
'journey.trips.tripLinked': 'Podróż powiązana',
|
||||
'journey.trips.linkFailed': 'Powiązanie podróży nie powiodło się',
|
||||
'journey.trips.addTrip': 'Dodaj podróż',
|
||||
'journey.trips.unlinkTrip': 'Odłącz podróż',
|
||||
'journey.trips.unlinkMessage': 'Odłączyć „{title}"? Wszystkie zsynchronizowane wpisy i zdjęcia z tej podróży zostaną trwale usunięte. Tej operacji nie można cofnąć.',
|
||||
'journey.trips.unlink': 'Odłącz',
|
||||
'journey.trips.tripUnlinked': 'Podróż odłączona',
|
||||
'journey.trips.unlinkFailed': 'Odłączenie podróży nie powiodło się',
|
||||
'journey.trips.noTripsLinkedSettings': 'Brak powiązanych podróży',
|
||||
'journey.contributors.invite': 'Zaproś współtwórcę',
|
||||
'journey.contributors.searchUser': 'Szukaj użytkownika',
|
||||
'journey.contributors.searchPlaceholder': 'Nazwa użytkownika lub e-mail...',
|
||||
'journey.contributors.noUsers': 'Nie znaleziono użytkowników',
|
||||
'journey.contributors.role': 'Rola',
|
||||
'journey.contributors.added': 'Współtwórca dodany',
|
||||
'journey.contributors.addFailed': 'Dodawanie współtwórcy nie powiodło się',
|
||||
'journey.share.publicShare': 'Udostępnianie publiczne',
|
||||
'journey.share.createLink': 'Utwórz link udostępniania',
|
||||
'journey.share.linkCreated': 'Link udostępniania utworzony',
|
||||
'journey.share.createFailed': 'Tworzenie linku nie powiodło się',
|
||||
'journey.share.copy': 'Kopiuj',
|
||||
'journey.share.copied': 'Skopiowano!',
|
||||
'journey.share.timeline': 'Oś czasu',
|
||||
'journey.share.gallery': 'Galeria',
|
||||
'journey.share.map': 'Mapa',
|
||||
'journey.share.removeLink': 'Usuń link udostępniania',
|
||||
'journey.share.linkDeleted': 'Link udostępniania usunięty',
|
||||
'journey.share.deleteFailed': 'Usunięcie nie powiodło się',
|
||||
'journey.share.updateFailed': 'Aktualizacja nie powiodła się',
|
||||
'journey.settings.title': 'Ustawienia dziennika podróży',
|
||||
'journey.settings.coverImage': 'Zdjęcie okładkowe',
|
||||
'journey.settings.changeCover': 'Zmień okładkę',
|
||||
'journey.settings.addCover': 'Dodaj zdjęcie okładkowe',
|
||||
'journey.settings.name': 'Nazwa',
|
||||
'journey.settings.subtitle': 'Podtytuł',
|
||||
'journey.settings.subtitlePlaceholder': 'np. Tajlandia, Wietnam i Kambodża',
|
||||
'journey.settings.delete': 'Usuń',
|
||||
'journey.settings.deleteJourney': 'Usuń dziennik podróży',
|
||||
'journey.settings.deleteMessage': 'Usunąć „{title}"? Wszystkie wpisy i zdjęcia zostaną utracone.',
|
||||
'journey.settings.saved': 'Ustawienia zapisane',
|
||||
'journey.settings.saveFailed': 'Zapisywanie nie powiodło się',
|
||||
'journey.settings.coverUpdated': 'Okładka zaktualizowana',
|
||||
'journey.settings.coverFailed': 'Przesyłanie nie powiodło się',
|
||||
'journey.settings.failedToDelete': 'Nie udało się usunąć',
|
||||
'journey.entries.deleteTitle': 'Usuń wpis',
|
||||
'journey.photosUploaded': '{count} zdjęć przesłanych',
|
||||
'journey.photosAdded': '{count} zdjęć dodanych',
|
||||
'journey.public.notFound': 'Nie znaleziono',
|
||||
'journey.public.notFoundMessage': 'Ten dziennik podróży nie istnieje lub link wygasł.',
|
||||
'journey.public.readOnly': 'Tylko do odczytu · Publiczny dziennik podróży',
|
||||
'journey.public.tagline': 'Travel Resource & Exploration Kit',
|
||||
'journey.public.sharedVia': 'Udostępnione przez',
|
||||
'journey.public.madeWith': 'Stworzone z',
|
||||
'journey.pdf.journeyBook': 'Książka podróży',
|
||||
'journey.pdf.madeWith': 'Stworzone z TREK',
|
||||
'journey.pdf.day': 'Dzień',
|
||||
'journey.pdf.theEnd': 'Koniec',
|
||||
'journey.pdf.saveAsPdf': 'Zapisz jako PDF',
|
||||
'journey.pdf.pages': 'stron',
|
||||
'dashboard.greeting.morning': 'Dzień dobry,',
|
||||
'dashboard.greeting.afternoon': 'Dzień dobry,',
|
||||
'dashboard.greeting.evening': 'Dobry wieczór,',
|
||||
'dashboard.mobile.liveNow': 'Na żywo',
|
||||
'dashboard.mobile.tripProgress': 'Postęp podróży',
|
||||
'dashboard.mobile.daysLeft': 'Pozostało {count} dni',
|
||||
'dashboard.mobile.places': 'Miejsca',
|
||||
'dashboard.mobile.buddies': 'Towarzysze',
|
||||
'dashboard.mobile.newTrip': 'Nowa podróż',
|
||||
'dashboard.mobile.currency': 'Waluta',
|
||||
'dashboard.mobile.timezone': 'Strefa czasowa',
|
||||
'dashboard.mobile.upcomingTrips': 'Nadchodzące podróże',
|
||||
'dashboard.mobile.yourTrips': 'Twoje podróże',
|
||||
'dashboard.mobile.trips': 'podróże',
|
||||
'dashboard.mobile.starts': 'Początek',
|
||||
'dashboard.mobile.duration': 'Czas trwania',
|
||||
'dashboard.mobile.day': 'dzień',
|
||||
'dashboard.mobile.days': 'dni',
|
||||
'dashboard.mobile.ongoing': 'W trakcie',
|
||||
'dashboard.mobile.startsToday': 'Zaczyna się dziś',
|
||||
'dashboard.mobile.tomorrow': 'Jutro',
|
||||
'dashboard.mobile.inDays': 'Za {count} dni',
|
||||
'dashboard.mobile.inMonths': 'Za {count} miesięcy',
|
||||
'dashboard.mobile.completed': 'Zakończone',
|
||||
'dashboard.mobile.currencyConverter': 'Przelicznik walut',
|
||||
'nav.profile': 'Profil',
|
||||
'nav.bottomSettings': 'Ustawienia',
|
||||
'nav.bottomAdmin': 'Ustawienia administratora',
|
||||
'nav.bottomLogout': 'Wyloguj się',
|
||||
'nav.bottomAdminBadge': 'Administrator',
|
||||
'dayplan.mobile.addPlace': 'Dodaj miejsce',
|
||||
'dayplan.mobile.searchPlaces': 'Szukaj miejsc...',
|
||||
'dayplan.mobile.allAssigned': 'Wszystkie miejsca przypisane',
|
||||
'dayplan.mobile.noMatch': 'Brak wyników',
|
||||
'dayplan.mobile.createNew': 'Utwórz nowe miejsce',
|
||||
'admin.addons.catalog.journey.name': 'Dziennik podróży',
|
||||
'admin.addons.catalog.journey.description': 'Śledzenie podróży i dziennik z zameldowaniami, zdjęciami i codziennymi historiami',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Podróże',
|
||||
'oauth.scope.group.places': 'Miejsca',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Pakowanie',
|
||||
'oauth.scope.group.todos': 'Zadania',
|
||||
'oauth.scope.group.budget': 'Budżet',
|
||||
'oauth.scope.group.reservations': 'Rezerwacje',
|
||||
'oauth.scope.group.collab': 'Współpraca',
|
||||
'oauth.scope.group.notifications': 'Powiadomienia',
|
||||
'oauth.scope.group.vacay': 'Urlop',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Pogoda',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Przeglądaj podróże i itineraria',
|
||||
'oauth.scope.trips:read.description': 'Odczytuj podróże, dni, notatki i członków',
|
||||
'oauth.scope.trips:write.label': 'Edytuj podróże i itineraria',
|
||||
'oauth.scope.trips:write.description': 'Twórz i aktualizuj podróże, dni, notatki oraz zarządzaj członkami',
|
||||
'oauth.scope.trips:delete.label': 'Usuń podróże',
|
||||
'oauth.scope.trips:delete.description': 'Trwale usuń całe podróże — ta akcja jest nieodwracalna',
|
||||
'oauth.scope.trips:share.label': 'Zarządzaj linkami udostępniania',
|
||||
'oauth.scope.trips:share.description': 'Twórz, aktualizuj i unieważniaj publiczne linki udostępniania',
|
||||
'oauth.scope.places:read.label': 'Przeglądaj miejsca i dane mapy',
|
||||
'oauth.scope.places:read.description': 'Odczytuj miejsca, przypisania dni, tagi i kategorie',
|
||||
'oauth.scope.places:write.label': 'Zarządzaj miejscami',
|
||||
'oauth.scope.places:write.description': 'Twórz, aktualizuj i usuń miejsca, przypisania i tagi',
|
||||
'oauth.scope.atlas:read.label': 'Przeglądaj Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Odczytuj odwiedzone kraje, regiony i listę marzeń',
|
||||
'oauth.scope.atlas:write.label': 'Zarządzaj Atlasem',
|
||||
'oauth.scope.atlas:write.description': 'Oznaczaj kraje i regiony jako odwiedzone, zarządzaj listą marzeń',
|
||||
'oauth.scope.packing:read.label': 'Przeglądaj listy pakowania',
|
||||
'oauth.scope.packing:read.description': 'Odczytuj przedmioty, torby i przypisania kategorii',
|
||||
'oauth.scope.packing:write.label': 'Zarządzaj listami pakowania',
|
||||
'oauth.scope.packing:write.description': 'Dodawaj, aktualizuj, usuwaj, zaznaczaj i porządkuj przedmioty i torby',
|
||||
'oauth.scope.todos:read.label': 'Przeglądaj listy zadań',
|
||||
'oauth.scope.todos:read.description': 'Odczytuj zadania podróży i przypisania kategorii',
|
||||
'oauth.scope.todos:write.label': 'Zarządzaj listami zadań',
|
||||
'oauth.scope.todos:write.description': 'Twórz, aktualizuj, zaznaczaj, usuwaj i porządkuj zadania',
|
||||
'oauth.scope.budget:read.label': 'Przeglądaj budżet',
|
||||
'oauth.scope.budget:read.description': 'Odczytuj pozycje budżetu i zestawienie wydatków',
|
||||
'oauth.scope.budget:write.label': 'Zarządzaj budżetem',
|
||||
'oauth.scope.budget:write.description': 'Twórz, aktualizuj i usuń pozycje budżetu',
|
||||
'oauth.scope.reservations:read.label': 'Przeglądaj rezerwacje',
|
||||
'oauth.scope.reservations:read.description': 'Odczytuj rezerwacje i szczegóły zakwaterowania',
|
||||
'oauth.scope.reservations:write.label': 'Zarządzaj rezerwacjami',
|
||||
'oauth.scope.reservations:write.description': 'Twórz, aktualizuj, usuwaj i porządkuj rezerwacje',
|
||||
'oauth.scope.collab:read.label': 'Przeglądaj współpracę',
|
||||
'oauth.scope.collab:read.description': 'Odczytuj notatki, ankiety i wiadomości',
|
||||
'oauth.scope.collab:write.label': 'Zarządzaj współpracą',
|
||||
'oauth.scope.collab:write.description': 'Twórz, aktualizuj i usuń notatki, ankiety i wiadomości',
|
||||
'oauth.scope.notifications:read.label': 'Przeglądaj powiadomienia',
|
||||
'oauth.scope.notifications:read.description': 'Odczytuj powiadomienia i liczby nieprzeczytanych',
|
||||
'oauth.scope.notifications:write.label': 'Zarządzaj powiadomieniami',
|
||||
'oauth.scope.notifications:write.description': 'Oznaczaj powiadomienia jako przeczytane i odpowiadaj na nie',
|
||||
'oauth.scope.vacay:read.label': 'Przeglądaj plany urlopowe',
|
||||
'oauth.scope.vacay:read.description': 'Odczytuj dane planowania urlopu, wpisy i statystyki',
|
||||
'oauth.scope.vacay:write.label': 'Zarządzaj planami urlopowymi',
|
||||
'oauth.scope.vacay:write.description': 'Twórz i zarządzaj wpisami urlopowymi, świętami i planami zespołu',
|
||||
'oauth.scope.geo:read.label': 'Mapy i geokodowanie',
|
||||
'oauth.scope.geo:read.description': 'Wyszukuj miejsca, rozwiązuj adresy URL map i odwrotnie geokoduj współrzędne',
|
||||
'oauth.scope.weather:read.label': 'Prognozy pogody',
|
||||
'oauth.scope.weather:read.description': 'Pobieraj prognozy pogody dla miejsc i dat podróży',
|
||||
}
|
||||
|
||||
export default pl
|
||||
|
||||
@@ -8,6 +8,8 @@ const ru: Record<string, string> = {
|
||||
'common.loading': 'Загрузка...',
|
||||
'common.import': 'Импорт',
|
||||
'common.error': 'Ошибка',
|
||||
'common.unknownError': 'Неизвестная ошибка',
|
||||
'common.tooManyAttempts': 'Слишком много попыток. Попробуйте позже.',
|
||||
'common.back': 'Назад',
|
||||
'common.all': 'Все',
|
||||
'common.close': 'Закрыть',
|
||||
@@ -27,6 +29,12 @@ const ru: Record<string, string> = {
|
||||
'common.password': 'Пароль',
|
||||
'common.saving': 'Сохранение...',
|
||||
'common.saved': 'Сохранено',
|
||||
'common.expand': 'Развернуть',
|
||||
'common.collapse': 'Свернуть',
|
||||
'trips.memberRemoved': '{username} удалён',
|
||||
'trips.memberRemoveError': 'Не удалось удалить',
|
||||
'trips.memberAdded': '{username} добавлен',
|
||||
'trips.memberAddError': 'Не удалось добавить',
|
||||
'trips.reminder': 'Напоминание',
|
||||
'trips.reminderNone': 'Нет',
|
||||
'trips.reminderDay': 'день',
|
||||
@@ -179,9 +187,6 @@ const ru: Record<string, string> = {
|
||||
'admin.notifications.none': 'Отключено',
|
||||
'admin.notifications.email': 'Эл. почта (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'События уведомлений',
|
||||
'admin.notifications.eventsHint': 'Выберите, какие события вызывают уведомления для всех пользователей.',
|
||||
'admin.notifications.configureFirst': 'Сначала настройте SMTP или webhook ниже, затем включите события.',
|
||||
'admin.notifications.save': 'Сохранить настройки уведомлений',
|
||||
'admin.notifications.saved': 'Настройки уведомлений сохранены',
|
||||
'admin.notifications.testWebhook': 'Отправить тестовый вебхук',
|
||||
@@ -228,6 +233,7 @@ const ru: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'MCP-эндпоинт',
|
||||
'settings.mcp.clientConfig': 'Конфигурация клиента',
|
||||
'settings.mcp.clientConfigHint': 'Замените <your_token> на API-токен из списка ниже. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Замените <your_client_id> и <your_client_secret> на учётные данные из созданного выше клиента OAuth 2.1. При первом подключении mcp-remote откроет браузер для завершения авторизации. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).',
|
||||
'settings.mcp.copy': 'Копировать',
|
||||
'settings.mcp.copied': 'Скопировано!',
|
||||
'settings.mcp.apiTokens': 'API-токены',
|
||||
@@ -249,6 +255,48 @@ const ru: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': 'Не удалось создать токен',
|
||||
'settings.mcp.toast.deleted': 'Токен удалён',
|
||||
'settings.mcp.toast.deleteError': 'Не удалось удалить токен',
|
||||
'settings.mcp.apiTokensDeprecated': 'API-токены устарели и будут удалены в будущей версии. Пожалуйста, используйте клиенты OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Клиенты OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Зарегистрируйте клиенты OAuth 2.1, чтобы сторонние MCP-приложения (Claude Web, Cursor и др.) могли подключаться без статических токенов.',
|
||||
'settings.oauth.createClient': 'Новый клиент',
|
||||
'settings.oauth.noClients': 'Нет зарегистрированных клиентов OAuth.',
|
||||
'settings.oauth.clientId': 'ID клиента',
|
||||
'settings.oauth.clientSecret': 'Секрет клиента',
|
||||
'settings.oauth.deleteClient': 'Удалить клиента',
|
||||
'settings.oauth.deleteClientMessage': 'Этот клиент и все активные сессии будут удалены навсегда. Любое приложение, использующее его, немедленно потеряет доступ.',
|
||||
'settings.oauth.rotateSecret': 'Обновить секрет',
|
||||
'settings.oauth.rotateSecretMessage': 'Будет сгенерирован новый секрет клиента, а все существующие сессии будут немедленно аннулированы. Обновите приложение перед закрытием этого диалога.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Обновить',
|
||||
'settings.oauth.rotateSecretConfirming': 'Обновление…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Новый секрет сгенерирован',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Этот секрет отображается только один раз. Скопируйте его сейчас и обновите приложение — все предыдущие сессии были аннулированы.',
|
||||
'settings.oauth.activeSessions': 'Активные сессии OAuth',
|
||||
'settings.oauth.sessionScopes': 'Области доступа',
|
||||
'settings.oauth.sessionExpires': 'Истекает',
|
||||
'settings.oauth.revoke': 'Отозвать',
|
||||
'settings.oauth.revokeSession': 'Отозвать сессию',
|
||||
'settings.oauth.revokeSessionMessage': 'Это немедленно отзовёт доступ для данной сессии OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Зарегистрировать клиент OAuth',
|
||||
'settings.oauth.modal.presets': 'Быстрые настройки',
|
||||
'settings.oauth.modal.clientName': 'Название приложения',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'напр. Claude Web, Моё MCP-приложение',
|
||||
'settings.oauth.modal.redirectUris': 'URI перенаправления',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Один URI на строку. Требуется HTTPS (localhost исключён). Требуется точное совпадение.',
|
||||
'settings.oauth.modal.scopes': 'Разрешённые области доступа',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips и get_trip_summary всегда доступны — область не требуется. Они помогают ИИ находить нужные ID поездок.',
|
||||
'settings.oauth.modal.selectAll': 'Выбрать все',
|
||||
'settings.oauth.modal.deselectAll': 'Снять выбор',
|
||||
'settings.oauth.modal.creating': 'Регистрация…',
|
||||
'settings.oauth.modal.create': 'Зарегистрировать клиента',
|
||||
'settings.oauth.modal.createdTitle': 'Клиент зарегистрирован',
|
||||
'settings.oauth.modal.createdWarning': 'Секрет клиента отображается только один раз. Скопируйте его сейчас — его нельзя будет восстановить.',
|
||||
'settings.oauth.toast.createError': 'Не удалось зарегистрировать клиент OAuth',
|
||||
'settings.oauth.toast.deleted': 'Клиент OAuth удалён',
|
||||
'settings.oauth.toast.deleteError': 'Не удалось удалить клиент OAuth',
|
||||
'settings.oauth.toast.revoked': 'Сессия отозвана',
|
||||
'settings.oauth.toast.revokeError': 'Не удалось отозвать сессию',
|
||||
'settings.oauth.toast.rotateError': 'Не удалось обновить секрет клиента',
|
||||
'settings.account': 'Аккаунт',
|
||||
'settings.about': 'О приложении',
|
||||
'settings.about.reportBug': 'Сообщить об ошибке',
|
||||
@@ -364,6 +412,10 @@ const ru: Record<string, string> = {
|
||||
'login.mfaHint': 'Откройте Google Authenticator, Authy или другое TOTP-приложение.',
|
||||
'login.mfaBack': '← Назад к входу',
|
||||
'login.mfaVerify': 'Подтвердить',
|
||||
'login.invalidInviteLink': 'Недействительная или истёкшая ссылка-приглашение',
|
||||
'login.oidcFailed': 'Ошибка входа через OIDC',
|
||||
'login.usernameRequired': 'Имя пользователя обязательно',
|
||||
'login.passwordMinLength': 'Пароль должен содержать не менее 8 символов',
|
||||
'login.oidc.tokenFailed': 'Аутентификация не удалась.',
|
||||
'login.oidc.invalidState': 'Недействительная сессия. Попробуйте снова.',
|
||||
'login.demoFailed': 'Ошибка демо-входа',
|
||||
@@ -450,6 +502,17 @@ const ru: Record<string, string> = {
|
||||
'admin.tabs.settings': 'Настройки',
|
||||
'admin.allowRegistration': 'Разрешить регистрацию',
|
||||
'admin.allowRegistrationHint': 'Новые пользователи могут регистрироваться самостоятельно',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Требовать двухфакторную аутентификацию (2FA)',
|
||||
'admin.requireMfaHint': 'Пользователи без 2FA должны завершить настройку в разделе «Настройки» перед использованием приложения.',
|
||||
'admin.apiKeys': 'API-ключи',
|
||||
@@ -547,9 +610,10 @@ const ru: Record<string, string> = {
|
||||
'admin.weather.locationHint': 'Погода основана на первом месте с координатами в каждом дне. Если ни одно место не назначено на день, в качестве ориентира используется любое место из списка.',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP-токены',
|
||||
'admin.mcpTokens.title': 'MCP-токены',
|
||||
'admin.mcpTokens.subtitle': 'Управление API-токенами всех пользователей',
|
||||
'admin.tabs.mcpTokens': 'MCP-доступ',
|
||||
'admin.mcpTokens.title': 'MCP-доступ',
|
||||
'admin.mcpTokens.subtitle': 'Управление OAuth-сессиями и API-токенами всех пользователей',
|
||||
'admin.mcpTokens.sectionTitle': 'API-токены',
|
||||
'admin.mcpTokens.owner': 'Владелец',
|
||||
'admin.mcpTokens.tokenName': 'Название токена',
|
||||
'admin.mcpTokens.created': 'Создан',
|
||||
@@ -561,6 +625,17 @@ const ru: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Токен удалён',
|
||||
'admin.mcpTokens.deleteError': 'Не удалось удалить токен',
|
||||
'admin.mcpTokens.loadError': 'Не удалось загрузить токены',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth-сессии',
|
||||
'admin.oauthSessions.clientName': 'Клиент',
|
||||
'admin.oauthSessions.owner': 'Владелец',
|
||||
'admin.oauthSessions.scopes': 'Права доступа',
|
||||
'admin.oauthSessions.created': 'Создано',
|
||||
'admin.oauthSessions.empty': 'Нет активных OAuth-сессий',
|
||||
'admin.oauthSessions.revokeTitle': 'Отозвать сессию',
|
||||
'admin.oauthSessions.revokeMessage': 'Эта OAuth-сессия будет немедленно отозвана. Клиент потеряет доступ к MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Сессия отозвана',
|
||||
'admin.oauthSessions.revokeError': 'Не удалось отозвать сессию',
|
||||
'admin.oauthSessions.loadError': 'Не удалось загрузить OAuth-сессии',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -656,6 +731,8 @@ const ru: Record<string, string> = {
|
||||
'vacay.companyHolidays': 'Корпоративные выходные',
|
||||
'vacay.companyHolidaysHint': 'Разрешить отмечать корпоративные выходные дни',
|
||||
'vacay.companyHolidaysNoDeduct': 'Корпоративные выходные не вычитаются из дней отпуска.',
|
||||
'vacay.weekStart': 'Неделя начинается с',
|
||||
'vacay.weekStartHint': 'Выберите, начинается ли неделя с понедельника или воскресенья',
|
||||
'vacay.carryOver': 'Перенос',
|
||||
'vacay.carryOverHint': 'Автоматически переносить оставшиеся дни отпуска на следующий год',
|
||||
'vacay.sharing': 'Общий доступ',
|
||||
@@ -870,6 +947,7 @@ const ru: Record<string, string> = {
|
||||
'inspector.files': 'Файлы',
|
||||
'inspector.filesCount': '{count} файлов',
|
||||
'inspector.removeFromDay': 'Убрать из дня',
|
||||
'inspector.remove': 'Удалить',
|
||||
'inspector.addToDay': 'Добавить в день',
|
||||
'inspector.confirmedRes': 'Подтверждённое бронирование',
|
||||
'inspector.pendingRes': 'Ожидающее бронирование',
|
||||
@@ -1010,6 +1088,7 @@ const ru: Record<string, string> = {
|
||||
'budget.totalBudget': 'Общий бюджет',
|
||||
'budget.byCategory': 'По категориям',
|
||||
'budget.editTooltip': 'Нажмите для редактирования',
|
||||
'budget.linkedToReservation': 'Связано с бронированием — редактируйте название там',
|
||||
'budget.confirm.deleteCategory': 'Вы уверены, что хотите удалить категорию «{name}» с {count} записями?',
|
||||
'budget.deleteCategory': 'Удалить категорию',
|
||||
'budget.perPerson': 'На человека',
|
||||
@@ -1019,9 +1098,13 @@ const ru: Record<string, string> = {
|
||||
'budget.settlement': 'Взаиморасчёт',
|
||||
'budget.settlementInfo': 'Нажмите на аватар участника в строке бюджета, чтобы отметить его зелёным — это значит, что он заплатил. Взаиморасчёт покажет, кто кому и сколько должен.',
|
||||
'budget.netBalances': 'Чистые балансы',
|
||||
'budget.linkedToReservation': 'Привязано к бронированию — измените название там',
|
||||
|
||||
// Files
|
||||
'files.title': 'Файлы',
|
||||
'files.pageTitle': 'Файлы и документы',
|
||||
'files.subtitle': '{count} файлов для {trip}',
|
||||
'files.downloadPdf': 'Скачать PDF',
|
||||
'files.count': '{count} файлов',
|
||||
'files.countSingular': '1 файл',
|
||||
'files.uploaded': '{count} загружено',
|
||||
@@ -1108,7 +1191,9 @@ const ru: Record<string, string> = {
|
||||
'packing.template': 'Шаблон',
|
||||
'packing.templateApplied': '{count} вещей добавлено из шаблона',
|
||||
'packing.templateError': 'Ошибка применения шаблона',
|
||||
'packing.assignUser': 'Назначить пользователя',
|
||||
'packing.saveAsTemplate': 'Сохранить как шаблон',
|
||||
'packing.templateName': 'Название шаблона',
|
||||
'packing.templateSaved': 'Список вещей сохранён как шаблон',
|
||||
'packing.noMembers': 'Нет участников',
|
||||
'packing.bags': 'Багаж',
|
||||
'packing.noBag': 'Не назначено',
|
||||
@@ -1265,6 +1350,13 @@ const ru: Record<string, string> = {
|
||||
'backup.keep.forever': 'Хранить вечно',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Фотографии',
|
||||
'photos.subtitle': '{count} фото для {trip}',
|
||||
'photos.dropHere': 'Перетащите фото сюда...',
|
||||
'photos.dropHereActive': 'Перетащите фото сюда',
|
||||
'photos.captionForAll': 'Подпись (для всех)',
|
||||
'photos.captionPlaceholder': 'Необязательная подпись...',
|
||||
'photos.addCaption': 'Добавить подпись...',
|
||||
'photos.allDays': 'Все дни',
|
||||
'photos.noPhotos': 'Фото пока нет',
|
||||
'photos.uploadHint': 'Загрузите фото из путешествия',
|
||||
@@ -1272,6 +1364,12 @@ const ru: Record<string, string> = {
|
||||
'photos.linkPlace': 'Привязать место',
|
||||
'photos.noPlace': 'Без места',
|
||||
'photos.uploadN': '{n} фото загружено',
|
||||
'photos.linkDay': 'Связать день',
|
||||
'photos.noDay': 'Нет дня',
|
||||
'photos.dayLabel': 'День {number}',
|
||||
'photos.photoSelected': 'Фото выбрано',
|
||||
'photos.photosSelected': 'Фото выбраны',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · макс. 10 МБ · до 30 фото',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Восстановить копию?',
|
||||
@@ -1298,6 +1396,7 @@ const ru: Record<string, string> = {
|
||||
'planner.routeCalculated': 'Маршрут рассчитан',
|
||||
'planner.routeCalcFailed': 'Не удалось рассчитать маршрут',
|
||||
'planner.routeError': 'Ошибка расчёта маршрута',
|
||||
'planner.icsExportFailed': 'Не удалось экспортировать ICS',
|
||||
'planner.routeOptimized': 'Маршрут оптимизирован',
|
||||
'planner.reservationUpdated': 'Бронирование обновлено',
|
||||
'planner.reservationAdded': 'Бронирование добавлено',
|
||||
@@ -1383,6 +1482,7 @@ const ru: Record<string, string> = {
|
||||
'memories.title': 'Фото',
|
||||
'memories.notConnected': 'Immich не подключён',
|
||||
'memories.notConnectedHint': 'Подключите Immich в настройках, чтобы видеть фотографии из поездок.',
|
||||
'memories.notConnectedMultipleHint': 'Подключите одного из этих фотопровайдеров: {provider_names} в Настройках, чтобы добавлять фотографии к этому путешествию.',
|
||||
'memories.noDates': 'Добавьте даты поездки для загрузки фотографий.',
|
||||
'memories.noPhotos': 'Фотографии не найдены',
|
||||
'memories.noPhotosHint': 'В Immich нет фотографий за период этой поездки.',
|
||||
@@ -1393,26 +1493,35 @@ const ru: Record<string, string> = {
|
||||
'memories.reviewTitle': 'Проверьте ваши фото',
|
||||
'memories.reviewHint': 'Нажмите на фото, чтобы исключить его из общего доступа.',
|
||||
'memories.shareCount': 'Поделиться ({count} фото)',
|
||||
'memories.immichUrl': 'URL сервера Immich',
|
||||
'memories.immichApiKey': 'API-ключ',
|
||||
'memories.providerUrl': 'URL сервера',
|
||||
'memories.providerApiKey': 'API-ключ',
|
||||
'memories.providerUsername': 'Имя пользователя',
|
||||
'memories.providerPassword': 'Пароль',
|
||||
'memories.providerOTP': 'Код MFA (если включён)',
|
||||
'memories.skipSSLVerification': 'Пропустить проверку SSL-сертификата',
|
||||
'memories.providerUrlHintSynology': 'Включите путь приложения Photos в URL, например https://nas:5001/photo',
|
||||
'memories.testConnection': 'Проверить подключение',
|
||||
'memories.testFirst': 'Сначала проверьте подключение',
|
||||
'memories.connected': 'Подключено',
|
||||
'memories.disconnected': 'Не подключено',
|
||||
'memories.connectionSuccess': 'Подключение к Immich установлено',
|
||||
'memories.connectionError': 'Не удалось подключиться к Immich',
|
||||
'memories.saved': 'Настройки Immich сохранены',
|
||||
'memories.saved': 'Настройки {provider_name} сохранены',
|
||||
'memories.providerDisconnectedBanner': 'Соединение с {provider_name} потеряно. Переподключитесь в Настройках для просмотра фотографий.',
|
||||
'memories.saveError': 'Не удалось сохранить настройки {provider_name}',
|
||||
'memories.oldest': 'Сначала старые',
|
||||
'memories.newest': 'Сначала новые',
|
||||
'memories.allLocations': 'Все места',
|
||||
'memories.addPhotos': 'Добавить фото',
|
||||
'memories.linkAlbum': 'Привязать альбом',
|
||||
'memories.selectAlbum': 'Выбрать альбом Immich',
|
||||
'memories.selectAlbumMultiple': 'Выбрать альбом',
|
||||
'memories.noAlbums': 'Альбомы не найдены',
|
||||
'memories.syncAlbum': 'Синхронизировать',
|
||||
'memories.unlinkAlbum': 'Отвязать',
|
||||
'memories.photos': 'фото',
|
||||
'memories.selectPhotos': 'Выбрать фото из Immich',
|
||||
'memories.selectPhotosMultiple': 'Выбрать фотографии',
|
||||
'memories.selectHint': 'Нажмите на фото, чтобы выбрать их.',
|
||||
'memories.selected': 'выбрано',
|
||||
'memories.addSelected': 'Добавить {count} фото',
|
||||
@@ -1570,6 +1679,8 @@ const ru: Record<string, string> = {
|
||||
'notifications.markUnread': 'Отметить как непрочитанное',
|
||||
'notifications.delete': 'Удалить',
|
||||
'notifications.system': 'Система',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos отключено',
|
||||
'notifications.synologySessionCleared.text': 'Ваш сервер или аккаунт изменился — перейдите в Настройки, чтобы проверить соединение снова.',
|
||||
'memories.error.loadAlbums': 'Не удалось загрузить альбомы',
|
||||
'memories.error.linkAlbum': 'Не удалось привязать альбом',
|
||||
'memories.error.unlinkAlbum': 'Не удалось отвязать альбом',
|
||||
@@ -1692,6 +1803,309 @@ const ru: Record<string, string> = {
|
||||
'notif.generic.text': 'У вас новое уведомление',
|
||||
'notif.dev.unknown_event.title': '[DEV] Неизвестное событие',
|
||||
'notif.dev.unknown_event.text': 'Тип события "{event}" не зарегистрирован в EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'только что',
|
||||
'common.hoursAgo': '{count} ч назад',
|
||||
'common.daysAgo': '{count} д назад',
|
||||
'budget.linkedToReservation': 'Привязано к бронированию — измените название там',
|
||||
'packing.saveAsTemplate': 'Сохранить как шаблон',
|
||||
'packing.templateName': 'Название шаблона',
|
||||
'packing.templateSaved': 'Список вещей сохранён как шаблон',
|
||||
'memories.notConnectedMultipleHint': 'Подключите любого из этих фото-провайдеров: {provider_names} в Настройках, чтобы добавлять фото к этой поездке.',
|
||||
'memories.providerUrl': 'URL сервера',
|
||||
'memories.providerApiKey': 'API-ключ',
|
||||
'memories.providerUsername': 'Имя пользователя',
|
||||
'memories.providerPassword': 'Пароль',
|
||||
'memories.saveError': 'Не удалось сохранить настройки {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'Маршрут сохранения не настроен для этого провайдера',
|
||||
'memories.testRouteNotConfigured': 'Маршрут тестирования не настроен для этого провайдера',
|
||||
'memories.fillRequiredFields': 'Пожалуйста, заполните все обязательные поля',
|
||||
'memories.selectAlbumMultiple': 'Выбрать альбом',
|
||||
'memories.selectPhotosMultiple': 'Выбрать фото',
|
||||
'journey.title': 'Путешествие',
|
||||
'journey.subtitle': 'Отслеживайте свои путешествия в реальном времени',
|
||||
'journey.new': 'Новое путешествие',
|
||||
'journey.create': 'Создать',
|
||||
'journey.titlePlaceholder': 'Куда вы едете?',
|
||||
'journey.empty': 'Пока нет путешествий',
|
||||
'journey.emptyHint': 'Начните документировать свою следующую поездку',
|
||||
'journey.deleted': 'Путешествие удалено',
|
||||
'journey.createError': 'Не удалось создать путешествие',
|
||||
'journey.deleteError': 'Не удалось удалить путешествие',
|
||||
'journey.deleteConfirmTitle': 'Удалить',
|
||||
'journey.deleteConfirmMessage': 'Удалить «{title}»? Это действие нельзя отменить.',
|
||||
'journey.deleteConfirmGeneric': 'Вы уверены, что хотите удалить это?',
|
||||
'journey.notFound': 'Путешествие не найдено',
|
||||
'journey.photos': 'Фото',
|
||||
'journey.timelineEmpty': 'Пока нет остановок',
|
||||
'journey.timelineEmptyHint': 'Добавьте отметку или напишите запись в дневник',
|
||||
'journey.status.draft': 'Черновик',
|
||||
'journey.status.active': 'Активно',
|
||||
'journey.status.completed': 'Завершено',
|
||||
'journey.status.upcoming': 'Предстоящее',
|
||||
'journey.checkin.add': 'Отметиться',
|
||||
'journey.checkin.namePlaceholder': 'Название места',
|
||||
'journey.checkin.notesPlaceholder': 'Заметки (необязательно)',
|
||||
'journey.checkin.save': 'Сохранить',
|
||||
'journey.checkin.error': 'Не удалось сохранить отметку',
|
||||
'journey.entry.add': 'Дневник',
|
||||
'journey.entry.edit': 'Редактировать запись',
|
||||
'journey.entry.titlePlaceholder': 'Заголовок (необязательно)',
|
||||
'journey.entry.bodyPlaceholder': 'Что произошло сегодня?',
|
||||
'journey.entry.save': 'Сохранить',
|
||||
'journey.entry.error': 'Не удалось сохранить запись',
|
||||
'journey.photo.add': 'Фото',
|
||||
'journey.photo.uploadError': 'Загрузка не удалась',
|
||||
'journey.share.share': 'Поделиться',
|
||||
'journey.share.public': 'Публичный',
|
||||
'journey.share.linkCopied': 'Публичная ссылка скопирована',
|
||||
'journey.share.disabled': 'Публичный доступ отключён',
|
||||
'journey.editor.titlePlaceholder': 'Дайте название этому моменту...',
|
||||
'journey.editor.bodyPlaceholder': 'Расскажите историю этого дня...',
|
||||
'journey.editor.placePlaceholder': 'Местоположение (необязательно)',
|
||||
'journey.editor.tagsPlaceholder': 'Теги: скрытая жемчужина, лучшая еда, стоит вернуться...',
|
||||
'journey.visibility.private': 'Приватный',
|
||||
'journey.visibility.shared': 'Общий',
|
||||
'journey.visibility.public': 'Публичный',
|
||||
'journey.emptyState.title': 'Ваша история начинается здесь',
|
||||
'journey.emptyState.subtitle': 'Отметьтесь в месте или напишите первую запись в дневник',
|
||||
'journey.frontpage.subtitle': 'Превращайте поездки в истории, которые вы никогда не забудете',
|
||||
'journey.frontpage.createJourney': 'Создать путешествие',
|
||||
'journey.frontpage.activeJourney': 'Активное путешествие',
|
||||
'journey.frontpage.allJourneys': 'Все путешествия',
|
||||
'journey.frontpage.journeys': 'путешествий',
|
||||
'journey.frontpage.createNew': 'Создать новое путешествие',
|
||||
'journey.frontpage.createNewSub': 'Выберите поездки, пишите истории, делитесь приключениями',
|
||||
'journey.frontpage.live': 'В эфире',
|
||||
'journey.frontpage.synced': 'Синхронизировано',
|
||||
'journey.frontpage.continueWriting': 'Продолжить писать',
|
||||
'journey.frontpage.updated': 'Обновлено {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Поездка только что завершилась',
|
||||
'journey.frontpage.suggestionText': 'Превратите <strong>{title}</strong> в путешествие',
|
||||
'journey.frontpage.dismiss': 'Скрыть',
|
||||
'journey.frontpage.journeyName': 'Название путешествия',
|
||||
'journey.frontpage.namePlaceholder': 'напр. Юго-Восточная Азия 2026',
|
||||
'journey.frontpage.selectTrips': 'Выбрать поездки',
|
||||
'journey.frontpage.tripsSelected': 'поездок выбрано',
|
||||
'journey.frontpage.trips': 'поездок',
|
||||
'journey.frontpage.placesImported': 'мест будет импортировано',
|
||||
'journey.frontpage.places': 'мест',
|
||||
'journey.detail.backToJourney': 'Назад к путешествию',
|
||||
'journey.detail.syncedWithTrips': 'Синхронизировано с поездками',
|
||||
'journey.detail.addEntry': 'Добавить запись',
|
||||
'journey.detail.newEntry': 'Новая запись',
|
||||
'journey.detail.editEntry': 'Редактировать запись',
|
||||
'journey.detail.noEntries': 'Пока нет записей',
|
||||
'journey.detail.noEntriesHint': 'Добавьте поездку, чтобы начать с шаблонных записей',
|
||||
'journey.detail.noPhotos': 'Пока нет фото',
|
||||
'journey.detail.noPhotosHint': 'Загрузите фото в записи или просмотрите библиотеку Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Статистика путешествия',
|
||||
'journey.detail.syncedTrips': 'Синхронизированные поездки',
|
||||
'journey.detail.noTripsLinked': 'Пока нет привязанных поездок',
|
||||
'journey.detail.contributors': 'Участники',
|
||||
'journey.detail.readMore': 'Читать далее',
|
||||
'journey.detail.prosCons': 'Плюсы и минусы',
|
||||
'journey.stats.days': 'Дней',
|
||||
'journey.stats.cities': 'Городов',
|
||||
'journey.stats.entries': 'Записей',
|
||||
'journey.stats.photos': 'Фото',
|
||||
'journey.stats.places': 'Мест',
|
||||
'journey.verdict.lovedIt': 'Понравилось',
|
||||
'journey.verdict.couldBeBetter': 'Могло быть лучше',
|
||||
'journey.synced.places': 'мест',
|
||||
'journey.synced.synced': 'синхронизировано',
|
||||
'journey.editor.uploadPhotos': 'Загрузить фото',
|
||||
'journey.editor.fromGallery': 'Из галереи',
|
||||
'journey.editor.allPhotosAdded': 'Все фото уже добавлены',
|
||||
'journey.editor.writeStory': 'Напишите свою историю...',
|
||||
'journey.editor.prosCons': 'Плюсы и минусы',
|
||||
'journey.editor.pros': 'Плюсы',
|
||||
'journey.editor.cons': 'Минусы',
|
||||
'journey.editor.proPlaceholder': 'Что-то отличное...',
|
||||
'journey.editor.conPlaceholder': 'Не очень хорошо...',
|
||||
'journey.editor.addAnother': 'Добавить ещё',
|
||||
'journey.editor.date': 'Дата',
|
||||
'journey.editor.location': 'Местоположение',
|
||||
'journey.editor.searchLocation': 'Поиск местоположения...',
|
||||
'journey.editor.mood': 'Настроение',
|
||||
'journey.editor.weather': 'Погода',
|
||||
'journey.editor.photoFirst': '1-е',
|
||||
'journey.editor.makeFirst': 'Сделать 1-м',
|
||||
'journey.mood.amazing': 'Потрясающе',
|
||||
'journey.mood.good': 'Хорошо',
|
||||
'journey.mood.neutral': 'Нейтрально',
|
||||
'journey.mood.rough': 'Тяжело',
|
||||
'journey.weather.sunny': 'Солнечно',
|
||||
'journey.weather.partly': 'Переменная облачность',
|
||||
'journey.weather.cloudy': 'Облачно',
|
||||
'journey.weather.rainy': 'Дождливо',
|
||||
'journey.weather.stormy': 'Гроза',
|
||||
'journey.weather.cold': 'Снежно',
|
||||
'journey.trips.linkTrip': 'Привязать поездку',
|
||||
'journey.trips.searchTrip': 'Поиск поездки',
|
||||
'journey.trips.searchPlaceholder': 'Название поездки или направление...',
|
||||
'journey.trips.noTripsAvailable': 'Нет доступных поездок',
|
||||
'journey.trips.link': 'Привязать',
|
||||
'journey.trips.tripLinked': 'Поездка привязана',
|
||||
'journey.trips.linkFailed': 'Не удалось привязать поездку',
|
||||
'journey.trips.addTrip': 'Добавить поездку',
|
||||
'journey.trips.unlinkTrip': 'Отвязать поездку',
|
||||
'journey.trips.unlinkMessage': 'Отвязать «{title}»? Все синхронизированные записи и фото из этой поездки будут безвозвратно удалены. Это действие нельзя отменить.',
|
||||
'journey.trips.unlink': 'Отвязать',
|
||||
'journey.trips.tripUnlinked': 'Поездка отвязана',
|
||||
'journey.trips.unlinkFailed': 'Не удалось отвязать поездку',
|
||||
'journey.trips.noTripsLinkedSettings': 'Нет привязанных поездок',
|
||||
'journey.contributors.invite': 'Пригласить участника',
|
||||
'journey.contributors.searchUser': 'Поиск пользователя',
|
||||
'journey.contributors.searchPlaceholder': 'Имя пользователя или email...',
|
||||
'journey.contributors.noUsers': 'Пользователи не найдены',
|
||||
'journey.contributors.role': 'Роль',
|
||||
'journey.contributors.added': 'Участник добавлен',
|
||||
'journey.contributors.addFailed': 'Не удалось добавить участника',
|
||||
'journey.share.publicShare': 'Публичный доступ',
|
||||
'journey.share.createLink': 'Создать ссылку для общего доступа',
|
||||
'journey.share.linkCreated': 'Ссылка создана',
|
||||
'journey.share.createFailed': 'Не удалось создать ссылку',
|
||||
'journey.share.copy': 'Копировать',
|
||||
'journey.share.copied': 'Скопировано!',
|
||||
'journey.share.timeline': 'Хронология',
|
||||
'journey.share.gallery': 'Галерея',
|
||||
'journey.share.map': 'Карта',
|
||||
'journey.share.removeLink': 'Удалить ссылку',
|
||||
'journey.share.linkDeleted': 'Ссылка удалена',
|
||||
'journey.share.deleteFailed': 'Не удалось удалить',
|
||||
'journey.share.updateFailed': 'Не удалось обновить',
|
||||
'journey.settings.title': 'Настройки путешествия',
|
||||
'journey.settings.coverImage': 'Обложка',
|
||||
'journey.settings.changeCover': 'Сменить обложку',
|
||||
'journey.settings.addCover': 'Добавить обложку',
|
||||
'journey.settings.name': 'Название',
|
||||
'journey.settings.subtitle': 'Подзаголовок',
|
||||
'journey.settings.subtitlePlaceholder': 'напр. Таиланд, Вьетнам и Камбоджа',
|
||||
'journey.settings.delete': 'Удалить',
|
||||
'journey.settings.deleteJourney': 'Удалить путешествие',
|
||||
'journey.settings.deleteMessage': 'Удалить «{title}»? Все записи и фото будут потеряны.',
|
||||
'journey.settings.saved': 'Настройки сохранены',
|
||||
'journey.settings.saveFailed': 'Не удалось сохранить',
|
||||
'journey.settings.coverUpdated': 'Обложка обновлена',
|
||||
'journey.settings.coverFailed': 'Загрузка не удалась',
|
||||
'journey.settings.failedToDelete': 'Не удалось удалить',
|
||||
'journey.entries.deleteTitle': 'Удалить запись',
|
||||
'journey.photosUploaded': '{count} фото загружено',
|
||||
'journey.photosAdded': '{count} фото добавлено',
|
||||
'journey.public.notFound': 'Не найдено',
|
||||
'journey.public.notFoundMessage': 'Это путешествие не существует или ссылка устарела.',
|
||||
'journey.public.readOnly': 'Только для чтения · Публичное путешествие',
|
||||
'journey.public.tagline': 'Инструмент планирования и исследования путешествий',
|
||||
'journey.public.sharedVia': 'Опубликовано через',
|
||||
'journey.public.madeWith': 'Сделано с помощью',
|
||||
'journey.pdf.journeyBook': 'Книга путешествия',
|
||||
'journey.pdf.madeWith': 'Сделано с помощью TREK',
|
||||
'journey.pdf.day': 'День',
|
||||
'journey.pdf.theEnd': 'Конец',
|
||||
'journey.pdf.saveAsPdf': 'Сохранить как PDF',
|
||||
'journey.pdf.pages': 'страниц',
|
||||
'dashboard.greeting.morning': 'Доброе утро,',
|
||||
'dashboard.greeting.afternoon': 'Добрый день,',
|
||||
'dashboard.greeting.evening': 'Добрый вечер,',
|
||||
'dashboard.mobile.liveNow': 'Сейчас в пути',
|
||||
'dashboard.mobile.tripProgress': 'Прогресс поездки',
|
||||
'dashboard.mobile.daysLeft': 'осталось {count} дн.',
|
||||
'dashboard.mobile.places': 'Места',
|
||||
'dashboard.mobile.buddies': 'Попутчики',
|
||||
'dashboard.mobile.newTrip': 'Новая поездка',
|
||||
'dashboard.mobile.currency': 'Валюта',
|
||||
'dashboard.mobile.timezone': 'Часовой пояс',
|
||||
'dashboard.mobile.upcomingTrips': 'Предстоящие поездки',
|
||||
'dashboard.mobile.yourTrips': 'Ваши поездки',
|
||||
'dashboard.mobile.trips': 'поездок',
|
||||
'dashboard.mobile.starts': 'Начало',
|
||||
'dashboard.mobile.duration': 'Продолжительность',
|
||||
'dashboard.mobile.day': 'день',
|
||||
'dashboard.mobile.days': 'дней',
|
||||
'dashboard.mobile.ongoing': 'В процессе',
|
||||
'dashboard.mobile.startsToday': 'Начинается сегодня',
|
||||
'dashboard.mobile.tomorrow': 'Завтра',
|
||||
'dashboard.mobile.inDays': 'Через {count} дн.',
|
||||
'dashboard.mobile.inMonths': 'Через {count} мес.',
|
||||
'dashboard.mobile.completed': 'Завершено',
|
||||
'dashboard.mobile.currencyConverter': 'Конвертер валют',
|
||||
'nav.profile': 'Профиль',
|
||||
'nav.bottomSettings': 'Настройки',
|
||||
'nav.bottomAdmin': 'Администрирование',
|
||||
'nav.bottomLogout': 'Выйти',
|
||||
'nav.bottomAdminBadge': 'Админ',
|
||||
'dayplan.mobile.addPlace': 'Добавить место',
|
||||
'dayplan.mobile.searchPlaces': 'Поиск мест...',
|
||||
'dayplan.mobile.allAssigned': 'Все места распределены',
|
||||
'dayplan.mobile.noMatch': 'Нет совпадений',
|
||||
'dayplan.mobile.createNew': 'Создать новое место',
|
||||
'admin.addons.catalog.journey.name': 'Путешествие',
|
||||
'admin.addons.catalog.journey.description': 'Отслеживание поездок и дневник путешествий с отметками, фото и ежедневными историями',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Поездки',
|
||||
'oauth.scope.group.places': 'Места',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Вещи',
|
||||
'oauth.scope.group.todos': 'Задачи',
|
||||
'oauth.scope.group.budget': 'Бюджет',
|
||||
'oauth.scope.group.reservations': 'Бронирования',
|
||||
'oauth.scope.group.collab': 'Сотрудничество',
|
||||
'oauth.scope.group.notifications': 'Уведомления',
|
||||
'oauth.scope.group.vacay': 'Отпуск',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Погода',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Просмотр поездок и маршрутов',
|
||||
'oauth.scope.trips:read.description': 'Чтение поездок, дней, заметок и участников',
|
||||
'oauth.scope.trips:write.label': 'Редактирование поездок и маршрутов',
|
||||
'oauth.scope.trips:write.description': 'Создание и обновление поездок, дней, заметок и управление участниками',
|
||||
'oauth.scope.trips:delete.label': 'Удаление поездок',
|
||||
'oauth.scope.trips:delete.description': 'Безвозвратное удаление поездок — это действие необратимо',
|
||||
'oauth.scope.trips:share.label': 'Управление ссылками на совместный доступ',
|
||||
'oauth.scope.trips:share.description': 'Создание, обновление и отзыв публичных ссылок на поездки',
|
||||
'oauth.scope.places:read.label': 'Просмотр мест и данных карты',
|
||||
'oauth.scope.places:read.description': 'Чтение мест, назначений по дням, тегов и категорий',
|
||||
'oauth.scope.places:write.label': 'Управление местами',
|
||||
'oauth.scope.places:write.description': 'Создание, обновление и удаление мест, назначений и тегов',
|
||||
'oauth.scope.atlas:read.label': 'Просмотр Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Чтение посещённых стран, регионов и списка желаний',
|
||||
'oauth.scope.atlas:write.label': 'Управление Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Отмечать посещённые страны и регионы, управлять списком желаний',
|
||||
'oauth.scope.packing:read.label': 'Просмотр списков вещей',
|
||||
'oauth.scope.packing:read.description': 'Чтение вещей, сумок и назначений категорий',
|
||||
'oauth.scope.packing:write.label': 'Управление списками вещей',
|
||||
'oauth.scope.packing:write.description': 'Добавление, обновление, удаление, отметка и переупорядочивание вещей и сумок',
|
||||
'oauth.scope.todos:read.label': 'Просмотр списков задач',
|
||||
'oauth.scope.todos:read.description': 'Чтение задач поездки и назначений категорий',
|
||||
'oauth.scope.todos:write.label': 'Управление списками задач',
|
||||
'oauth.scope.todos:write.description': 'Создание, обновление, отметка, удаление и переупорядочивание задач',
|
||||
'oauth.scope.budget:read.label': 'Просмотр бюджета',
|
||||
'oauth.scope.budget:read.description': 'Чтение статей бюджета и разбивки расходов',
|
||||
'oauth.scope.budget:write.label': 'Управление бюджетом',
|
||||
'oauth.scope.budget:write.description': 'Создание, обновление и удаление статей бюджета',
|
||||
'oauth.scope.reservations:read.label': 'Просмотр бронирований',
|
||||
'oauth.scope.reservations:read.description': 'Чтение бронирований и сведений о проживании',
|
||||
'oauth.scope.reservations:write.label': 'Управление бронированиями',
|
||||
'oauth.scope.reservations:write.description': 'Создание, обновление, удаление и переупорядочивание бронирований',
|
||||
'oauth.scope.collab:read.label': 'Просмотр совместной работы',
|
||||
'oauth.scope.collab:read.description': 'Чтение совместных заметок, опросов и сообщений',
|
||||
'oauth.scope.collab:write.label': 'Управление совместной работой',
|
||||
'oauth.scope.collab:write.description': 'Создание, обновление и удаление заметок, опросов и сообщений',
|
||||
'oauth.scope.notifications:read.label': 'Просмотр уведомлений',
|
||||
'oauth.scope.notifications:read.description': 'Чтение уведомлений в приложении и количества непрочитанных',
|
||||
'oauth.scope.notifications:write.label': 'Управление уведомлениями',
|
||||
'oauth.scope.notifications:write.description': 'Отмечать уведомления как прочитанные и отвечать на них',
|
||||
'oauth.scope.vacay:read.label': 'Просмотр планов отпуска',
|
||||
'oauth.scope.vacay:read.description': 'Чтение данных планирования отпуска, записей и статистики',
|
||||
'oauth.scope.vacay:write.label': 'Управление планами отпуска',
|
||||
'oauth.scope.vacay:write.description': 'Создание и управление записями отпуска, праздниками и командными планами',
|
||||
'oauth.scope.geo:read.label': 'Карты и геокодирование',
|
||||
'oauth.scope.geo:read.description': 'Поиск мест, разрешение URL карт и обратное геокодирование координат',
|
||||
'oauth.scope.weather:read.label': 'Прогнозы погоды',
|
||||
'oauth.scope.weather:read.description': 'Получение прогнозов погоды для мест и дат поездки',
|
||||
}
|
||||
|
||||
export default ru
|
||||
|
||||
@@ -8,6 +8,8 @@ const zh: Record<string, string> = {
|
||||
'common.loading': '加载中...',
|
||||
'common.import': '导入',
|
||||
'common.error': '错误',
|
||||
'common.unknownError': '未知错误',
|
||||
'common.tooManyAttempts': '尝试次数过多,请稍后再试。',
|
||||
'common.back': '返回',
|
||||
'common.all': '全部',
|
||||
'common.close': '关闭',
|
||||
@@ -27,6 +29,12 @@ const zh: Record<string, string> = {
|
||||
'common.password': '密码',
|
||||
'common.saving': '保存中...',
|
||||
'common.saved': '已保存',
|
||||
'common.expand': '展开',
|
||||
'common.collapse': '折叠',
|
||||
'trips.memberRemoved': '{username} 已移除',
|
||||
'trips.memberRemoveError': '移除失败',
|
||||
'trips.memberAdded': '{username} 已添加',
|
||||
'trips.memberAddError': '添加失败',
|
||||
'trips.reminder': '提醒',
|
||||
'trips.reminderNone': '无',
|
||||
'trips.reminderDay': '天',
|
||||
@@ -179,9 +187,6 @@ const zh: Record<string, string> = {
|
||||
'admin.notifications.none': '已禁用',
|
||||
'admin.notifications.email': '电子邮件 (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': '通知事件',
|
||||
'admin.notifications.eventsHint': '选择哪些事件为所有用户触发通知。',
|
||||
'admin.notifications.configureFirst': '请先在下方配置 SMTP 或 Webhook,然后启用事件。',
|
||||
'admin.notifications.save': '保存通知设置',
|
||||
'admin.notifications.saved': '通知设置已保存',
|
||||
'admin.notifications.testWebhook': '发送测试 Webhook',
|
||||
@@ -228,6 +233,7 @@ const zh: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'MCP 端点',
|
||||
'settings.mcp.clientConfig': '客户端配置',
|
||||
'settings.mcp.clientConfigHint': '将 <your_token> 替换为下方列表中的 API 令牌。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||||
'settings.mcp.clientConfigHintOAuth': '将 <your_client_id> 和 <your_client_secret> 替换为上方创建的 OAuth 2.1 客户端凭据。首次连接时,mcp-remote 将打开浏览器完成授权。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||||
'settings.mcp.copy': '复制',
|
||||
'settings.mcp.copied': '已复制!',
|
||||
'settings.mcp.apiTokens': 'API 令牌',
|
||||
@@ -249,6 +255,48 @@ const zh: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': '创建令牌失败',
|
||||
'settings.mcp.toast.deleted': '令牌已删除',
|
||||
'settings.mcp.toast.deleteError': '删除令牌失败',
|
||||
'settings.mcp.apiTokensDeprecated': 'API 令牌已弃用,将在未来版本中移除。请改用 OAuth 2.1 客户端。',
|
||||
'settings.oauth.clients': 'OAuth 2.1 客户端',
|
||||
'settings.oauth.clientsHint': '注册 OAuth 2.1 客户端,让第三方 MCP 应用程序(Claude Web、Cursor 等)无需静态令牌即可连接。',
|
||||
'settings.oauth.createClient': '新建客户端',
|
||||
'settings.oauth.noClients': '没有已注册的 OAuth 客户端。',
|
||||
'settings.oauth.clientId': '客户端 ID',
|
||||
'settings.oauth.clientSecret': '客户端密钥',
|
||||
'settings.oauth.deleteClient': '删除客户端',
|
||||
'settings.oauth.deleteClientMessage': '此客户端及所有活跃会话将被永久删除。使用此客户端的任何应用程序将立即失去访问权限。',
|
||||
'settings.oauth.rotateSecret': '轮换密钥',
|
||||
'settings.oauth.rotateSecretMessage': '将生成新的客户端密钥,所有现有会话将立即失效。在关闭此对话框之前,请更新您的应用程序。',
|
||||
'settings.oauth.rotateSecretConfirm': '轮换',
|
||||
'settings.oauth.rotateSecretConfirming': '轮换中…',
|
||||
'settings.oauth.rotateSecretDoneTitle': '已生成新密钥',
|
||||
'settings.oauth.rotateSecretDoneWarning': '此密钥仅显示一次。请立即复制并更新您的应用程序——所有之前的会话已失效。',
|
||||
'settings.oauth.activeSessions': '活跃的 OAuth 会话',
|
||||
'settings.oauth.sessionScopes': '权限范围',
|
||||
'settings.oauth.sessionExpires': '过期时间',
|
||||
'settings.oauth.revoke': '撤销',
|
||||
'settings.oauth.revokeSession': '撤销会话',
|
||||
'settings.oauth.revokeSessionMessage': '这将立即撤销此 OAuth 会话的访问权限。',
|
||||
'settings.oauth.modal.createTitle': '注册 OAuth 客户端',
|
||||
'settings.oauth.modal.presets': '快速预设',
|
||||
'settings.oauth.modal.clientName': '应用程序名称',
|
||||
'settings.oauth.modal.clientNamePlaceholder': '例如 Claude Web、我的 MCP 应用',
|
||||
'settings.oauth.modal.redirectUris': '重定向 URI',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': '每行一个 URI。需要 HTTPS(localhost 除外)。要求精确匹配。',
|
||||
'settings.oauth.modal.scopes': '允许的权限范围',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips 和 get_trip_summary 始终可用——无需权限范围。它们帮助 AI 发现所需的行程 ID。',
|
||||
'settings.oauth.modal.selectAll': '全选',
|
||||
'settings.oauth.modal.deselectAll': '取消全选',
|
||||
'settings.oauth.modal.creating': '注册中…',
|
||||
'settings.oauth.modal.create': '注册客户端',
|
||||
'settings.oauth.modal.createdTitle': '客户端已注册',
|
||||
'settings.oauth.modal.createdWarning': '客户端密钥仅显示一次。请立即复制——无法恢复。',
|
||||
'settings.oauth.toast.createError': '注册 OAuth 客户端失败',
|
||||
'settings.oauth.toast.deleted': 'OAuth 客户端已删除',
|
||||
'settings.oauth.toast.deleteError': '删除 OAuth 客户端失败',
|
||||
'settings.oauth.toast.revoked': '会话已撤销',
|
||||
'settings.oauth.toast.revokeError': '撤销会话失败',
|
||||
'settings.oauth.toast.rotateError': '轮换客户端密钥失败',
|
||||
'settings.account': '账户',
|
||||
'settings.about': '关于',
|
||||
'settings.about.reportBug': '报告错误',
|
||||
@@ -364,6 +412,10 @@ const zh: Record<string, string> = {
|
||||
'login.mfaHint': '打开 Google Authenticator、Authy 或其他 TOTP 应用。',
|
||||
'login.mfaBack': '← 返回登录',
|
||||
'login.mfaVerify': '验证',
|
||||
'login.invalidInviteLink': '邀请链接无效或已过期',
|
||||
'login.oidcFailed': 'OIDC 登录失败',
|
||||
'login.usernameRequired': '用户名为必填项',
|
||||
'login.passwordMinLength': '密码至少需要8个字符',
|
||||
'login.oidc.tokenFailed': '认证失败。',
|
||||
'login.oidc.invalidState': '会话无效,请重试。',
|
||||
'login.demoFailed': '演示登录失败',
|
||||
@@ -450,6 +502,17 @@ const zh: Record<string, string> = {
|
||||
'admin.tabs.settings': '设置',
|
||||
'admin.allowRegistration': '允许注册',
|
||||
'admin.allowRegistrationHint': '新用户可以自行注册',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': '要求双因素身份验证(2FA)',
|
||||
'admin.requireMfaHint': '未启用 2FA 的用户必须先完成设置中的配置才能使用应用。',
|
||||
'admin.apiKeys': 'API 密钥',
|
||||
@@ -547,9 +610,10 @@ const zh: Record<string, string> = {
|
||||
'admin.weather.locationHint': '天气基于每天中第一个有坐标的地点。如果当天没有分配地点,则使用地点列表中的任意地点作为参考。',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP 令牌',
|
||||
'admin.mcpTokens.title': 'MCP 令牌',
|
||||
'admin.mcpTokens.subtitle': '管理所有用户的 API 令牌',
|
||||
'admin.tabs.mcpTokens': 'MCP 访问',
|
||||
'admin.mcpTokens.title': 'MCP 访问',
|
||||
'admin.mcpTokens.subtitle': '管理所有用户的 OAuth 会话和 API 令牌',
|
||||
'admin.mcpTokens.sectionTitle': 'API 令牌',
|
||||
'admin.mcpTokens.owner': '所有者',
|
||||
'admin.mcpTokens.tokenName': '令牌名称',
|
||||
'admin.mcpTokens.created': '创建时间',
|
||||
@@ -561,6 +625,17 @@ const zh: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': '令牌已删除',
|
||||
'admin.mcpTokens.deleteError': '删除令牌失败',
|
||||
'admin.mcpTokens.loadError': '加载令牌失败',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth 会话',
|
||||
'admin.oauthSessions.clientName': '客户端',
|
||||
'admin.oauthSessions.owner': '所有者',
|
||||
'admin.oauthSessions.scopes': '权限范围',
|
||||
'admin.oauthSessions.created': '创建时间',
|
||||
'admin.oauthSessions.empty': '暂无活跃的 OAuth 会话',
|
||||
'admin.oauthSessions.revokeTitle': '撤销会话',
|
||||
'admin.oauthSessions.revokeMessage': '此 OAuth 会话将立即被撤销。客户端将失去 MCP 访问权限。',
|
||||
'admin.oauthSessions.revokeSuccess': '会话已撤销',
|
||||
'admin.oauthSessions.revokeError': '撤销会话失败',
|
||||
'admin.oauthSessions.loadError': '加载 OAuth 会话失败',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -656,6 +731,8 @@ const zh: Record<string, string> = {
|
||||
'vacay.companyHolidays': '公司假日',
|
||||
'vacay.companyHolidaysHint': '允许标记公司统一休假日',
|
||||
'vacay.companyHolidaysNoDeduct': '公司假日不计入年假天数。',
|
||||
'vacay.weekStart': '每周开始于',
|
||||
'vacay.weekStartHint': '选择日历周从周一还是周日开始',
|
||||
'vacay.carryOver': '结转',
|
||||
'vacay.carryOverHint': '自动将剩余年假天数结转到下一年',
|
||||
'vacay.sharing': '共享',
|
||||
@@ -870,6 +947,7 @@ const zh: Record<string, string> = {
|
||||
'inspector.files': '文件',
|
||||
'inspector.filesCount': '{count} 个文件',
|
||||
'inspector.removeFromDay': '从当天移除',
|
||||
'inspector.remove': '删除',
|
||||
'inspector.addToDay': '添加到当天',
|
||||
'inspector.confirmedRes': '已确认预订',
|
||||
'inspector.pendingRes': '待确认预订',
|
||||
@@ -1010,6 +1088,7 @@ const zh: Record<string, string> = {
|
||||
'budget.totalBudget': '总预算',
|
||||
'budget.byCategory': '按分类',
|
||||
'budget.editTooltip': '点击编辑',
|
||||
'budget.linkedToReservation': '已关联到预订——请在那里编辑名称',
|
||||
'budget.confirm.deleteCategory': '确定删除分类「{name}」及其 {count} 个条目?',
|
||||
'budget.deleteCategory': '删除分类',
|
||||
'budget.perPerson': '人均',
|
||||
@@ -1019,9 +1098,13 @@ const zh: Record<string, string> = {
|
||||
'budget.settlement': '结算',
|
||||
'budget.settlementInfo': '点击预算项目上的成员头像将其标记为绿色——表示该成员已付款。结算会显示谁欠谁多少。',
|
||||
'budget.netBalances': '净余额',
|
||||
'budget.linkedToReservation': '已链接到预订——在那里编辑名称',
|
||||
|
||||
// Files
|
||||
'files.title': '文件',
|
||||
'files.pageTitle': '文件与文档',
|
||||
'files.subtitle': '{trip} 的 {count} 个文件',
|
||||
'files.downloadPdf': '下载 PDF',
|
||||
'files.count': '{count} 个文件',
|
||||
'files.countSingular': '1 个文件',
|
||||
'files.uploaded': '已上传 {count} 个',
|
||||
@@ -1108,7 +1191,9 @@ const zh: Record<string, string> = {
|
||||
'packing.template': '模板',
|
||||
'packing.templateApplied': '已从模板添加 {count} 个物品',
|
||||
'packing.templateError': '应用模板失败',
|
||||
'packing.assignUser': '分配用户',
|
||||
'packing.saveAsTemplate': '保存为模板',
|
||||
'packing.templateName': '模板名称',
|
||||
'packing.templateSaved': '行李清单已保存为模板',
|
||||
'packing.noMembers': '无成员',
|
||||
'packing.bags': '行李',
|
||||
'packing.noBag': '未分配',
|
||||
@@ -1265,6 +1350,13 @@ const zh: Record<string, string> = {
|
||||
'backup.keep.forever': '永久保留',
|
||||
|
||||
// Photos
|
||||
'photos.title': '照片',
|
||||
'photos.subtitle': '{trip} 的 {count} 张照片',
|
||||
'photos.dropHere': '将照片拖放至此...',
|
||||
'photos.dropHereActive': '将照片拖放至此',
|
||||
'photos.captionForAll': '标题(所有)',
|
||||
'photos.captionPlaceholder': '可选标题...',
|
||||
'photos.addCaption': '添加标题...',
|
||||
'photos.allDays': '所有天',
|
||||
'photos.noPhotos': '暂无照片',
|
||||
'photos.uploadHint': '上传你的旅行照片',
|
||||
@@ -1272,6 +1364,12 @@ const zh: Record<string, string> = {
|
||||
'photos.linkPlace': '关联地点',
|
||||
'photos.noPlace': '无地点',
|
||||
'photos.uploadN': '上传 {n} 张照片',
|
||||
'photos.linkDay': '关联天数',
|
||||
'photos.noDay': '无天数',
|
||||
'photos.dayLabel': '第 {number} 天',
|
||||
'photos.photoSelected': '张照片已选择',
|
||||
'photos.photosSelected': '张照片已选择',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · 最大 10 MB · 最多 30 张照片',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': '恢复备份?',
|
||||
@@ -1298,6 +1396,7 @@ const zh: Record<string, string> = {
|
||||
'planner.routeCalculated': '路线已计算',
|
||||
'planner.routeCalcFailed': '无法计算路线',
|
||||
'planner.routeError': '路线计算错误',
|
||||
'planner.icsExportFailed': 'ICS 导出失败',
|
||||
'planner.routeOptimized': '路线已优化',
|
||||
'planner.reservationUpdated': '预订已更新',
|
||||
'planner.reservationAdded': '预订已添加',
|
||||
@@ -1383,6 +1482,7 @@ const zh: Record<string, string> = {
|
||||
'memories.title': '照片',
|
||||
'memories.notConnected': 'Immich 未连接',
|
||||
'memories.notConnectedHint': '在设置中连接您的 Immich 实例以在此查看旅行照片。',
|
||||
'memories.notConnectedMultipleHint': '请在设置中连接以下任一照片提供商:{provider_names},以便向此行程添加照片。',
|
||||
'memories.noDates': '为旅行添加日期以加载照片。',
|
||||
'memories.noPhotos': '未找到照片',
|
||||
'memories.noPhotosHint': 'Immich 中未找到此旅行日期范围内的照片。',
|
||||
@@ -1393,26 +1493,35 @@ const zh: Record<string, string> = {
|
||||
'memories.reviewTitle': '审查您的照片',
|
||||
'memories.reviewHint': '点击照片以将其从分享中排除。',
|
||||
'memories.shareCount': '分享 {count} 张照片',
|
||||
'memories.immichUrl': 'Immich 服务器地址',
|
||||
'memories.immichApiKey': 'API 密钥',
|
||||
'memories.providerUrl': '服务器 URL',
|
||||
'memories.providerApiKey': 'API 密钥',
|
||||
'memories.providerUsername': '用户名',
|
||||
'memories.providerPassword': '密码',
|
||||
'memories.providerOTP': 'MFA 验证码(如已启用)',
|
||||
'memories.skipSSLVerification': '跳过 SSL 证书验证',
|
||||
'memories.providerUrlHintSynology': '在 URL 中包含照片应用路径,例如 https://nas:5001/photo',
|
||||
'memories.testConnection': '测试连接',
|
||||
'memories.testFirst': '请先测试连接',
|
||||
'memories.connected': '已连接',
|
||||
'memories.disconnected': '未连接',
|
||||
'memories.connectionSuccess': '已连接到 Immich',
|
||||
'memories.connectionError': '无法连接到 Immich',
|
||||
'memories.saved': 'Immich 设置已保存',
|
||||
'memories.saved': '{provider_name} 设置已保存',
|
||||
'memories.providerDisconnectedBanner': '您与 {provider_name} 的连接已断开。请在设置中重新连接以查看照片。',
|
||||
'memories.saveError': '无法保存 {provider_name} 设置',
|
||||
'memories.oldest': '最早优先',
|
||||
'memories.newest': '最新优先',
|
||||
'memories.allLocations': '所有地点',
|
||||
'memories.addPhotos': '添加照片',
|
||||
'memories.linkAlbum': '关联相册',
|
||||
'memories.selectAlbum': '选择 Immich 相册',
|
||||
'memories.selectAlbumMultiple': '选择相册',
|
||||
'memories.noAlbums': '未找到相册',
|
||||
'memories.syncAlbum': '同步相册',
|
||||
'memories.unlinkAlbum': '取消关联',
|
||||
'memories.photos': '张照片',
|
||||
'memories.selectPhotos': '从 Immich 选择照片',
|
||||
'memories.selectPhotosMultiple': '选择照片',
|
||||
'memories.selectHint': '点击照片以选择。',
|
||||
'memories.selected': '已选择',
|
||||
'memories.addSelected': '添加 {count} 张照片',
|
||||
@@ -1570,6 +1679,8 @@ const zh: Record<string, string> = {
|
||||
'notifications.markUnread': '标为未读',
|
||||
'notifications.delete': '删除',
|
||||
'notifications.system': '系统',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos 已断开连接',
|
||||
'notifications.synologySessionCleared.text': '您的服务器或账户已更改 — 请前往设置重新测试您的连接。',
|
||||
'memories.error.loadAlbums': '加载相册失败',
|
||||
'memories.error.linkAlbum': '关联相册失败',
|
||||
'memories.error.unlinkAlbum': '取消关联相册失败',
|
||||
@@ -1692,6 +1803,309 @@ const zh: Record<string, string> = {
|
||||
'notif.generic.text': '您有一条新通知',
|
||||
'notif.dev.unknown_event.title': '[DEV] 未知事件',
|
||||
'notif.dev.unknown_event.text': '事件类型 "{event}" 未在 EVENT_NOTIFICATION_CONFIG 中注册',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': '刚刚',
|
||||
'common.hoursAgo': '{count}小时前',
|
||||
'common.daysAgo': '{count}天前',
|
||||
'budget.linkedToReservation': '已关联预订 — 请在预订中编辑名称',
|
||||
'packing.saveAsTemplate': '保存为模板',
|
||||
'packing.templateName': '模板名称',
|
||||
'packing.templateSaved': '打包清单已保存为模板',
|
||||
'memories.notConnectedMultipleHint': '在设置中连接以下任一照片服务:{provider_names},以便为此旅行添加照片。',
|
||||
'memories.providerUrl': '服务器地址',
|
||||
'memories.providerApiKey': 'API 密钥',
|
||||
'memories.providerUsername': '用户名',
|
||||
'memories.providerPassword': '密码',
|
||||
'memories.saveError': '无法保存 {provider_name} 设置',
|
||||
'memories.saveRouteNotConfigured': '此提供商未配置保存路由',
|
||||
'memories.testRouteNotConfigured': '此提供商未配置测试路由',
|
||||
'memories.fillRequiredFields': '请填写所有必填字段',
|
||||
'memories.selectAlbumMultiple': '选择相册',
|
||||
'memories.selectPhotosMultiple': '选择照片',
|
||||
'journey.title': '旅程',
|
||||
'journey.subtitle': '实时记录你的旅行',
|
||||
'journey.new': '新建旅程',
|
||||
'journey.create': '创建',
|
||||
'journey.titlePlaceholder': '你要去哪里?',
|
||||
'journey.empty': '还没有旅程',
|
||||
'journey.emptyHint': '开始记录你的下一次旅行',
|
||||
'journey.deleted': '旅程已删除',
|
||||
'journey.createError': '无法创建旅程',
|
||||
'journey.deleteError': '无法删除旅程',
|
||||
'journey.deleteConfirmTitle': '删除',
|
||||
'journey.deleteConfirmMessage': '删除"{title}"?此操作无法撤销。',
|
||||
'journey.deleteConfirmGeneric': '确定要删除吗?',
|
||||
'journey.notFound': '未找到旅程',
|
||||
'journey.photos': '照片',
|
||||
'journey.timelineEmpty': '还没有行程',
|
||||
'journey.timelineEmptyHint': '添加一个签到或写一篇日志开始记录',
|
||||
'journey.status.draft': '草稿',
|
||||
'journey.status.active': '进行中',
|
||||
'journey.status.completed': '已完成',
|
||||
'journey.status.upcoming': '即将开始',
|
||||
'journey.checkin.add': '签到',
|
||||
'journey.checkin.namePlaceholder': '地点名称',
|
||||
'journey.checkin.notesPlaceholder': '备注(可选)',
|
||||
'journey.checkin.save': '保存',
|
||||
'journey.checkin.error': '无法保存签到',
|
||||
'journey.entry.add': '日志',
|
||||
'journey.entry.edit': '编辑条目',
|
||||
'journey.entry.titlePlaceholder': '标题(可选)',
|
||||
'journey.entry.bodyPlaceholder': '今天发生了什么?',
|
||||
'journey.entry.save': '保存',
|
||||
'journey.entry.error': '无法保存条目',
|
||||
'journey.photo.add': '照片',
|
||||
'journey.photo.uploadError': '上传失败',
|
||||
'journey.share.share': '分享',
|
||||
'journey.share.public': '公开',
|
||||
'journey.share.linkCopied': '公开链接已复制',
|
||||
'journey.share.disabled': '已关闭公开分享',
|
||||
'journey.editor.titlePlaceholder': '给这个瞬间起个名字...',
|
||||
'journey.editor.bodyPlaceholder': '讲述这一天的故事...',
|
||||
'journey.editor.placePlaceholder': '地点(可选)',
|
||||
'journey.editor.tagsPlaceholder': '标签:隐藏宝藏、最佳美食、值得再去...',
|
||||
'journey.visibility.private': '私密',
|
||||
'journey.visibility.shared': '共享',
|
||||
'journey.visibility.public': '公开',
|
||||
'journey.emptyState.title': '你的故事从这里开始',
|
||||
'journey.emptyState.subtitle': '在某个地方签到或写下你的第一篇日志',
|
||||
'journey.frontpage.subtitle': '将旅行变成永远不会忘记的故事',
|
||||
'journey.frontpage.createJourney': '创建旅程',
|
||||
'journey.frontpage.activeJourney': '进行中的旅程',
|
||||
'journey.frontpage.allJourneys': '所有旅程',
|
||||
'journey.frontpage.journeys': '个旅程',
|
||||
'journey.frontpage.createNew': '创建新旅程',
|
||||
'journey.frontpage.createNewSub': '选择旅行、写故事、分享你的冒险',
|
||||
'journey.frontpage.live': '实时',
|
||||
'journey.frontpage.synced': '已同步',
|
||||
'journey.frontpage.continueWriting': '继续写作',
|
||||
'journey.frontpage.updated': '更新于 {time}',
|
||||
'journey.frontpage.suggestionLabel': '旅行刚结束',
|
||||
'journey.frontpage.suggestionText': '将 <strong>{title}</strong> 变成一段旅程',
|
||||
'journey.frontpage.dismiss': '忽略',
|
||||
'journey.frontpage.journeyName': '旅程名称',
|
||||
'journey.frontpage.namePlaceholder': '例如 东南亚 2026',
|
||||
'journey.frontpage.selectTrips': '选择旅行',
|
||||
'journey.frontpage.tripsSelected': '个旅行已选择',
|
||||
'journey.frontpage.trips': '个旅行',
|
||||
'journey.frontpage.placesImported': '个地点将被导入',
|
||||
'journey.frontpage.places': '个地点',
|
||||
'journey.detail.backToJourney': '返回旅程',
|
||||
'journey.detail.syncedWithTrips': '已与旅行同步',
|
||||
'journey.detail.addEntry': '添加条目',
|
||||
'journey.detail.newEntry': '新建条目',
|
||||
'journey.detail.editEntry': '编辑条目',
|
||||
'journey.detail.noEntries': '还没有条目',
|
||||
'journey.detail.noEntriesHint': '添加一个旅行以生成骨架条目',
|
||||
'journey.detail.noPhotos': '还没有照片',
|
||||
'journey.detail.noPhotosHint': '上传照片到条目或浏览你的 Immich/Synology 相册',
|
||||
'journey.detail.journeyStats': '旅程统计',
|
||||
'journey.detail.syncedTrips': '已同步的旅行',
|
||||
'journey.detail.noTripsLinked': '尚未关联旅行',
|
||||
'journey.detail.contributors': '贡献者',
|
||||
'journey.detail.readMore': '阅读更多',
|
||||
'journey.detail.prosCons': '优缺点',
|
||||
'journey.stats.days': '天',
|
||||
'journey.stats.cities': '城市',
|
||||
'journey.stats.entries': '条目',
|
||||
'journey.stats.photos': '照片',
|
||||
'journey.stats.places': '地点',
|
||||
'journey.verdict.lovedIt': '非常喜欢',
|
||||
'journey.verdict.couldBeBetter': '有待改进',
|
||||
'journey.synced.places': '个地点',
|
||||
'journey.synced.synced': '已同步',
|
||||
'journey.editor.uploadPhotos': '上传照片',
|
||||
'journey.editor.fromGallery': '从相册选择',
|
||||
'journey.editor.allPhotosAdded': '所有照片已添加',
|
||||
'journey.editor.writeStory': '写下你的故事...',
|
||||
'journey.editor.prosCons': '优缺点',
|
||||
'journey.editor.pros': '优点',
|
||||
'journey.editor.cons': '缺点',
|
||||
'journey.editor.proPlaceholder': '好的方面...',
|
||||
'journey.editor.conPlaceholder': '不好的方面...',
|
||||
'journey.editor.addAnother': '再添加一个',
|
||||
'journey.editor.date': '日期',
|
||||
'journey.editor.location': '地点',
|
||||
'journey.editor.searchLocation': '搜索地点...',
|
||||
'journey.editor.mood': '心情',
|
||||
'journey.editor.weather': '天气',
|
||||
'journey.editor.photoFirst': '第1张',
|
||||
'journey.editor.makeFirst': '设为第1张',
|
||||
'journey.mood.amazing': '太棒了',
|
||||
'journey.mood.good': '不错',
|
||||
'journey.mood.neutral': '一般',
|
||||
'journey.mood.rough': '糟糕',
|
||||
'journey.weather.sunny': '晴天',
|
||||
'journey.weather.partly': '多云',
|
||||
'journey.weather.cloudy': '阴天',
|
||||
'journey.weather.rainy': '雨天',
|
||||
'journey.weather.stormy': '暴风雨',
|
||||
'journey.weather.cold': '雪天',
|
||||
'journey.trips.linkTrip': '关联旅行',
|
||||
'journey.trips.searchTrip': '搜索旅行',
|
||||
'journey.trips.searchPlaceholder': '旅行名称或目的地...',
|
||||
'journey.trips.noTripsAvailable': '没有可用的旅行',
|
||||
'journey.trips.link': '关联',
|
||||
'journey.trips.tripLinked': '旅行已关联',
|
||||
'journey.trips.linkFailed': '关联旅行失败',
|
||||
'journey.trips.addTrip': '添加旅行',
|
||||
'journey.trips.unlinkTrip': '取消关联旅行',
|
||||
'journey.trips.unlinkMessage': '取消关联"{title}"?此旅行中所有已同步的条目和照片将被永久删除。此操作无法撤销。',
|
||||
'journey.trips.unlink': '取消关联',
|
||||
'journey.trips.tripUnlinked': '旅行已取消关联',
|
||||
'journey.trips.unlinkFailed': '取消关联失败',
|
||||
'journey.trips.noTripsLinkedSettings': '未关联旅行',
|
||||
'journey.contributors.invite': '邀请贡献者',
|
||||
'journey.contributors.searchUser': '搜索用户',
|
||||
'journey.contributors.searchPlaceholder': '用户名或邮箱...',
|
||||
'journey.contributors.noUsers': '未找到用户',
|
||||
'journey.contributors.role': '角色',
|
||||
'journey.contributors.added': '贡献者已添加',
|
||||
'journey.contributors.addFailed': '添加贡献者失败',
|
||||
'journey.share.publicShare': '公开分享',
|
||||
'journey.share.createLink': '创建分享链接',
|
||||
'journey.share.linkCreated': '分享链接已创建',
|
||||
'journey.share.createFailed': '创建链接失败',
|
||||
'journey.share.copy': '复制',
|
||||
'journey.share.copied': '已复制!',
|
||||
'journey.share.timeline': '时间线',
|
||||
'journey.share.gallery': '图库',
|
||||
'journey.share.map': '地图',
|
||||
'journey.share.removeLink': '移除分享链接',
|
||||
'journey.share.linkDeleted': '分享链接已删除',
|
||||
'journey.share.deleteFailed': '删除失败',
|
||||
'journey.share.updateFailed': '更新失败',
|
||||
'journey.settings.title': '旅程设置',
|
||||
'journey.settings.coverImage': '封面图片',
|
||||
'journey.settings.changeCover': '更换封面',
|
||||
'journey.settings.addCover': '添加封面图片',
|
||||
'journey.settings.name': '名称',
|
||||
'journey.settings.subtitle': '副标题',
|
||||
'journey.settings.subtitlePlaceholder': '例如 泰国、越南和柬埔寨',
|
||||
'journey.settings.delete': '删除',
|
||||
'journey.settings.deleteJourney': '删除旅程',
|
||||
'journey.settings.deleteMessage': '删除"{title}"?所有条目和照片将丢失。',
|
||||
'journey.settings.saved': '设置已保存',
|
||||
'journey.settings.saveFailed': '保存失败',
|
||||
'journey.settings.coverUpdated': '封面已更新',
|
||||
'journey.settings.coverFailed': '上传失败',
|
||||
'journey.settings.failedToDelete': '删除失败',
|
||||
'journey.entries.deleteTitle': '删除条目',
|
||||
'journey.photosUploaded': '{count} 张照片已上传',
|
||||
'journey.photosAdded': '{count} 张照片已添加',
|
||||
'journey.public.notFound': '未找到',
|
||||
'journey.public.notFoundMessage': '此旅程不存在或链接已过期。',
|
||||
'journey.public.readOnly': '只读 · 公开旅程',
|
||||
'journey.public.tagline': '旅行资源与探索工具包',
|
||||
'journey.public.sharedVia': '分享自',
|
||||
'journey.public.madeWith': '由',
|
||||
'journey.pdf.journeyBook': '旅程手册',
|
||||
'journey.pdf.madeWith': '由 TREK 制作',
|
||||
'journey.pdf.day': '第',
|
||||
'journey.pdf.theEnd': '终',
|
||||
'journey.pdf.saveAsPdf': '保存为 PDF',
|
||||
'journey.pdf.pages': '页',
|
||||
'dashboard.greeting.morning': '早上好,',
|
||||
'dashboard.greeting.afternoon': '下午好,',
|
||||
'dashboard.greeting.evening': '晚上好,',
|
||||
'dashboard.mobile.liveNow': '进行中',
|
||||
'dashboard.mobile.tripProgress': '旅行进度',
|
||||
'dashboard.mobile.daysLeft': '还剩 {count} 天',
|
||||
'dashboard.mobile.places': '地点',
|
||||
'dashboard.mobile.buddies': '旅伴',
|
||||
'dashboard.mobile.newTrip': '新建旅行',
|
||||
'dashboard.mobile.currency': '货币',
|
||||
'dashboard.mobile.timezone': '时区',
|
||||
'dashboard.mobile.upcomingTrips': '即将到来的旅行',
|
||||
'dashboard.mobile.yourTrips': '我的旅行',
|
||||
'dashboard.mobile.trips': '个旅行',
|
||||
'dashboard.mobile.starts': '出发',
|
||||
'dashboard.mobile.duration': '时长',
|
||||
'dashboard.mobile.day': '天',
|
||||
'dashboard.mobile.days': '天',
|
||||
'dashboard.mobile.ongoing': '进行中',
|
||||
'dashboard.mobile.startsToday': '今天出发',
|
||||
'dashboard.mobile.tomorrow': '明天',
|
||||
'dashboard.mobile.inDays': '{count} 天后',
|
||||
'dashboard.mobile.inMonths': '{count} 个月后',
|
||||
'dashboard.mobile.completed': '已完成',
|
||||
'dashboard.mobile.currencyConverter': '汇率转换',
|
||||
'nav.profile': '个人资料',
|
||||
'nav.bottomSettings': '设置',
|
||||
'nav.bottomAdmin': '管理设置',
|
||||
'nav.bottomLogout': '退出登录',
|
||||
'nav.bottomAdminBadge': '管理员',
|
||||
'dayplan.mobile.addPlace': '添加地点',
|
||||
'dayplan.mobile.searchPlaces': '搜索地点...',
|
||||
'dayplan.mobile.allAssigned': '所有地点已分配',
|
||||
'dayplan.mobile.noMatch': '无匹配',
|
||||
'dayplan.mobile.createNew': '创建新地点',
|
||||
'admin.addons.catalog.journey.name': '旅程',
|
||||
'admin.addons.catalog.journey.description': '旅行追踪与旅行日志,包含签到、照片和每日故事',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': '行程',
|
||||
'oauth.scope.group.places': '地点',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': '行李',
|
||||
'oauth.scope.group.todos': '待办事项',
|
||||
'oauth.scope.group.budget': '预算',
|
||||
'oauth.scope.group.reservations': '预订',
|
||||
'oauth.scope.group.collab': '协作',
|
||||
'oauth.scope.group.notifications': '通知',
|
||||
'oauth.scope.group.vacay': '假期',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': '天气',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': '查看行程和行程计划',
|
||||
'oauth.scope.trips:read.description': '读取行程、天数、每日笔记和成员',
|
||||
'oauth.scope.trips:write.label': '编辑行程和行程计划',
|
||||
'oauth.scope.trips:write.description': '创建和更新行程、天数、笔记并管理成员',
|
||||
'oauth.scope.trips:delete.label': '删除行程',
|
||||
'oauth.scope.trips:delete.description': '永久删除整个行程——此操作不可撤销',
|
||||
'oauth.scope.trips:share.label': '管理分享链接',
|
||||
'oauth.scope.trips:share.description': '创建、更新和撤销行程的公开分享链接',
|
||||
'oauth.scope.places:read.label': '查看地点和地图数据',
|
||||
'oauth.scope.places:read.description': '读取地点、每日分配、标签和分类',
|
||||
'oauth.scope.places:write.label': '管理地点',
|
||||
'oauth.scope.places:write.description': '创建、更新和删除地点、分配和标签',
|
||||
'oauth.scope.atlas:read.label': '查看 Atlas',
|
||||
'oauth.scope.atlas:read.description': '读取已访问国家、地区和心愿清单',
|
||||
'oauth.scope.atlas:write.label': '管理 Atlas',
|
||||
'oauth.scope.atlas:write.description': '标记已访问国家和地区,管理心愿清单',
|
||||
'oauth.scope.packing:read.label': '查看行李清单',
|
||||
'oauth.scope.packing:read.description': '读取行李物品、包袋和分类负责人',
|
||||
'oauth.scope.packing:write.label': '管理行李清单',
|
||||
'oauth.scope.packing:write.description': '添加、更新、删除、勾选和重新排列行李物品和包袋',
|
||||
'oauth.scope.todos:read.label': '查看待办清单',
|
||||
'oauth.scope.todos:read.description': '读取行程待办事项和分类负责人',
|
||||
'oauth.scope.todos:write.label': '管理待办清单',
|
||||
'oauth.scope.todos:write.description': '创建、更新、勾选、删除和重新排列待办事项',
|
||||
'oauth.scope.budget:read.label': '查看预算',
|
||||
'oauth.scope.budget:read.description': '读取预算条目和费用明细',
|
||||
'oauth.scope.budget:write.label': '管理预算',
|
||||
'oauth.scope.budget:write.description': '创建、更新和删除预算条目',
|
||||
'oauth.scope.reservations:read.label': '查看预订',
|
||||
'oauth.scope.reservations:read.description': '读取预订和住宿详情',
|
||||
'oauth.scope.reservations:write.label': '管理预订',
|
||||
'oauth.scope.reservations:write.description': '创建、更新、删除和重新排列预订',
|
||||
'oauth.scope.collab:read.label': '查看协作',
|
||||
'oauth.scope.collab:read.description': '读取协作笔记、投票和消息',
|
||||
'oauth.scope.collab:write.label': '管理协作',
|
||||
'oauth.scope.collab:write.description': '创建、更新和删除协作笔记、投票和消息',
|
||||
'oauth.scope.notifications:read.label': '查看通知',
|
||||
'oauth.scope.notifications:read.description': '读取应用内通知和未读数量',
|
||||
'oauth.scope.notifications:write.label': '管理通知',
|
||||
'oauth.scope.notifications:write.description': '将通知标记为已读并回复',
|
||||
'oauth.scope.vacay:read.label': '查看假期计划',
|
||||
'oauth.scope.vacay:read.description': '读取假期计划数据、条目和统计',
|
||||
'oauth.scope.vacay:write.label': '管理假期计划',
|
||||
'oauth.scope.vacay:write.description': '创建和管理假期条目、节假日和团队计划',
|
||||
'oauth.scope.geo:read.label': '地图和地理编码',
|
||||
'oauth.scope.geo:read.description': '搜索位置、解析地图 URL 和反向地理编码坐标',
|
||||
'oauth.scope.weather:read.label': '天气预报',
|
||||
'oauth.scope.weather:read.description': '获取行程地点和日期的天气预报',
|
||||
}
|
||||
|
||||
export default zh
|
||||
|
||||
@@ -8,6 +8,8 @@ const zhTw: Record<string, string> = {
|
||||
'common.loading': '載入中...',
|
||||
'common.import': '匯入',
|
||||
'common.error': '錯誤',
|
||||
'common.unknownError': '未知錯誤',
|
||||
'common.tooManyAttempts': '嘗試次數過多,請稍後再試。',
|
||||
'common.back': '返回',
|
||||
'common.all': '全部',
|
||||
'common.close': '關閉',
|
||||
@@ -27,6 +29,12 @@ const zhTw: Record<string, string> = {
|
||||
'common.password': '密碼',
|
||||
'common.saving': '儲存中...',
|
||||
'common.saved': '已儲存',
|
||||
'common.expand': '展開',
|
||||
'common.collapse': '折疊',
|
||||
'trips.memberRemoved': '{username} 已移除',
|
||||
'trips.memberRemoveError': '移除失敗',
|
||||
'trips.memberAdded': '{username} 已新增',
|
||||
'trips.memberAddError': '新增失敗',
|
||||
'trips.reminder': '提醒',
|
||||
'trips.reminderNone': '無',
|
||||
'trips.reminderDay': '天',
|
||||
@@ -113,6 +121,8 @@ const zhTw: Record<string, string> = {
|
||||
'dashboard.tripDescriptionPlaceholder': '這次旅行是關於什麼的?',
|
||||
'dashboard.startDate': '開始日期',
|
||||
'dashboard.endDate': '結束日期',
|
||||
'dashboard.dayCount': '天數',
|
||||
'dashboard.dayCountHint': '未設定旅行日期時,要規劃的天數。',
|
||||
'dashboard.noDateHint': '未設定日期——將預設建立 7 天。你可以隨時修改。',
|
||||
'dashboard.coverImage': '封面圖片',
|
||||
'dashboard.addCoverImage': '新增封面圖片',
|
||||
@@ -123,10 +133,18 @@ const zhTw: Record<string, string> = {
|
||||
'dashboard.coverRemoveError': '移除失敗',
|
||||
'dashboard.titleRequired': '標題為必填項',
|
||||
'dashboard.endDateError': '結束日期必須晚於開始日期',
|
||||
'dashboard.dayCount': '天數',
|
||||
'dashboard.dayCountHint': '未設定旅行日期時的規劃天數。',
|
||||
|
||||
// Settings
|
||||
'settings.title': '設定',
|
||||
'settings.subtitle': '配置你的個人設定',
|
||||
'settings.tabs.display': '顯示',
|
||||
'settings.tabs.map': '地圖',
|
||||
'settings.tabs.notifications': '通知',
|
||||
'settings.tabs.integrations': '整合',
|
||||
'settings.tabs.account': '帳戶',
|
||||
'settings.tabs.about': '關於',
|
||||
'settings.map': '地圖',
|
||||
'settings.mapTemplate': '地圖模板',
|
||||
'settings.mapTemplatePlaceholder.select': '選擇模板...',
|
||||
@@ -163,6 +181,19 @@ const zhTw: Record<string, string> = {
|
||||
'settings.notifyCollabMessage': '聊天訊息 (Collab)',
|
||||
'settings.notifyPackingTagged': '行李清單:分配',
|
||||
'settings.notifyWebhook': 'Webhook 通知',
|
||||
'settings.notifyVersionAvailable': '有新版本可用',
|
||||
'settings.notificationPreferences.email': '電子郵件',
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.inapp': '應用程式內',
|
||||
'settings.notificationPreferences.noChannels': '未配置通知渠道。請聯絡管理員設定電子郵件或 Webhook 通知。',
|
||||
'settings.webhookUrl.label': 'Webhook URL',
|
||||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||||
'settings.webhookUrl.hint': '輸入您的 Discord、Slack 或自訂 Webhook URL 以接收通知。',
|
||||
'settings.webhookUrl.save': '儲存',
|
||||
'settings.webhookUrl.saved': 'Webhook URL 已儲存',
|
||||
'settings.webhookUrl.test': '測試',
|
||||
'settings.webhookUrl.testSuccess': '測試 Webhook 傳送成功',
|
||||
'settings.webhookUrl.testFailed': '測試 Webhook 傳送失敗',
|
||||
'settings.notificationsDisabled': '通知尚未配置。請聯絡管理員啟用電子郵件或 Webhook 通知。',
|
||||
'settings.notificationsActive': '活躍頻道',
|
||||
'settings.notificationsManagedByAdmin': '通知事件由管理員配置。',
|
||||
@@ -171,18 +202,26 @@ const zhTw: Record<string, string> = {
|
||||
'admin.notifications.none': '已停用',
|
||||
'admin.notifications.email': '電子郵件 (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': '通知事件',
|
||||
'admin.notifications.eventsHint': '選擇哪些事件為所有使用者觸發通知。',
|
||||
'admin.notifications.configureFirst': '請先在下方配置 SMTP 或 Webhook,然後啟用事件。',
|
||||
'admin.notifications.save': '儲存通知設定',
|
||||
'admin.notifications.saved': '通知設定已儲存',
|
||||
'admin.notifications.testWebhook': '傳送測試 Webhook',
|
||||
'admin.notifications.testWebhookSuccess': '測試 Webhook 傳送成功',
|
||||
'admin.notifications.testWebhookFailed': '測試 Webhook 傳送失敗',
|
||||
'admin.notifications.emailPanel.title': '電子郵件 (SMTP)',
|
||||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||||
'admin.notifications.inappPanel.title': '應用程式內通知',
|
||||
'admin.notifications.inappPanel.hint': '應用程式內通知始終啟用,無法全域性停用。',
|
||||
'admin.notifications.adminWebhookPanel.title': '管理員 Webhook',
|
||||
'admin.notifications.adminWebhookPanel.hint': '此 Webhook 專用於管理員通知(例如版本提醒)。它與每位使用者的 Webhook 分開,設定後始終會觸發。',
|
||||
'admin.notifications.adminWebhookPanel.saved': '管理員 Webhook URL 已儲存',
|
||||
'admin.notifications.adminWebhookPanel.testSuccess': '測試 Webhook 傳送成功',
|
||||
'admin.notifications.adminWebhookPanel.testFailed': '測試 Webhook 傳送失敗',
|
||||
'admin.notifications.adminWebhookPanel.alwaysOnHint': '配置 URL 後,管理員 Webhook 始終觸發',
|
||||
'admin.notifications.adminNotificationsHint': '配置哪些渠道傳遞僅管理員通知(例如版本提醒)。',
|
||||
'admin.smtp.title': '郵件與通知',
|
||||
'admin.smtp.hint': '用於傳送電子郵件通知的 SMTP 配置。',
|
||||
'admin.smtp.testButton': '傳送測試郵件',
|
||||
'admin.webhook.hint': '向外部 Webhook 傳送通知(Discord、Slack 等)。',
|
||||
'admin.webhook.hint': '允許使用者配置自己的 Webhook URL 以接收通知(Discord、Slack 等)。',
|
||||
'admin.smtp.testSuccess': '測試郵件傳送成功',
|
||||
'admin.smtp.testFailed': '測試郵件傳送失敗',
|
||||
'dayplan.icsTooltip': '匯出日曆 (ICS)',
|
||||
@@ -220,6 +259,7 @@ const zhTw: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'MCP 端點',
|
||||
'settings.mcp.clientConfig': '客戶端配置',
|
||||
'settings.mcp.clientConfigHint': '將 <your_token> 替換為下方列表中的 API 令牌。npx 的路徑可能需要根據您的系統進行調整(例如 Windows 上為 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||||
'settings.mcp.clientConfigHintOAuth': '將 <your_client_id> 和 <your_client_secret> 替換為上方建立的 OAuth 2.1 客戶端所顯示的憑據。首次連線時,mcp-remote 將開啟瀏覽器完成授權。npx 的路徑可能需要根據您的系統進行調整(例如 Windows 上為 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||||
'settings.mcp.copy': '複製',
|
||||
'settings.mcp.copied': '已複製!',
|
||||
'settings.mcp.apiTokens': 'API 令牌',
|
||||
@@ -241,8 +281,58 @@ const zhTw: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': '建立令牌失敗',
|
||||
'settings.mcp.toast.deleted': '令牌已刪除',
|
||||
'settings.mcp.toast.deleteError': '刪除令牌失敗',
|
||||
'settings.mcp.apiTokensDeprecated': 'API 金鑰已棄用,將於未來版本中移除。請改用 OAuth 2.1 客戶端。',
|
||||
'settings.oauth.clients': 'OAuth 2.1 客戶端',
|
||||
'settings.oauth.clientsHint': '註冊 OAuth 2.1 客戶端,讓第三方 MCP 應用程式(Claude Web、Cursor 等)無需靜態金鑰即可連線。',
|
||||
'settings.oauth.createClient': '新增客戶端',
|
||||
'settings.oauth.noClients': '尚無已註冊的 OAuth 客戶端。',
|
||||
'settings.oauth.clientId': '客戶端 ID',
|
||||
'settings.oauth.clientSecret': '客戶端密鑰',
|
||||
'settings.oauth.deleteClient': '刪除客戶端',
|
||||
'settings.oauth.deleteClientMessage': '此客戶端及所有活躍工作階段將被永久刪除。任何使用此客戶端的應用程式將立即失去存取權限。',
|
||||
'settings.oauth.rotateSecret': '輪換密鑰',
|
||||
'settings.oauth.rotateSecretMessage': '將產生新的客戶端密鑰,所有現有工作階段將立即失效。請在關閉此對話框前更新您的應用程式。',
|
||||
'settings.oauth.rotateSecretConfirm': '輪換',
|
||||
'settings.oauth.rotateSecretConfirming': '輪換中…',
|
||||
'settings.oauth.rotateSecretDoneTitle': '已產生新密鑰',
|
||||
'settings.oauth.rotateSecretDoneWarning': '此密鑰僅顯示一次。請立即複製並更新您的應用程式——所有先前的工作階段已失效。',
|
||||
'settings.oauth.activeSessions': '活躍的 OAuth 工作階段',
|
||||
'settings.oauth.sessionScopes': '授權範圍',
|
||||
'settings.oauth.sessionExpires': '到期時間',
|
||||
'settings.oauth.revoke': '撤銷',
|
||||
'settings.oauth.revokeSession': '撤銷工作階段',
|
||||
'settings.oauth.revokeSessionMessage': '這將立即撤銷此 OAuth 工作階段的存取權限。',
|
||||
'settings.oauth.modal.createTitle': '註冊 OAuth 客戶端',
|
||||
'settings.oauth.modal.presets': '快速預設',
|
||||
'settings.oauth.modal.clientName': '應用程式名稱',
|
||||
'settings.oauth.modal.clientNamePlaceholder': '例如 Claude Web、我的 MCP 應用程式',
|
||||
'settings.oauth.modal.redirectUris': '重新導向 URI',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': '每行一個 URI。需要 HTTPS(localhost 除外)。需要完全符合。',
|
||||
'settings.oauth.modal.scopes': '允許的授權範圍',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips 和 get_trip_summary 始終可用——不需要授權範圍。它們可幫助 AI 找到所需的行程 ID。',
|
||||
'settings.oauth.modal.selectAll': '全選',
|
||||
'settings.oauth.modal.deselectAll': '取消全選',
|
||||
'settings.oauth.modal.creating': '註冊中…',
|
||||
'settings.oauth.modal.create': '註冊客戶端',
|
||||
'settings.oauth.modal.createdTitle': '客戶端已註冊',
|
||||
'settings.oauth.modal.createdWarning': '客戶端密鑰僅顯示一次。請立即複製——無法恢復。',
|
||||
'settings.oauth.toast.createError': '註冊 OAuth 客戶端失敗',
|
||||
'settings.oauth.toast.deleted': 'OAuth 客戶端已刪除',
|
||||
'settings.oauth.toast.deleteError': '刪除 OAuth 客戶端失敗',
|
||||
'settings.oauth.toast.revoked': '工作階段已撤銷',
|
||||
'settings.oauth.toast.revokeError': '撤銷工作階段失敗',
|
||||
'settings.oauth.toast.rotateError': '輪換客戶端密鑰失敗',
|
||||
'settings.account': '賬戶',
|
||||
'settings.about': '關於',
|
||||
'settings.about.reportBug': '回報錯誤',
|
||||
'settings.about.reportBugHint': '發現問題?告訴我們',
|
||||
'settings.about.featureRequest': '功能建議',
|
||||
'settings.about.featureRequestHint': '建議新功能',
|
||||
'settings.about.wikiHint': '文件與指南',
|
||||
'settings.about.description': 'TREK 是一款自架旅遊規劃器,幫助您從最初構想到最後回憶,整理每次旅行。日程規劃、預算、行李清單、照片及更多功能——全部集中在您自己的伺服器上。',
|
||||
'settings.about.madeWith': '以',
|
||||
'settings.about.madeBy': '由 Maurice 及不斷成長的開源社群製作。',
|
||||
'settings.username': '使用者名稱',
|
||||
'settings.email': '郵箱',
|
||||
'settings.role': '角色',
|
||||
@@ -348,6 +438,10 @@ const zhTw: Record<string, string> = {
|
||||
'login.mfaHint': '開啟 Google Authenticator、Authy 或其他 TOTP 應用。',
|
||||
'login.mfaBack': '← 返回登入',
|
||||
'login.mfaVerify': '驗證',
|
||||
'login.invalidInviteLink': '邀請連結無效或已過期',
|
||||
'login.oidcFailed': 'OIDC 登入失敗',
|
||||
'login.usernameRequired': '使用者名稱為必填',
|
||||
'login.passwordMinLength': '密碼至少需要8個字元',
|
||||
'login.oidc.tokenFailed': '認證失敗。',
|
||||
'login.oidc.invalidState': '會話無效,請重試。',
|
||||
'login.demoFailed': '演示登入失敗',
|
||||
@@ -385,6 +479,7 @@ const zhTw: Record<string, string> = {
|
||||
'admin.tabs.categories': '分類',
|
||||
'admin.tabs.backup': '備份',
|
||||
'admin.tabs.audit': '審計日誌',
|
||||
'admin.tabs.notifications': '通知',
|
||||
'admin.stats.users': '使用者',
|
||||
'admin.stats.trips': '旅行',
|
||||
'admin.stats.places': '地點',
|
||||
@@ -434,6 +529,17 @@ const zhTw: Record<string, string> = {
|
||||
'admin.tabs.settings': '設定',
|
||||
'admin.allowRegistration': '允許註冊',
|
||||
'admin.allowRegistrationHint': '新使用者可以自行註冊',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': '要求雙因素身份驗證(2FA)',
|
||||
'admin.requireMfaHint': '未啟用 2FA 的使用者必須先完成設定中的配置才能使用應用。',
|
||||
'admin.apiKeys': 'API 金鑰',
|
||||
@@ -531,9 +637,10 @@ const zhTw: Record<string, string> = {
|
||||
'admin.weather.locationHint': '天氣基於每天中第一個有座標的地點。如果當天沒有分配地點,則使用地點列表中的任意地點作為參考。',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP 令牌',
|
||||
'admin.mcpTokens.title': 'MCP 令牌',
|
||||
'admin.mcpTokens.subtitle': '管理所有使用者的 API 令牌',
|
||||
'admin.tabs.mcpTokens': 'MCP 存取',
|
||||
'admin.mcpTokens.title': 'MCP 存取',
|
||||
'admin.mcpTokens.subtitle': '管理所有使用者的 OAuth 工作階段和 API 令牌',
|
||||
'admin.mcpTokens.sectionTitle': 'API 令牌',
|
||||
'admin.mcpTokens.owner': '所有者',
|
||||
'admin.mcpTokens.tokenName': '令牌名稱',
|
||||
'admin.mcpTokens.created': '建立時間',
|
||||
@@ -545,6 +652,17 @@ const zhTw: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': '令牌已刪除',
|
||||
'admin.mcpTokens.deleteError': '刪除令牌失敗',
|
||||
'admin.mcpTokens.loadError': '載入令牌失敗',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth 工作階段',
|
||||
'admin.oauthSessions.clientName': '客戶端',
|
||||
'admin.oauthSessions.owner': '所有者',
|
||||
'admin.oauthSessions.scopes': '權限範圍',
|
||||
'admin.oauthSessions.created': '建立時間',
|
||||
'admin.oauthSessions.empty': '目前沒有活躍的 OAuth 工作階段',
|
||||
'admin.oauthSessions.revokeTitle': '撤銷工作階段',
|
||||
'admin.oauthSessions.revokeMessage': '此 OAuth 工作階段將立即被撤銷。客戶端將失去 MCP 存取權限。',
|
||||
'admin.oauthSessions.revokeSuccess': '工作階段已撤銷',
|
||||
'admin.oauthSessions.revokeError': '撤銷工作階段失敗',
|
||||
'admin.oauthSessions.loadError': '載入 OAuth 工作階段失敗',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -640,6 +758,8 @@ const zhTw: Record<string, string> = {
|
||||
'vacay.companyHolidays': '公司假日',
|
||||
'vacay.companyHolidaysHint': '允許標記公司統一休假日',
|
||||
'vacay.companyHolidaysNoDeduct': '公司假日不計入年假天數。',
|
||||
'vacay.weekStart': '每週開始於',
|
||||
'vacay.weekStartHint': '選擇日曆週從週一還是週日開始',
|
||||
'vacay.carryOver': '結轉',
|
||||
'vacay.carryOverHint': '自動將剩餘年假天數結轉到下一年',
|
||||
'vacay.sharing': '共享',
|
||||
@@ -724,8 +844,10 @@ const zhTw: Record<string, string> = {
|
||||
'atlas.unmark': '移除',
|
||||
'atlas.confirmMark': '將此國家標記為已訪問?',
|
||||
'atlas.confirmUnmark': '從已訪問列表中移除此國家?',
|
||||
'atlas.confirmUnmarkRegion': '從已訪問列表中移除此地區?',
|
||||
'atlas.markVisited': '標記為已訪問',
|
||||
'atlas.markVisitedHint': '將此國家新增到已訪問列表',
|
||||
'atlas.markRegionVisitedHint': '將此地區新增到已訪問列表',
|
||||
'atlas.addToBucket': '新增到心願單',
|
||||
'atlas.addPoi': '新增地點',
|
||||
'atlas.searchCountry': '搜尋國家...',
|
||||
@@ -739,6 +861,8 @@ const zhTw: Record<string, string> = {
|
||||
'trip.tabs.reservationsShort': '預訂',
|
||||
'trip.tabs.packing': '行李清單',
|
||||
'trip.tabs.packingShort': '行李',
|
||||
'trip.tabs.lists': '清單',
|
||||
'trip.tabs.listsShort': '清單',
|
||||
'trip.tabs.budget': '預算',
|
||||
'trip.tabs.files': '檔案',
|
||||
'trip.loading': '載入旅行中...',
|
||||
@@ -850,6 +974,7 @@ const zhTw: Record<string, string> = {
|
||||
'inspector.files': '檔案',
|
||||
'inspector.filesCount': '{count} 個檔案',
|
||||
'inspector.removeFromDay': '從當天移除',
|
||||
'inspector.remove': '刪除',
|
||||
'inspector.addToDay': '新增到當天',
|
||||
'inspector.confirmedRes': '已確認預訂',
|
||||
'inspector.pendingRes': '待確認預訂',
|
||||
@@ -938,6 +1063,32 @@ const zhTw: Record<string, string> = {
|
||||
'reservations.linkAssignment': '關聯日程分配',
|
||||
'reservations.pickAssignment': '從計劃中選擇一個分配...',
|
||||
'reservations.noAssignment': '無關聯(獨立)',
|
||||
'reservations.price': '價格',
|
||||
'reservations.budgetCategory': '預算分類',
|
||||
'reservations.budgetCategoryPlaceholder': '如:交通、住宿',
|
||||
'reservations.budgetCategoryAuto': '自動(依預訂類型)',
|
||||
'reservations.budgetHint': '儲存時將自動建立預算條目。',
|
||||
'reservations.departureDate': '出發日期',
|
||||
'reservations.arrivalDate': '到達日期',
|
||||
'reservations.departureTime': '出發時間',
|
||||
'reservations.arrivalTime': '到達時間',
|
||||
'reservations.pickupDate': '取車日期',
|
||||
'reservations.returnDate': '還車日期',
|
||||
'reservations.pickupTime': '取車時間',
|
||||
'reservations.returnTime': '還車時間',
|
||||
'reservations.endDate': '結束日期',
|
||||
'reservations.meta.departureTimezone': '出發時區',
|
||||
'reservations.meta.arrivalTimezone': '到達時區',
|
||||
'reservations.span.departure': '出發',
|
||||
'reservations.span.arrival': '到達',
|
||||
'reservations.span.inTransit': '途中',
|
||||
'reservations.span.pickup': '取車',
|
||||
'reservations.span.return': '還車',
|
||||
'reservations.span.active': '進行中',
|
||||
'reservations.span.start': '開始',
|
||||
'reservations.span.end': '結束',
|
||||
'reservations.span.ongoing': '進行中',
|
||||
'reservations.validation.endBeforeStart': '結束日期/時間必須晚於開始日期/時間',
|
||||
|
||||
// Budget
|
||||
'budget.title': '預算',
|
||||
@@ -964,6 +1115,7 @@ const zhTw: Record<string, string> = {
|
||||
'budget.totalBudget': '總預算',
|
||||
'budget.byCategory': '按分類',
|
||||
'budget.editTooltip': '點選編輯',
|
||||
'budget.linkedToReservation': '已連結至預訂——請在那裡編輯名稱',
|
||||
'budget.confirm.deleteCategory': '確定刪除分類「{name}」及其 {count} 個條目?',
|
||||
'budget.deleteCategory': '刪除分類',
|
||||
'budget.perPerson': '人均',
|
||||
@@ -976,6 +1128,9 @@ const zhTw: Record<string, string> = {
|
||||
|
||||
// Files
|
||||
'files.title': '檔案',
|
||||
'files.pageTitle': '檔案與文件',
|
||||
'files.subtitle': '{trip} 的 {count} 個檔案',
|
||||
'files.downloadPdf': '下載 PDF',
|
||||
'files.count': '{count} 個檔案',
|
||||
'files.countSingular': '1 個檔案',
|
||||
'files.uploaded': '已上傳 {count} 個',
|
||||
@@ -1062,7 +1217,9 @@ const zhTw: Record<string, string> = {
|
||||
'packing.template': '模板',
|
||||
'packing.templateApplied': '已從模板新增 {count} 個物品',
|
||||
'packing.templateError': '應用模板失敗',
|
||||
'packing.assignUser': '分配使用者',
|
||||
'packing.saveAsTemplate': '儲存為範本',
|
||||
'packing.templateName': '範本名稱',
|
||||
'packing.templateSaved': '行李清單已儲存為範本',
|
||||
'packing.noMembers': '無成員',
|
||||
'packing.bags': '行李',
|
||||
'packing.noBag': '未分配',
|
||||
@@ -1219,6 +1376,13 @@ const zhTw: Record<string, string> = {
|
||||
'backup.keep.forever': '永久保留',
|
||||
|
||||
// Photos
|
||||
'photos.title': '照片',
|
||||
'photos.subtitle': '{trip} 的 {count} 張照片',
|
||||
'photos.dropHere': '將照片拖放至此...',
|
||||
'photos.dropHereActive': '將照片拖放至此',
|
||||
'photos.captionForAll': '標題(所有)',
|
||||
'photos.captionPlaceholder': '可選標題...',
|
||||
'photos.addCaption': '新增標題...',
|
||||
'photos.allDays': '所有天',
|
||||
'photos.noPhotos': '暫無照片',
|
||||
'photos.uploadHint': '上傳你的旅行照片',
|
||||
@@ -1226,6 +1390,12 @@ const zhTw: Record<string, string> = {
|
||||
'photos.linkPlace': '關聯地點',
|
||||
'photos.noPlace': '無地點',
|
||||
'photos.uploadN': '上傳 {n} 張照片',
|
||||
'photos.linkDay': '關聯天數',
|
||||
'photos.noDay': '無天數',
|
||||
'photos.dayLabel': '第 {number} 天',
|
||||
'photos.photoSelected': '張照片已選擇',
|
||||
'photos.photosSelected': '張照片已選擇',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · 最大 10 MB · 最多 30 張照片',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': '恢復備份?',
|
||||
@@ -1252,6 +1422,7 @@ const zhTw: Record<string, string> = {
|
||||
'planner.routeCalculated': '路線已計算',
|
||||
'planner.routeCalcFailed': '無法計算路線',
|
||||
'planner.routeError': '路線計算錯誤',
|
||||
'planner.icsExportFailed': 'ICS 匯出失敗',
|
||||
'planner.routeOptimized': '路線已最佳化',
|
||||
'planner.reservationUpdated': '預訂已更新',
|
||||
'planner.reservationAdded': '預訂已新增',
|
||||
@@ -1335,11 +1506,12 @@ const zhTw: Record<string, string> = {
|
||||
|
||||
// Memories / Immich
|
||||
'memories.title': '照片',
|
||||
'memories.notConnected': 'Immich 未連線',
|
||||
'memories.notConnectedHint': '在設定中連線您的 Immich 例項以在此檢視旅行照片。',
|
||||
'memories.notConnected': '{provider_name} 未連線',
|
||||
'memories.notConnectedHint': '在設定中連線您的 {provider_name} 例項以在此旅行中新增照片。',
|
||||
'memories.notConnectedMultipleHint': '在設定中連線以下任一照片提供商:{provider_names} 以在此旅行中新增照片。',
|
||||
'memories.noDates': '為旅行新增日期以載入照片。',
|
||||
'memories.noPhotos': '未找到照片',
|
||||
'memories.noPhotosHint': 'Immich 中未找到此旅行日期範圍內的照片。',
|
||||
'memories.noPhotosHint': '{provider_name} 中未找到此旅行日期範圍內的照片。',
|
||||
'memories.photosFound': '張照片',
|
||||
'memories.fromOthers': '來自他人',
|
||||
'memories.sharePhotos': '分享照片',
|
||||
@@ -1347,26 +1519,35 @@ const zhTw: Record<string, string> = {
|
||||
'memories.reviewTitle': '審查您的照片',
|
||||
'memories.reviewHint': '點選照片以將其從分享中排除。',
|
||||
'memories.shareCount': '分享 {count} 張照片',
|
||||
'memories.immichUrl': 'Immich 伺服器地址',
|
||||
'memories.immichApiKey': 'API 金鑰',
|
||||
'memories.providerUrl': '伺服器 URL',
|
||||
'memories.providerApiKey': 'API 金鑰',
|
||||
'memories.providerUsername': '使用者名稱',
|
||||
'memories.providerPassword': '密碼',
|
||||
'memories.providerOTP': 'MFA 驗證碼(如已啟用)',
|
||||
'memories.skipSSLVerification': '跳過 SSL 憑證驗證',
|
||||
'memories.providerUrlHintSynology': '在網址中包含照片應用程式路徑,例如 https://nas:5001/photo',
|
||||
'memories.testConnection': '測試連線',
|
||||
'memories.testFirst': '請先測試連線',
|
||||
'memories.connected': '已連線',
|
||||
'memories.disconnected': '未連線',
|
||||
'memories.connectionSuccess': '已連線到 Immich',
|
||||
'memories.connectionError': '無法連線到 Immich',
|
||||
'memories.saved': 'Immich 設定已儲存',
|
||||
'memories.connectionSuccess': '已連線到 {provider_name}',
|
||||
'memories.connectionError': '無法連線到 {provider_name}',
|
||||
'memories.saved': '{provider_name} 設定已儲存',
|
||||
'memories.providerDisconnectedBanner': '您與 {provider_name} 的連線已中斷。請在設定中重新連線以查看照片。',
|
||||
'memories.saveError': '無法儲存 {provider_name} 設定',
|
||||
'memories.oldest': '最早優先',
|
||||
'memories.newest': '最新優先',
|
||||
'memories.allLocations': '所有地點',
|
||||
'memories.addPhotos': '新增照片',
|
||||
'memories.linkAlbum': '關聯相簿',
|
||||
'memories.selectAlbum': '選擇 Immich 相簿',
|
||||
'memories.selectAlbum': '選擇 {provider_name} 相簿',
|
||||
'memories.selectAlbumMultiple': '選擇相簿',
|
||||
'memories.noAlbums': '未找到相簿',
|
||||
'memories.syncAlbum': '同步相簿',
|
||||
'memories.unlinkAlbum': '取消關聯',
|
||||
'memories.photos': '張照片',
|
||||
'memories.selectPhotos': '從 Immich 選擇照片',
|
||||
'memories.selectPhotos': '從 {provider_name} 選擇照片',
|
||||
'memories.selectPhotosMultiple': '選擇照片',
|
||||
'memories.selectHint': '點選照片以選擇。',
|
||||
'memories.selected': '已選擇',
|
||||
'memories.addSelected': '新增 {count} 張照片',
|
||||
@@ -1511,6 +1692,40 @@ const zhTw: Record<string, string> = {
|
||||
'undo.importGoogleList': 'Google 地圖匯入',
|
||||
'undo.importNaverList': 'Naver 地圖匯入',
|
||||
|
||||
// Todo
|
||||
'todo.subtab.packing': '行李清單',
|
||||
'todo.subtab.todo': '待辦事項',
|
||||
'todo.completed': '已完成',
|
||||
'todo.filter.all': '全部',
|
||||
'todo.filter.open': '未完成',
|
||||
'todo.filter.done': '已完成',
|
||||
'todo.uncategorized': '未分類',
|
||||
'todo.namePlaceholder': '任務名稱',
|
||||
'todo.descriptionPlaceholder': '說明(可選)',
|
||||
'todo.unassigned': '未指派',
|
||||
'todo.noCategory': '無分類',
|
||||
'todo.hasDescription': '有說明',
|
||||
'todo.addItem': '新增任務...',
|
||||
'todo.newCategory': '分類名稱',
|
||||
'todo.addCategory': '新增分類',
|
||||
'todo.newItem': '新任務',
|
||||
'todo.empty': '尚無任務。新增任務以開始!',
|
||||
'todo.filter.my': '我的任務',
|
||||
'todo.filter.overdue': '已逾期',
|
||||
'todo.sidebar.tasks': '任務',
|
||||
'todo.sidebar.categories': '分類',
|
||||
'todo.detail.title': '任務',
|
||||
'todo.detail.description': '說明',
|
||||
'todo.detail.category': '分類',
|
||||
'todo.detail.dueDate': '到期日',
|
||||
'todo.detail.assignedTo': '指派給',
|
||||
'todo.detail.delete': '刪除',
|
||||
'todo.detail.save': '儲存變更',
|
||||
'todo.sortByPrio': '優先順序',
|
||||
'todo.detail.priority': '優先順序',
|
||||
'todo.detail.noPriority': '無',
|
||||
'todo.detail.create': '建立任務',
|
||||
|
||||
// Notifications
|
||||
'notifications.title': '通知',
|
||||
'notifications.markAllRead': '全部標為已讀',
|
||||
@@ -1524,6 +1739,8 @@ const zhTw: Record<string, string> = {
|
||||
'notifications.markUnread': '標為未讀',
|
||||
'notifications.delete': '刪除',
|
||||
'notifications.system': '系統',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos 已斷線',
|
||||
'notifications.synologySessionCleared.text': '您的伺服器或帳號已更改 — 請前往設定重新測試連線。',
|
||||
'memories.error.loadAlbums': '載入相簿失敗',
|
||||
'memories.error.linkAlbum': '關聯相簿失敗',
|
||||
'memories.error.unlinkAlbum': '取消關聯相簿失敗',
|
||||
@@ -1547,6 +1764,482 @@ const zhTw: Record<string, string> = {
|
||||
'notifications.test.adminText': '{actor} 向所有管理員傳送了測試通知。',
|
||||
'notifications.test.tripTitle': '{actor} 在您的行程中發帖',
|
||||
'notifications.test.tripText': '行程"{trip}"的測試通知。',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': '剛剛',
|
||||
'common.hoursAgo': '{count}小時前',
|
||||
'common.daysAgo': '{count}天前',
|
||||
'budget.linkedToReservation': '已關聯預訂 — 請在預訂中編輯名稱',
|
||||
'packing.saveAsTemplate': '儲存為範本',
|
||||
'packing.templateName': '範本名稱',
|
||||
'packing.templateSaved': '打包清單已儲存為範本',
|
||||
'memories.notConnectedMultipleHint': '在設定中連接以下任一照片服務:{provider_names},以便為此旅行新增照片。',
|
||||
'memories.providerUrl': '伺服器位址',
|
||||
'memories.providerApiKey': 'API 金鑰',
|
||||
'memories.providerUsername': '使用者名稱',
|
||||
'memories.providerPassword': '密碼',
|
||||
'memories.saveError': '無法儲存 {provider_name} 設定',
|
||||
'memories.saveRouteNotConfigured': '此提供商未設定儲存路由',
|
||||
'memories.testRouteNotConfigured': '此提供商未設定測試路由',
|
||||
'memories.fillRequiredFields': '請填寫所有必填欄位',
|
||||
'memories.selectAlbumMultiple': '選擇相簿',
|
||||
'memories.selectPhotosMultiple': '選擇照片',
|
||||
'journey.title': '旅程',
|
||||
'journey.subtitle': '即時記錄你的旅行',
|
||||
'journey.new': '新建旅程',
|
||||
'journey.create': '建立',
|
||||
'journey.titlePlaceholder': '你要去哪裡?',
|
||||
'journey.empty': '還沒有旅程',
|
||||
'journey.emptyHint': '開始記錄你的下一次旅行',
|
||||
'journey.deleted': '旅程已刪除',
|
||||
'journey.createError': '無法建立旅程',
|
||||
'journey.deleteError': '無法刪除旅程',
|
||||
'journey.deleteConfirmTitle': '刪除',
|
||||
'journey.deleteConfirmMessage': '刪除「{title}」?此操作無法復原。',
|
||||
'journey.deleteConfirmGeneric': '確定要刪除嗎?',
|
||||
'journey.notFound': '未找到旅程',
|
||||
'journey.photos': '照片',
|
||||
'journey.timelineEmpty': '還沒有行程',
|
||||
'journey.timelineEmptyHint': '新增一個打卡或寫一篇日誌開始記錄',
|
||||
'journey.status.draft': '草稿',
|
||||
'journey.status.active': '進行中',
|
||||
'journey.status.completed': '已完成',
|
||||
'journey.status.upcoming': '即將開始',
|
||||
'journey.checkin.add': '打卡',
|
||||
'journey.checkin.namePlaceholder': '地點名稱',
|
||||
'journey.checkin.notesPlaceholder': '備註(可選)',
|
||||
'journey.checkin.save': '儲存',
|
||||
'journey.checkin.error': '無法儲存打卡',
|
||||
'journey.entry.add': '日誌',
|
||||
'journey.entry.edit': '編輯條目',
|
||||
'journey.entry.titlePlaceholder': '標題(可選)',
|
||||
'journey.entry.bodyPlaceholder': '今天發生了什麼?',
|
||||
'journey.entry.save': '儲存',
|
||||
'journey.entry.error': '無法儲存條目',
|
||||
'journey.photo.add': '照片',
|
||||
'journey.photo.uploadError': '上傳失敗',
|
||||
'journey.share.share': '分享',
|
||||
'journey.share.public': '公開',
|
||||
'journey.share.linkCopied': '公開連結已複製',
|
||||
'journey.share.disabled': '已關閉公開分享',
|
||||
'journey.editor.titlePlaceholder': '給這個瞬間起個名字...',
|
||||
'journey.editor.bodyPlaceholder': '講述這一天的故事...',
|
||||
'journey.editor.placePlaceholder': '地點(可選)',
|
||||
'journey.editor.tagsPlaceholder': '標籤:隱藏寶藏、最佳美食、值得再訪...',
|
||||
'journey.visibility.private': '私密',
|
||||
'journey.visibility.shared': '共享',
|
||||
'journey.visibility.public': '公開',
|
||||
'journey.emptyState.title': '你的故事從這裡開始',
|
||||
'journey.emptyState.subtitle': '在某個地方打卡或寫下你的第一篇日誌',
|
||||
'journey.frontpage.subtitle': '將旅行變成永遠不會忘記的故事',
|
||||
'journey.frontpage.createJourney': '建立旅程',
|
||||
'journey.frontpage.activeJourney': '進行中的旅程',
|
||||
'journey.frontpage.allJourneys': '所有旅程',
|
||||
'journey.frontpage.journeys': '個旅程',
|
||||
'journey.frontpage.createNew': '建立新旅程',
|
||||
'journey.frontpage.createNewSub': '選擇旅行、寫故事、分享你的冒險',
|
||||
'journey.frontpage.live': '即時',
|
||||
'journey.frontpage.synced': '已同步',
|
||||
'journey.frontpage.continueWriting': '繼續撰寫',
|
||||
'journey.frontpage.updated': '更新於 {time}',
|
||||
'journey.frontpage.suggestionLabel': '旅行剛結束',
|
||||
'journey.frontpage.suggestionText': '將 <strong>{title}</strong> 變成一段旅程',
|
||||
'journey.frontpage.dismiss': '忽略',
|
||||
'journey.frontpage.journeyName': '旅程名稱',
|
||||
'journey.frontpage.namePlaceholder': '例如 東南亞 2026',
|
||||
'journey.frontpage.selectTrips': '選擇旅行',
|
||||
'journey.frontpage.tripsSelected': '個旅行已選擇',
|
||||
'journey.frontpage.trips': '個旅行',
|
||||
'journey.frontpage.placesImported': '個地點將被匯入',
|
||||
'journey.frontpage.places': '個地點',
|
||||
'journey.detail.backToJourney': '返回旅程',
|
||||
'journey.detail.syncedWithTrips': '已與旅行同步',
|
||||
'journey.detail.addEntry': '新增條目',
|
||||
'journey.detail.newEntry': '新建條目',
|
||||
'journey.detail.editEntry': '編輯條目',
|
||||
'journey.detail.noEntries': '還沒有條目',
|
||||
'journey.detail.noEntriesHint': '新增一個旅行以產生骨架條目',
|
||||
'journey.detail.noPhotos': '還沒有照片',
|
||||
'journey.detail.noPhotosHint': '上傳照片到條目或瀏覽你的 Immich/Synology 相簿',
|
||||
'journey.detail.journeyStats': '旅程統計',
|
||||
'journey.detail.syncedTrips': '已同步的旅行',
|
||||
'journey.detail.noTripsLinked': '尚未關聯旅行',
|
||||
'journey.detail.contributors': '貢獻者',
|
||||
'journey.detail.readMore': '閱讀更多',
|
||||
'journey.detail.prosCons': '優缺點',
|
||||
'journey.stats.days': '天',
|
||||
'journey.stats.cities': '城市',
|
||||
'journey.stats.entries': '條目',
|
||||
'journey.stats.photos': '照片',
|
||||
'journey.stats.places': '地點',
|
||||
'journey.verdict.lovedIt': '非常喜歡',
|
||||
'journey.verdict.couldBeBetter': '有待改進',
|
||||
'journey.synced.places': '個地點',
|
||||
'journey.synced.synced': '已同步',
|
||||
'journey.editor.uploadPhotos': '上傳照片',
|
||||
'journey.editor.fromGallery': '從相簿選擇',
|
||||
'journey.editor.allPhotosAdded': '所有照片已新增',
|
||||
'journey.editor.writeStory': '寫下你的故事...',
|
||||
'journey.editor.prosCons': '優缺點',
|
||||
'journey.editor.pros': '優點',
|
||||
'journey.editor.cons': '缺點',
|
||||
'journey.editor.proPlaceholder': '好的方面...',
|
||||
'journey.editor.conPlaceholder': '不好的方面...',
|
||||
'journey.editor.addAnother': '再新增一個',
|
||||
'journey.editor.date': '日期',
|
||||
'journey.editor.location': '地點',
|
||||
'journey.editor.searchLocation': '搜尋地點...',
|
||||
'journey.editor.mood': '心情',
|
||||
'journey.editor.weather': '天氣',
|
||||
'journey.editor.photoFirst': '第1張',
|
||||
'journey.editor.makeFirst': '設為第1張',
|
||||
'journey.mood.amazing': '太棒了',
|
||||
'journey.mood.good': '不錯',
|
||||
'journey.mood.neutral': '一般',
|
||||
'journey.mood.rough': '糟糕',
|
||||
'journey.weather.sunny': '晴天',
|
||||
'journey.weather.partly': '多雲',
|
||||
'journey.weather.cloudy': '陰天',
|
||||
'journey.weather.rainy': '雨天',
|
||||
'journey.weather.stormy': '暴風雨',
|
||||
'journey.weather.cold': '雪天',
|
||||
'journey.trips.linkTrip': '關聯旅行',
|
||||
'journey.trips.searchTrip': '搜尋旅行',
|
||||
'journey.trips.searchPlaceholder': '旅行名稱或目的地...',
|
||||
'journey.trips.noTripsAvailable': '沒有可用的旅行',
|
||||
'journey.trips.link': '關聯',
|
||||
'journey.trips.tripLinked': '旅行已關聯',
|
||||
'journey.trips.linkFailed': '關聯旅行失敗',
|
||||
'journey.trips.addTrip': '新增旅行',
|
||||
'journey.trips.unlinkTrip': '取消關聯旅行',
|
||||
'journey.trips.unlinkMessage': '取消關聯「{title}」?此旅行中所有已同步的條目和照片將被永久刪除。此操作無法復原。',
|
||||
'journey.trips.unlink': '取消關聯',
|
||||
'journey.trips.tripUnlinked': '旅行已取消關聯',
|
||||
'journey.trips.unlinkFailed': '取消關聯失敗',
|
||||
'journey.trips.noTripsLinkedSettings': '未關聯旅行',
|
||||
'journey.contributors.invite': '邀請貢獻者',
|
||||
'journey.contributors.searchUser': '搜尋使用者',
|
||||
'journey.contributors.searchPlaceholder': '使用者名稱或郵箱...',
|
||||
'journey.contributors.noUsers': '未找到使用者',
|
||||
'journey.contributors.role': '角色',
|
||||
'journey.contributors.added': '貢獻者已新增',
|
||||
'journey.contributors.addFailed': '新增貢獻者失敗',
|
||||
'journey.share.publicShare': '公開分享',
|
||||
'journey.share.createLink': '建立分享連結',
|
||||
'journey.share.linkCreated': '分享連結已建立',
|
||||
'journey.share.createFailed': '建立連結失敗',
|
||||
'journey.share.copy': '複製',
|
||||
'journey.share.copied': '已複製!',
|
||||
'journey.share.timeline': '時間線',
|
||||
'journey.share.gallery': '圖庫',
|
||||
'journey.share.map': '地圖',
|
||||
'journey.share.removeLink': '移除分享連結',
|
||||
'journey.share.linkDeleted': '分享連結已刪除',
|
||||
'journey.share.deleteFailed': '刪除失敗',
|
||||
'journey.share.updateFailed': '更新失敗',
|
||||
'journey.settings.title': '旅程設定',
|
||||
'journey.settings.coverImage': '封面圖片',
|
||||
'journey.settings.changeCover': '更換封面',
|
||||
'journey.settings.addCover': '新增封面圖片',
|
||||
'journey.settings.name': '名稱',
|
||||
'journey.settings.subtitle': '副標題',
|
||||
'journey.settings.subtitlePlaceholder': '例如 泰國、越南和柬埔寨',
|
||||
'journey.settings.delete': '刪除',
|
||||
'journey.settings.deleteJourney': '刪除旅程',
|
||||
'journey.settings.deleteMessage': '刪除「{title}」?所有條目和照片將遺失。',
|
||||
'journey.settings.saved': '設定已儲存',
|
||||
'journey.settings.saveFailed': '儲存失敗',
|
||||
'journey.settings.coverUpdated': '封面已更新',
|
||||
'journey.settings.coverFailed': '上傳失敗',
|
||||
'journey.settings.failedToDelete': '刪除失敗',
|
||||
'journey.entries.deleteTitle': '刪除條目',
|
||||
'journey.photosUploaded': '{count} 張照片已上傳',
|
||||
'journey.photosAdded': '{count} 張照片已新增',
|
||||
'journey.public.notFound': '未找到',
|
||||
'journey.public.notFoundMessage': '此旅程不存在或連結已過期。',
|
||||
'journey.public.readOnly': '唯讀 · 公開旅程',
|
||||
'journey.public.tagline': '旅行資源與探索工具包',
|
||||
'journey.public.sharedVia': '分享自',
|
||||
'journey.public.madeWith': '由',
|
||||
'journey.pdf.journeyBook': '旅程手冊',
|
||||
'journey.pdf.madeWith': '由 TREK 製作',
|
||||
'journey.pdf.day': '第',
|
||||
'journey.pdf.theEnd': '終',
|
||||
'journey.pdf.saveAsPdf': '儲存為 PDF',
|
||||
'journey.pdf.pages': '頁',
|
||||
'dashboard.greeting.morning': '早安,',
|
||||
'dashboard.greeting.afternoon': '午安,',
|
||||
'dashboard.greeting.evening': '晚安,',
|
||||
'dashboard.mobile.liveNow': '進行中',
|
||||
'dashboard.mobile.tripProgress': '旅行進度',
|
||||
'dashboard.mobile.daysLeft': '還剩 {count} 天',
|
||||
'dashboard.mobile.places': '地點',
|
||||
'dashboard.mobile.buddies': '旅伴',
|
||||
'dashboard.mobile.newTrip': '新建旅行',
|
||||
'dashboard.mobile.currency': '貨幣',
|
||||
'dashboard.mobile.timezone': '時區',
|
||||
'dashboard.mobile.upcomingTrips': '即將到來的旅行',
|
||||
'dashboard.mobile.yourTrips': '我的旅行',
|
||||
'dashboard.mobile.trips': '個旅行',
|
||||
'dashboard.mobile.starts': '出發',
|
||||
'dashboard.mobile.duration': '時長',
|
||||
'dashboard.mobile.day': '天',
|
||||
'dashboard.mobile.days': '天',
|
||||
'dashboard.mobile.ongoing': '進行中',
|
||||
'dashboard.mobile.startsToday': '今天出發',
|
||||
'dashboard.mobile.tomorrow': '明天',
|
||||
'dashboard.mobile.inDays': '{count} 天後',
|
||||
'dashboard.mobile.inMonths': '{count} 個月後',
|
||||
'dashboard.mobile.completed': '已完成',
|
||||
'dashboard.mobile.currencyConverter': '匯率轉換',
|
||||
'nav.profile': '個人資料',
|
||||
'nav.bottomSettings': '設定',
|
||||
'nav.bottomAdmin': '管理設定',
|
||||
'nav.bottomLogout': '退出登入',
|
||||
'nav.bottomAdminBadge': '管理員',
|
||||
'dayplan.mobile.addPlace': '新增地點',
|
||||
'dayplan.mobile.searchPlaces': '搜尋地點...',
|
||||
'dayplan.mobile.allAssigned': '所有地點已分配',
|
||||
'dayplan.mobile.noMatch': '無匹配',
|
||||
'dayplan.mobile.createNew': '建立新地點',
|
||||
'admin.addons.catalog.journey.name': '旅程',
|
||||
'admin.addons.catalog.journey.description': '旅行追蹤與旅行日誌,包含打卡、照片和每日故事',
|
||||
'dashboard.dayCount': '天數',
|
||||
'dashboard.dayCountHint': '未設定旅行日期時規劃的天數。',
|
||||
'settings.tabs.display': '顯示',
|
||||
'settings.tabs.map': '地圖',
|
||||
'settings.tabs.notifications': '通知',
|
||||
'settings.tabs.integrations': '整合',
|
||||
'settings.tabs.account': '帳戶',
|
||||
'settings.tabs.about': '關於',
|
||||
'settings.notifyVersionAvailable': '有新版本可用',
|
||||
'settings.notificationPreferences.email': '電子郵件',
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.inapp': '應用內',
|
||||
'settings.notificationPreferences.noChannels': '尚未設定通知管道。請聯繫管理員設定電子郵件或 Webhook 通知。',
|
||||
'settings.webhookUrl.label': 'Webhook 網址',
|
||||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||||
'settings.webhookUrl.hint': '輸入你的 Discord、Slack 或自訂 Webhook 網址以接收通知。',
|
||||
'settings.webhookUrl.save': '儲存',
|
||||
'settings.webhookUrl.saved': 'Webhook 網址已儲存',
|
||||
'settings.webhookUrl.test': '測試',
|
||||
'settings.webhookUrl.testSuccess': '測試 Webhook 傳送成功',
|
||||
'settings.webhookUrl.testFailed': '測試 Webhook 失敗',
|
||||
'admin.notifications.emailPanel.title': '電子郵件 (SMTP)',
|
||||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||||
'admin.notifications.inappPanel.title': '應用內',
|
||||
'admin.notifications.inappPanel.hint': '應用內通知始終處於啟用狀態,無法全域停用。',
|
||||
'admin.notifications.adminWebhookPanel.title': '管理員 Webhook',
|
||||
'admin.notifications.adminWebhookPanel.hint': '此 Webhook 僅用於管理員通知(例如版本更新提醒)。它與每位使用者的 Webhook 分開,設定後將始終觸發。',
|
||||
'admin.notifications.adminWebhookPanel.saved': '管理員 Webhook 網址已儲存',
|
||||
'admin.notifications.adminWebhookPanel.testSuccess': '測試 Webhook 傳送成功',
|
||||
'admin.notifications.adminWebhookPanel.testFailed': '測試 Webhook 失敗',
|
||||
'admin.notifications.adminWebhookPanel.alwaysOnHint': '設定網址後管理員 Webhook 將始終觸發',
|
||||
'admin.notifications.adminNotificationsHint': '設定哪些管道傳送僅限管理員的通知(例如版本更新提醒)。',
|
||||
'settings.about.reportBug': '回報錯誤',
|
||||
'settings.about.reportBugHint': '發現問題?請告訴我們',
|
||||
'settings.about.featureRequest': '功能建議',
|
||||
'settings.about.featureRequestHint': '提出新功能建議',
|
||||
'settings.about.wikiHint': '文件與指南',
|
||||
'settings.about.description': 'TREK 是一個自架式旅行規劃工具,幫助你從第一個想法到最後一個回憶來組織旅行。日程規劃、預算、打包清單、照片等等——全部集中在一處,在你自己的伺服器上。',
|
||||
'settings.about.madeWith': '以',
|
||||
'settings.about.madeBy': '由 Maurice 和不斷壯大的開源社群製作。',
|
||||
'admin.tabs.notifications': '通知',
|
||||
'atlas.confirmUnmarkRegion': '將此地區從已造訪清單中移除?',
|
||||
'atlas.markRegionVisitedHint': '將此地區新增至已造訪清單',
|
||||
'trip.tabs.lists': '清單',
|
||||
'trip.tabs.listsShort': '清單',
|
||||
'reservations.price': '價格',
|
||||
'reservations.budgetCategory': '預算類別',
|
||||
'reservations.budgetCategoryPlaceholder': '例如 交通、住宿',
|
||||
'reservations.budgetCategoryAuto': '自動(依預訂類型)',
|
||||
'reservations.budgetHint': '儲存時將自動建立一筆預算項目。',
|
||||
'reservations.departureDate': '出發日期',
|
||||
'reservations.arrivalDate': '抵達日期',
|
||||
'reservations.departureTime': '出發時間',
|
||||
'reservations.arrivalTime': '抵達時間',
|
||||
'reservations.pickupDate': '取車日期',
|
||||
'reservations.returnDate': '還車日期',
|
||||
'reservations.pickupTime': '取車時間',
|
||||
'reservations.returnTime': '還車時間',
|
||||
'reservations.endDate': '結束日期',
|
||||
'reservations.meta.departureTimezone': '出發時區',
|
||||
'reservations.meta.arrivalTimezone': '抵達時區',
|
||||
'reservations.span.departure': '出發',
|
||||
'reservations.span.arrival': '抵達',
|
||||
'reservations.span.inTransit': '運輸中',
|
||||
'reservations.span.pickup': '取車',
|
||||
'reservations.span.return': '還車',
|
||||
'reservations.span.active': '使用中',
|
||||
'reservations.span.start': '開始',
|
||||
'reservations.span.end': '結束',
|
||||
'reservations.span.ongoing': '進行中',
|
||||
'reservations.validation.endBeforeStart': '結束日期/時間必須晚於開始日期/時間',
|
||||
'notifications.versionAvailable.title': '有可用更新',
|
||||
'notifications.versionAvailable.text': 'TREK {version} 現已推出。',
|
||||
'notifications.versionAvailable.button': '查看詳情',
|
||||
'todo.subtab.packing': '打包清單',
|
||||
'todo.subtab.todo': '待辦事項',
|
||||
'todo.completed': '已完成',
|
||||
'todo.filter.all': '全部',
|
||||
'todo.filter.open': '未完成',
|
||||
'todo.filter.done': '已完成',
|
||||
'todo.uncategorized': '未分類',
|
||||
'todo.namePlaceholder': '任務名稱',
|
||||
'todo.descriptionPlaceholder': '描述(可選)',
|
||||
'todo.unassigned': '未指派',
|
||||
'todo.noCategory': '無類別',
|
||||
'todo.hasDescription': '有描述',
|
||||
'todo.addItem': '新增任務...',
|
||||
'todo.newCategory': '類別名稱',
|
||||
'todo.addCategory': '新增類別',
|
||||
'todo.newItem': '新任務',
|
||||
'todo.empty': '還沒有任務。新增一個任務開始吧!',
|
||||
'todo.filter.my': '我的任務',
|
||||
'todo.filter.overdue': '已逾期',
|
||||
'todo.sidebar.tasks': '任務',
|
||||
'todo.sidebar.categories': '類別',
|
||||
'todo.detail.title': '任務',
|
||||
'todo.detail.description': '描述',
|
||||
'todo.detail.category': '類別',
|
||||
'todo.detail.dueDate': '截止日期',
|
||||
'todo.detail.assignedTo': '指派給',
|
||||
'todo.detail.delete': '刪除',
|
||||
'todo.detail.save': '儲存變更',
|
||||
'todo.sortByPrio': '優先順序',
|
||||
'todo.detail.priority': '優先順序',
|
||||
'todo.detail.noPriority': '無',
|
||||
'todo.detail.create': '建立任務',
|
||||
'notif.test.title': '[測試] 通知',
|
||||
'notif.test.simple.text': '這是一則簡單的測試通知。',
|
||||
'notif.test.boolean.text': '你是否接受這則測試通知?',
|
||||
'notif.test.navigate.text': '點擊下方前往儀表板。',
|
||||
'notif.trip_invite.title': '旅行邀請',
|
||||
'notif.trip_invite.text': '{actor} 邀請你加入 {trip}',
|
||||
'notif.booking_change.title': '預訂已更新',
|
||||
'notif.booking_change.text': '{actor} 更新了 {trip} 中的預訂',
|
||||
'notif.trip_reminder.title': '旅行提醒',
|
||||
'notif.trip_reminder.text': '你的旅行 {trip} 即將開始!',
|
||||
'notif.vacay_invite.title': 'Vacay Fusion 邀請',
|
||||
'notif.vacay_invite.text': '{actor} 邀請你合併假期計畫',
|
||||
'notif.photos_shared.title': '照片已分享',
|
||||
'notif.photos_shared.text': '{actor} 在 {trip} 中分享了 {count} 張照片',
|
||||
'notif.collab_message.title': '新訊息',
|
||||
'notif.collab_message.text': '{actor} 在 {trip} 中傳送了一則訊息',
|
||||
'notif.packing_tagged.title': '打包指派',
|
||||
'notif.packing_tagged.text': '{actor} 在 {trip} 中將 {category} 指派給你',
|
||||
'notif.version_available.title': '有新版本可用',
|
||||
'notif.version_available.text': 'TREK {version} 現已推出',
|
||||
'notif.action.view_trip': '查看旅行',
|
||||
'notif.action.view_collab': '查看訊息',
|
||||
'notif.action.view_packing': '查看打包',
|
||||
'notif.action.view_photos': '查看照片',
|
||||
'notif.action.view_vacay': '查看 Vacay',
|
||||
'notif.action.view_admin': '前往管理',
|
||||
'notifications.versionAvailable.title': '有可用更新',
|
||||
'notifications.versionAvailable.text': 'TREK {version} 現已推出。',
|
||||
'notifications.versionAvailable.button': '查看詳情',
|
||||
|
||||
// Notifications — dev test events
|
||||
'notif.test.title': '[測試] 通知',
|
||||
'notif.test.simple.text': '這是一條簡單的測試通知。',
|
||||
'notif.test.boolean.text': '您接受此測試通知嗎?',
|
||||
'notif.test.navigate.text': '點選下方前往儀表板。',
|
||||
|
||||
// Notifications
|
||||
'notif.trip_invite.title': '行程邀請',
|
||||
'notif.trip_invite.text': '{actor} 邀請您加入 {trip}',
|
||||
'notif.booking_change.title': '預訂已更新',
|
||||
'notif.booking_change.text': '{actor} 已更新 {trip} 中的預訂',
|
||||
'notif.trip_reminder.title': '行程提醒',
|
||||
'notif.trip_reminder.text': '您的行程 {trip} 即將開始!',
|
||||
'notif.vacay_invite.title': 'Vacay 合併邀請',
|
||||
'notif.vacay_invite.text': '{actor} 邀請您合併假期計畫',
|
||||
'notif.photos_shared.title': '已分享照片',
|
||||
'notif.photos_shared.text': '{actor} 在 {trip} 中分享了 {count} 張照片',
|
||||
'notif.collab_message.title': '新訊息',
|
||||
'notif.collab_message.text': '{actor} 在 {trip} 中傳送了訊息',
|
||||
'notif.packing_tagged.title': '行李指派',
|
||||
'notif.packing_tagged.text': '{actor} 在 {trip} 中將您指派至 {category}',
|
||||
'notif.version_available.title': '有新版本可用',
|
||||
'notif.version_available.text': 'TREK {version} 現已推出',
|
||||
'notif.action.view_trip': '查看行程',
|
||||
'notif.action.view_collab': '查看訊息',
|
||||
'notif.action.view_packing': '查看行李',
|
||||
'notif.action.view_photos': '查看照片',
|
||||
'notif.action.view_vacay': '查看 Vacay',
|
||||
'notif.action.view_admin': '前往管理員',
|
||||
'notif.action.view': '查看',
|
||||
'notif.action.accept': '接受',
|
||||
'notif.action.decline': '拒絕',
|
||||
'notif.generic.title': '通知',
|
||||
'notif.generic.text': '你有一則新通知',
|
||||
'notif.dev.unknown_event.title': '[DEV] 未知事件',
|
||||
'notif.dev.unknown_event.text': '事件類型「{event}」未在 EVENT_NOTIFICATION_CONFIG 中註冊',
|
||||
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': '行程',
|
||||
'oauth.scope.group.places': '地點',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': '行李',
|
||||
'oauth.scope.group.todos': '待辦事項',
|
||||
'oauth.scope.group.budget': '預算',
|
||||
'oauth.scope.group.reservations': '預訂',
|
||||
'oauth.scope.group.collab': '協作',
|
||||
'oauth.scope.group.notifications': '通知',
|
||||
'oauth.scope.group.vacay': '假期',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': '天氣',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': '檢視行程與旅遊計畫',
|
||||
'oauth.scope.trips:read.description': '讀取行程、天數、每日筆記及成員',
|
||||
'oauth.scope.trips:write.label': '編輯行程與旅遊計畫',
|
||||
'oauth.scope.trips:write.description': '建立及更新行程、天數、筆記並管理成員',
|
||||
'oauth.scope.trips:delete.label': '刪除行程',
|
||||
'oauth.scope.trips:delete.description': '永久刪除整個行程——此操作無法復原',
|
||||
'oauth.scope.trips:share.label': '管理分享連結',
|
||||
'oauth.scope.trips:share.description': '建立、更新及撤銷行程的公開分享連結',
|
||||
'oauth.scope.places:read.label': '檢視地點與地圖資料',
|
||||
'oauth.scope.places:read.description': '讀取地點、每日指派、標籤及類別',
|
||||
'oauth.scope.places:write.label': '管理地點',
|
||||
'oauth.scope.places:write.description': '建立、更新及刪除地點、指派及標籤',
|
||||
'oauth.scope.atlas:read.label': '檢視 Atlas',
|
||||
'oauth.scope.atlas:read.description': '讀取已造訪的國家、地區及願望清單',
|
||||
'oauth.scope.atlas:write.label': '管理 Atlas',
|
||||
'oauth.scope.atlas:write.description': '標記已造訪的國家及地區,管理願望清單',
|
||||
'oauth.scope.packing:read.label': '檢視行李清單',
|
||||
'oauth.scope.packing:read.description': '讀取行李物品、行李袋及類別負責人',
|
||||
'oauth.scope.packing:write.label': '管理行李清單',
|
||||
'oauth.scope.packing:write.description': '新增、更新、刪除、勾選及重新排序行李物品和行李袋',
|
||||
'oauth.scope.todos:read.label': '檢視待辦清單',
|
||||
'oauth.scope.todos:read.description': '讀取行程待辦事項及類別負責人',
|
||||
'oauth.scope.todos:write.label': '管理待辦清單',
|
||||
'oauth.scope.todos:write.description': '建立、更新、勾選、刪除及重新排序待辦事項',
|
||||
'oauth.scope.budget:read.label': '檢視預算',
|
||||
'oauth.scope.budget:read.description': '讀取預算項目及費用明細',
|
||||
'oauth.scope.budget:write.label': '管理預算',
|
||||
'oauth.scope.budget:write.description': '建立、更新及刪除預算項目',
|
||||
'oauth.scope.reservations:read.label': '檢視預訂',
|
||||
'oauth.scope.reservations:read.description': '讀取預訂及住宿詳情',
|
||||
'oauth.scope.reservations:write.label': '管理預訂',
|
||||
'oauth.scope.reservations:write.description': '建立、更新、刪除及重新排序預訂',
|
||||
'oauth.scope.collab:read.label': '檢視協作',
|
||||
'oauth.scope.collab:read.description': '讀取協作筆記、投票及訊息',
|
||||
'oauth.scope.collab:write.label': '管理協作',
|
||||
'oauth.scope.collab:write.description': '建立、更新及刪除協作筆記、投票及訊息',
|
||||
'oauth.scope.notifications:read.label': '檢視通知',
|
||||
'oauth.scope.notifications:read.description': '讀取應用程式通知及未讀數量',
|
||||
'oauth.scope.notifications:write.label': '管理通知',
|
||||
'oauth.scope.notifications:write.description': '將通知標為已讀並回覆',
|
||||
'oauth.scope.vacay:read.label': '檢視假期計畫',
|
||||
'oauth.scope.vacay:read.description': '讀取假期計畫資料、項目及統計',
|
||||
'oauth.scope.vacay:write.label': '管理假期計畫',
|
||||
'oauth.scope.vacay:write.description': '建立及管理假期項目、節假日及團隊計畫',
|
||||
'oauth.scope.geo:read.label': '地圖與地理編碼',
|
||||
'oauth.scope.geo:read.description': '搜尋地點、解析地圖 URL 及反向地理編碼坐標',
|
||||
'oauth.scope.weather:read.label': '天氣預報',
|
||||
'oauth.scope.weather:read.description': '取得行程地點及日期的天氣預報',
|
||||
}
|
||||
|
||||
export default zhTw
|
||||
Reference in New Issue
Block a user