mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-20 13:51:45 +00:00
126f2df21b
* chore: move i18n to shared package * chore: move server translations to shared package and apply linter and prettier on entire shared package
300 lines
23 KiB
TypeScript
300 lines
23 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const settings: TranslationStrings = {
|
||
'settings.title': 'Настройки',
|
||
'settings.subtitle': 'Настройте свои персональные параметры',
|
||
'settings.tabs.display': 'Дисплей',
|
||
'settings.tabs.map': 'Карта',
|
||
'settings.tabs.notifications': 'Уведомления',
|
||
'settings.tabs.integrations': 'Интеграции',
|
||
'settings.tabs.account': 'Аккаунт',
|
||
'settings.tabs.offline': 'Offline',
|
||
'settings.tabs.about': 'О приложении',
|
||
'settings.map': 'Карта',
|
||
'settings.mapTemplate': 'Шаблон карты',
|
||
'settings.mapTemplatePlaceholder.select': 'Выберите шаблон...',
|
||
'settings.mapDefaultHint': 'Оставьте пустым для OpenStreetMap (по умолчанию)',
|
||
'settings.mapTemplatePlaceholder':
|
||
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
'settings.mapHint': 'URL-шаблон для тайлов карты',
|
||
'settings.mapProvider': 'Провайдер карты',
|
||
'settings.mapProviderHint':
|
||
'Применяется к Trip Planner и Journey. Atlas всегда использует Leaflet.',
|
||
'settings.mapLeafletSubtitle': 'Классические 2D, любые растровые тайлы',
|
||
'settings.mapMapboxSubtitle': 'Векторные тайлы, 3D-здания и рельеф',
|
||
'settings.mapExperimental': 'Экспериментально',
|
||
'settings.mapMapboxToken': 'Токен доступа Mapbox',
|
||
'settings.mapMapboxTokenHint': 'Публичный токен (pk.*) с',
|
||
'settings.mapMapboxTokenLink': 'mapbox.com → Токены доступа',
|
||
'settings.mapStyle': 'Стиль карты',
|
||
'settings.mapStylePlaceholder': 'Выберите стиль Mapbox',
|
||
'settings.mapStyleHint': 'Preset или собственный URL mapbox://styles/USER/ID',
|
||
'settings.map3dBuildings': '3D-здания и рельеф',
|
||
'settings.map3dHint':
|
||
'Наклон + настоящие 3D-здания — работает со всеми стилями, включая спутник.',
|
||
'settings.mapHighQuality': 'Режим высокого качества',
|
||
'settings.mapHighQualityHint':
|
||
'Сглаживание + проекция глобуса для более чётких краёв и реалистичного вида мира.',
|
||
'settings.mapHighQualityWarning':
|
||
'Может повлиять на производительность на слабых устройствах.',
|
||
'settings.mapTipLabel': 'Совет:',
|
||
'settings.mapTip':
|
||
'Зажмите правую кнопку мыши и перетащите, чтобы повернуть/наклонить карту. Клик средней кнопкой — добавить место (правая кнопка зарезервирована для вращения).',
|
||
'settings.latitude': 'Широта',
|
||
'settings.longitude': 'Долгота',
|
||
'settings.saveMap': 'Сохранить карту',
|
||
'settings.apiKeys': 'API-ключи',
|
||
'settings.mapsKey': 'API-ключ Google Maps',
|
||
'settings.mapsKeyHint':
|
||
'Для поиска мест. Требуется Places API (New). Получите на console.cloud.google.com',
|
||
'settings.weatherKey': 'API-ключ OpenWeatherMap',
|
||
'settings.weatherKeyHint':
|
||
'Для данных о погоде. Бесплатно на openweathermap.org/api',
|
||
'settings.keyPlaceholder': 'Введите ключ...',
|
||
'settings.configured': 'Настроено',
|
||
'settings.saveKeys': 'Сохранить ключи',
|
||
'settings.display': 'Отображение',
|
||
'settings.colorMode': 'Цветовая схема',
|
||
'settings.light': 'Светлая',
|
||
'settings.dark': 'Тёмная',
|
||
'settings.auto': 'Авто',
|
||
'settings.language': 'Язык',
|
||
'settings.temperature': 'Единица температуры',
|
||
'settings.timeFormat': 'Формат времени',
|
||
'settings.blurBookingCodes': 'Скрыть коды бронирования',
|
||
'settings.notifications': 'Уведомления',
|
||
'settings.notifyTripInvite': 'Приглашения в поездку',
|
||
'settings.notifyBookingChange': 'Изменения бронирований',
|
||
'settings.notifyTripReminder': 'Напоминания о поездке',
|
||
'settings.notifyTodoDue': 'Задача к сроку',
|
||
'settings.notifyVacayInvite': 'Приглашения слияния Vacay',
|
||
'settings.notifyPhotosShared': 'Общие фото (Immich)',
|
||
'settings.notifyCollabMessage': 'Сообщения чата (Collab)',
|
||
'settings.notifyPackingTagged': 'Список вещей: назначения',
|
||
'settings.notifyWebhook': 'Webhook-уведомления',
|
||
'settings.notificationsDisabled':
|
||
'Уведомления не настроены. Попросите администратора включить уведомления по электронной почте или webhook.',
|
||
'settings.notificationsActive': 'Активный канал',
|
||
'settings.notificationsManagedByAdmin':
|
||
'События уведомлений настраиваются администратором.',
|
||
'settings.on': 'Вкл.',
|
||
'settings.off': 'Выкл.',
|
||
'settings.mcp.title': 'Настройка MCP',
|
||
'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-токены',
|
||
'settings.mcp.createToken': 'Создать токен',
|
||
'settings.mcp.noTokens':
|
||
'Токенов пока нет. Создайте один для подключения MCP-клиентов.',
|
||
'settings.mcp.tokenCreatedAt': 'Создан',
|
||
'settings.mcp.tokenUsedAt': 'Использован',
|
||
'settings.mcp.deleteTokenTitle': 'Удалить токен',
|
||
'settings.mcp.deleteTokenMessage':
|
||
'Этот токен перестанет работать немедленно. Любой MCP-клиент, использующий его, потеряет доступ.',
|
||
'settings.mcp.modal.createTitle': 'Создать API-токен',
|
||
'settings.mcp.modal.tokenName': 'Название токена',
|
||
'settings.mcp.modal.tokenNamePlaceholder':
|
||
'напр. Claude Desktop, Рабочий ноутбук',
|
||
'settings.mcp.modal.creating': 'Создание…',
|
||
'settings.mcp.modal.create': 'Создать токен',
|
||
'settings.mcp.modal.createdTitle': 'Токен создан',
|
||
'settings.mcp.modal.createdWarning':
|
||
'Этот токен будет показан только один раз. Скопируйте и сохраните его сейчас — восстановить его будет невозможно.',
|
||
'settings.mcp.modal.done': 'Готово',
|
||
'settings.mcp.toast.created': 'Токен создан',
|
||
'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.oauth.modal.machineClient':
|
||
'Машинный клиент (без входа через браузер)',
|
||
'settings.oauth.modal.machineClientHint':
|
||
'Использует грант client_credentials — URI перенаправления не требуются. Токен выдаётся напрямую через client_id + client_secret и действует от вашего имени в пределах выбранных областей.',
|
||
'settings.oauth.modal.machineClientUsage':
|
||
'Получить токен: POST /oauth/token с grant_type=client_credentials, client_id и client_secret. Без браузера, без токена обновления.',
|
||
'settings.oauth.badge.machine': 'машинный',
|
||
'settings.account': 'Аккаунт',
|
||
'settings.about': 'О приложении',
|
||
'settings.about.reportBug': 'Сообщить об ошибке',
|
||
'settings.about.reportBugHint': 'Нашли проблему? Сообщите нам',
|
||
'settings.about.featureRequest': 'Предложить функцию',
|
||
'settings.about.featureRequestHint': 'Предложите новую функцию',
|
||
'settings.about.wikiHint': 'Документация и руководства',
|
||
'settings.about.supporters.badge': 'Ежемесячные спонсоры',
|
||
'settings.about.supporters.title': 'Спутники TREK',
|
||
'settings.about.supporters.subtitle':
|
||
'Пока ты планируешь следующий маршрут, эти люди планируют вместе со мной будущее TREK. Их ежемесячный взнос идёт напрямую в разработку и реально потраченные часы — чтобы TREK оставался Open Source.',
|
||
'settings.about.supporters.since': 'спонсор с {date}',
|
||
'settings.about.supporters.tierEmpty': 'Стань первым',
|
||
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
||
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
||
'settings.about.supporter.tier.businessClassDreamer':
|
||
'Business Class Dreamer',
|
||
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
||
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
||
'settings.about.description':
|
||
'TREK — это самостоятельно размещаемый планировщик путешествий, который помогает организовать поездки от первой идеи до последнего воспоминания. Планирование по дням, бюджет, списки вещей, фото и многое другое — всё в одном месте, на вашем собственном сервере.',
|
||
'settings.about.madeWith': 'Сделано с',
|
||
'settings.about.madeBy': 'Морисом и растущим open-source сообществом.',
|
||
'settings.username': 'Имя пользователя',
|
||
'settings.email': 'Эл. почта',
|
||
'settings.role': 'Роль',
|
||
'settings.roleAdmin': 'Администратор',
|
||
'settings.oidcLinked': 'Связан с',
|
||
'settings.changePassword': 'Изменить пароль',
|
||
'settings.mustChangePassword':
|
||
'Вы должны сменить пароль перед продолжением. Пожалуйста, установите новый пароль ниже.',
|
||
'settings.currentPassword': 'Текущий пароль',
|
||
'settings.currentPasswordRequired': 'Текущий пароль обязателен',
|
||
'settings.newPassword': 'Новый пароль',
|
||
'settings.confirmPassword': 'Подтвердите новый пароль',
|
||
'settings.updatePassword': 'Обновить пароль',
|
||
'settings.passwordRequired': 'Введите текущий и новый пароль',
|
||
'settings.passwordTooShort': 'Пароль должен содержать не менее 8 символов',
|
||
'settings.passwordMismatch': 'Пароли не совпадают',
|
||
'settings.passwordWeak':
|
||
'Пароль должен содержать заглавные, строчные буквы, цифру и специальный символ',
|
||
'settings.passwordChanged': 'Пароль успешно изменён',
|
||
'settings.deleteAccount': 'Удалить аккаунт',
|
||
'settings.deleteAccountTitle': 'Удалить ваш аккаунт?',
|
||
'settings.deleteAccountWarning':
|
||
'Ваш аккаунт и все поездки, места и файлы будут безвозвратно удалены. Это действие нельзя отменить.',
|
||
'settings.deleteAccountConfirm': 'Удалить безвозвратно',
|
||
'settings.deleteBlockedTitle': 'Удаление невозможно',
|
||
'settings.deleteBlockedMessage':
|
||
'Вы единственный администратор. Назначьте другого пользователя администратором перед удалением своего аккаунта.',
|
||
'settings.roleUser': 'Пользователь',
|
||
'settings.saveProfile': 'Сохранить профиль',
|
||
'settings.mfa.title': 'Двухфакторная аутентификация (2FA)',
|
||
'settings.mfa.description':
|
||
'Добавляет второй шаг при входе. Используйте приложение-аутентификатор (Google Authenticator, Authy и др.).',
|
||
'settings.mfa.requiredByPolicy':
|
||
'Администратор требует двухфакторную аутентификацию. Настройте приложение-аутентификатор ниже, прежде чем продолжить.',
|
||
'settings.mfa.backupTitle': 'Резервные коды',
|
||
'settings.mfa.backupDescription':
|
||
'Используйте эти одноразовые коды, если потеряете доступ к приложению-аутентификатору.',
|
||
'settings.mfa.backupWarning':
|
||
'Сохраните их сейчас. Каждый код можно использовать только один раз.',
|
||
'settings.mfa.backupCopy': 'Скопировать коды',
|
||
'settings.mfa.backupDownload': 'Скачать TXT',
|
||
'settings.mfa.backupPrint': 'Печать / PDF',
|
||
'settings.mfa.backupCopied': 'Резервные коды скопированы',
|
||
'settings.mfa.enabled': '2FA включена для вашего аккаунта.',
|
||
'settings.mfa.disabled': '2FA не включена.',
|
||
'settings.mfa.setup': 'Настроить аутентификатор',
|
||
'settings.mfa.scanQr':
|
||
'Отсканируйте QR-код приложением или введите ключ вручную.',
|
||
'settings.mfa.secretLabel': 'Секретный ключ (ручной ввод)',
|
||
'settings.mfa.codePlaceholder': '6-значный код',
|
||
'settings.mfa.enable': 'Включить 2FA',
|
||
'settings.mfa.cancelSetup': 'Отмена',
|
||
'settings.mfa.disableTitle': 'Отключить 2FA',
|
||
'settings.mfa.disableHint':
|
||
'Введите пароль аккаунта и текущий код из аутентификатора.',
|
||
'settings.mfa.disable': 'Отключить 2FA',
|
||
'settings.mfa.toastEnabled': 'Двухфакторная аутентификация включена',
|
||
'settings.mfa.toastDisabled': 'Двухфакторная аутентификация отключена',
|
||
'settings.mfa.demoBlocked': 'Недоступно в демо-режиме',
|
||
'settings.toast.mapSaved': 'Настройки карты сохранены',
|
||
'settings.toast.keysSaved': 'API-ключи сохранены',
|
||
'settings.toast.displaySaved': 'Настройки отображения сохранены',
|
||
'settings.toast.profileSaved': 'Профиль сохранён',
|
||
'settings.uploadAvatar': 'Загрузить фото профиля',
|
||
'settings.removeAvatar': 'Удалить фото профиля',
|
||
'settings.avatarUploaded': 'Фото профиля обновлено',
|
||
'settings.avatarRemoved': 'Фото профиля удалено',
|
||
'settings.avatarError': 'Ошибка загрузки',
|
||
'settings.bookingLabels': 'Подписи маршрутов бронирований',
|
||
'settings.bookingLabelsHint':
|
||
'Отображает названия станций / аэропортов на карте. Если выключено, показывается только значок.',
|
||
'settings.notifyVersionAvailable': 'Доступна новая версия',
|
||
'settings.notificationPreferences.noChannels':
|
||
'Каналы уведомлений не настроены. Попросите администратора настроить уведомления по электронной почте или через webhook.',
|
||
'settings.webhookUrl.label': 'URL вебхука',
|
||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||
'settings.webhookUrl.hint':
|
||
'Введите URL вашего вебхука Discord, Slack или пользовательского для получения уведомлений.',
|
||
'settings.webhookUrl.saved': 'URL вебхука сохранён',
|
||
'settings.webhookUrl.test': 'Тест',
|
||
'settings.webhookUrl.testSuccess': 'Тестовый вебхук успешно отправлен',
|
||
'settings.webhookUrl.testFailed': 'Ошибка тестового вебхука',
|
||
'settings.ntfyUrl.topicLabel': 'Тема Ntfy',
|
||
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
||
'settings.ntfyUrl.serverLabel': 'URL сервера Ntfy (необязательно)',
|
||
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
||
'settings.ntfyUrl.hint':
|
||
'Введите тему Ntfy для получения push-уведомлений. Оставьте поле сервера пустым, чтобы использовать настройку по умолчанию, заданную администратором.',
|
||
'settings.ntfyUrl.tokenLabel': 'Токен доступа (необязательно)',
|
||
'settings.ntfyUrl.tokenHint': 'Требуется для тем, защищённых паролем.',
|
||
'settings.ntfyUrl.saved': 'Настройки Ntfy сохранены',
|
||
'settings.ntfyUrl.test': 'Тест',
|
||
'settings.ntfyUrl.testSuccess':
|
||
'Тестовое уведомление Ntfy успешно отправлено',
|
||
'settings.ntfyUrl.testFailed': 'Ошибка отправки тестового уведомления Ntfy',
|
||
'settings.ntfyUrl.tokenCleared': 'Токен доступа очищен',
|
||
'settings.notificationPreferences.inapp': 'In-App',
|
||
'settings.notificationPreferences.webhook': 'Webhook',
|
||
'settings.notificationPreferences.email': 'Email',
|
||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||
};
|
||
export default settings;
|