feat: Add OIDC/SSO authentication support (#1008)
* feat: add OIDC/SSO database schema and models (Phase 1) Add database foundation for OpenID Connect authentication: Database Migrations: - Create oidc_identities table (links users to OIDC accounts) - Create oidc_state_nonces table (OAuth state/nonce for CSRF protection) - Create auth_audit_log table (security event logging) - Make password_digest nullable in users table (allow OIDC-only users) Models: - OIDCIdentity: Links users to external OIDC providers - OIDCStateNonce: Temporary OAuth state management - AuthAuditLog: Authentication event audit trail Changes: - Updated User model to allow null password_digest - Added model associations in models/index.js - All migrations tested and verified Related to #977 * feat: add OIDC core services (Phase 2) - Install openid-client@^6.2.0 for OIDC protocol support - Implement providerConfig.js for loading providers from .env - Support single provider or numbered providers (OIDC_PROVIDER_1_*, etc.) - Auto-provision and admin email domain configuration - Provider caching for performance - Implement stateManager.js for OAuth state/nonce management - CSRF protection with 10-minute TTL - One-time use state consumption - Automatic cleanup of expired states - Implement auditService.js for authentication event logging - Track login success/failure, logout, OIDC linking/unlinking - Store IP address, user agent, and metadata - Support for event queries and retention cleanup - Add comprehensive unit tests (60 tests, all passing) - providerConfig: 36 tests for env parsing and validation - stateManager: 12 tests for state lifecycle and security - auditService: 12 tests for event logging and queries Phase 2 completes the backend core services needed for OIDC authentication. * feat: implement OIDC authentication flow (Phase 3) Core OIDC Flow (service.js): - Provider discovery with issuer caching - Authorization URL generation with state/nonce - OAuth callback handling and token exchange - ID token validation using openid-client - Token refresh functionality JIT User Provisioning (provisioningService.js): - Auto-create users from OIDC claims - Link existing email accounts to OIDC identities - Admin role assignment based on email domain rules - Automatic username generation from email - Transaction-safe identity creation Identity Management (oidcIdentityService.js): - List user's linked OIDC identities - Link additional providers to existing accounts - Unlink identities with safety checks - Prevent unlinking last auth method - Update identity claims on login HTTP Layer (controller.js + routes.js): - GET /api/oidc/providers - List configured providers - GET /api/oidc/auth/:slug - Initiate OIDC flow - GET /api/oidc/callback/:slug - Handle OAuth callback - POST /api/oidc/link/:slug - Link provider to current user - DELETE /api/oidc/unlink/:id - Unlink identity - GET /api/oidc/identities - Get user's identities Integration: - Register OIDC routes in Express app (public + authenticated) - Update auth service to reject password login for OIDC-only users - Audit logging for all OIDC operations - Session creation on successful authentication Security: - State/nonce CSRF protection - One-time use state consumption - Transaction-safe user provisioning - Foreign key constraints enforced * feat: implement OIDC frontend login flow (Phase 4) - Created OIDCProviderButtons component for SSO login options - Created OIDCCallback component for OAuth callback handling - Updated Login page to fetch and display OIDC providers - Added /auth/callback/:provider route to App.tsx - Added i18n translations for OIDC UI elements - Downgraded openid-client to v5.7.0 (CommonJS compatibility) - Fixed linting issues in backend OIDC modules Phase 4 completes the frontend login flow for OIDC/SSO authentication. Users can now see configured SSO providers on the login page. * feat: implement OIDC account linking UI (Phase 5) Add Connected Accounts section to Profile Security tab allowing users to: - View linked OIDC provider accounts - Link new SSO providers to their account - Unlink OIDC identities with validation - Prevent unlinking last authentication method Backend changes: - Add has_password virtual field to User model - Include has_password in profile API response - Track whether user has password set for validation Frontend changes: - Create oidcService for OIDC API operations - Create ConnectedAccounts component with link/unlink flows - Add confirmation dialog before unlinking accounts - Validate that users cannot unlink their last auth method - Show warning if user has no password set - Integrate Connected Accounts into SecurityTab User experience: - View all linked SSO provider accounts with email and link date - Link additional providers via "Link Provider" buttons - Unlink with two-step confirmation to prevent accidents - Clear error messages when unlinking would leave no auth method - Warning message suggesting password setup for OIDC-only users Fixes #977 * feat: complete OIDC documentation and UI improvements (Phase 6) This commit completes Phase 6 of the OIDC/SSO implementation with comprehensive documentation, bug fixes, and UI reorganization. Documentation: - Add comprehensive user guide at docs/10-oidc-sso.md with: - Setup guides for 6 major providers (Google, Okta, Keycloak, Authentik, PocketID, Azure AD) - Configuration examples for single and multiple providers - User features documentation (login, account linking, management) - Advanced topics (auto-provisioning, admin role assignment, hybrid auth) - Comprehensive troubleshooting section - Security considerations and best practices - Update README.md with OIDC/SSO section and quick setup examples Internationalization: - Add i18n support to OIDCProviderButtons component - Add translation keys for all OIDC UI text - Update English translations with "sign_in_with" key Bug Fixes: - Fix oidcService.ts to correctly unwrap API responses - Backend returns {providers: [...]} and {identities: [...]} - Frontend was expecting plain arrays, causing "map is not a function" error - Fix initiateOIDCLink to properly handle POST response UI Improvements: - Move OIDC/SSO to dedicated tab in profile settings - Create new OIDCTab component with green LinkIcon - Remove ConnectedAccounts from SecurityTab - Add OIDC tab between Security and API Keys tabs - Update ProfileSettings with new tab configuration - Security tab now focuses solely on password management Testing: - All linting passes - All tests pass (82 suites, 1223 tests) Related to #977 * feat: add OIDC/SSO translations for all 24 languages Add i18n support for OIDC/SSO features across all supported languages: - "Sign in with {{provider}}" button text - "OIDC/SSO" tab label in profile settings - OIDC authentication flow messages Translations added for: Arabic, Bulgarian, Danish, German, Greek, Spanish, Finnish, French, Indonesian, Italian, Japanese, Korean, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Slovenian, Swedish, Turkish, Ukrainian, Vietnamese, and Chinese. * fix: resolve 13 CodeQL security alerts This commit addresses critical security vulnerabilities identified by CodeQL scanning: **Security Configuration (2 fixes)** - Fix insecure Helmet configuration - enable CSP and HSTS in production - Fix clear text cookie transmission - enable secure cookies in production **Path Injection (3 fixes)** - Add path validation in users/controller.js to prevent arbitrary file deletion - Add path validation in users/service.js for avatar operations - Add path sanitization in attachment-utils.js deleteFileFromDisk function **Cross-Site Scripting (1 fix)** - Fix XSS vulnerability in GeneralTab.tsx avatar URL handling - Add URL sanitization to prevent javascript: protocol attacks **URL Security (2 fixes)** - Fix double escaping in url/service.js HTML entity decoding - Fix incomplete URL sanitization for YouTube domain validation **Denial of Service (1 fix)** - Add loop bound protection in inboxProcessingService.js (10k char limit) **Rate Limiting (3 fixes)** - Add rate limiting to auth routes (register, verify-email) - Add rate limiting to task attachment upload/delete endpoints - Add rate limiting to user avatar upload/delete endpoints **GitHub Actions Security (1 fix)** - Add explicit read-only permissions to CI workflow Note: CSRF middleware (#10) requires frontend changes and is tracked separately. Relates to PR #1008 * fix: allow test files in path validation for tests * fix: format long condition in attachment-utils for Prettier compliance Break the path validation condition across multiple lines to meet Prettier formatting requirements and fix CI linting failure. * fix: resolve CodeQL security alerts - Add rate limiting to OIDC authentication routes using authLimiter and authenticatedApiLimiter - Implement CSRF protection middleware using csrf-sync (skips for API tokens and test environment) - Add CSRF token endpoint at /api/csrf-token - Fix incomplete URL scheme validation in GeneralTab to block all dangerous schemes (javascript:, data:, vbscript:, file:) This addresses 5 high-severity CodeQL security vulnerabilities: - Missing rate limiting on OIDC auth routes - Missing CSRF middleware protection - Incomplete URL sanitization in avatar handling All 1223 tests passing. * fix: implement CSRF protection with lusca for CodeQL compliance Add CSRF protection using lusca.csrf (CodeQL's recommended library) to protect session-based authentication while supporting hybrid auth patterns. Implementation: - Pre-check middleware marks exempt requests (test env, Bearer tokens) - Lusca CSRF middleware applied with exemption flag check - Session-based requests require valid x-csrf-token header - Bearer token requests exempt (don't use cookies) - Test environment exempt for test execution This addresses CodeQL security alert js/missing-token-validation while maintaining support for both cookie-based and token-based authentication. Related: #977 (OIDC/SSO authentication feature)
This commit is contained in:
parent
86f1bdcf1f
commit
c2e9a1aa21
76 changed files with 5682 additions and 130 deletions
|
|
@ -24,7 +24,8 @@
|
|||
"no": "لا، استمر في التحرير",
|
||||
"yesDiscard": "نعم، ألغِ",
|
||||
"uploading": "جارٍ التحميل...",
|
||||
"refresh": "تحديث"
|
||||
"refresh": "تحديث",
|
||||
"unlinking": "فصل الارتباط..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "لوحة التحكم",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "الإنتاجية",
|
||||
"telegram": "تيليجرام",
|
||||
"ai": "ميزات الذكاء الاصطناعي",
|
||||
"notifications": "تفضيلات الإشعارات"
|
||||
"notifications": "تفضيلات الإشعارات",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "إعدادات الأمان",
|
||||
"changePassword": "تغيير كلمة المرور",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "إنشاء منطقة جديدة",
|
||||
"tag": "إنشاء علامة جديدة"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "الحسابات المتصلة",
|
||||
"description": "قم بربط الحسابات الخارجية لتسجيل الدخول باستخدام مزودي SSO.",
|
||||
"link": "ربط {{provider}}",
|
||||
"unlink": "فصل الارتباط",
|
||||
"confirmUnlink": "تأكيد فصل الارتباط",
|
||||
"linkedOn": "مرتبط في {{date}}",
|
||||
"cannotUnlinkLast": "لا يمكن فصل الارتباط عن طريقة المصادقة الأخيرة. يرجى تعيين كلمة مرور أولاً.",
|
||||
"noPasswordWarning": "لا توجد لديك كلمة مرور محددة. يُنصح بتعيين واحدة لتوفير طريقة تسجيل دخول بديلة."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "تذكرني",
|
||||
"loginSuccess": "تسجيل الدخول ناجح",
|
||||
"loginFailed": "فشل تسجيل الدخول",
|
||||
"logoutSuccess": "تسجيل الخروج ناجح"
|
||||
"logoutSuccess": "تسجيل الخروج ناجح",
|
||||
"or_continue_with_email": "أو تابع باستخدام البريد الإلكتروني",
|
||||
"sign_in_with": "تسجيل الدخول باستخدام {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "يتم إكمال تسجيل الدخول...",
|
||||
"authenticating_with_provider": "يتم المصادقة مع المزود. يرجى الانتظار..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "إنشاء جديد",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Не, продължавайте да редактирате",
|
||||
"yesDiscard": "Да, откажете",
|
||||
"uploading": "Качване...",
|
||||
"refresh": "Обнови"
|
||||
"refresh": "Обнови",
|
||||
"unlinking": "Откачане..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Табло",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Продуктивност",
|
||||
"telegram": "Телеграм",
|
||||
"ai": "AI функции",
|
||||
"notifications": "Настройки за известия"
|
||||
"notifications": "Настройки за известия",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Настройки за сигурност",
|
||||
"changePassword": "Смяна на парола",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Създаване на нова област",
|
||||
"tag": "Създаване на нов етикет"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Свързани акаунти",
|
||||
"description": "Свържете външни акаунти, за да влезете с доставчици на SSO.",
|
||||
"link": "Свържете {{provider}}",
|
||||
"unlink": "Откачане",
|
||||
"confirmUnlink": "Потвърдете откачането",
|
||||
"linkedOn": "Свързан на {{date}}",
|
||||
"cannotUnlinkLast": "Не можете да откачите последния си метод за удостоверяване. Моля, задайте парола първо.",
|
||||
"noPasswordWarning": "Нямате зададена парола. Помислете за задаване на такава, за да имате алтернативен метод за вход."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Запомни ме",
|
||||
"loginSuccess": "Успешно влизане",
|
||||
"loginFailed": "Неуспешно влизане",
|
||||
"logoutSuccess": "Успешно излизане"
|
||||
"logoutSuccess": "Успешно излизане",
|
||||
"or_continue_with_email": "Или продължете с имейл",
|
||||
"sign_in_with": "Влезте с {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Завършване на входа...",
|
||||
"authenticating_with_provider": "Удостоверяване с доставчика. Моля, изчакайте..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Създай ново",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nej, fortsæt med at redigere",
|
||||
"yesDiscard": "Ja, forkast",
|
||||
"uploading": "Uploader...",
|
||||
"refresh": "Opdater"
|
||||
"refresh": "Opdater",
|
||||
"unlinking": "Frakobler..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Produktivitet",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI-funktioner",
|
||||
"notifications": "Notifikationsindstillinger"
|
||||
"notifications": "Notifikationsindstillinger",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Sikkerhedsindstillinger",
|
||||
"changePassword": "Skift adgangskode",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Opret nyt område",
|
||||
"tag": "Opret ny tag"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Forbundne Konti",
|
||||
"description": "Link eksterne konti for at logge ind med SSO-udbydere.",
|
||||
"link": "Link {{provider}}",
|
||||
"unlink": "Frakobl",
|
||||
"confirmUnlink": "Bekræft Frakobling",
|
||||
"linkedOn": "Forbundet den {{date}}",
|
||||
"cannotUnlinkLast": "Kan ikke frakoble din sidste autentifikationsmetode. Venligst indstil en adgangskode først.",
|
||||
"noPasswordWarning": "Du har ikke indstillet en adgangskode. Overvej at indstille en for at have en alternativ loginmetode."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Husk Mig",
|
||||
"loginSuccess": "Login Succesfuld",
|
||||
"loginFailed": "Login Mislykkedes",
|
||||
"logoutSuccess": "Logout Succesfuld"
|
||||
"logoutSuccess": "Logout Succesfuld",
|
||||
"or_continue_with_email": "Eller fortsæt med e-mail",
|
||||
"sign_in_with": "Log ind med {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Afslutter log ind...",
|
||||
"authenticating_with_provider": "Autentificerer med udbyder. Vent venligst..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Opret Ny",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nein, weiter bearbeiten",
|
||||
"yesDiscard": "Ja, verwerfen",
|
||||
"uploading": "Hochladen...",
|
||||
"refresh": "Aktualisieren"
|
||||
"refresh": "Aktualisieren",
|
||||
"unlinking": "Trennen..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
|
|
@ -493,7 +494,8 @@
|
|||
"productivity": "Produktivität",
|
||||
"telegram": "Telegram",
|
||||
"ai": "KI-Funktionen",
|
||||
"notifications": "Benachrichtigungseinstellungen"
|
||||
"notifications": "Benachrichtigungseinstellungen",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Sicherheitseinstellungen",
|
||||
"changePassword": "Passwort ändern",
|
||||
|
|
@ -619,6 +621,16 @@
|
|||
"area": "Neuen Bereich erstellen",
|
||||
"tag": "Neues Tag erstellen"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Verbundene Konten",
|
||||
"description": "Verknüpfen Sie externe Konten, um sich bei SSO-Anbietern anzumelden.",
|
||||
"link": "Verknüpfen {{provider}}",
|
||||
"unlink": "Trennen",
|
||||
"confirmUnlink": "Trennen bestätigen",
|
||||
"linkedOn": "Verknüpft am {{date}}",
|
||||
"cannotUnlinkLast": "Kann Ihre letzte Authentifizierungsmethode nicht trennen. Bitte setzen Sie zuerst ein Passwort.",
|
||||
"noPasswordWarning": "Sie haben kein Passwort festgelegt. Erwägen Sie, eines festzulegen, um eine alternative Anmeldemethode zu haben."
|
||||
}
|
||||
},
|
||||
"nextTask": {
|
||||
|
|
@ -854,7 +866,13 @@
|
|||
"rememberMe": "Erinnere dich an mich",
|
||||
"loginSuccess": "Anmeldung erfolgreich",
|
||||
"loginFailed": "Anmeldung fehlgeschlagen",
|
||||
"logoutSuccess": "Abmeldung erfolgreich"
|
||||
"logoutSuccess": "Abmeldung erfolgreich",
|
||||
"or_continue_with_email": "Oder mit E-Mail fortfahren",
|
||||
"sign_in_with": "Mit {{provider}} anmelden",
|
||||
"oidc": {
|
||||
"completing_signin": "Anmeldung wird abgeschlossen...",
|
||||
"authenticating_with_provider": "Authentifizierung beim Anbieter. Bitte warten..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Neu erstellen",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Όχι, συνέχισε την επεξεργασία",
|
||||
"yesDiscard": "Ναι, απόρριψη",
|
||||
"uploading": "Ανεβάζω...",
|
||||
"refresh": "Ανανέωση"
|
||||
"refresh": "Ανανέωση",
|
||||
"unlinking": "Αποσύνδεση..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Πίνακας Ελέγχου",
|
||||
|
|
@ -115,7 +116,13 @@
|
|||
"rememberMe": "Απομνημόνευση",
|
||||
"loginSuccess": "Επιτυχής Σύνδεση",
|
||||
"loginFailed": "Αποτυχία Σύνδεσης",
|
||||
"logoutSuccess": "Επιτυχής Αποσύνδεση"
|
||||
"logoutSuccess": "Επιτυχής Αποσύνδεση",
|
||||
"or_continue_with_email": "Ή συνεχίστε με email",
|
||||
"sign_in_with": "Συνδεθείτε με {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Ολοκλήρωση σύνδεσης...",
|
||||
"authenticating_with_provider": "Αυθεντικοποίηση με τον πάροχο. Παρακαλώ περιμένετε..."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"title": "Ρυθμίσεις Προφίλ",
|
||||
|
|
@ -200,7 +207,8 @@
|
|||
"productivity": "Παραγωγικότητα",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Χαρακτηριστικά A.I.",
|
||||
"notifications": "Ειδοποιήσεις"
|
||||
"notifications": "Ειδοποιήσεις",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Ρυθμίσεις Ασφάλειας",
|
||||
"changePassword": "Αλλαγή Κωδικού",
|
||||
|
|
@ -294,6 +302,16 @@
|
|||
"area": "Δημιουργία νέας Περιοχής",
|
||||
"tag": "Δημιουργία νέας Ετικέτας"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Συνδεδεμένοι Λογαριασμοί",
|
||||
"description": "Συνδέστε εξωτερικούς λογαριασμούς για να συνδεθείτε με παρόχους SSO.",
|
||||
"link": "Σύνδεση με {{provider}}",
|
||||
"unlink": "Αποσύνδεση",
|
||||
"confirmUnlink": "Επιβεβαίωση Αποσύνδεσης",
|
||||
"linkedOn": "Συνδεδεμένο στις {{date}}",
|
||||
"cannotUnlinkLast": "Δεν μπορείτε να αποσυνδέσετε τη τελευταία μέθοδο αυθεντικοποίησης. Παρακαλώ ορίστε πρώτα έναν κωδικό πρόσβασης.",
|
||||
"noPasswordWarning": "Δεν έχετε ορίσει κωδικό πρόσβασης. Σκεφτείτε να ορίσετε έναν για να έχετε μια εναλλακτική μέθοδο σύνδεσης."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
"loading": "Loading...",
|
||||
"appLoading": "Loading application... Please wait.",
|
||||
"completed": "Completed",
|
||||
"unlinking": "Unlinking...",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"area": "Area",
|
||||
|
|
@ -338,7 +339,8 @@
|
|||
"skipNextAction": "Skip for now",
|
||||
"nextActionHint": "Think of the smallest, most concrete step you can take right now to move this project forward.",
|
||||
"tabs": {
|
||||
"notifications": "Notification Preferences"
|
||||
"notifications": "Notification Preferences",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Security Settings",
|
||||
"changePassword": "Change Password",
|
||||
|
|
@ -370,7 +372,17 @@
|
|||
"avatarUploadFailed": "Failed to upload avatar",
|
||||
"avatarRemoveFailed": "Failed to remove avatar",
|
||||
"notificationsDescription": "Choose how you want to be notified about important events.",
|
||||
"aiFeatures": "AI Features"
|
||||
"aiFeatures": "AI Features",
|
||||
"connectedAccounts": {
|
||||
"title": "Connected Accounts",
|
||||
"description": "Link external accounts to sign in with SSO providers.",
|
||||
"link": "Link {{provider}}",
|
||||
"unlink": "Unlink",
|
||||
"confirmUnlink": "Confirm Unlink",
|
||||
"linkedOn": "Linked on {{date}}",
|
||||
"cannotUnlinkLast": "Cannot unlink your last authentication method. Please set a password first.",
|
||||
"noPasswordWarning": "You have no password set. Consider setting one to have an alternative login method."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
"stalledProjects": "Stalled Projects",
|
||||
|
|
@ -524,7 +536,13 @@
|
|||
"rememberMe": "Remember Me",
|
||||
"loginSuccess": "Login Successful",
|
||||
"loginFailed": "Login Failed",
|
||||
"logoutSuccess": "Logout Successful"
|
||||
"logoutSuccess": "Logout Successful",
|
||||
"or_continue_with_email": "Or continue with email",
|
||||
"sign_in_with": "Sign in with {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Completing sign-in...",
|
||||
"authenticating_with_provider": "Authenticating with provider. Please wait..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Create New",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "No, seguir editando",
|
||||
"yesDiscard": "Sí, descartar",
|
||||
"uploading": "Subiendo...",
|
||||
"refresh": "Actualizar"
|
||||
"refresh": "Actualizar",
|
||||
"unlinking": "Desvinculando..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Tablero",
|
||||
|
|
@ -115,7 +116,13 @@
|
|||
"rememberMe": "Recordarme",
|
||||
"loginSuccess": "Inicio de Sesión Exitoso",
|
||||
"loginFailed": "Error al Iniciar Sesión",
|
||||
"logoutSuccess": "Cierre de Sesión Exitoso"
|
||||
"logoutSuccess": "Cierre de Sesión Exitoso",
|
||||
"or_continue_with_email": "O continuar con el correo electrónico",
|
||||
"sign_in_with": "Iniciar sesión con {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Completando el inicio de sesión...",
|
||||
"authenticating_with_provider": "Autenticando con el proveedor. Por favor, espere..."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"title": "Configuración de Perfil",
|
||||
|
|
@ -163,7 +170,8 @@
|
|||
"productivity": "Productividad",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Funciones IA",
|
||||
"notifications": "Preferencias de Notificación"
|
||||
"notifications": "Preferencias de Notificación",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Configuración de Seguridad",
|
||||
"changePassword": "Cambiar Contraseña",
|
||||
|
|
@ -294,6 +302,16 @@
|
|||
"area": "Crear nueva área",
|
||||
"tag": "Crear nueva etiqueta"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Cuentas Conectadas",
|
||||
"description": "Vincula cuentas externas para iniciar sesión con proveedores de SSO.",
|
||||
"link": "Vincular {{provider}}",
|
||||
"unlink": "Desvincular",
|
||||
"confirmUnlink": "Confirmar Desvinculación",
|
||||
"linkedOn": "Vinculado el {{date}}",
|
||||
"cannotUnlinkLast": "No se puede desvincular su último método de autenticación. Por favor, establezca una contraseña primero.",
|
||||
"noPasswordWarning": "No tiene ninguna contraseña establecida. Considere establecer una para tener un método de inicio de sesión alternativo."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Ei, jatka muokkaamista",
|
||||
"yesDiscard": "Kyllä, hylkää",
|
||||
"uploading": "Lähetetään...",
|
||||
"refresh": "Päivitä"
|
||||
"refresh": "Päivitä",
|
||||
"unlinking": "Irrottaminen..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Ohjauspaneeli",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Tuottavuus",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI-ominaisuudet",
|
||||
"notifications": "Ilmoitusasetukset"
|
||||
"notifications": "Ilmoitusasetukset",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Turvallisuusasetukset",
|
||||
"changePassword": "Vaihda salasana",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Luo uusi Alue",
|
||||
"tag": "Luo uusi Tagi"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Liitetyt tilit",
|
||||
"description": "Linkitä ulkoiset tilit kirjautuaksesi SSO-palveluntarjoajien kanssa.",
|
||||
"link": "Linkitä {{provider}}",
|
||||
"unlink": "Irrota",
|
||||
"confirmUnlink": "Vahvista irrottaminen",
|
||||
"linkedOn": "Liitetty {{date}}",
|
||||
"cannotUnlinkLast": "Et voi irrottaa viimeistä todennusmenetelmääsi. Aseta ensin salasana.",
|
||||
"noPasswordWarning": "Sinulla ei ole asetettua salasanaa. Harkitse salasanan asettamista vaihtoehtoista kirjautumistapaa varten."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Muista minut",
|
||||
"loginSuccess": "Kirjautuminen onnistui",
|
||||
"loginFailed": "Kirjautuminen epäonnistui",
|
||||
"logoutSuccess": "Uloskirjautuminen onnistui"
|
||||
"logoutSuccess": "Uloskirjautuminen onnistui",
|
||||
"or_continue_with_email": "Tai jatka sähköpostilla",
|
||||
"sign_in_with": "Kirjaudu sisään {{provider}} avulla",
|
||||
"oidc": {
|
||||
"completing_signin": "Kirjautumisen viimeistely...",
|
||||
"authenticating_with_provider": "Todennetaan palveluntarjoajalla. Ole hyvä ja odota..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Luo uusi",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Non, continuer à éditer",
|
||||
"yesDiscard": "Oui, abandonner",
|
||||
"uploading": "Téléchargement...",
|
||||
"refresh": "Rafraîchir"
|
||||
"refresh": "Rafraîchir",
|
||||
"unlinking": "Dissociation..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Tableau de bord",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Productivité",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Fonctionnalités IA",
|
||||
"notifications": "Préférences de Notification"
|
||||
"notifications": "Préférences de Notification",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Paramètres de sécurité",
|
||||
"changePassword": "Changer le mot de passe",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Créer une nouvelle Zone",
|
||||
"tag": "Créer une nouvelle Étiquette"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Comptes Connectés",
|
||||
"description": "Liez des comptes externes pour vous connecter avec des fournisseurs SSO.",
|
||||
"link": "Lier {{provider}}",
|
||||
"unlink": "Dissocier",
|
||||
"confirmUnlink": "Confirmer la Dissociation",
|
||||
"linkedOn": "Lié le {{date}}",
|
||||
"cannotUnlinkLast": "Impossible de dissocier votre dernier moyen d'authentification. Veuillez d'abord définir un mot de passe.",
|
||||
"noPasswordWarning": "Vous n'avez pas de mot de passe défini. Envisagez d'en définir un pour avoir une méthode de connexion alternative."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Se souvenir de moi",
|
||||
"loginSuccess": "Connexion réussie",
|
||||
"loginFailed": "Échec de la connexion",
|
||||
"logoutSuccess": "Déconnexion réussie"
|
||||
"logoutSuccess": "Déconnexion réussie",
|
||||
"or_continue_with_email": "Ou continuez avec l'email",
|
||||
"sign_in_with": "Se connecter avec {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Finalisation de la connexion...",
|
||||
"authenticating_with_provider": "Authentification avec le fournisseur. Veuillez patienter..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Créer nouveau",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Tidak, lanjutkan mengedit",
|
||||
"yesDiscard": "Ya, buang",
|
||||
"uploading": "Mengunggah...",
|
||||
"refresh": "Segarkan"
|
||||
"refresh": "Segarkan",
|
||||
"unlinking": "Menghapus tautan..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dasbor",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Produktivitas",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Fitur AI",
|
||||
"notifications": "Preferensi Notifikasi"
|
||||
"notifications": "Preferensi Notifikasi",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Pengaturan Keamanan",
|
||||
"changePassword": "Ubah Kata Sandi",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Buat Area baru",
|
||||
"tag": "Buat Tag baru"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Akun Terhubung",
|
||||
"description": "Tautkan akun eksternal untuk masuk dengan penyedia SSO.",
|
||||
"link": "Tautkan {{provider}}",
|
||||
"unlink": "Hapus tautan",
|
||||
"confirmUnlink": "Konfirmasi Hapus Tautan",
|
||||
"linkedOn": "Tautkan pada {{date}}",
|
||||
"cannotUnlinkLast": "Tidak dapat menghapus tautan metode otentikasi terakhir Anda. Silakan atur kata sandi terlebih dahulu.",
|
||||
"noPasswordWarning": "Anda belum mengatur kata sandi. Pertimbangkan untuk mengatur satu untuk memiliki metode login alternatif."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Ingat Saya",
|
||||
"loginSuccess": "Login Berhasil",
|
||||
"loginFailed": "Login Gagal",
|
||||
"logoutSuccess": "Logout Berhasil"
|
||||
"logoutSuccess": "Logout Berhasil",
|
||||
"or_continue_with_email": "Atau lanjutkan dengan email",
|
||||
"sign_in_with": "Masuk dengan {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Menyelesaikan masuk...",
|
||||
"authenticating_with_provider": "Mengautentikasi dengan penyedia. Silakan tunggu..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Buat Baru",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "No, continua a modificare",
|
||||
"yesDiscard": "Sì, scarta",
|
||||
"uploading": "Caricamento...",
|
||||
"refresh": "Aggiorna"
|
||||
"refresh": "Aggiorna",
|
||||
"unlinking": "Disconnettendo..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
|
|
@ -302,7 +303,8 @@
|
|||
"productivity": "Produttività",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Funzioni AI",
|
||||
"notifications": "Preferenze di Notifica"
|
||||
"notifications": "Preferenze di Notifica",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Impostazioni Sicurezza",
|
||||
"changePassword": "Cambia Password",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Crea una nuova Area",
|
||||
"tag": "Crea un nuovo Tag"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Account Connessi",
|
||||
"description": "Collega account esterni per accedere con i fornitori SSO.",
|
||||
"link": "Collega {{provider}}",
|
||||
"unlink": "Disconnetti",
|
||||
"confirmUnlink": "Conferma Disconnessione",
|
||||
"linkedOn": "Collegato il {{date}}",
|
||||
"cannotUnlinkLast": "Impossibile disconnettere il tuo ultimo metodo di autenticazione. Imposta prima una password.",
|
||||
"noPasswordWarning": "Non hai impostato una password. Considera di impostarne una per avere un metodo di accesso alternativo."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Ricordami",
|
||||
"loginSuccess": "Accesso Riuscito",
|
||||
"loginFailed": "Accesso Fallito",
|
||||
"logoutSuccess": "Disconnessione Riuscita"
|
||||
"logoutSuccess": "Disconnessione Riuscita",
|
||||
"or_continue_with_email": "Oppure continua con l'email",
|
||||
"sign_in_with": "Accedi con {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Completando l'accesso...",
|
||||
"authenticating_with_provider": "Autenticazione con il fornitore. Attendere prego..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Crea Nuovo",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "いいえ、編集を続ける",
|
||||
"yesDiscard": "はい、破棄する",
|
||||
"uploading": "アップロード中...",
|
||||
"refresh": "更新"
|
||||
"refresh": "更新",
|
||||
"unlinking": "リンク解除中..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "ダッシュボード",
|
||||
|
|
@ -227,7 +228,8 @@
|
|||
"productivity": "生産性",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI機能",
|
||||
"notifications": "通知設定"
|
||||
"notifications": "通知設定",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "セキュリティ設定",
|
||||
"changePassword": "パスワード変更",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "新しいエリアを作成",
|
||||
"tag": "新しいタグを作成"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "接続されたアカウント",
|
||||
"description": "SSOプロバイダーを使用してサインインするために外部アカウントをリンクします。",
|
||||
"link": "{{provider}}をリンク",
|
||||
"unlink": "リンク解除",
|
||||
"confirmUnlink": "リンク解除を確認",
|
||||
"linkedOn": "{{date}}にリンク済み",
|
||||
"cannotUnlinkLast": "最後の認証方法をリンク解除できません。最初にパスワードを設定してください。",
|
||||
"noPasswordWarning": "パスワードが設定されていません。代替のログイン方法を持つために設定を検討してください。"
|
||||
}
|
||||
},
|
||||
"nextTask": {
|
||||
|
|
@ -513,7 +525,13 @@
|
|||
"rememberMe": "ログイン状態を保持する",
|
||||
"loginSuccess": "ログイン成功",
|
||||
"loginFailed": "ログイン失敗",
|
||||
"logoutSuccess": "ログアウト成功"
|
||||
"logoutSuccess": "ログアウト成功",
|
||||
"or_continue_with_email": "またはメールで続行",
|
||||
"sign_in_with": "{{provider}}でサインイン",
|
||||
"oidc": {
|
||||
"completing_signin": "サインインを完了しています...",
|
||||
"authenticating_with_provider": "プロバイダーで認証中です。お待ちください..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "新規作成",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "아니요, 편집 계속하기",
|
||||
"yesDiscard": "네, 버리기",
|
||||
"uploading": "업로드 중...",
|
||||
"refresh": "새로 고침"
|
||||
"refresh": "새로 고침",
|
||||
"unlinking": "연결 해제 중..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "대시보드",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "생산성",
|
||||
"telegram": "텔레그램",
|
||||
"ai": "AI 기능",
|
||||
"notifications": "알림 설정"
|
||||
"notifications": "알림 설정",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "보안 설정",
|
||||
"changePassword": "비밀번호 변경",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "새로운 영역 만들기",
|
||||
"tag": "새로운 태그 만들기"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "연결된 계정",
|
||||
"description": "SSO 제공자를 통해 로그인하기 위해 외부 계정을 연결하세요.",
|
||||
"link": "{{provider}} 연결",
|
||||
"unlink": "연결 해제",
|
||||
"confirmUnlink": "연결 해제 확인",
|
||||
"linkedOn": "{{date}}에 연결됨",
|
||||
"cannotUnlinkLast": "마지막 인증 방법을 연결 해제할 수 없습니다. 먼저 비밀번호를 설정하세요.",
|
||||
"noPasswordWarning": "설정된 비밀번호가 없습니다. 대체 로그인 방법을 위해 비밀번호 설정을 고려하세요."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "로그인 상태 유지",
|
||||
"loginSuccess": "로그인 성공",
|
||||
"loginFailed": "로그인 실패",
|
||||
"logoutSuccess": "로그아웃 성공"
|
||||
"logoutSuccess": "로그아웃 성공",
|
||||
"or_continue_with_email": "또는 이메일로 계속하기",
|
||||
"sign_in_with": "{{provider}}로 로그인",
|
||||
"oidc": {
|
||||
"completing_signin": "로그인 완료 중...",
|
||||
"authenticating_with_provider": "제공자와 인증 중입니다. 잠시 기다려 주세요..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "새로 만들기",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nee, blijf bewerken",
|
||||
"yesDiscard": "Ja, negeren",
|
||||
"uploading": "Uploaden...",
|
||||
"refresh": "Vernieuwen"
|
||||
"refresh": "Vernieuwen",
|
||||
"unlinking": "Ontkoppelen..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Productiviteit",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI-functies",
|
||||
"notifications": "Meldingsvoorkeuren"
|
||||
"notifications": "Meldingsvoorkeuren",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Beveiligingsinstellingen",
|
||||
"changePassword": "Wachtwoord wijzigen",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Maak nieuw Gebied aan",
|
||||
"tag": "Maak nieuwe Tag aan"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Verbonden Accounts",
|
||||
"description": "Koppel externe accounts om in te loggen met SSO-providers.",
|
||||
"link": "Koppel {{provider}}",
|
||||
"unlink": "Ontkoppel",
|
||||
"confirmUnlink": "Bevestig Ontkoppeling",
|
||||
"linkedOn": "Gekoppeld op {{date}}",
|
||||
"cannotUnlinkLast": "Kan uw laatste authenticatiemethode niet ontkoppelen. Stel eerst een wachtwoord in.",
|
||||
"noPasswordWarning": "U heeft geen wachtwoord ingesteld. Overweeg er een in te stellen voor een alternatieve inlogmethode."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Onthoud Mij",
|
||||
"loginSuccess": "Inloggen Succesvol",
|
||||
"loginFailed": "Inloggen Mislukt",
|
||||
"logoutSuccess": "Uitloggen Succesvol"
|
||||
"logoutSuccess": "Uitloggen Succesvol",
|
||||
"or_continue_with_email": "Of ga verder met e-mail",
|
||||
"sign_in_with": "Inloggen met {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Inloggen voltooien...",
|
||||
"authenticating_with_provider": "Authenticeren met provider. Even geduld..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Nieuw Aanmaken",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nei, fortsett å redigere",
|
||||
"yesDiscard": "Ja, forkast",
|
||||
"uploading": "Laster opp...",
|
||||
"refresh": "Oppdater"
|
||||
"refresh": "Oppdater",
|
||||
"unlinking": "Fjerner kobling..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashbord",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Produktivitet",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI-funksjoner",
|
||||
"notifications": "Varslingsinnstillinger"
|
||||
"notifications": "Varslingsinnstillinger",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Sikkerhetsinnstillinger",
|
||||
"changePassword": "Endre passord",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Opprett nytt område",
|
||||
"tag": "Opprett ny etikett"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Koblede kontoer",
|
||||
"description": "Koble eksterne kontoer for å logge inn med SSO-leverandører.",
|
||||
"link": "Koble {{provider}}",
|
||||
"unlink": "Fjern kobling",
|
||||
"confirmUnlink": "Bekreft fjerning av kobling",
|
||||
"linkedOn": "Koblet den {{date}}",
|
||||
"cannotUnlinkLast": "Kan ikke fjerne koblingen til din siste autentiseringsmetode. Vennligst sett et passord først.",
|
||||
"noPasswordWarning": "Du har ikke satt et passord. Vurder å sette et for å ha en alternativ påloggingsmetode."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Husk meg",
|
||||
"loginSuccess": "Innlogging vellykket",
|
||||
"loginFailed": "Innlogging mislyktes",
|
||||
"logoutSuccess": "Utlogging vellykket"
|
||||
"logoutSuccess": "Utlogging vellykket",
|
||||
"or_continue_with_email": "Eller fortsett med e-post",
|
||||
"sign_in_with": "Logg inn med {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Fullfører pålogging...",
|
||||
"authenticating_with_provider": "Autentiserer med leverandør. Vennligst vent..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Opprett ny",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nie, kontynuuj edytowanie",
|
||||
"yesDiscard": "Tak, porzuć",
|
||||
"uploading": "Przesyłanie...",
|
||||
"refresh": "Odśwież"
|
||||
"refresh": "Odśwież",
|
||||
"unlinking": "Odłączanie..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Panel sterowania",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Produktywność",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Funkcje AI",
|
||||
"notifications": "Preferencje powiadomień"
|
||||
"notifications": "Preferencje powiadomień",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Ustawienia Bezpieczeństwa",
|
||||
"changePassword": "Zmień Hasło",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Utwórz nowy Obszar",
|
||||
"tag": "Utwórz nową Etykietę"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Połączone konta",
|
||||
"description": "Połącz konta zewnętrzne, aby zalogować się za pomocą dostawców SSO.",
|
||||
"link": "Połącz {{provider}}",
|
||||
"unlink": "Odłącz",
|
||||
"confirmUnlink": "Potwierdź odłączenie",
|
||||
"linkedOn": "Połączono {{date}}",
|
||||
"cannotUnlinkLast": "Nie można odłączyć ostatniej metody uwierzytelniania. Najpierw ustaw hasło.",
|
||||
"noPasswordWarning": "Nie masz ustawionego hasła. Rozważ ustawienie go, aby mieć alternatywną metodę logowania."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Zapamiętaj Mnie",
|
||||
"loginSuccess": "Logowanie Udane",
|
||||
"loginFailed": "Logowanie Nieudane",
|
||||
"logoutSuccess": "Wylogowanie Udane"
|
||||
"logoutSuccess": "Wylogowanie Udane",
|
||||
"or_continue_with_email": "Lub kontynuuj z e-mailem",
|
||||
"sign_in_with": "Zaloguj się za pomocą {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Kończenie logowania...",
|
||||
"authenticating_with_provider": "Uwierzytelnianie z dostawcą. Proszę czekać..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Utwórz Nowy",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Não, continuar editando",
|
||||
"yesDiscard": "Sim, descartar",
|
||||
"uploading": "Carregando...",
|
||||
"refresh": "Atualizar"
|
||||
"refresh": "Atualizar",
|
||||
"unlinking": "Desvinculando..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Painel",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Produtividade",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Recursos de IA",
|
||||
"notifications": "Preferências de Notificação"
|
||||
"notifications": "Preferências de Notificação",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Configurações de Segurança",
|
||||
"changePassword": "Alterar Senha",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Criar nova Área",
|
||||
"tag": "Criar nova Tag"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Contas Conectadas",
|
||||
"description": "Vincule contas externas para fazer login com provedores SSO.",
|
||||
"link": "Vincular {{provider}}",
|
||||
"unlink": "Desvincular",
|
||||
"confirmUnlink": "Confirmar Desvinculação",
|
||||
"linkedOn": "Vinculado em {{date}}",
|
||||
"cannotUnlinkLast": "Não é possível desvincular seu último método de autenticação. Por favor, defina uma senha primeiro.",
|
||||
"noPasswordWarning": "Você não tem uma senha definida. Considere definir uma para ter um método de login alternativo."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Lembrar-me",
|
||||
"loginSuccess": "Login Bem-sucedido",
|
||||
"loginFailed": "Login Falhou",
|
||||
"logoutSuccess": "Logout Bem-sucedido"
|
||||
"logoutSuccess": "Logout Bem-sucedido",
|
||||
"or_continue_with_email": "Ou continue com e-mail",
|
||||
"sign_in_with": "Fazer login com {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Concluindo login...",
|
||||
"authenticating_with_provider": "Autenticando com o provedor. Por favor, aguarde..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Criar Novo",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nu, continuă editarea",
|
||||
"yesDiscard": "Da, renunță",
|
||||
"uploading": "Se încarcă...",
|
||||
"refresh": "Reîmprospătare"
|
||||
"refresh": "Reîmprospătare",
|
||||
"unlinking": "Dezlegare..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Tabloul de bord",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Productivitate",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Funcții AI",
|
||||
"notifications": "Preferințe de Notificare"
|
||||
"notifications": "Preferințe de Notificare",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Setări de Securitate",
|
||||
"changePassword": "Schimbă Parola",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Creează o nouă zonă",
|
||||
"tag": "Creează un nou etichetă"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Conturi Conectate",
|
||||
"description": "Leagă conturi externe pentru a te conecta cu furnizorii SSO.",
|
||||
"link": "Leagă {{provider}}",
|
||||
"unlink": "Dezleagă",
|
||||
"confirmUnlink": "Confirmă Dezlegarea",
|
||||
"linkedOn": "Legat pe {{date}}",
|
||||
"cannotUnlinkLast": "Nu poți dezlega ultima metodă de autentificare. Te rugăm să setezi mai întâi o parolă.",
|
||||
"noPasswordWarning": "Nu ai setată nicio parolă. Ia în considerare setarea uneia pentru a avea o metodă alternativă de conectare."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Ține-mă minte",
|
||||
"loginSuccess": "Autentificare reușită",
|
||||
"loginFailed": "Autentificare eșuată",
|
||||
"logoutSuccess": "Deconectare reușită"
|
||||
"logoutSuccess": "Deconectare reușită",
|
||||
"or_continue_with_email": "Sau continuă cu email",
|
||||
"sign_in_with": "Conectează-te cu {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Finalizând conectarea...",
|
||||
"authenticating_with_provider": "Autentificare cu furnizorul. Te rugăm să aștepți..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Creează Nou",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Нет, продолжить редактирование",
|
||||
"yesDiscard": "Да, отменить",
|
||||
"uploading": "Загрузка...",
|
||||
"refresh": "Обновить"
|
||||
"refresh": "Обновить",
|
||||
"unlinking": "Отвязываем..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Панель управления",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Продуктивность",
|
||||
"telegram": "Телеграм",
|
||||
"ai": "Функции ИИ",
|
||||
"notifications": "Настройки уведомлений"
|
||||
"notifications": "Настройки уведомлений",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Настройки безопасности",
|
||||
"changePassword": "Сменить пароль",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Создать новую Область",
|
||||
"tag": "Создать новый Тег"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Подключенные аккаунты",
|
||||
"description": "Свяжите внешние аккаунты для входа через SSO провайдеров.",
|
||||
"link": "Связать {{provider}}",
|
||||
"unlink": "Отвязать",
|
||||
"confirmUnlink": "Подтвердить отвязку",
|
||||
"linkedOn": "Связано {{date}}",
|
||||
"cannotUnlinkLast": "Невозможно отвязать ваш последний метод аутентификации. Пожалуйста, сначала установите пароль.",
|
||||
"noPasswordWarning": "У вас не установлен пароль. Рассмотрите возможность его установки для альтернативного метода входа."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Запомнить меня",
|
||||
"loginSuccess": "Вход выполнен успешно",
|
||||
"loginFailed": "Ошибка входа",
|
||||
"logoutSuccess": "Выход выполнен успешно"
|
||||
"logoutSuccess": "Выход выполнен успешно",
|
||||
"or_continue_with_email": "Или продолжите с электронной почтой",
|
||||
"sign_in_with": "Войти с помощью {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Завершение входа...",
|
||||
"authenticating_with_provider": "Аутентификация с провайдером. Пожалуйста, подождите..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Создать новый",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Ne, nadaljuj z urejanjem",
|
||||
"yesDiscard": "Da, zavrzi",
|
||||
"uploading": "Nalagam...",
|
||||
"refresh": "Osveži"
|
||||
"refresh": "Osveži",
|
||||
"unlinking": "Odvezovanje..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Nadzorna plošča",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Produktivnost",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI Funkcije",
|
||||
"notifications": "Nastavitve obvestil"
|
||||
"notifications": "Nastavitve obvestil",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Nastavitve varnosti",
|
||||
"changePassword": "Spremeni geslo",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Ustvari novo področje",
|
||||
"tag": "Ustvari novo oznako"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Povezani računi",
|
||||
"description": "Povežite zunanje račune za prijavo z SSO ponudniki.",
|
||||
"link": "Poveži {{provider}}",
|
||||
"unlink": "Odveži",
|
||||
"confirmUnlink": "Potrdi odvezovanje",
|
||||
"linkedOn": "Povezano dne {{date}}",
|
||||
"cannotUnlinkLast": "Ne morete odvezati vaše zadnje metode avtentikacije. Najprej nastavite geslo.",
|
||||
"noPasswordWarning": "Nimate nastavljenega gesla. Razmislite o nastavitvi, da boste imeli alternativno metodo prijave."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Zapomni si me",
|
||||
"loginSuccess": "Prijava uspešna",
|
||||
"loginFailed": "Prijava neuspešna",
|
||||
"logoutSuccess": "Odjava uspešna"
|
||||
"logoutSuccess": "Odjava uspešna",
|
||||
"or_continue_with_email": "Ali nadaljujte z e-pošto",
|
||||
"sign_in_with": "Prijavite se z {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Dokončujem prijavo...",
|
||||
"authenticating_with_provider": "Avtentikacija pri ponudniku. Prosimo, počakajte..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Ustvari novo",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Nej, fortsätt redigera",
|
||||
"yesDiscard": "Ja, kasta bort",
|
||||
"uploading": "Laddar upp...",
|
||||
"refresh": "Uppdatera"
|
||||
"refresh": "Uppdatera",
|
||||
"unlinking": "Avlänkar..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
|
|
@ -320,7 +321,8 @@
|
|||
"productivity": "Produktivitet",
|
||||
"telegram": "Telegram",
|
||||
"ai": "AI-funktioner",
|
||||
"notifications": "Notifikationsinställningar"
|
||||
"notifications": "Notifikationsinställningar",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Säkerhetsinställningar",
|
||||
"changePassword": "Ändra lösenord",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Skapa nytt område",
|
||||
"tag": "Skapa ny tagg"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Anslutna Konton",
|
||||
"description": "Länka externa konton för att logga in med SSO-leverantörer.",
|
||||
"link": "Länka {{provider}}",
|
||||
"unlink": "Avlänk",
|
||||
"confirmUnlink": "Bekräfta avlänkning",
|
||||
"linkedOn": "Länkat den {{date}}",
|
||||
"cannotUnlinkLast": "Kan inte avlänka din sista autentiseringsmetod. Vänligen ställ in ett lösenord först.",
|
||||
"noPasswordWarning": "Du har inget lösenord inställt. Överväg att ställa in ett för att ha en alternativ inloggningsmetod."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Kom ihåg mig",
|
||||
"loginSuccess": "Inloggning lyckades",
|
||||
"loginFailed": "Inloggning misslyckades",
|
||||
"logoutSuccess": "Utloggning lyckades"
|
||||
"logoutSuccess": "Utloggning lyckades",
|
||||
"or_continue_with_email": "Eller fortsätt med e-post",
|
||||
"sign_in_with": "Logga in med {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Avslutar inloggning...",
|
||||
"authenticating_with_provider": "Autentiserar med leverantör. Vänligen vänta..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Skapa ny",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Hayır, düzenlemeye devam et",
|
||||
"yesDiscard": "Evet, iptal et",
|
||||
"uploading": "Yükleniyor...",
|
||||
"refresh": "Yenile"
|
||||
"refresh": "Yenile",
|
||||
"unlinking": "Bağlantı kesiliyor..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Gösterge Paneli",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Verimlilik",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Yapay Zeka Özellikleri",
|
||||
"notifications": "Bildirim Tercihleri"
|
||||
"notifications": "Bildirim Tercihleri",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Güvenlik Ayarları",
|
||||
"changePassword": "Şifre Değiştir",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Yeni Alan oluştur",
|
||||
"tag": "Yeni Etiket oluştur"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Bağlı Hesaplar",
|
||||
"description": "SSO sağlayıcıları ile oturum açmak için harici hesapları bağlayın.",
|
||||
"link": "Bağla {{provider}}",
|
||||
"unlink": "Bağlantıyı Kes",
|
||||
"confirmUnlink": "Bağlantıyı Kesmeyi Onayla",
|
||||
"linkedOn": "{{date}} tarihinde bağlandı",
|
||||
"cannotUnlinkLast": "Son kimlik doğrulama yöntemini kaldıramazsınız. Lütfen önce bir şifre belirleyin.",
|
||||
"noPasswordWarning": "Hiç şifreniz yok. Alternatif bir oturum açma yöntemi için bir şifre belirlemeyi düşünün."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Beni Hatırla",
|
||||
"loginSuccess": "Giriş Başarılı",
|
||||
"loginFailed": "Giriş Başarısız",
|
||||
"logoutSuccess": "Çıkış Başarılı"
|
||||
"logoutSuccess": "Çıkış Başarılı",
|
||||
"or_continue_with_email": "Ya da e-posta ile devam et",
|
||||
"sign_in_with": "{{provider}} ile oturum aç",
|
||||
"oidc": {
|
||||
"completing_signin": "Oturum açma işlemi tamamlanıyor...",
|
||||
"authenticating_with_provider": "Sağlayıcı ile kimlik doğrulama yapılıyor. Lütfen bekleyin..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Yeni Oluştur",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Ні, продовжити редагування",
|
||||
"yesDiscard": "Так, відкинути",
|
||||
"uploading": "Завантаження...",
|
||||
"refresh": "Оновити"
|
||||
"refresh": "Оновити",
|
||||
"unlinking": "Відв'язування..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Дашборд",
|
||||
|
|
@ -579,7 +580,8 @@
|
|||
"productivity": "Продуктивність",
|
||||
"telegram": "Telegram",
|
||||
"ai": "ШІ Функції",
|
||||
"notifications": "Налаштування сповіщень"
|
||||
"notifications": "Налаштування сповіщень",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Налаштування безпеки",
|
||||
"changePassword": "Змінити пароль",
|
||||
|
|
@ -705,6 +707,16 @@
|
|||
"area": "Створити нову Область",
|
||||
"tag": "Створити новий Тег"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Підключені акаунти",
|
||||
"description": "Прив'яжіть зовнішні акаунти для входу через постачальників SSO.",
|
||||
"link": "Прив'язати {{provider}}",
|
||||
"unlink": "Відв'язати",
|
||||
"confirmUnlink": "Підтвердити відв'язування",
|
||||
"linkedOn": "Прив'язано {{date}}",
|
||||
"cannotUnlinkLast": "Не можна відв'язати ваш останній метод автентифікації. Спочатку встановіть пароль.",
|
||||
"noPasswordWarning": "У вас не встановлено пароль. Розгляньте можливість його встановлення для альтернативного методу входу."
|
||||
}
|
||||
},
|
||||
"task": {
|
||||
|
|
@ -921,7 +933,13 @@
|
|||
"rememberMe": "Запам'ятати мене",
|
||||
"loginSuccess": "Успішний вхід",
|
||||
"loginFailed": "Помилка входу",
|
||||
"logoutSuccess": "Успішний вихід"
|
||||
"logoutSuccess": "Успішний вихід",
|
||||
"or_continue_with_email": "Або продовжити з електронною поштою",
|
||||
"sign_in_with": "Увійти з {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Завершення входу...",
|
||||
"authenticating_with_provider": "Аутентифікація з постачальником. Будь ласка, зачекайте..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Створити новий",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "Không, tiếp tục chỉnh sửa",
|
||||
"yesDiscard": "Có, bỏ qua",
|
||||
"uploading": "Đang tải lên...",
|
||||
"refresh": "Làm mới"
|
||||
"refresh": "Làm mới",
|
||||
"unlinking": "Ngắt liên kết..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Bảng điều khiển",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "Năng suất",
|
||||
"telegram": "Telegram",
|
||||
"ai": "Tính năng AI",
|
||||
"notifications": "Tùy Chọn Thông Báo"
|
||||
"notifications": "Tùy Chọn Thông Báo",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "Cài đặt bảo mật",
|
||||
"changePassword": "Đổi mật khẩu",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "Tạo khu vực mới",
|
||||
"tag": "Tạo thẻ mới"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "Tài khoản đã kết nối",
|
||||
"description": "Liên kết các tài khoản bên ngoài để đăng nhập với các nhà cung cấp SSO.",
|
||||
"link": "Liên kết {{provider}}",
|
||||
"unlink": "Ngắt liên kết",
|
||||
"confirmUnlink": "Xác nhận ngắt liên kết",
|
||||
"linkedOn": "Đã liên kết vào {{date}}",
|
||||
"cannotUnlinkLast": "Không thể ngắt liên kết phương thức xác thực cuối cùng của bạn. Vui lòng đặt mật khẩu trước.",
|
||||
"noPasswordWarning": "Bạn chưa đặt mật khẩu. Hãy cân nhắc đặt một cái để có phương thức đăng nhập thay thế."
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "Ghi nhớ tôi",
|
||||
"loginSuccess": "Đăng nhập thành công",
|
||||
"loginFailed": "Đăng nhập thất bại",
|
||||
"logoutSuccess": "Đăng xuất thành công"
|
||||
"logoutSuccess": "Đăng xuất thành công",
|
||||
"or_continue_with_email": "Hoặc tiếp tục với email",
|
||||
"sign_in_with": "Đăng nhập với {{provider}}",
|
||||
"oidc": {
|
||||
"completing_signin": "Đang hoàn tất đăng nhập...",
|
||||
"authenticating_with_provider": "Đang xác thực với nhà cung cấp. Vui lòng chờ..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "Tạo mới",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
"no": "不,继续编辑",
|
||||
"yesDiscard": "是的,放弃",
|
||||
"uploading": "上传中...",
|
||||
"refresh": "刷新"
|
||||
"refresh": "刷新",
|
||||
"unlinking": "正在解除链接..."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "仪表板",
|
||||
|
|
@ -313,7 +314,8 @@
|
|||
"productivity": "生产力",
|
||||
"telegram": "电报",
|
||||
"ai": "人工智能功能",
|
||||
"notifications": "通知偏好设置"
|
||||
"notifications": "通知偏好设置",
|
||||
"oidc": "OIDC/SSO"
|
||||
},
|
||||
"security": "安全设置",
|
||||
"changePassword": "更改密码",
|
||||
|
|
@ -376,6 +378,16 @@
|
|||
"area": "创建新区域",
|
||||
"tag": "创建新标签"
|
||||
}
|
||||
},
|
||||
"connectedAccounts": {
|
||||
"title": "已连接账户",
|
||||
"description": "链接外部账户以使用SSO提供商登录。",
|
||||
"link": "链接 {{provider}}",
|
||||
"unlink": "解除链接",
|
||||
"confirmUnlink": "确认解除链接",
|
||||
"linkedOn": "于 {{date}} 连接",
|
||||
"cannotUnlinkLast": "无法解除您最后的认证方式。请先设置密码。",
|
||||
"noPasswordWarning": "您尚未设置密码。考虑设置一个以便拥有替代登录方式。"
|
||||
}
|
||||
},
|
||||
"productivity": {
|
||||
|
|
@ -531,7 +543,13 @@
|
|||
"rememberMe": "记住我",
|
||||
"loginSuccess": "登录成功",
|
||||
"loginFailed": "登录失败",
|
||||
"logoutSuccess": "注销成功"
|
||||
"logoutSuccess": "注销成功",
|
||||
"or_continue_with_email": "或继续使用电子邮件",
|
||||
"sign_in_with": "使用 {{provider}} 登录",
|
||||
"oidc": {
|
||||
"completing_signin": "正在完成登录...",
|
||||
"authenticating_with_provider": "正在与提供商进行身份验证。请稍候..."
|
||||
}
|
||||
},
|
||||
"dropdown": {
|
||||
"createNew": "创建新项",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue