mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
Merge branch 'dev' into feature/naver-support
This commit is contained in:
@@ -8,6 +8,8 @@ const ru: Record<string, string> = {
|
||||
'common.loading': 'Загрузка...',
|
||||
'common.import': 'Импорт',
|
||||
'common.error': 'Ошибка',
|
||||
'common.unknownError': 'Неизвестная ошибка',
|
||||
'common.tooManyAttempts': 'Слишком много попыток. Попробуйте позже.',
|
||||
'common.back': 'Назад',
|
||||
'common.all': 'Все',
|
||||
'common.close': 'Закрыть',
|
||||
@@ -27,6 +29,12 @@ const ru: Record<string, string> = {
|
||||
'common.password': 'Пароль',
|
||||
'common.saving': 'Сохранение...',
|
||||
'common.saved': 'Сохранено',
|
||||
'common.expand': 'Развернуть',
|
||||
'common.collapse': 'Свернуть',
|
||||
'trips.memberRemoved': '{username} удалён',
|
||||
'trips.memberRemoveError': 'Не удалось удалить',
|
||||
'trips.memberAdded': '{username} добавлен',
|
||||
'trips.memberAddError': 'Не удалось добавить',
|
||||
'trips.reminder': 'Напоминание',
|
||||
'trips.reminderNone': 'Нет',
|
||||
'trips.reminderDay': 'день',
|
||||
@@ -179,9 +187,6 @@ const ru: Record<string, string> = {
|
||||
'admin.notifications.none': 'Отключено',
|
||||
'admin.notifications.email': 'Эл. почта (SMTP)',
|
||||
'admin.notifications.webhook': 'Webhook',
|
||||
'admin.notifications.events': 'События уведомлений',
|
||||
'admin.notifications.eventsHint': 'Выберите, какие события вызывают уведомления для всех пользователей.',
|
||||
'admin.notifications.configureFirst': 'Сначала настройте SMTP или webhook ниже, затем включите события.',
|
||||
'admin.notifications.save': 'Сохранить настройки уведомлений',
|
||||
'admin.notifications.saved': 'Настройки уведомлений сохранены',
|
||||
'admin.notifications.testWebhook': 'Отправить тестовый вебхук',
|
||||
@@ -228,6 +233,7 @@ const ru: Record<string, string> = {
|
||||
'settings.mcp.endpoint': 'MCP-эндпоинт',
|
||||
'settings.mcp.clientConfig': 'Конфигурация клиента',
|
||||
'settings.mcp.clientConfigHint': 'Замените <your_token> на API-токен из списка ниже. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).',
|
||||
'settings.mcp.clientConfigHintOAuth': 'Замените <your_client_id> и <your_client_secret> на учётные данные из созданного выше клиента OAuth 2.1. При первом подключении mcp-remote откроет браузер для завершения авторизации. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).',
|
||||
'settings.mcp.copy': 'Копировать',
|
||||
'settings.mcp.copied': 'Скопировано!',
|
||||
'settings.mcp.apiTokens': 'API-токены',
|
||||
@@ -249,6 +255,48 @@ const ru: Record<string, string> = {
|
||||
'settings.mcp.toast.createError': 'Не удалось создать токен',
|
||||
'settings.mcp.toast.deleted': 'Токен удалён',
|
||||
'settings.mcp.toast.deleteError': 'Не удалось удалить токен',
|
||||
'settings.mcp.apiTokensDeprecated': 'API-токены устарели и будут удалены в будущей версии. Пожалуйста, используйте клиенты OAuth 2.1.',
|
||||
'settings.oauth.clients': 'Клиенты OAuth 2.1',
|
||||
'settings.oauth.clientsHint': 'Зарегистрируйте клиенты OAuth 2.1, чтобы сторонние MCP-приложения (Claude Web, Cursor и др.) могли подключаться без статических токенов.',
|
||||
'settings.oauth.createClient': 'Новый клиент',
|
||||
'settings.oauth.noClients': 'Нет зарегистрированных клиентов OAuth.',
|
||||
'settings.oauth.clientId': 'ID клиента',
|
||||
'settings.oauth.clientSecret': 'Секрет клиента',
|
||||
'settings.oauth.deleteClient': 'Удалить клиента',
|
||||
'settings.oauth.deleteClientMessage': 'Этот клиент и все активные сессии будут удалены навсегда. Любое приложение, использующее его, немедленно потеряет доступ.',
|
||||
'settings.oauth.rotateSecret': 'Обновить секрет',
|
||||
'settings.oauth.rotateSecretMessage': 'Будет сгенерирован новый секрет клиента, а все существующие сессии будут немедленно аннулированы. Обновите приложение перед закрытием этого диалога.',
|
||||
'settings.oauth.rotateSecretConfirm': 'Обновить',
|
||||
'settings.oauth.rotateSecretConfirming': 'Обновление…',
|
||||
'settings.oauth.rotateSecretDoneTitle': 'Новый секрет сгенерирован',
|
||||
'settings.oauth.rotateSecretDoneWarning': 'Этот секрет отображается только один раз. Скопируйте его сейчас и обновите приложение — все предыдущие сессии были аннулированы.',
|
||||
'settings.oauth.activeSessions': 'Активные сессии OAuth',
|
||||
'settings.oauth.sessionScopes': 'Области доступа',
|
||||
'settings.oauth.sessionExpires': 'Истекает',
|
||||
'settings.oauth.revoke': 'Отозвать',
|
||||
'settings.oauth.revokeSession': 'Отозвать сессию',
|
||||
'settings.oauth.revokeSessionMessage': 'Это немедленно отзовёт доступ для данной сессии OAuth.',
|
||||
'settings.oauth.modal.createTitle': 'Зарегистрировать клиент OAuth',
|
||||
'settings.oauth.modal.presets': 'Быстрые настройки',
|
||||
'settings.oauth.modal.clientName': 'Название приложения',
|
||||
'settings.oauth.modal.clientNamePlaceholder': 'напр. Claude Web, Моё MCP-приложение',
|
||||
'settings.oauth.modal.redirectUris': 'URI перенаправления',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint': 'Один URI на строку. Требуется HTTPS (localhost исключён). Требуется точное совпадение.',
|
||||
'settings.oauth.modal.scopes': 'Разрешённые области доступа',
|
||||
'settings.oauth.modal.scopesHint': 'list_trips и get_trip_summary всегда доступны — область не требуется. Они помогают ИИ находить нужные ID поездок.',
|
||||
'settings.oauth.modal.selectAll': 'Выбрать все',
|
||||
'settings.oauth.modal.deselectAll': 'Снять выбор',
|
||||
'settings.oauth.modal.creating': 'Регистрация…',
|
||||
'settings.oauth.modal.create': 'Зарегистрировать клиента',
|
||||
'settings.oauth.modal.createdTitle': 'Клиент зарегистрирован',
|
||||
'settings.oauth.modal.createdWarning': 'Секрет клиента отображается только один раз. Скопируйте его сейчас — его нельзя будет восстановить.',
|
||||
'settings.oauth.toast.createError': 'Не удалось зарегистрировать клиент OAuth',
|
||||
'settings.oauth.toast.deleted': 'Клиент OAuth удалён',
|
||||
'settings.oauth.toast.deleteError': 'Не удалось удалить клиент OAuth',
|
||||
'settings.oauth.toast.revoked': 'Сессия отозвана',
|
||||
'settings.oauth.toast.revokeError': 'Не удалось отозвать сессию',
|
||||
'settings.oauth.toast.rotateError': 'Не удалось обновить секрет клиента',
|
||||
'settings.account': 'Аккаунт',
|
||||
'settings.about': 'О приложении',
|
||||
'settings.about.reportBug': 'Сообщить об ошибке',
|
||||
@@ -364,6 +412,10 @@ const ru: Record<string, string> = {
|
||||
'login.mfaHint': 'Откройте Google Authenticator, Authy или другое TOTP-приложение.',
|
||||
'login.mfaBack': '← Назад к входу',
|
||||
'login.mfaVerify': 'Подтвердить',
|
||||
'login.invalidInviteLink': 'Недействительная или истёкшая ссылка-приглашение',
|
||||
'login.oidcFailed': 'Ошибка входа через OIDC',
|
||||
'login.usernameRequired': 'Имя пользователя обязательно',
|
||||
'login.passwordMinLength': 'Пароль должен содержать не менее 8 символов',
|
||||
'login.oidc.tokenFailed': 'Аутентификация не удалась.',
|
||||
'login.oidc.invalidState': 'Недействительная сессия. Попробуйте снова.',
|
||||
'login.demoFailed': 'Ошибка демо-входа',
|
||||
@@ -450,6 +502,17 @@ const ru: Record<string, string> = {
|
||||
'admin.tabs.settings': 'Настройки',
|
||||
'admin.allowRegistration': 'Разрешить регистрацию',
|
||||
'admin.allowRegistrationHint': 'Новые пользователи могут регистрироваться самостоятельно',
|
||||
'admin.authMethods': 'Authentication Methods',
|
||||
'admin.passwordLogin': 'Password Login',
|
||||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||||
'admin.passwordRegistration': 'Password Registration',
|
||||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||||
'admin.oidcLogin': 'SSO Login',
|
||||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||||
'admin.requireMfa': 'Требовать двухфакторную аутентификацию (2FA)',
|
||||
'admin.requireMfaHint': 'Пользователи без 2FA должны завершить настройку в разделе «Настройки» перед использованием приложения.',
|
||||
'admin.apiKeys': 'API-ключи',
|
||||
@@ -547,9 +610,10 @@ const ru: Record<string, string> = {
|
||||
'admin.weather.locationHint': 'Погода основана на первом месте с координатами в каждом дне. Если ни одно место не назначено на день, в качестве ориентира используется любое место из списка.',
|
||||
|
||||
// MCP Tokens
|
||||
'admin.tabs.mcpTokens': 'MCP-токены',
|
||||
'admin.mcpTokens.title': 'MCP-токены',
|
||||
'admin.mcpTokens.subtitle': 'Управление API-токенами всех пользователей',
|
||||
'admin.tabs.mcpTokens': 'MCP-доступ',
|
||||
'admin.mcpTokens.title': 'MCP-доступ',
|
||||
'admin.mcpTokens.subtitle': 'Управление OAuth-сессиями и API-токенами всех пользователей',
|
||||
'admin.mcpTokens.sectionTitle': 'API-токены',
|
||||
'admin.mcpTokens.owner': 'Владелец',
|
||||
'admin.mcpTokens.tokenName': 'Название токена',
|
||||
'admin.mcpTokens.created': 'Создан',
|
||||
@@ -561,6 +625,17 @@ const ru: Record<string, string> = {
|
||||
'admin.mcpTokens.deleteSuccess': 'Токен удалён',
|
||||
'admin.mcpTokens.deleteError': 'Не удалось удалить токен',
|
||||
'admin.mcpTokens.loadError': 'Не удалось загрузить токены',
|
||||
'admin.oauthSessions.sectionTitle': 'OAuth-сессии',
|
||||
'admin.oauthSessions.clientName': 'Клиент',
|
||||
'admin.oauthSessions.owner': 'Владелец',
|
||||
'admin.oauthSessions.scopes': 'Права доступа',
|
||||
'admin.oauthSessions.created': 'Создано',
|
||||
'admin.oauthSessions.empty': 'Нет активных OAuth-сессий',
|
||||
'admin.oauthSessions.revokeTitle': 'Отозвать сессию',
|
||||
'admin.oauthSessions.revokeMessage': 'Эта OAuth-сессия будет немедленно отозвана. Клиент потеряет доступ к MCP.',
|
||||
'admin.oauthSessions.revokeSuccess': 'Сессия отозвана',
|
||||
'admin.oauthSessions.revokeError': 'Не удалось отозвать сессию',
|
||||
'admin.oauthSessions.loadError': 'Не удалось загрузить OAuth-сессии',
|
||||
|
||||
// GitHub
|
||||
'admin.tabs.github': 'GitHub',
|
||||
@@ -656,6 +731,8 @@ const ru: Record<string, string> = {
|
||||
'vacay.companyHolidays': 'Корпоративные выходные',
|
||||
'vacay.companyHolidaysHint': 'Разрешить отмечать корпоративные выходные дни',
|
||||
'vacay.companyHolidaysNoDeduct': 'Корпоративные выходные не вычитаются из дней отпуска.',
|
||||
'vacay.weekStart': 'Неделя начинается с',
|
||||
'vacay.weekStartHint': 'Выберите, начинается ли неделя с понедельника или воскресенья',
|
||||
'vacay.carryOver': 'Перенос',
|
||||
'vacay.carryOverHint': 'Автоматически переносить оставшиеся дни отпуска на следующий год',
|
||||
'vacay.sharing': 'Общий доступ',
|
||||
@@ -870,6 +947,7 @@ const ru: Record<string, string> = {
|
||||
'inspector.files': 'Файлы',
|
||||
'inspector.filesCount': '{count} файлов',
|
||||
'inspector.removeFromDay': 'Убрать из дня',
|
||||
'inspector.remove': 'Удалить',
|
||||
'inspector.addToDay': 'Добавить в день',
|
||||
'inspector.confirmedRes': 'Подтверждённое бронирование',
|
||||
'inspector.pendingRes': 'Ожидающее бронирование',
|
||||
@@ -1010,6 +1088,7 @@ const ru: Record<string, string> = {
|
||||
'budget.totalBudget': 'Общий бюджет',
|
||||
'budget.byCategory': 'По категориям',
|
||||
'budget.editTooltip': 'Нажмите для редактирования',
|
||||
'budget.linkedToReservation': 'Связано с бронированием — редактируйте название там',
|
||||
'budget.confirm.deleteCategory': 'Вы уверены, что хотите удалить категорию «{name}» с {count} записями?',
|
||||
'budget.deleteCategory': 'Удалить категорию',
|
||||
'budget.perPerson': 'На человека',
|
||||
@@ -1019,9 +1098,13 @@ const ru: Record<string, string> = {
|
||||
'budget.settlement': 'Взаиморасчёт',
|
||||
'budget.settlementInfo': 'Нажмите на аватар участника в строке бюджета, чтобы отметить его зелёным — это значит, что он заплатил. Взаиморасчёт покажет, кто кому и сколько должен.',
|
||||
'budget.netBalances': 'Чистые балансы',
|
||||
'budget.linkedToReservation': 'Привязано к бронированию — измените название там',
|
||||
|
||||
// Files
|
||||
'files.title': 'Файлы',
|
||||
'files.pageTitle': 'Файлы и документы',
|
||||
'files.subtitle': '{count} файлов для {trip}',
|
||||
'files.downloadPdf': 'Скачать PDF',
|
||||
'files.count': '{count} файлов',
|
||||
'files.countSingular': '1 файл',
|
||||
'files.uploaded': '{count} загружено',
|
||||
@@ -1108,7 +1191,9 @@ const ru: Record<string, string> = {
|
||||
'packing.template': 'Шаблон',
|
||||
'packing.templateApplied': '{count} вещей добавлено из шаблона',
|
||||
'packing.templateError': 'Ошибка применения шаблона',
|
||||
'packing.assignUser': 'Назначить пользователя',
|
||||
'packing.saveAsTemplate': 'Сохранить как шаблон',
|
||||
'packing.templateName': 'Название шаблона',
|
||||
'packing.templateSaved': 'Список вещей сохранён как шаблон',
|
||||
'packing.noMembers': 'Нет участников',
|
||||
'packing.bags': 'Багаж',
|
||||
'packing.noBag': 'Не назначено',
|
||||
@@ -1265,6 +1350,13 @@ const ru: Record<string, string> = {
|
||||
'backup.keep.forever': 'Хранить вечно',
|
||||
|
||||
// Photos
|
||||
'photos.title': 'Фотографии',
|
||||
'photos.subtitle': '{count} фото для {trip}',
|
||||
'photos.dropHere': 'Перетащите фото сюда...',
|
||||
'photos.dropHereActive': 'Перетащите фото сюда',
|
||||
'photos.captionForAll': 'Подпись (для всех)',
|
||||
'photos.captionPlaceholder': 'Необязательная подпись...',
|
||||
'photos.addCaption': 'Добавить подпись...',
|
||||
'photos.allDays': 'Все дни',
|
||||
'photos.noPhotos': 'Фото пока нет',
|
||||
'photos.uploadHint': 'Загрузите фото из путешествия',
|
||||
@@ -1272,6 +1364,12 @@ const ru: Record<string, string> = {
|
||||
'photos.linkPlace': 'Привязать место',
|
||||
'photos.noPlace': 'Без места',
|
||||
'photos.uploadN': '{n} фото загружено',
|
||||
'photos.linkDay': 'Связать день',
|
||||
'photos.noDay': 'Нет дня',
|
||||
'photos.dayLabel': 'День {number}',
|
||||
'photos.photoSelected': 'Фото выбрано',
|
||||
'photos.photosSelected': 'Фото выбраны',
|
||||
'photos.fileTypeHint': 'JPG, PNG, WebP · макс. 10 МБ · до 30 фото',
|
||||
|
||||
// Backup restore modal
|
||||
'backup.restoreConfirmTitle': 'Восстановить копию?',
|
||||
@@ -1298,6 +1396,7 @@ const ru: Record<string, string> = {
|
||||
'planner.routeCalculated': 'Маршрут рассчитан',
|
||||
'planner.routeCalcFailed': 'Не удалось рассчитать маршрут',
|
||||
'planner.routeError': 'Ошибка расчёта маршрута',
|
||||
'planner.icsExportFailed': 'Не удалось экспортировать ICS',
|
||||
'planner.routeOptimized': 'Маршрут оптимизирован',
|
||||
'planner.reservationUpdated': 'Бронирование обновлено',
|
||||
'planner.reservationAdded': 'Бронирование добавлено',
|
||||
@@ -1383,6 +1482,7 @@ const ru: Record<string, string> = {
|
||||
'memories.title': 'Фото',
|
||||
'memories.notConnected': 'Immich не подключён',
|
||||
'memories.notConnectedHint': 'Подключите Immich в настройках, чтобы видеть фотографии из поездок.',
|
||||
'memories.notConnectedMultipleHint': 'Подключите одного из этих фотопровайдеров: {provider_names} в Настройках, чтобы добавлять фотографии к этому путешествию.',
|
||||
'memories.noDates': 'Добавьте даты поездки для загрузки фотографий.',
|
||||
'memories.noPhotos': 'Фотографии не найдены',
|
||||
'memories.noPhotosHint': 'В Immich нет фотографий за период этой поездки.',
|
||||
@@ -1393,26 +1493,35 @@ const ru: Record<string, string> = {
|
||||
'memories.reviewTitle': 'Проверьте ваши фото',
|
||||
'memories.reviewHint': 'Нажмите на фото, чтобы исключить его из общего доступа.',
|
||||
'memories.shareCount': 'Поделиться ({count} фото)',
|
||||
'memories.immichUrl': 'URL сервера Immich',
|
||||
'memories.immichApiKey': 'API-ключ',
|
||||
'memories.providerUrl': 'URL сервера',
|
||||
'memories.providerApiKey': 'API-ключ',
|
||||
'memories.providerUsername': 'Имя пользователя',
|
||||
'memories.providerPassword': 'Пароль',
|
||||
'memories.providerOTP': 'Код MFA (если включён)',
|
||||
'memories.skipSSLVerification': 'Пропустить проверку SSL-сертификата',
|
||||
'memories.providerUrlHintSynology': 'Включите путь приложения Photos в URL, например https://nas:5001/photo',
|
||||
'memories.testConnection': 'Проверить подключение',
|
||||
'memories.testFirst': 'Сначала проверьте подключение',
|
||||
'memories.connected': 'Подключено',
|
||||
'memories.disconnected': 'Не подключено',
|
||||
'memories.connectionSuccess': 'Подключение к Immich установлено',
|
||||
'memories.connectionError': 'Не удалось подключиться к Immich',
|
||||
'memories.saved': 'Настройки Immich сохранены',
|
||||
'memories.saved': 'Настройки {provider_name} сохранены',
|
||||
'memories.providerDisconnectedBanner': 'Соединение с {provider_name} потеряно. Переподключитесь в Настройках для просмотра фотографий.',
|
||||
'memories.saveError': 'Не удалось сохранить настройки {provider_name}',
|
||||
'memories.oldest': 'Сначала старые',
|
||||
'memories.newest': 'Сначала новые',
|
||||
'memories.allLocations': 'Все места',
|
||||
'memories.addPhotos': 'Добавить фото',
|
||||
'memories.linkAlbum': 'Привязать альбом',
|
||||
'memories.selectAlbum': 'Выбрать альбом Immich',
|
||||
'memories.selectAlbumMultiple': 'Выбрать альбом',
|
||||
'memories.noAlbums': 'Альбомы не найдены',
|
||||
'memories.syncAlbum': 'Синхронизировать',
|
||||
'memories.unlinkAlbum': 'Отвязать',
|
||||
'memories.photos': 'фото',
|
||||
'memories.selectPhotos': 'Выбрать фото из Immich',
|
||||
'memories.selectPhotosMultiple': 'Выбрать фотографии',
|
||||
'memories.selectHint': 'Нажмите на фото, чтобы выбрать их.',
|
||||
'memories.selected': 'выбрано',
|
||||
'memories.addSelected': 'Добавить {count} фото',
|
||||
@@ -1570,6 +1679,8 @@ const ru: Record<string, string> = {
|
||||
'notifications.markUnread': 'Отметить как непрочитанное',
|
||||
'notifications.delete': 'Удалить',
|
||||
'notifications.system': 'Система',
|
||||
'notifications.synologySessionCleared.title': 'Synology Photos отключено',
|
||||
'notifications.synologySessionCleared.text': 'Ваш сервер или аккаунт изменился — перейдите в Настройки, чтобы проверить соединение снова.',
|
||||
'memories.error.loadAlbums': 'Не удалось загрузить альбомы',
|
||||
'memories.error.linkAlbum': 'Не удалось привязать альбом',
|
||||
'memories.error.unlinkAlbum': 'Не удалось отвязать альбом',
|
||||
@@ -1692,6 +1803,309 @@ const ru: Record<string, string> = {
|
||||
'notif.generic.text': 'У вас новое уведомление',
|
||||
'notif.dev.unknown_event.title': '[DEV] Неизвестное событие',
|
||||
'notif.dev.unknown_event.text': 'Тип события "{event}" не зарегистрирован в EVENT_NOTIFICATION_CONFIG',
|
||||
|
||||
// Journey, Dashboard, Nav, DayPlan
|
||||
'common.justNow': 'только что',
|
||||
'common.hoursAgo': '{count} ч назад',
|
||||
'common.daysAgo': '{count} д назад',
|
||||
'budget.linkedToReservation': 'Привязано к бронированию — измените название там',
|
||||
'packing.saveAsTemplate': 'Сохранить как шаблон',
|
||||
'packing.templateName': 'Название шаблона',
|
||||
'packing.templateSaved': 'Список вещей сохранён как шаблон',
|
||||
'memories.notConnectedMultipleHint': 'Подключите любого из этих фото-провайдеров: {provider_names} в Настройках, чтобы добавлять фото к этой поездке.',
|
||||
'memories.providerUrl': 'URL сервера',
|
||||
'memories.providerApiKey': 'API-ключ',
|
||||
'memories.providerUsername': 'Имя пользователя',
|
||||
'memories.providerPassword': 'Пароль',
|
||||
'memories.saveError': 'Не удалось сохранить настройки {provider_name}',
|
||||
'memories.saveRouteNotConfigured': 'Маршрут сохранения не настроен для этого провайдера',
|
||||
'memories.testRouteNotConfigured': 'Маршрут тестирования не настроен для этого провайдера',
|
||||
'memories.fillRequiredFields': 'Пожалуйста, заполните все обязательные поля',
|
||||
'memories.selectAlbumMultiple': 'Выбрать альбом',
|
||||
'memories.selectPhotosMultiple': 'Выбрать фото',
|
||||
'journey.title': 'Путешествие',
|
||||
'journey.subtitle': 'Отслеживайте свои путешествия в реальном времени',
|
||||
'journey.new': 'Новое путешествие',
|
||||
'journey.create': 'Создать',
|
||||
'journey.titlePlaceholder': 'Куда вы едете?',
|
||||
'journey.empty': 'Пока нет путешествий',
|
||||
'journey.emptyHint': 'Начните документировать свою следующую поездку',
|
||||
'journey.deleted': 'Путешествие удалено',
|
||||
'journey.createError': 'Не удалось создать путешествие',
|
||||
'journey.deleteError': 'Не удалось удалить путешествие',
|
||||
'journey.deleteConfirmTitle': 'Удалить',
|
||||
'journey.deleteConfirmMessage': 'Удалить «{title}»? Это действие нельзя отменить.',
|
||||
'journey.deleteConfirmGeneric': 'Вы уверены, что хотите удалить это?',
|
||||
'journey.notFound': 'Путешествие не найдено',
|
||||
'journey.photos': 'Фото',
|
||||
'journey.timelineEmpty': 'Пока нет остановок',
|
||||
'journey.timelineEmptyHint': 'Добавьте отметку или напишите запись в дневник',
|
||||
'journey.status.draft': 'Черновик',
|
||||
'journey.status.active': 'Активно',
|
||||
'journey.status.completed': 'Завершено',
|
||||
'journey.status.upcoming': 'Предстоящее',
|
||||
'journey.checkin.add': 'Отметиться',
|
||||
'journey.checkin.namePlaceholder': 'Название места',
|
||||
'journey.checkin.notesPlaceholder': 'Заметки (необязательно)',
|
||||
'journey.checkin.save': 'Сохранить',
|
||||
'journey.checkin.error': 'Не удалось сохранить отметку',
|
||||
'journey.entry.add': 'Дневник',
|
||||
'journey.entry.edit': 'Редактировать запись',
|
||||
'journey.entry.titlePlaceholder': 'Заголовок (необязательно)',
|
||||
'journey.entry.bodyPlaceholder': 'Что произошло сегодня?',
|
||||
'journey.entry.save': 'Сохранить',
|
||||
'journey.entry.error': 'Не удалось сохранить запись',
|
||||
'journey.photo.add': 'Фото',
|
||||
'journey.photo.uploadError': 'Загрузка не удалась',
|
||||
'journey.share.share': 'Поделиться',
|
||||
'journey.share.public': 'Публичный',
|
||||
'journey.share.linkCopied': 'Публичная ссылка скопирована',
|
||||
'journey.share.disabled': 'Публичный доступ отключён',
|
||||
'journey.editor.titlePlaceholder': 'Дайте название этому моменту...',
|
||||
'journey.editor.bodyPlaceholder': 'Расскажите историю этого дня...',
|
||||
'journey.editor.placePlaceholder': 'Местоположение (необязательно)',
|
||||
'journey.editor.tagsPlaceholder': 'Теги: скрытая жемчужина, лучшая еда, стоит вернуться...',
|
||||
'journey.visibility.private': 'Приватный',
|
||||
'journey.visibility.shared': 'Общий',
|
||||
'journey.visibility.public': 'Публичный',
|
||||
'journey.emptyState.title': 'Ваша история начинается здесь',
|
||||
'journey.emptyState.subtitle': 'Отметьтесь в месте или напишите первую запись в дневник',
|
||||
'journey.frontpage.subtitle': 'Превращайте поездки в истории, которые вы никогда не забудете',
|
||||
'journey.frontpage.createJourney': 'Создать путешествие',
|
||||
'journey.frontpage.activeJourney': 'Активное путешествие',
|
||||
'journey.frontpage.allJourneys': 'Все путешествия',
|
||||
'journey.frontpage.journeys': 'путешествий',
|
||||
'journey.frontpage.createNew': 'Создать новое путешествие',
|
||||
'journey.frontpage.createNewSub': 'Выберите поездки, пишите истории, делитесь приключениями',
|
||||
'journey.frontpage.live': 'В эфире',
|
||||
'journey.frontpage.synced': 'Синхронизировано',
|
||||
'journey.frontpage.continueWriting': 'Продолжить писать',
|
||||
'journey.frontpage.updated': 'Обновлено {time}',
|
||||
'journey.frontpage.suggestionLabel': 'Поездка только что завершилась',
|
||||
'journey.frontpage.suggestionText': 'Превратите <strong>{title}</strong> в путешествие',
|
||||
'journey.frontpage.dismiss': 'Скрыть',
|
||||
'journey.frontpage.journeyName': 'Название путешествия',
|
||||
'journey.frontpage.namePlaceholder': 'напр. Юго-Восточная Азия 2026',
|
||||
'journey.frontpage.selectTrips': 'Выбрать поездки',
|
||||
'journey.frontpage.tripsSelected': 'поездок выбрано',
|
||||
'journey.frontpage.trips': 'поездок',
|
||||
'journey.frontpage.placesImported': 'мест будет импортировано',
|
||||
'journey.frontpage.places': 'мест',
|
||||
'journey.detail.backToJourney': 'Назад к путешествию',
|
||||
'journey.detail.syncedWithTrips': 'Синхронизировано с поездками',
|
||||
'journey.detail.addEntry': 'Добавить запись',
|
||||
'journey.detail.newEntry': 'Новая запись',
|
||||
'journey.detail.editEntry': 'Редактировать запись',
|
||||
'journey.detail.noEntries': 'Пока нет записей',
|
||||
'journey.detail.noEntriesHint': 'Добавьте поездку, чтобы начать с шаблонных записей',
|
||||
'journey.detail.noPhotos': 'Пока нет фото',
|
||||
'journey.detail.noPhotosHint': 'Загрузите фото в записи или просмотрите библиотеку Immich/Synology',
|
||||
'journey.detail.journeyStats': 'Статистика путешествия',
|
||||
'journey.detail.syncedTrips': 'Синхронизированные поездки',
|
||||
'journey.detail.noTripsLinked': 'Пока нет привязанных поездок',
|
||||
'journey.detail.contributors': 'Участники',
|
||||
'journey.detail.readMore': 'Читать далее',
|
||||
'journey.detail.prosCons': 'Плюсы и минусы',
|
||||
'journey.stats.days': 'Дней',
|
||||
'journey.stats.cities': 'Городов',
|
||||
'journey.stats.entries': 'Записей',
|
||||
'journey.stats.photos': 'Фото',
|
||||
'journey.stats.places': 'Мест',
|
||||
'journey.verdict.lovedIt': 'Понравилось',
|
||||
'journey.verdict.couldBeBetter': 'Могло быть лучше',
|
||||
'journey.synced.places': 'мест',
|
||||
'journey.synced.synced': 'синхронизировано',
|
||||
'journey.editor.uploadPhotos': 'Загрузить фото',
|
||||
'journey.editor.fromGallery': 'Из галереи',
|
||||
'journey.editor.allPhotosAdded': 'Все фото уже добавлены',
|
||||
'journey.editor.writeStory': 'Напишите свою историю...',
|
||||
'journey.editor.prosCons': 'Плюсы и минусы',
|
||||
'journey.editor.pros': 'Плюсы',
|
||||
'journey.editor.cons': 'Минусы',
|
||||
'journey.editor.proPlaceholder': 'Что-то отличное...',
|
||||
'journey.editor.conPlaceholder': 'Не очень хорошо...',
|
||||
'journey.editor.addAnother': 'Добавить ещё',
|
||||
'journey.editor.date': 'Дата',
|
||||
'journey.editor.location': 'Местоположение',
|
||||
'journey.editor.searchLocation': 'Поиск местоположения...',
|
||||
'journey.editor.mood': 'Настроение',
|
||||
'journey.editor.weather': 'Погода',
|
||||
'journey.editor.photoFirst': '1-е',
|
||||
'journey.editor.makeFirst': 'Сделать 1-м',
|
||||
'journey.mood.amazing': 'Потрясающе',
|
||||
'journey.mood.good': 'Хорошо',
|
||||
'journey.mood.neutral': 'Нейтрально',
|
||||
'journey.mood.rough': 'Тяжело',
|
||||
'journey.weather.sunny': 'Солнечно',
|
||||
'journey.weather.partly': 'Переменная облачность',
|
||||
'journey.weather.cloudy': 'Облачно',
|
||||
'journey.weather.rainy': 'Дождливо',
|
||||
'journey.weather.stormy': 'Гроза',
|
||||
'journey.weather.cold': 'Снежно',
|
||||
'journey.trips.linkTrip': 'Привязать поездку',
|
||||
'journey.trips.searchTrip': 'Поиск поездки',
|
||||
'journey.trips.searchPlaceholder': 'Название поездки или направление...',
|
||||
'journey.trips.noTripsAvailable': 'Нет доступных поездок',
|
||||
'journey.trips.link': 'Привязать',
|
||||
'journey.trips.tripLinked': 'Поездка привязана',
|
||||
'journey.trips.linkFailed': 'Не удалось привязать поездку',
|
||||
'journey.trips.addTrip': 'Добавить поездку',
|
||||
'journey.trips.unlinkTrip': 'Отвязать поездку',
|
||||
'journey.trips.unlinkMessage': 'Отвязать «{title}»? Все синхронизированные записи и фото из этой поездки будут безвозвратно удалены. Это действие нельзя отменить.',
|
||||
'journey.trips.unlink': 'Отвязать',
|
||||
'journey.trips.tripUnlinked': 'Поездка отвязана',
|
||||
'journey.trips.unlinkFailed': 'Не удалось отвязать поездку',
|
||||
'journey.trips.noTripsLinkedSettings': 'Нет привязанных поездок',
|
||||
'journey.contributors.invite': 'Пригласить участника',
|
||||
'journey.contributors.searchUser': 'Поиск пользователя',
|
||||
'journey.contributors.searchPlaceholder': 'Имя пользователя или email...',
|
||||
'journey.contributors.noUsers': 'Пользователи не найдены',
|
||||
'journey.contributors.role': 'Роль',
|
||||
'journey.contributors.added': 'Участник добавлен',
|
||||
'journey.contributors.addFailed': 'Не удалось добавить участника',
|
||||
'journey.share.publicShare': 'Публичный доступ',
|
||||
'journey.share.createLink': 'Создать ссылку для общего доступа',
|
||||
'journey.share.linkCreated': 'Ссылка создана',
|
||||
'journey.share.createFailed': 'Не удалось создать ссылку',
|
||||
'journey.share.copy': 'Копировать',
|
||||
'journey.share.copied': 'Скопировано!',
|
||||
'journey.share.timeline': 'Хронология',
|
||||
'journey.share.gallery': 'Галерея',
|
||||
'journey.share.map': 'Карта',
|
||||
'journey.share.removeLink': 'Удалить ссылку',
|
||||
'journey.share.linkDeleted': 'Ссылка удалена',
|
||||
'journey.share.deleteFailed': 'Не удалось удалить',
|
||||
'journey.share.updateFailed': 'Не удалось обновить',
|
||||
'journey.settings.title': 'Настройки путешествия',
|
||||
'journey.settings.coverImage': 'Обложка',
|
||||
'journey.settings.changeCover': 'Сменить обложку',
|
||||
'journey.settings.addCover': 'Добавить обложку',
|
||||
'journey.settings.name': 'Название',
|
||||
'journey.settings.subtitle': 'Подзаголовок',
|
||||
'journey.settings.subtitlePlaceholder': 'напр. Таиланд, Вьетнам и Камбоджа',
|
||||
'journey.settings.delete': 'Удалить',
|
||||
'journey.settings.deleteJourney': 'Удалить путешествие',
|
||||
'journey.settings.deleteMessage': 'Удалить «{title}»? Все записи и фото будут потеряны.',
|
||||
'journey.settings.saved': 'Настройки сохранены',
|
||||
'journey.settings.saveFailed': 'Не удалось сохранить',
|
||||
'journey.settings.coverUpdated': 'Обложка обновлена',
|
||||
'journey.settings.coverFailed': 'Загрузка не удалась',
|
||||
'journey.settings.failedToDelete': 'Не удалось удалить',
|
||||
'journey.entries.deleteTitle': 'Удалить запись',
|
||||
'journey.photosUploaded': '{count} фото загружено',
|
||||
'journey.photosAdded': '{count} фото добавлено',
|
||||
'journey.public.notFound': 'Не найдено',
|
||||
'journey.public.notFoundMessage': 'Это путешествие не существует или ссылка устарела.',
|
||||
'journey.public.readOnly': 'Только для чтения · Публичное путешествие',
|
||||
'journey.public.tagline': 'Инструмент планирования и исследования путешествий',
|
||||
'journey.public.sharedVia': 'Опубликовано через',
|
||||
'journey.public.madeWith': 'Сделано с помощью',
|
||||
'journey.pdf.journeyBook': 'Книга путешествия',
|
||||
'journey.pdf.madeWith': 'Сделано с помощью TREK',
|
||||
'journey.pdf.day': 'День',
|
||||
'journey.pdf.theEnd': 'Конец',
|
||||
'journey.pdf.saveAsPdf': 'Сохранить как PDF',
|
||||
'journey.pdf.pages': 'страниц',
|
||||
'dashboard.greeting.morning': 'Доброе утро,',
|
||||
'dashboard.greeting.afternoon': 'Добрый день,',
|
||||
'dashboard.greeting.evening': 'Добрый вечер,',
|
||||
'dashboard.mobile.liveNow': 'Сейчас в пути',
|
||||
'dashboard.mobile.tripProgress': 'Прогресс поездки',
|
||||
'dashboard.mobile.daysLeft': 'осталось {count} дн.',
|
||||
'dashboard.mobile.places': 'Места',
|
||||
'dashboard.mobile.buddies': 'Попутчики',
|
||||
'dashboard.mobile.newTrip': 'Новая поездка',
|
||||
'dashboard.mobile.currency': 'Валюта',
|
||||
'dashboard.mobile.timezone': 'Часовой пояс',
|
||||
'dashboard.mobile.upcomingTrips': 'Предстоящие поездки',
|
||||
'dashboard.mobile.yourTrips': 'Ваши поездки',
|
||||
'dashboard.mobile.trips': 'поездок',
|
||||
'dashboard.mobile.starts': 'Начало',
|
||||
'dashboard.mobile.duration': 'Продолжительность',
|
||||
'dashboard.mobile.day': 'день',
|
||||
'dashboard.mobile.days': 'дней',
|
||||
'dashboard.mobile.ongoing': 'В процессе',
|
||||
'dashboard.mobile.startsToday': 'Начинается сегодня',
|
||||
'dashboard.mobile.tomorrow': 'Завтра',
|
||||
'dashboard.mobile.inDays': 'Через {count} дн.',
|
||||
'dashboard.mobile.inMonths': 'Через {count} мес.',
|
||||
'dashboard.mobile.completed': 'Завершено',
|
||||
'dashboard.mobile.currencyConverter': 'Конвертер валют',
|
||||
'nav.profile': 'Профиль',
|
||||
'nav.bottomSettings': 'Настройки',
|
||||
'nav.bottomAdmin': 'Администрирование',
|
||||
'nav.bottomLogout': 'Выйти',
|
||||
'nav.bottomAdminBadge': 'Админ',
|
||||
'dayplan.mobile.addPlace': 'Добавить место',
|
||||
'dayplan.mobile.searchPlaces': 'Поиск мест...',
|
||||
'dayplan.mobile.allAssigned': 'Все места распределены',
|
||||
'dayplan.mobile.noMatch': 'Нет совпадений',
|
||||
'dayplan.mobile.createNew': 'Создать новое место',
|
||||
'admin.addons.catalog.journey.name': 'Путешествие',
|
||||
'admin.addons.catalog.journey.description': 'Отслеживание поездок и дневник путешествий с отметками, фото и ежедневными историями',
|
||||
// OAuth scope groups
|
||||
'oauth.scope.group.trips': 'Поездки',
|
||||
'oauth.scope.group.places': 'Места',
|
||||
'oauth.scope.group.atlas': 'Atlas',
|
||||
'oauth.scope.group.packing': 'Вещи',
|
||||
'oauth.scope.group.todos': 'Задачи',
|
||||
'oauth.scope.group.budget': 'Бюджет',
|
||||
'oauth.scope.group.reservations': 'Бронирования',
|
||||
'oauth.scope.group.collab': 'Сотрудничество',
|
||||
'oauth.scope.group.notifications': 'Уведомления',
|
||||
'oauth.scope.group.vacay': 'Отпуск',
|
||||
'oauth.scope.group.geo': 'Geo',
|
||||
'oauth.scope.group.weather': 'Погода',
|
||||
|
||||
// OAuth scope labels & descriptions
|
||||
'oauth.scope.trips:read.label': 'Просмотр поездок и маршрутов',
|
||||
'oauth.scope.trips:read.description': 'Чтение поездок, дней, заметок и участников',
|
||||
'oauth.scope.trips:write.label': 'Редактирование поездок и маршрутов',
|
||||
'oauth.scope.trips:write.description': 'Создание и обновление поездок, дней, заметок и управление участниками',
|
||||
'oauth.scope.trips:delete.label': 'Удаление поездок',
|
||||
'oauth.scope.trips:delete.description': 'Безвозвратное удаление поездок — это действие необратимо',
|
||||
'oauth.scope.trips:share.label': 'Управление ссылками на совместный доступ',
|
||||
'oauth.scope.trips:share.description': 'Создание, обновление и отзыв публичных ссылок на поездки',
|
||||
'oauth.scope.places:read.label': 'Просмотр мест и данных карты',
|
||||
'oauth.scope.places:read.description': 'Чтение мест, назначений по дням, тегов и категорий',
|
||||
'oauth.scope.places:write.label': 'Управление местами',
|
||||
'oauth.scope.places:write.description': 'Создание, обновление и удаление мест, назначений и тегов',
|
||||
'oauth.scope.atlas:read.label': 'Просмотр Atlas',
|
||||
'oauth.scope.atlas:read.description': 'Чтение посещённых стран, регионов и списка желаний',
|
||||
'oauth.scope.atlas:write.label': 'Управление Atlas',
|
||||
'oauth.scope.atlas:write.description': 'Отмечать посещённые страны и регионы, управлять списком желаний',
|
||||
'oauth.scope.packing:read.label': 'Просмотр списков вещей',
|
||||
'oauth.scope.packing:read.description': 'Чтение вещей, сумок и назначений категорий',
|
||||
'oauth.scope.packing:write.label': 'Управление списками вещей',
|
||||
'oauth.scope.packing:write.description': 'Добавление, обновление, удаление, отметка и переупорядочивание вещей и сумок',
|
||||
'oauth.scope.todos:read.label': 'Просмотр списков задач',
|
||||
'oauth.scope.todos:read.description': 'Чтение задач поездки и назначений категорий',
|
||||
'oauth.scope.todos:write.label': 'Управление списками задач',
|
||||
'oauth.scope.todos:write.description': 'Создание, обновление, отметка, удаление и переупорядочивание задач',
|
||||
'oauth.scope.budget:read.label': 'Просмотр бюджета',
|
||||
'oauth.scope.budget:read.description': 'Чтение статей бюджета и разбивки расходов',
|
||||
'oauth.scope.budget:write.label': 'Управление бюджетом',
|
||||
'oauth.scope.budget:write.description': 'Создание, обновление и удаление статей бюджета',
|
||||
'oauth.scope.reservations:read.label': 'Просмотр бронирований',
|
||||
'oauth.scope.reservations:read.description': 'Чтение бронирований и сведений о проживании',
|
||||
'oauth.scope.reservations:write.label': 'Управление бронированиями',
|
||||
'oauth.scope.reservations:write.description': 'Создание, обновление, удаление и переупорядочивание бронирований',
|
||||
'oauth.scope.collab:read.label': 'Просмотр совместной работы',
|
||||
'oauth.scope.collab:read.description': 'Чтение совместных заметок, опросов и сообщений',
|
||||
'oauth.scope.collab:write.label': 'Управление совместной работой',
|
||||
'oauth.scope.collab:write.description': 'Создание, обновление и удаление заметок, опросов и сообщений',
|
||||
'oauth.scope.notifications:read.label': 'Просмотр уведомлений',
|
||||
'oauth.scope.notifications:read.description': 'Чтение уведомлений в приложении и количества непрочитанных',
|
||||
'oauth.scope.notifications:write.label': 'Управление уведомлениями',
|
||||
'oauth.scope.notifications:write.description': 'Отмечать уведомления как прочитанные и отвечать на них',
|
||||
'oauth.scope.vacay:read.label': 'Просмотр планов отпуска',
|
||||
'oauth.scope.vacay:read.description': 'Чтение данных планирования отпуска, записей и статистики',
|
||||
'oauth.scope.vacay:write.label': 'Управление планами отпуска',
|
||||
'oauth.scope.vacay:write.description': 'Создание и управление записями отпуска, праздниками и командными планами',
|
||||
'oauth.scope.geo:read.label': 'Карты и геокодирование',
|
||||
'oauth.scope.geo:read.description': 'Поиск мест, разрешение URL карт и обратное геокодирование координат',
|
||||
'oauth.scope.weather:read.label': 'Прогнозы погоды',
|
||||
'oauth.scope.weather:read.description': 'Получение прогнозов погоды для мест и дат поездки',
|
||||
}
|
||||
|
||||
export default ru
|
||||
|
||||
Reference in New Issue
Block a user