tududi/public/locales/bg/translation.json
Chris c2e9a1aa21
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)
2026-04-13 12:17:35 +03:00

1402 lines
91 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"common": {
"save": "Запази",
"cancel": "Отмени",
"delete": "Изтрий",
"edit": "Редактирай",
"create": "Създай",
"submit": "Изпрати",
"close": "Затвори",
"back": "Назад",
"next": "Напред",
"loading": "Зареждане...",
"appLoading": "Зареждане на приложението... Моля, изчакайте.",
"completed": "Завършено",
"error": "Грешка",
"success": "Успех",
"area": "Област",
"status": "Статус",
"saving": "Записване...",
"settings": "Настройки",
"none": "Няма",
"discardChanges": "Отказване на промените?",
"discardChangesMessage": "Имате непазени промени. Сигурни ли сте, че искате да ги откажете?",
"no": "Не, продължавайте да редактирате",
"yesDiscard": "Да, откажете",
"uploading": "Качване...",
"refresh": "Обнови",
"unlinking": "Откачане..."
},
"sidebar": {
"dashboard": "Табло",
"projects": "Проекти",
"tasks": "Задачи",
"calendar": "Календар",
"notes": "Бележки",
"settings": "Настройки",
"areas": "Области",
"tags": "Етикети",
"addAreaAriaLabel": "Добави Област",
"addAreaTitle": "Добави Област",
"addTagAriaLabel": "Добави Етикет",
"addTagTitle": "Добави Етикет",
"today": "Днес",
"total": "Total",
"upcoming": "Предстоящи",
"nextActions": "Следващи Действия",
"inbox": "Входящи",
"completed": "Завършени",
"allTasks": "Всички Задачи",
"addInboxAriaLabel": "Добави елемент в пощенската кутия",
"addInboxTitle": "Добави елемент в пощенската кутия",
"addProjectAriaLabel": "Добави проект",
"addProjectTitle": "Добави проект",
"addNoteAriaLabel": "Добави бележка",
"addNoteTitle": "Добави бележка",
"createNew": "Създай ново",
"views": "Прегледи",
"unpinView": "Отпинване на преглед",
"pinView": "Прикрепяне на преглед"
},
"navigation": {
"home": "Начало",
"dashboard": "Табло",
"profile": "Профил",
"profileSettings": "Настройки на профила",
"settings": "Настройки",
"about": "За нас",
"logout": "Изход",
"backupRestore": "Резервно копие и възстановяване"
},
"settings": {
"todayPageSettings": "Настройки на страницата днес",
"showDailyQuote": "Покажи дневна цитата",
"showMetrics": "Покажи метрики",
"showProductivity": "Покажи прозорци за производителност",
"showIntelligence": "Покажи предложения за интелигентност",
"showNextTaskSuggestion": "Предложение за следваща задача",
"showSuggestions": "Покажи предложения",
"showDueToday": "Покажи задачи с краен срок днес",
"showCompleted": "Покажи завършени задачи"
},
"dashboard": {
"overview": "Общ преглед",
"sameAsYesterday": "Същото като вчера",
"betterThanYesterday": "{{percentage}}% повече от вчера",
"worseThanYesterday": "{{percentage}}% по-малко от вчера",
"sameAsAverage": "Същото като средното",
"betterThanAverage": "{{percentage}}% повече от средното",
"worseThanAverage": "{{percentage}}% по-малко от средното",
"metrics": "Метрики",
"showMetrics": "Покажи метрики",
"hideMetrics": "Скрий метрики",
"insights": "Инсайти",
"showInsights": "Покажи инсайти",
"hideInsights": "Скрий инсайти",
"intelligence": "Интелигентност",
"showIntelligence": "Покажи предложения за интелигентност",
"hideIntelligence": "Скрий предложения за интелигентност",
"completed": "Завършени",
"showCompleted": "Покажи завършени задачи",
"hideCompleted": "Скрий завършени задачи"
},
"tasks": {
"title": "Задачи",
"today": "Днес",
"total": "Total",
"backlog": "Неправени",
"inProgress": "В процес",
"dueToday": "Срок днес",
"stale": "Застарели",
"suggested": "Предложени",
"completedToday": "Завършени днес",
"weeklyCompletions": "Седмичен напредък",
"taskCompleted": "задача завършена",
"tasksCompleted": "задачи завършени",
"noTasksAvailable": "Няма налични задачи.",
"searchPlaceholder": "Търсене на задачи...",
"addNewTask": "Добави нова задача",
"metrics": "Метрики",
"myPlanToday": "Моят план за днес",
"noPlanToday": "Все още няма планирани задачи за днес",
"addToPlanHint": "Кликнете на иконата 🗓 'добави към плана за днес' вдясно на всяка задача, за да я добавите тук",
"blankSlateHint": "Започнете, като създадете нова задача или промените филтрите си.",
"addToToday": "Добави към плана за днес",
"removeFromToday": "Премахни от плана за днес",
"setInProgress": "Задай в процес",
"setNotStarted": "Задай като не започната",
"showSubtasks": "Покажи подзадачи",
"hideSubtasks": "Скрий подзадачи",
"edit": "Редактиране на задача",
"delete": "Изтриване на задача",
"sortTasks": "Сортиране на задачи",
"sortBy": "Сортиране по",
"direction": "Посока",
"ascending": "Възходящ",
"descending": "Низходящ",
"groupBy": "Групиране по",
"groupByProject": "Проект",
"grouping": {
"none": "Без"
},
"show": "Покажи",
"all": "Всички",
"completedOnly": "Само завършени",
"notCompleted": "Незавършени",
"noProject": "Без проект",
"unknownProject": "Неизвестен проект",
"tasks": "задачи",
"showingItems": "Показване на {{current}} от {{total}} задачи",
"overdue": "Просрочено",
"planned": "Планирано",
"open": "Отвори",
"completed": "Завършено",
"noCompletedTasksToday": "Няма завършени задачи днес.",
"markAsDone": "Mark as done",
"notStarted": "Не е започнато",
"done": "Завършено"
},
"timeline": {
"activityTimeline": "Хронология на активността",
"showActivityTimeline": "Покажи хронология на активността",
"hideActivityTimeline": "Скрий хронология на активността",
"hideTimeline": "Скрий хронологията",
"failedToLoad": "Неуспешно зареждане на хронологията",
"events": {
"taskCreated": "Задача създадена",
"statusChanged": "Статусът е променен",
"priorityChanged": "Приоритетът е променен",
"dueDateChanged": "Срокът е променен",
"deferUntilChanged": "Defer date changed",
"nameUpdated": "Името е актуализирано",
"descriptionUpdated": "Описание актуализирано",
"noteUpdated": "Бележка актуализирана",
"projectChanged": "Проектът е променен",
"tagsUpdated": "Етикетите са актуализирани",
"taskArchived": "Задачата е архивирана",
"todayFlagChanged": "Флагът за днес е променен",
"status": "Статус",
"priority": "Приоритет",
"dueDate": "Срок",
"deferUntil": "Defer until",
"none": "Няма",
"recurrenceEndDateChanged": "Дата на края на повторението е променена",
"recurrenceEndDate": "Дата на края на повторението",
"recurrence_type_changed": "Типът на повторение е променен",
"recurrence_interval_changed": "Интервалът на повторение е променен",
"completionBasedChanged": "Променена е повторяемостта на базата на завършване",
"projectIdChanged": "Присвоено на проект",
"recurrenceType": "Тип повторяемост",
"recurrenceTypeChanged": "Променен е типът повторяемост",
"recurrence_weekday_changed": "Променен ден от седмицата на повторението",
"recurrence_month_day_changed": "Променен ден от месеца на повторението",
"recurrence_week_of_month_changed": "Променена седмица от месеца на повторението"
},
"justNow": "Току-що",
"minutesAgo": "{{minutes}}м. назад",
"hoursAgo": "{{hours}}ч. назад",
"daysAgo": "{{days}}д. назад",
"loadingTimeline": "Зареждане на времевата линия...",
"timelineWillAppear": "Времевата линия ще се появи след запазване",
"noActivity": "Все още няма активност"
},
"profile": {
"settings": "Настройки на профила",
"language": "Език",
"theme": "Тема",
"notifications": "Уведомления",
"english": "Английски",
"spanish": "Испански",
"greek": "Гръцки",
"japanese": "Японски",
"ukrainian": "Украински",
"deutsch": "Немски",
"italian": "Италиански",
"french": "Френски",
"russian": "Руски",
"turkish": "Турски",
"korean": "Корейски",
"vietnamese": "Виетнамски",
"arabic": "Арабски",
"dutch": "Нидерландски",
"romanian": "Румънски",
"chinese": "Китайски",
"portuguese": "Португалски",
"indonesian": "Индонезийски",
"title": "Настройки на профила",
"appearance": "Външен вид",
"lightMode": "Светъл режим",
"darkMode": "Тъмен режим",
"light": "Светъл",
"dark": "Тъмен",
"timezone": "Часова зона",
"saveChanges": "Запази промените",
"successMessage": "Профилът е актуализиран успешно!",
"languageChangedNote": "Промените в езика се прилагат незабавно",
"languageChanging": "Промяна на езика...",
"languagePreference": "Предпочитания за език",
"personalInfo": "Лична информация",
"errorMessage": "Неуспешно актуализиране на профила",
"telegramIntegration": "Интеграция с Telegram",
"telegramDescription": "Свържете акаунта си в tududi с Telegram бот, за да добавяте елементи в пощенската си кутия чрез съобщения в Telegram.",
"telegramBotToken": "Токен на Telegram бот",
"telegramTokenDescription": "Създайте бот с @BotFather в Telegram и поставете токена тук.",
"telegramConnected": "Вашият Telegram акаунт е свързан! Изпратете съобщения до вашия бот, за да добавите елементи в пощенската си кутия на tududi.",
"setupTelegram": "Настройка на Telegram",
"setupTelegramLower": "настройка на telegram",
"settingUp": "Настройване...",
"telegramSetupSuccess": "Telegram бот \"{{botName}}\" е конфигуриран успешно!",
"telegramSetupFailed": "Неуспешно настройване на Telegram бота.",
"invalidTelegramToken": "Невалиден формат на токена за Telegram бот.",
"telegramInstructions": "Отидете на https://t.me/{{botUsername}} и започнете да чатите с вашия бот, за да го свържете с вашия tududi акаунт.",
"botConfigured": "Ботът е конфигуриран успешно!",
"botUsername": "Потребителско име на бота:",
"pollingStatus": "Статус на опитите за свързване:",
"pollingActive": "Активен - Получаване на съобщения",
"pollingInactive": "Неактивен - Не получава съобщения",
"pollingNote": "Опитите за свързване периодично проверяват за нови съобщения от Telegram и ги добавят в пощенската ви кутия.",
"pollingDescription": "Опитите за свързване периодично проверяват за нови съобщения от Telegram и ги добавят в пощенската ви кутия.",
"startPolling": "Започнете опити за свързване",
"stopPolling": "Спиране на опитите за свързване",
"startPollingLower": "започнете опити за свързване",
"stopPollingLower": "спрете опитите за свързване",
"pollingStarted": "Опитите за свързване с Telegram започнаха",
"pollingStopped": "Опитите за свързване с Telegram спряха",
"pollingError": "Грешка при управлението на опитите за свързване с Telegram",
"startPollingFailed": "Неуспешно стартиране на опитите за свързване",
"stopPollingFailed": "Неуспешно спиране на опитите за свързване",
"openTelegram": "Отворете в Telegram",
"openInTelegram": "отвори в телеграм",
"testTelegramMessage": "Тест Телеграм",
"testMessageSent": "Тестовото съобщение беше изпратено успешно!",
"testMessageFailed": "Неуспешно изпращане на тестово съобщение.",
"testMessageError": "Грешка при изпращане на тестово съобщение.",
"taskSummaryNotifications": "Уведомления за обобщение на задачите",
"taskSummaryDescription": "Получавайте редовни обобщения на задачите си чрез Телеграм. Тази функция изисква настройка на интеграция с Телеграм.",
"enableTaskSummaries": "Активирайте обобщенията на задачите",
"enableTaskSummary": "Активирайте обобщенията на задачите",
"summaryFrequency": "Честота на обобщенията",
"summaryFrequencyDescription": "Изберете колко често искате да получавате обобщения на задачите",
"sendTestSummary": "Изпрати тестово обобщение",
"frequency": {
"1h": "1 час",
"2h": "2 часа",
"4h": "4 часа",
"8h": "8 часа",
"12h": "12 часа",
"daily": "1 ден",
"weekly": "1 седмица"
},
"frequencyHelp": "Изберете колко често искате да получавате обобщения на задачите",
"taskIntelligence": "Интелигентност на задачите",
"taskIntelligenceDescription": "Получавайте полезни предложения, за да направите имената на задачите си по-описателни и действителни.",
"enableTaskIntelligence": "Активирайте асистента за интелигентност на задачите",
"autoSuggestNextActions": "Автоматично предлагане на следващи действия",
"autoSuggestNextActionsDescription": "При създаване на проект, автоматично предлагайте следващото физическо действие, което трябва да предприемете.",
"enableAutoSuggestNextActions": "Активирайте подканите за следващи действия",
"productivityFeatures": "Функции за продуктивност",
"pomodoroDescription": "Активирайте таймера Помодоро в навигационната лента за фокусирани работни сесии.",
"enablePomodoro": "Активирайте таймера Помодоро",
"productivityAssistant": "Асистент за продуктивност",
"productivityAssistantDescription": "Показвайте прозорци за продуктивност, които помагат да се идентифицират забавени проекти, неясни задачи и подобрения в работния процес на вашата страница Днес.",
"enableProductivityAssistant": "Активирайте прозорците за продуктивност",
"nextTaskSuggestion": "Предложение за следваща задача",
"nextTaskSuggestionDescription": "Автоматично предлагайте следващата най-добра задача, по която да работите, когато нямате нищо в процес, приоритизирайки задачите с краен срок днес, след това предложените задачи от вашата страница Днес.",
"enableNextTaskSuggestion": "Активирайте предложенията за следваща задача",
"nextActionPrompt": "Какво е следващото физическо действие за този проект?",
"nextActionPlaceholder": "напр., Обадете се на клиента, за да насрочите среща, Проучете конкуренцията онлайн, Създайте папка за проекта...",
"addNextAction": "Добавете следващо действие",
"skipNextAction": "Пропуснете за сега",
"nextActionHint": "Помислете за най-малката, най-конкретна стъпка, която можете да предприемете в момента, за да напреднете с този проект.",
"tabs": {
"general": "Общо",
"security": "Сигурност",
"productivity": "Продуктивност",
"telegram": "Телеграм",
"ai": "AI функции",
"notifications": "Настройки за известия",
"oidc": "OIDC/SSO"
},
"security": "Настройки за сигурност",
"changePassword": "Смяна на парола",
"currentPassword": "Текуща парола",
"newPassword": "Нова парола",
"confirmPassword": "Потвърдете новата парола",
"enterCurrentPassword": "Въведете текущата си парола",
"enterNewPassword": "Въведете новата си парола",
"confirmNewPassword": "Потвърдете новата си парола",
"currentPasswordRequired": "Текущата парола е задължителна",
"newPasswordRequired": "Новата парола е задължителна",
"passwordTooShort": "Паролата трябва да е поне 6 символа",
"passwordMismatch": "Паролите не съвпадат",
"passwordChangeError": "Неуспешна смяна на паролата",
"passwordChangeSuccess": "Паролата е сменена успешно!",
"changingPassword": "Сменям паролата...",
"accountSettings": "Настройки на акаунта и предпочитания",
"botSetup": "Настройка на бота",
"passwordChangeNote": "Промените на паролата ще бъдат запазени, когато кликнете \"Запази промените\" в долната част на формуляра.",
"passwordChangeOptional": "Оставете полетата за парола празни, за да актуализирате други настройки, без да променяте паролата си.",
"bulgarian": "Български",
"danish": "Датски",
"finnish": "Фински",
"norwegian": "Норвежки",
"polish": "Полски",
"slovenian": "Словенски",
"swedish": "Шведски",
"firstDayOfWeek": "Първи ден от седмицата",
"name": "Име",
"surname": "Фамилия",
"enterName": "Въведете вашето име",
"enterSurname": "Въведете вашата фамилия",
"avatar": "Profile Photo",
"uploadAvatar": "Upload Photo",
"removeAvatar": "Remove Avatar",
"avatarDescription": "Upload a profile photo (max 5MB)",
"avatarUploadError": "Please upload an image file",
"avatarSizeError": "Image must be smaller than 5MB",
"avatarUploadSuccess": "Avatar uploaded successfully!",
"avatarRemoveSuccess": "Avatar removed successfully!",
"avatarUploadFailed": "Failed to upload avatar",
"avatarRemoveFailed": "Failed to remove avatar",
"notificationsDescription": "Изберете как искате да бъдете уведомявани за важни събития.",
"aiFeatures": "AI функции",
"keyboardShortcuts": "Клавишни комбинации",
"shortcuts": {
"enableShortcuts": "Активиране на клавишни комбинации",
"enableDescription": "Включете или изключете клавишните комбинации глобално.",
"duplicateWarning": "Открити дублирани комбинации:",
"pressKeys": "Натиснете клавиши...",
"duplicateWith": "Конфликт с {{action}}",
"record": "Запис",
"resetToDefaults": "Възстановяване на подразбирания",
"info": "Клавишните комбинации ви помагат да навигирате бързо. Промените се запазват, когато кликнете върху \"Запазване на промените\" в долната част на страницата. Комбинациите са деактивирани при въвеждане в текстови полета.",
"actions": {
"inbox": "Създаване на нов елемент в пощенската кутия",
"task": "Създаване на нова задача",
"project": "Създаване на нов проект",
"note": "Създаване на нова бележка",
"area": "Създаване на нова област",
"tag": "Създаване на нов етикет"
}
},
"connectedAccounts": {
"title": "Свързани акаунти",
"description": "Свържете външни акаунти, за да влезете с доставчици на SSO.",
"link": "Свържете {{provider}}",
"unlink": "Откачане",
"confirmUnlink": "Потвърдете откачането",
"linkedOn": "Свързан на {{date}}",
"cannotUnlinkLast": "Не можете да откачите последния си метод за удостоверяване. Моля, задайте парола първо.",
"noPasswordWarning": "Нямате зададена парола. Помислете за задаване на такава, за да имате алтернативен метод за вход."
}
},
"productivity": {
"stalledProjects": "Забавени проекти",
"stalledProjectsDesc": "Тези проекти нямат задачи или действия",
"needsNextAction": "Проектите се нуждаят от следващо действие",
"needsNextActionDesc": "Тези проекти имат завършени задачи, но нямат следващо действие",
"tasksAreProjects": "Задачи, които изглеждат като проекти",
"tasksAreProjectsDesc": "Тези задачи може да се наложи да бъдат разделени",
"vagueTasks": "Задачи без ясни действия",
"vagueTasksDesc": "Тези задачи се нуждаят от по-ясни глаголи за действие",
"staleTasks": "Застарели задачи",
"staleTasksDesc": "Задачи, които не са актуализирани в {{days}} дни",
"stuckProjects": "Забили проекти",
"stuckProjectsDesc": "Проекти, които не са актуализирани наскоро",
"reviewItems": "Кликнете, за да прегледате и подобрите работния си поток",
"suggestion": "Кликнете върху който и да е елемент по-горе, за да го отворите и направите подобрения.",
"issuesFound_one": "1 проблем с производителността изисква внимание",
"issuesFound_other": "{{count}} проблема с производителността изискват внимание"
},
"nextTask": {
"suggestion": "Тъй като няма нищо в процес, какво ще кажеш да започнем с",
"suggestionTodayPlan": "Тъй като няма нищо в процес, какво ще кажеш да започнем с тази задача от днешния ти план",
"suggestionDueToday": "Тъй като няма нищо в процес, какво ще кажеш да започнем с тази задача, която е с краен срок днес",
"suggestionSuggested": "Тъй като няма нищо в процес, какво ще кажеш да започнем с тази предложена задача",
"letsDoIt": "Да, да го направим!",
"starting": "Започваме...",
"startedSuccessfully": "Задачата е стартирана успешно!",
"giveMeSomethingElse": "Дай ми нещо друго"
},
"modals": {
"confirmDelete": "Сигурен ли си, че искаш да изтриеш?",
"taskCreation": "Създай Нова Задача",
"taskEdit": "Редактирай Задача",
"deleteTask": {
"title": "Изтриване на Задача",
"confirmation": "Сигурен ли си, че искаш да изтриеш тази задача? Тази операция не може да бъде отменена."
},
"noteCreation": "Създай Нова Бележка",
"noteEdit": "Редактирай Бележка",
"updateNote": "Актуализирай Бележка",
"createNote": "Създай Бележка",
"submitting": "Изпращане...",
"areaCreation": "Създай Нова Област",
"areaEdit": "Редактирай Област",
"updateArea": "Актуализиране на област",
"createArea": "Създаване на област",
"updateTag": "Актуализиране на етикет",
"createTag": "Създаване на етикет",
"createProject": "Създаване на проект",
"updateProject": "Актуализиране на проект",
"deleteTag": {
"title": "Изтриване на етикет",
"message": "Сигурни ли сте, че искате да изтриете етикета \"{{tagName}}\"?"
},
"deleteArea": {
"title": "Изтриване на област",
"message": "Сигурни ли сте, че искате да изтриете областта \"{{areaName}}\"?"
},
"deleteNote": {
"title": "Изтриване на бележка",
"message": "Сигурни ли сте, че искате да изтриете бележката \"{{noteTitle}}\"?"
},
"deleteProject": {
"title": "Изтриване на проект",
"message": "Сигурни ли сте, че искате да изтриете проекта \"{{projectName}}\"?"
}
},
"forms": {
"title": "Заглавие",
"description": "Описание",
"dueDate": "Краен срок",
"deferUntil": "Defer until",
"priority": "Приоритет",
"status": "Статус",
"assignedTo": "Назначен на",
"category": "Категория",
"tags": "Етикети",
"required": "Това поле е задължително",
"optional": "По избор",
"task": {
"namePlaceholder": "Добавете име на задача",
"statusAndOptions": "Статус и опции",
"recurrence": "Повторение",
"labels": {
"tags": "Етикети",
"project": "Проект",
"status": "Статус",
"priority": "Приоритет",
"dueDate": "Краен срок",
"deferUntil": "Отложи до",
"note": "Бележка",
"recurrenceType": "Повтаряне",
"recurrenceInterval": "Всеки",
"weekday": "В ден",
"monthDay": "Ден от месеца",
"weekOfMonth": "Седмица от месеца",
"recurrenceEndDate": "Краен срок (по избор)",
"completionBased": "Повторете след завършване",
"repeatOn": "Повтаряй на"
},
"projectSearchPlaceholder": "Търсене или създаване на проект...",
"noMatchingProjects": "Няма съвпадащи проекти",
"creatingProject": "Създаване...",
"createProject": "+ Създай",
"recurrenceSettings": "Настройки за повторяемост",
"completionBasedHelp": "Ако е отметнато, следващата задача ще бъде създадена на базата на датата на завършване, а не на срока",
"dueDatePlaceholder": "Изберете дата на срока",
"endDatePlaceholder": "Изберете крайна дата",
"nameHelper": {
"title": "Направете го по-описателно!",
"suggestion": "Опитайте да добавите повече детайли като \"Обадете се на зъболекаря, за да насрочите час за почистване\" вместо просто \"Обадете се на зъболекаря\"",
"short": "Направете го по-описателно!",
"noVerb": "Добавете глагол за действие!",
"vague": "Бъдете по-конкретни!"
},
"suggestions": {
"short": "Опитайте да бъдете по-конкретни относно това, което трябва да се направи",
"noVerb": "Какво конкретно действие трябва да предприемете? Опитайте да започнете с глагол.",
"vague": "Опитайте да започнете с глагол за действие като \"Обади се\", \"Напиши\", \"Насрочи\" или \"Изследвай\""
},
"selectAtLeastOneDay": "Моля, изберете поне един ден",
"deferUntilPlaceholder": "Изберете дата и час за отлагане"
},
"noteTitle": "Заглавие на бележка",
"noteContent": "Съдържание на бележка",
"noteTitlePlaceholder": "Въведете заглавие на бележка",
"noteContentPlaceholder": "Въведете съдържание на бележка",
"areaName": "Име на зона",
"areaDescription": "Описание на зоната",
"areaNamePlaceholder": "Въведете име на зона",
"areaDescriptionPlaceholder": "Въведете описание на зоната",
"tagName": "Име на етикет",
"tagNamePlaceholder": "Въведете име на етикет",
"tagInputPlaceholder": "Напишете, за да добавите етикет",
"createTagOption": "+ Създайте \"{{tagName}}\"",
"removeTagAriaLabel": "Премахнете етикет {{tagName}}",
"projectDescriptionPlaceholder": "Въведете описание на проекта"
},
"auth": {
"login": "Вход",
"register": "Регистрация",
"forgotPassword": "Забравена парола",
"email": "Имейл",
"password": "Парола",
"confirmPassword": "Потвърдете паролата",
"username": "Потребителско име",
"signup": "Регистрирайте се",
"signin": "Влезте",
"signout": "Излезте",
"resetPassword": "Нулиране на паролата",
"newPassword": "Нова парола",
"rememberMe": "Запомни ме",
"loginSuccess": "Успешно влизане",
"loginFailed": "Неуспешно влизане",
"logoutSuccess": "Успешно излизане",
"or_continue_with_email": "Или продължете с имейл",
"sign_in_with": "Влезте с {{provider}}",
"oidc": {
"completing_signin": "Завършване на входа...",
"authenticating_with_provider": "Удостоверяване с доставчика. Моля, изчакайте..."
}
},
"dropdown": {
"createNew": "Създай ново",
"task": "Задача",
"project": "Проект",
"note": "Бележка",
"area": "Област",
"inbox": "Входяща поща",
"tag": "Етикет"
},
"sort": {
"due_date": "Краен срок",
"name": "Име",
"priority": "Приоритет",
"status": "Статус",
"created_at": "Създадено на"
},
"priority": {
"low": "Нисък",
"medium": "Среден",
"high": "Висок",
"none": "Няма"
},
"status": {
"notStarted": "Не е започнато",
"inProgress": "В процес на изпълнение",
"done": "Завършено",
"archived": "Архивирано",
"unknown": "Неизвестно",
"telegramConnected": "Telegram свързан и проверява",
"telegramConnectionProblem": "Проблем с връзката на Telegram",
"completed": "Завършено",
"waiting": "В очакване"
},
"project": {
"name": "Име на проекта",
"projectImage": "Снимка на проекта",
"uploadImageHint": "Качете изображение за вашия проект (макс 10MB)",
"browseImage": "Преглед на изображение",
"noNotes": "Няма бележки за този проект.",
"deleteProject": "Изтрий проекта",
"createSuccess": "Проектът беше създаден успешно!",
"createdAndAssigned": "Проектът е създаден и назначен",
"createError": "Неуспешно създаване на проект",
"viewProject": "Отидете на проекта",
"editProject": "Редактиране на проект",
"editBanner": "Редактиране на банер на проекта",
"currentBanner": "Текущ банер",
"choosePreset": "Изберете предварително зададен банер:",
"orUploadOwn": "Или качете свой собствен:"
},
"errors": {
"required": "Това поле е задължително",
"invalidEmail": "Невалиден имейл адрес",
"projectCreationFailed": "Неуспешно създаване на проект.",
"passwordMismatch": "Паролите не съвпадат",
"minLength": "Минималната дължина е {{length}} символа",
"maxLength": "Максималната дължина е {{length}} символа",
"serverError": "Грешка на сървъра, моля опитайте отново по-късно",
"networkError": "Грешка в мрежата, моля проверете вашето свързване",
"somethingWentWrong": "Нещо се обърка, моля опитайте отново",
"taskFetch": "Неуспешно извличане на задачи.",
"projectFetch": "Неуспешно извличане на проекти.",
"taskCreate": "Неуспешно създаване на задача.",
"taskUpdate": "Неуспешно актуализиране на задача.",
"taskDelete": "Неуспешно изтриване на задача.",
"noteTitleRequired": "Заглавието на бележката е задължително.",
"failedToLoadTags": "Неуспешно зареждане на наличните тагове.",
"failedToSaveNote": "Неуспешно запазване на бележката.",
"areaNameRequired": "Името на областта е задължително.",
"failedToSaveArea": "Неуспешно запазване на областта.",
"tagNameRequired": "Името на тага е задължително.",
"failedToSaveTag": "Неуспешно запазване на тага.",
"projectNameRequired": "Името на проекта е задължително.",
"projectSaveFailed": "Неуспешно запазване на проекта.",
"projectImageTooLarge": "Изображението е твърде голямо. Моля, изберете файл под 10MB.",
"projectImageUpload": "Неуспешно качване на изображение. Моля, опитайте с по-малък файл или различен формат.",
"bannerSaveFailed": "Неуспешно запазване на банера"
},
"inbox": {
"title": "Входяща поща",
"empty": "Вашата входяща поща е празна",
"emptyDescription": "Записвайте мисли и идеи бързо, използвайки иконата ⚡ в горната навигационна лента или бутона + в страничната лента",
"description": "Входящата поща е мястото, където се намират всички некатегоризирани задачи. Задачите, които не са присвоени на проект или нямат краен срок, ще се появят тук. Това е вашата зона за 'изпразване на мозъка', където можете бързо да запишете задачи и да ги организирате по-късно.",
"captureThought": "Запишете вашата мисъл...",
"saveToInbox": "Запази в входящата поща",
"itemAdded": "Артикулът е добавен в входящата поща",
"itemProcessed": "Артикулът е обработен",
"itemDeleted": "Артикулът е изтрит",
"itemUpdated": "Артикулът е актуализиран",
"newTelegramItem": "Нов артикул от Telegram: {{content}}",
"newItem": "Нов артикул в пощенската кутия: {{content}}",
"multipleNewItems": "{{count}} нови артикула добавени",
"loadError": "Неуспешно зареждане на артикулите в пощенската кутия",
"addError": "Неуспешно добавяне на артикул в пощенската кутия",
"processError": "Неуспешно обработване на артикул в пощенската кутия",
"deleteError": "Неуспешно изтриване на артикул в пощенската кутия",
"updateError": "Неуспешно актуализиране на артикул в пощенската кутия",
"contentRequired": "Съдържанието не може да бъде празно",
"createTask": "Създай задача",
"createProject": "Създай проект",
"createNote": "Създай бележка",
"convertTo": "Конвертиране в",
"unprocessedItems": "Имате {{count}} артикул(а) в пощенската кутия",
"processNow": "Обработи сега",
"deleteConfirmTitle": "Изтриване на артикул",
"deleteConfirmMessage": "Сигурни ли сте, че искате да изтриете този артикул от пощенската си кутия? Това действие не може да бъде отменено.",
"loadMoreError": "Неуспешно зареждане на повече елементи",
"loading": "Зареждане...",
"loadMore": "Заредете повече елементи от входящата поща",
"showingItems": "Показване на {{current}} от {{total}} елемента"
},
"dateFormats": {
"long": "EEEE, MMMM d, yyyy",
"short": "MMM d, yyyy",
"monthYear": "MMMM yyyy",
"dayMonth": "MMMM d",
"time": "h:mm a",
"dateTime": "MMM d, yyyy h:mm a",
"todayHeader": "dddd, MMMM do, yyyy"
},
"dateIndicators": {
"today": "ДНЕС",
"total": "Total",
"tomorrow": "УТРЕ",
"yesterday": "ВЧЕРА",
"nextWeek": "следващата седмица",
"nextMonth": "следващия месец"
},
"taskViews": {
"project": {
"withName": "В момента разглеждате всички задачи, свързани с проекта \"{{projectName}}\". Можете да организирате задачите в този проект, да зададете приоритет и да проследите тяхното изпълнение. Използвайте това пространство, за да се фокусирате върху задачите, които принадлежат конкретно на този проект.",
"noName": "Разглеждате задачи за конкретен проект. Използвайте това пространство, за да управлявате и проследявате задачите, свързани с този проект."
},
"today": "Това са задачите, които трябва да бъдат завършени днес или задачите, които сте планирали за незабавно внимание. Използвайте този изглед, за да се фокусирате върху това, което трябва да бъде завършено днес. Маркирайте задачите като завършени, обновете техния статус или коригирайте крайните им срокове, ако е необходимо.",
"total": "Total",
"inbox": "Входящата поща е мястото, където се намират всички некатегоризирани задачи. Задачите, които не са назначени на проект или не са получили краен срок, ще се появят тук. Това е вашата зона за \"изпразване на мозъка\", където можете бързо да запишете задачи и да ги организирате по-късно.",
"next": "Този изглед показва всички задачи, които могат да бъдат изпълнени в близко бъдеще. Тези задачи са готови за работа и нямат дългосрочни крайни срокове. Това е добро място, за да се фокусирате, когато искате да направите бърз напредък по задачите.",
"upcoming": "Този изглед подчертава задачите, които са планирани за предстоящата седмица. Той ви помага да се подготвите и да останете напред с крайните срокове, като ви дава преглед на работата, която трябва да се справите в близко бъдеще. Задачите с крайни срокове в следващите 7 дни ще се появят тук.",
"someday": "Изгледът \"Някога\" е за задачи, които не са спешни и нямат конкретен краен срок. Това са задачи, до които може да искате да се доберете в някакъв момент, но в момента не са приоритет. Използвайте тази секция, за да следите идеи или дългосрочни цели.",
"completed": "Тук можете да видите всички задачи, които сте завършили. Това е чудесен начин да прегледате постиженията си и да се замислите за работата, която сте завършили. Можете също да намерите задачи, които може да се наложи да бъдат възстановени или споменати в бъдеще.",
"allTasks": "Разглеждате всички задачи. Това включва задачи от различни проекти, задачи без конкретни крайни срокове и задачи с различни нива на приоритет. Използвайте този изглед за общ преглед на всичко в списъка ви със задачи."
},
"success": {
"noteUpdated": "Бележката е актуализирана успешно!",
"noteCreated": "Записката е създадена успешно!",
"areaUpdated": "Областта е актуализирана успешно!",
"areaCreated": "Областта е създадена успешно!",
"tagUpdated": "Етикетът е актуализиран успешно!",
"tagCreated": "Етикетът е създаден успешно!",
"projectCreated": "Проектът е създаден успешно!",
"projectDeleted": "Проектът е изтрит успешно!",
"nextActionAdded": "Следващото действие е добавено успешно!",
"taskCreated": "Задачата е създадена успешно!",
"taskUpdated": "Задачата е актуализирана успешно!",
"taskDeleted": "Задачата е изтрита успешно!",
"noteDeleted": "Бележката беше изтрита успешно!",
"bannerUpdated": "Банерът е актуализиран успешно!"
},
"note": {
"title": "Заглавие",
"content": "Съдържание",
"titlePlaceholder": "Въведете заглавие на записката",
"contentPlaceholder": "Въведете съдържание на записката",
"project": "Свързан проект (по желание)",
"createSuccess": "Записката е създадена успешно",
"createError": "Неуспешно създаване на записката"
},
"task": {
"labels": {
"tags": "Етикети",
"project": "Проект",
"status": "Статус",
"priority": "Приоритет",
"dueDate": "Краен срок",
"deferUntil": "Defer until",
"note": "Забележка"
},
"create": "Създаване",
"addTaskName": "Добавете име на задача",
"createSuccess": "Задачата е създадена успешно",
"createError": "Неуспешно създаване на задача",
"saveAsTask": "Запази като задача",
"updateSuccess": "Задачата е актуализирана успешно",
"updateError": "Неуспешно актуализиране на задача",
"deleteSuccess": "Задачата е изтрита успешно",
"deleteError": "Неуспешно изтриване на задача",
"startedSuccessfully": "Задачата е стартирана успешно!",
"created": "Задача",
"createdSuccessfully": "успешно създадена!",
"updated": "Задача",
"updatedSuccessfully": "успешно актуализирана!",
"deleted": "Задача",
"deletedSuccessfully": "успешно изтрита!",
"suggestions": {
"short": "Опитайте се да бъдете по-конкретни относно това, което трябва да бъде направено",
"noVerb": "Какво конкретно действие трябва да предприемете? Опитайте да започнете с глагол.",
"vague": "Опитайте да започнете с глагол за действие като \"Обадете се\", \"Напишете\", \"Планирайте\" или \"Проучете\""
},
"nameHelper": {
"title": "Направете го по-описателно!",
"suggestion": "Опитайте да добавите повече детайли като \"Обадете се на зъболекаря, за да насрочите час за почистване\" вместо просто \"Обадете се на зъболекаря\""
},
"overdueAlert": "Тази задача беше в плана ви вчера и не беше завършена.",
"overdueYesterday": "Помислете за приоритизиране на тази задача или разделянето ѝ на по-малки стъпки.",
"overdueMultipleDays": "Тази задача е отложена {{count}} пъти.",
"content": "Съдържание",
"noNotes": "Все още не е добавено съдържание",
"subtasks": "Подзадачи",
"noSubtasks": "Все още няма подзадачи",
"recentActivity": "Наскоро извършена дейност",
"noActivityYet": "Все още няма активност",
"thisTask": "Тази задача",
"is": "е",
"and": "и",
"dueOn": "срок",
"inProject": "от проект",
"lowPriority": "ниска приоритетност",
"mediumPriority": "средна приоритетност",
"highPriority": "висока приоритетност",
"inDays": "в {{count}} дни",
"daysAgo": "{{count}} дни назад",
"tagsUpdated": "Таговете са актуализирани успешно",
"tagsUpdateError": "Неуспешно актуализиране на таговете",
"recurrenceUpdated": "Повторяемостта е актуализирана успешно",
"recurrenceUpdateError": "Неуспешно актуализиране на повторяемостта",
"dueDateUpdated": "Срокът е актуализиран успешно",
"dueDateUpdateError": "Неуспешно актуализиране на срока",
"titleUpdated": "Заглавието на задачата е актуализирано успешно",
"titleUpdateError": "Неуспешно актуализиране на заглавието на задачата",
"contentUpdated": "Съдържанието на задачата е актуализирано успешно",
"contentUpdateError": "Неуспешно актуализиране на съдържанието на задачата",
"subtasksUpdated": "Подзадачите са актуализирани успешно",
"subtasksUpdateError": "Неуспешно актуализиране на подзадачите",
"projectUpdated": "Проектът е актуализиран успешно",
"projectUpdateError": "Неуспешно актуализиране на проекта",
"projectCleared": "Проектът е изчистен успешно",
"projectClearError": "Неуспешно изчистване на проекта",
"priorityUpdated": "Приоритетът е актуализиран успешно",
"priorityUpdateError": "Неуспешно актуализиране на приоритета",
"status": {
"notStarted": "не е започнато",
"inProgress": "в процес на изпълнение",
"done": "завършено",
"archived": "архивирано",
"unknown": "в ход",
"waiting": "В очакване",
"setAsDone": "Задай като завършено",
"planned": "Планирано",
"cancelled": "Отменено"
},
"noSubtasksClickToAdd": "Все още няма подзадачи, кликнете, за да добавите",
"project": "Проект",
"noProject": "Няма проект - Кликнете, за да назначите",
"tags": "Тагове",
"noTags": "Няма тагове",
"priority": "Приоритет",
"dueDate": "Срок",
"deferUntil": "Отложи до",
"recurringSetup": "Настройка на повтарящи се",
"notRecurring": "Тази задача все още не е повтаряща се.",
"clickToEditTitle": "Кликнете, за да редактирате заглавието",
"clickToEditContent": "Кликнете, за да редактирате съдържанието",
"clickToAddContent": "Кликнете, за да добавите съдържание",
"clickToEditSubtasks": "Кликнете, за да редактирате подзадачите",
"clickToAddOrEditSubtasks": "Кликнете, за да добавите или редактирате подзадачите",
"contentPlaceholder": "Добавете съдържание тук... (поддържа Markdown)",
"contentEditHint": "Натиснете Cmd/Ctrl+Enter, за да запазите, Esc, за да отмените",
"noContentPreview": "Няма съдържание за преглед. Превключете в режим Редактиране, за да добавите съдържание.",
"deleteConfirmTitle": "Изтриване на задача",
"deleteConfirmMessage": "Сигурни ли сте, че искате да изтриете тази задача? Това действие не може да бъде отменено.",
"noMoreIterations": "Няма повече планирани итерации",
"nextOccurrences": "Следващи случаи",
"nextOccurrencesAfterThis": "Следващи случаи след това",
"noDueDate": "Няма крайна дата",
"instanceOf": "Това е инстанция на повтаряща се задача",
"parentTask": "Родителска задача",
"includingToday": "включително днес",
"has": "има",
"fromProject": "от проекта",
"noDeferUntil": "Няма отлагане до",
"deferUntilUpdated": "Отложи до успешно актуализиране",
"deferUntilUpdateError": "Неуспешно актуализиране на отлагането до",
"showOverdueWarning": "Покажи предупреждение за просрочие",
"dueDateInPastWarning": "Предупреждение: Задавате срок в миналото",
"overview": "Обзор",
"schedule": "График",
"attachments": "Прикачени файлове",
"attachmentsComingSoon": "Функцията за прикачени файлове ще бъде налична скоро",
"activity": "Активност",
"lastUpdatedAt": "Последно обновено на",
"statusUpdated": "Статусът е обновен успешно",
"statusUpdateError": "Неуспешно обновяване на статуса",
"updatedAt": "Актуализирано на",
"upcoming": "предстоящ"
},
"projects": {
"loading": "Зареждане на проекти...",
"error": "Грешка при зареждане на проектите",
"searchPlaceholder": "Търсене на проекти...",
"title": "Проекти",
"noProjectsFound": "Не са намерени проекти",
"cardViewAriaLabel": "Визуализация на карти",
"listViewAriaLabel": "Списък с проекти",
"active": "Активен",
"inactive": "Неактивен",
"metrics": "Проекти",
"filters": {
"active": "Активен",
"inactive": "Неактивен",
"all": "Всички",
"allAreas": "Всички области",
"notCompleted": "Не е завършено"
},
"selectState": "Изберете състояние",
"state": "Състояние на проекта",
"states": {
"idea": "Идея",
"planned": "Планирано",
"in_progress": "В процес",
"blocked": "Блокирано",
"completed": "Завършено",
"idea_desc": "Засечено, но все още не е планирано",
"planned_desc": "Определено и готово за стартиране",
"in_progress_desc": "Активна работа в ход",
"blocked_desc": "Временно спряно или блокирано",
"completed_desc": "Завършено и готово",
"active": "В процес",
"active_desc": "Активна работа в ход"
},
"showMetrics": "Покажи метрики",
"hideMetrics": "Скрий метрики",
"progress": "Прогрес",
"taskMomentum": "Инерция на задачите",
"activeTasks": "Активни задачи",
"dueSchedule": "График на падежите",
"next14Days": "Следващите 14 дни",
"noUpcomingDue": "Няма падежи в следващите 14 дни.",
"peakDay": "Пик",
"none": "Няма",
"next3days": "Следващите 3 дни",
"nextWeek": "Следващите 7 дни",
"recentCompletion": "Скорошни завършвания",
"last7And30": "Последните 7 и 30 дни",
"weeklyPace": "Седмична скорост",
"prevWeekCompleted": "{{count}} предишна седмица",
"vsPrevWeek": "спрямо предишна седмица",
"monthlyCompletion": "30-дневни завършвания",
"last30Days": "Последните 30 дни",
"nextUp": "Следващо най-добро действие",
"focusTask": "Най-въздействаща задача",
"focusHint": "Премества задачата в „в процес\" и „днес\"",
"noNextAction": "Всичко е наред - няма неизпълнени задачи."
},
"projectItem": {
"edit": "Редактиране",
"delete": "Изтриване",
"completion": "Завършване",
"completionPercentage": "{{percentage}}% завършено",
"toggleDropdownMenu": "Превключи падащото меню",
"projectInitials": "Инициали на проекта",
"share": "Сподели",
"sharedProject": "Споделено с екипа",
"noDueDate": "Няма краен срок",
"dueToday": "С падеж днес",
"dueIn": "С падеж след {{count}} {{unit}}",
"overdue": "Просрочено с {{count}} {{unit}}",
"day": "ден",
"days": "дни",
"sharedUser": "Споделен потребител",
"moreSharedUsers": "+{{count}} повече потребители"
},
"areas": {
"title": "Области",
"noAreasFound": "Не са намерени области",
"editAreaAriaLabel": "Редактиране на област {{name}}",
"editAreaTitle": "Редактиране на област {{name}}",
"deleteAreaAriaLabel": "Изтриване на област {{name}}",
"deleteAreaTitle": "Изтриване на област {{name}}",
"addArea": "Добави област",
"loading": "Зареждане на детайли за област...",
"error": "Грешка при зареждане на детайли за област.",
"notFound": "Областта не е намерена.",
"details": "Детайли за област",
"viewProjects": "Преглед на проекти в {{name}}"
},
"notes": {
"loading": "Зареждане на бележки...",
"error": "Грешка при зареждане на бележки",
"searchPlaceholder": "Търсене на бележки...",
"noNotesFound": "Не са намерени бележки",
"title": "Бележки",
"deleteNoteAriaLabel": "Изтрий бележка {{noteTitle}}",
"deleteNoteTitle": "Изтрий бележка {{noteTitle}}",
"editNoteAriaLabel": "Редактирай бележка {{noteTitle}}",
"editNoteTitle": "Редактирай бележка {{noteTitle}}"
},
"tags": {
"loading": "Зареждане на тагове...",
"searchPlaceholder": "Търсене на тагове...",
"title": "Тагове",
"noTagsFound": "Не са намерени тагове",
"editTagAriaLabel": "Редактирай таг {{tagName}}",
"editTagTitle": "Редактирай таг {{tagName}}",
"deleteTagAriaLabel": "Изтрий таг {{tagName}}",
"deleteTagTitle": "Изтрий таг {{tagName}}",
"error": "Грешка при извличане на тага.",
"notFound": "Тагът не е намерен.",
"details": "Детайли на тага",
"name": "Име",
"status": "Статус",
"active": "Активен",
"inactive": "Неактивен",
"viewTasksWithTag": "Преглед на задачи с този таг",
"typeToAdd": "Напишете, за да добавите етикет",
"noItemsWithTag": "Не са намерени елементи с този етикет"
},
"recurrence": {
"none": "Няма",
"daily": "Ежедневно",
"weekly": "Седмично",
"monthly": "Месечно",
"monthlyWeekday": "Месечно в работен ден",
"monthlyLastDay": "Месечно в последния ден",
"firstWeek": "Първа седмица",
"secondWeek": "Втора седмица",
"thirdWeek": "Трета седмица",
"fourthWeek": "Четвърта седмица",
"lastWeek": "Последна седмица",
"days": "дни",
"loadingParentSettings": "Зареждане на настройки за повторяемост на родителската задача...",
"recurringTaskInstance": "Повторяема задача",
"inheritedSettingsMessage": "Тази задача е генерирана от повторяема задача. Настройките за повторяемост, показани по-долу, са наследени от оригиналната задача и не могат да бъдат редактирани тук.",
"cancelEdit": "Отмяна на редакцията",
"editParentRecurrence": "Редактиране на повторяемостта на родителската задача",
"parentEditWarning": "⚠️ Редактирате настройките за повторяемост на родителската задача. Промените ще засегнат всички бъдещи инстанции на тази повторяема задача."
},
"weekdays": {
"sunday": "Нед",
"monday": "Пон",
"tuesday": "Вто",
"wednesday": "Сря",
"thursday": "Чет",
"friday": "Пет",
"saturday": "Съб"
},
"pomodoro": {
"play": "Играй",
"pause": "Пауза",
"reset": "Нулиране",
"close": "Затвори",
"complete": "Помодоро завършено!",
"completeMessage": "Страхотна работа! Време за почивка.",
"done": "Готово"
},
"calendar": {
"month": "Месец",
"week": "Седмица",
"day": "Ден",
"today": "Днес",
"total": "Total",
"addEvent": "Добави събитие",
"weekView": "Преглед на седмицата",
"dayView": "Преглед на деня",
"loadingTasks": "Зареждане на задачи...",
"noEvents": "Няма събития за този ден",
"moreEvents": "повече",
"googleIntegration": "Интеграция с Google Календар",
"googleDescription": "Свържете Google Календара си, за да синхронизирате събития и да ги виждате заедно с вашите задачи.",
"googleStatus": "Статус",
"notConnected": "Не е свързан",
"connected": "Свързан",
"connectGoogle": "Свържете Google Календар",
"disconnectGoogle": "Прекратете връзката с Google Календар",
"connecting": "Свързване...",
"connectionError": "Неуспешно свързване с Google Календар. Моля, опитайте отново.",
"disconnectionError": "Неуспешно прекратяване на връзката с Google Календар. Моля, опитайте отново.",
"taskDetails": "Детайли на задачата",
"editTask": "Редактиране на задачата",
"goToTasks": "Отидете на задачите",
"close": "Затвори",
"title": "Заглавие",
"status": "Статус",
"dueDate": "Краен срок",
"deferUntil": "Defer until",
"priority": "Приоритет",
"project": "Проект",
"area": "Област",
"description": "Описание",
"created": "Създадено",
"completed": "Завършено",
"pending": "В очакване",
"high": "Високо",
"medium": "Средно",
"low": "Ниско",
"time": "Време",
"allDay": "Цял ден"
},
"pages": {
"notFound": {
"title": "404 - Страницата не е намерена",
"message": "Страницата, която търсите, не съществува."
}
},
"navbar": {
"appName": "tududi",
"quickInboxCapture": "Бързо улавяне на входяща поща",
"userMenu": "Меню на потребителя",
"collapseSidebar": "Сгъване на страничната лента",
"expandSidebar": "Разширяване на страничната лента"
},
"upload": {
"uploading": "Качване..."
},
"searchPlaceholders": {
"searchProjects": "Търсене на проекти...",
"searchTags": "Търсене на тагове...",
"searchTasks": "Търсене на задачи..."
},
"ariaLabels": {
"hideInfo": "Скрий информация",
"aboutTasks": "За задачите",
"hideSearch": "Скрий търсенето",
"searchTasks": "Търсене на задачи",
"aboutInbox": "За входящата поща",
"collapseInfoPanel": "Сгъни панела с информация",
"showTasksInformation": "Покажи информация за задачите",
"collapseSearchPanel": "Сгъни панела за търсене",
"showSearchInput": "Покажи входа за търсене",
"showInboxInformation": "Покажи информация за входящата поща"
},
"api": {
"errors": {
"authenticationRequired": "Изисква се удостоверяване",
"userNotFound": "Потребителят не е намерен",
"authenticationError": "Грешка при удостоверяване",
"internalServerError": "Вътрешна грешка на сървъра",
"invalidLoginParameters": "Невалидни параметри за вход.",
"invalidCredentials": "Невалидни данни за вход",
"couldNotLogout": "Не можа да се излезе",
"loggedOutSuccessfully": "Излезе успешно",
"contentRequired": "Съдържанието е задължително",
"inboxItemNotFound": "Артикулът в пощенската кутия не е намерен.",
"inboxItemDeleted": "Артикулът в пощенската кутия е успешно изтрит",
"contentRequiredString": "Съдържанието е задължително и трябва да бъде низ",
"problemCreatingInboxItem": "Имаше проблем при създаването на артикула в пощенската кутия.",
"problemUpdatingInboxItem": "Имаше проблем при актуализирането на артикула в пощенската кутия.",
"problemDeletingInboxItem": "Имаше проблем при изтриването на артикула в пощенската кутия.",
"problemProcessingInboxItem": "Имаше проблем при обработката на артикула в пощенската кутия.",
"invalidOrderColumn": "Посочена е невалидна колона за подреждане.",
"taskNotFound": "Задачата не е намерена.",
"taskNameRequired": "Името на задачата е задължително.",
"invalidProject": "Невалиден проект.",
"unableToUpdateTask": "Не може да се актуализира задачата",
"taskDeleted": "Задачата е успешно изтрита",
"failedToGenerateRecurringTasks": "Неуспешно генериране на повтарящи се задачи",
"failedToUpdateTodayFlag": "Неуспешно актуализиране на флага за днешния ден",
"noImageProvided": "Не е предоставен файл с изображение",
"failedToUploadImage": "Неуспешно качване на изображение",
"projectNotFound": "Проектът не е намерен",
"projectNameRequired": "Името на проекта е задължително",
"projectDeleted": "Проектът беше успешно изтрит",
"noteNotFound": "Бележката не е намерена.",
"noteDeleted": "Бележката беше успешно изтрита.",
"profileNotFound": "Профилът не е намерен.",
"passwordTooShort": "Паролата трябва да е поне 6 символа",
"currentPasswordIncorrect": "Текущата парола е неправилна",
"failedToUpdateProfile": "Неуспешно обновяване на профила.",
"passwordChangeRequired": "Текущата парола и новата парола са задължителни",
"passwordChangedSuccessfully": "Паролата беше успешно променена",
"failedToUpdateTaskSummary": "Неуспешно обновяване на настройките за обобщение на задачите.",
"frequencyRequired": "Честотата е задължителна.",
"invalidFrequency": "Невалидна стойност на честотата.",
"failedToStartTelegramPolling": "Неуспешно стартиране на Telegram polling.",
"failedToStopTelegramPolling": "Неуспешно спиране на Telegram polling.",
"invalidTelegramTokenFormat": "Невалиден формат на Telegram бот токен.",
"invalidBotToken": "Невалиден бот токен или ботът не е достъпен.",
"chatIdRequired": "Chat ID е задължителен.",
"areaNotFound": "Областта не е намерена или не принадлежи на текущия потребител.",
"areaNameRequired": "Името на областта е задължително.",
"tagNotFound": "Етикетът не е намерен",
"tagNameRequired": "Името на етикета е задължително",
"tagDeleted": "Етикетът беше успешно изтрит",
"demoModeGoogleCalendar": "Демонстрационен режим: Интеграцията с Google Календар е симулирана",
"failedToGenerateAuthUrl": "Неуспешно генериране на URL за авторизация",
"authCodeNotProvided": "Кодът за авторизация не е предоставен",
"failedToCheckCalendarStatus": "Неуспешно проверяване на статуса на календара",
"failedToFetchCalendarEvents": "Неуспешно извличане на събития от календара",
"googleCalendarDisconnected": "Google Календарът е прекъснат",
"failedToDisconnectCalendar": "Неуспешно прекъсване на календара",
"urlParameterRequired": "Параметърът на URL е задължителен",
"couldNotExtractMetadata": "Не можа да се извлече метаданни",
"textParameterRequired": "Текстовият параметър е задължителен",
"notFound": "Не е намерен",
"resourceNotFound": "Заявеният ресурс не можа да бъде намерен."
}
},
"telegram": {
"welcomeMessage": "🎉 Добре дошли в tududi!\n\nВашият личен бот за управление на задачи вече е свързан и готов да помогне!\n\n📝 Просто ми изпратете съобщение и ще го добавя в пощенската ви кутия на tududi като елемент.\n\n✨ Команди:\n• /help - Показване на информация за помощ\n• /start - Показване на приветствено съобщение\n• Просто напишете произволен текст - Добавете го като елемент в пощенската кутия\n\nНека се организираме! 🚀",
"helpMessage": "📋 Помощ за tududi Bot\n\nИзпратете ми произволно текстово съобщение и ще го добавя в пощенската ви кутия на tududi като елемент.\n\nКоманди:\n/start - Приветствено съобщение\n/help - Показване на това съобщение за помощ\n\nПросто напишете вашия елемент и аз ще се погрижа за останалото!",
"commandProcessed": "Командата беше обработена успешно",
"messageProcessed": "Съобщението беше обработено успешно",
"failedToAddToInbox": "❌ Неуспешно добавяне в пощенската кутия: {{error}}"
},
"about": {
"title": "За нас",
"version": "Версия",
"description": "Самостоятелно хоствано управление на задачи с йерархична организация, поддръжка на множество езици и интеграция с Telegram. Създадено с любов за ентусиастите на продуктивността.",
"madeWithLove": "Създадено с любов",
"appreciation": "Благодарим ви, че използвате tududi! Вашата подкрепа помага за поддържането и развитието на този проект. Ако го намирате за полезен, помислете за подкрепа на разработката.",
"supportDevelopment": "Подкрепете разработката",
"community": "Общество",
"viewOnGitHub": "Вижте в GitHub",
"license": "Лицензирано за лична употреба",
"builtBy": "Създадено от"
},
"weekdaysFull": {
"sunday": "Неделя",
"monday": "Понеделник",
"tuesday": "Вторник",
"wednesday": "Сряда",
"thursday": "Четвъртък",
"friday": "Петък",
"saturday": "Събота"
},
"admin": {
"manageUsers": "Управление на потребители",
"userManagement": "Управление на потребителите",
"addUser": "Добави потребител",
"remove": "Премахни",
"email": "Имейл",
"created": "Създадено",
"role": "Роля",
"loadingUsers": "Зареждане на потребители...",
"noUsers": "Няма потребители",
"admin": "администратор",
"user": "потребител",
"password": "Парола",
"name": "Име",
"surname": "Фамилия",
"authenticationRequired": "Изисква се удостоверяване",
"forbidden": "Забранено",
"failedToLoadUsers": "Неуспешно зареждане на потребители",
"emailAlreadyExists": "Имейлът вече съществува",
"failedToCreateUser": "Неуспешно създаване на потребител",
"badRequest": "Невалидна заявка",
"userNotFound": "Потребителят не е намерен",
"failedToDeleteUser": "Неуспешно изтриване на потребител",
"editUser": "Редактиране на потребител",
"actions": "Действия",
"passwordOptional": "Оставете празно, за да запазите текущата",
"failedToUpdateUser": "Неуспешно обновяване на потребителя",
"confirmDelete": "Сигурни ли сте, че искате да изтриете този потребител?",
"deleteUser": "Изтриване на потребител",
"confirmDeleteUser": "Сигурни ли сте, че искате да изтриете {{email}}? Това действие не може да бъде отменено."
},
"shares": {
"shareProject": "Сподели проект",
"targetUser": "Избери потребител",
"selectUserPlaceholder": "Избери потребител...",
"permission": "Разрешение",
"readOnly": "Само за четене",
"readWrite": "Четене и писане",
"owner": "Собственик",
"share": "Сподели",
"revoke": "Отмяна",
"currentShares": "Потребители с достъп",
"noShares": "Все още не е споделено",
"noAvailableUsers": "Няма налични потребители за споделяне",
"shared": "Споделено",
"sharedWithTeam": "Споделено с екипа"
},
"views": {
"title": "Умни прегледи",
"loading": "Зареждане на прегледи...",
"searchPlaceholder": "Търсене на прегледи...",
"noViewsFound": "Не са намерени прегледи. Създайте преглед, като извършите търсене и кликнете \"Запази като Умен преглед\".",
"deleteView": "Изтриване на преглед",
"confirmDelete": "Сигурни ли сте, че искате да изтриете прегледа \"{{viewName}}\"?",
"pinView": "Прикрепяне на преглед",
"unpinView": "Отпинване на преглед",
"searchCriteria": "Критерии за търсене",
"entityTypes": "Типове единици",
"searchText": "Текст за търсене",
"priority": "Приоритет",
"dueDate": "Срок",
"deferUntil": "Defer until",
"noCriteriaSet": "Не са зададени конкретни критерии",
"priorityLabel": "Приоритет:",
"dueLabel": "Срок:",
"tags": "Тагове",
"recurring": "Повтарящи се"
},
"search": {
"placeholder": "Търсене на задачи, проекти, бележки...",
"searchingFor": "Търсите",
"allItems": "всички елементи",
"containingText": ", съдържащ текста",
"withPriority": ", с",
"priority": "приоритет",
"due": ", срок",
"taggedWith": ", маркиран с",
"and": "и",
"criteria": "Критерии за търсене",
"metadataFilters": "Филтри за метаданни",
"priorityFilter": "Приоритет",
"dueFilter": "Срок",
"tagsFilter": "Тагове",
"saveAsSmartView": "Запази като Умен изглед",
"viewName": "Име на изгледа",
"viewNameRequired": "Името на изгледа е задължително",
"viewNamePlaceholder": "Въведете име на изгледа",
"failedToSave": "Неуспешно запазване на изгледа. Моля, опитайте отново.",
"cancel": "Отказ",
"saving": "Запазване...",
"saveView": "Запази изгледа",
"startTyping": "Започнете да пишете, за да търсите или изберете филтри по-горе",
"noResults": "Не са намерени резултати",
"entityTypes": {
"task": "задача",
"project": "проект",
"area": "област",
"note": "бележка"
},
"thatAre": ", които са",
"extras": "Допълнителни",
"recurringFilter": {
"label": "Повтарящи се",
"recurring": "повтарящи се шаблони",
"nonRecurring": "неповтарящи се",
"instances": "повтарящи се инстанции"
},
"deferUntilFilter": "Отложи до",
"deferUntil": ", отложи до",
"extrasFilter": {
"isRecurring": "е Повтарящо се",
"isOverdue": "е Просрочено",
"hasContent": "има Съдържание",
"isDeferred": "е Отложено",
"hasTags": "има Тагове",
"isAssignedToProject": "е Назначено на Проект"
}
},
"subtasks": {
"placeholder": "Добавете подзадача..."
},
"backup": {
"title": "Резервно копие и възстановяване",
"description": "Създайте резервни копия или възстановете от предишни резервни копия. Последните 5 резервни копия се запазват автоматично.",
"createBackup": "Създайте резервно копие",
"importFromFile": "Импортиране от файл",
"createNewBackup": "Създайте ново резервно копие",
"createDescription": "Създайте ново резервно копие на всичките си данни. Резервните копия се запазват на сървъра и можете да ги възстановите по-късно.",
"createBackupNow": "Създайте резервно копие сега",
"creating": "Създаване на резервно копие...",
"exportSuccess": "Резервното копие е създадено успешно!",
"exportError": "Неуспешно създаване на резервно копие",
"savedBackups": "Запазени резервни копия",
"noBackups": "Не са намерени резервни копия. Създайте първото си резервно копие по-горе.",
"createdAt": "Създадено",
"version": "Версия",
"currentVersion": "Текуща версия",
"size": "Размер",
"contents": "Съдържание",
"actions": "Действия",
"restore": "Възстановяване",
"download": "Изтегляне",
"downloadSuccess": "Резервното копие е изтеглено успешно!",
"downloadError": "Неуспешно изтегляне на резервното копие",
"confirmRestore": "Възстановяване на резервно копие",
"confirmRestoreMessage": "Сигурни ли сте, че искате да възстановите това резервно копие? Това ще обедини резервираните данни с вашите текущи данни.",
"restoreSuccess": "Резервното копие е възстановено успешно! Създадени: {{tasks}} задачи, {{projects}} проекта, {{notes}} бележки",
"restoreError": "Неуспешно възстановяване на резервното копие",
"confirmDelete": "Изтриване на резервно копие",
"confirmDeleteMessage": "Сигурни ли сте, че искате да изтриете това резервно копие? Тази операция не може да бъде отменена.",
"deleteSuccess": "Резервното копие е изтрито успешно!",
"deleteError": "Неуспешно изтриване на резервното копие",
"importTitle": "Импорт от файл",
"importDescription": "Качете файл с резервно копие, за да възстановите вашите данни. Вашите съществуващи данни ще бъдат запазени, а новите елементи от резервното копие ще бъдат добавени.",
"importNote": "Важно:",
"importNoteDescription": "Импортът ще обедини данните с вашите съществуващи елементи. Дублираните елементи (същия UID) ще бъдат пропуснати.",
"selectFile": "Изберете файл с резервно копие",
"clickToUpload": "Кликнете, за да прегледате файловете",
"restoreBackup": "Възстановяване на резервно копие",
"importing": "Импортиране...",
"importSuccess": "Резервното копие е импортирано успешно! Създадени: {{tasks}} задачи, {{projects}} проекта, {{notes}} бележки",
"importError": "Неуспешно импортиране на резервно копие",
"backupContents": "Съдържание на резервното копие:",
"validationError": "Избраният файл не е валидно резервно копие",
"validationErrors": "Грешки при валидиране:",
"versionIncompatible": "Несъвместима версия",
"backupVersion": "Версия на резервното копие",
"restoreButton": "Възстанови"
},
"notifications": {
"table": {
"type": "Тип известие"
},
"channels": {
"inApp": "В приложението",
"email": "Имейл",
"push": "Push",
"telegram": "Telegram"
},
"types": {
"dueTasks": "Задължителни задачи",
"overdueTasks": "Закъснели задачи",
"deferUntil": "Отложи до",
"dueProjects": "Задължителни проекти",
"overdueProjects": "Закъснели проекти"
},
"descriptions": {
"dueTasks": "Задачи, които трябва да бъдат завършени в рамките на 24 часа",
"overdueTasks": "Задачи, които са преминали срока си",
"deferUntil": "Задачи, които сега са налични за работа",
"dueProjects": "Проекти, които трябва да бъдат завършени в рамките на 24 часа",
"overdueProjects": "Проекти, които са преминали срока си"
},
"telegram": {
"notConfigured": {
"title": "Telegram не е конфигуриран:",
"message": "За да получавате известия в Telegram, моля, конфигурирайте вашия Telegram бот в таба Telegram."
}
},
"test": {
"title": "Тестови известия",
"description": "Изпратете тестово известие, за да видите как изглежда в приложението и на активираните канали (Telegram и др.)",
"send": "Изпрати тест",
"sending": "Изпраща се..."
},
"info": {
"title": "Забележка:",
"message": "Имейл и Push известия ще бъдат налични скоро. В приложението и Telegram известията в момента са налични."
}
},
"projectStatus": {
"not_started": "Не е започнато",
"not_started_desc": "Записано, но все още не е започнато",
"planned": "Планирано",
"planned_desc": "Определено и готово за започване",
"in_progress": "В процес",
"in_progress_desc": "Активна работа в ход",
"waiting": "Изчакване",
"waiting_desc": "Изчакване на външна информация",
"done": "Завършено",
"done_desc": "Завършено и готово",
"cancelled": "Отменено",
"cancelled_desc": "Няма да бъде завършено"
}
}