diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 3c33bb74..384b655e 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -3,8 +3,8 @@ "me": "Аккаунт", "clients": "Клиенты", "admin": { - "panel": "Админ панель", - "general": "Общие", + "panel": "Админ-панель", + "general": "Общие настройки", "config": "Конфигурация", "interface": "Интерфейс", "hooks": "Хуки" @@ -16,11 +16,11 @@ "me": { "currentPassword": "Текущий пароль", "enable2fa": "Включить двухфакторную аутентификацию", - "enable2faDesc": "Отсканируйте QR-код приложением-аутентификатором или введите ключ вручную.", - "2faKey": "TOTP-ключ", - "2faCodeDesc": "Введите код из приложения-аутентификатора.", + "enable2faDesc": "Отсканируйте QR‑код с помощью приложения‑аутентификатора или введите ключ вручную.", + "2faKey": "Ключ TOTP", + "2faCodeDesc": "Введите код из приложения‑аутентификатора.", "disable2fa": "Отключить двухфакторную аутентификацию", - "disable2faDesc": "Введите пароль, чтобы отключить двухфакторную аутентификацию" + "disable2faDesc": "Введите пароль, чтобы отключить двухфакторную аутентификацию." }, "general": { "name": "Имя", @@ -29,9 +29,9 @@ "newPassword": "Новый пароль", "updatePassword": "Обновить пароль", "mtu": "MTU", - "allowedIps": "Разрешённые IP", + "allowedIps": "Разрешённые IP‑адреса", "dns": "DNS", - "persistentKeepalive": "Постоянный keepalive", + "persistentKeepalive": "Постоянное поддержание соединения", "logout": "Выйти", "continue": "Продолжить", "host": "Хост", @@ -41,21 +41,21 @@ "confirmPassword": "Подтвердите пароль", "loading": "Загрузка...", "2fa": "Двухфакторная аутентификация", - "2faCode": "TOTP‑код" + "2faCode": "Код TOTP" }, "setup": { "welcome": "Добро пожаловать в первичную настройку wg-easy", - "welcomeDesc": "Вы нашли самый простой способ установить и управлять WireGuard на любом Linux-хосте", - "existingSetup": "У вас уже есть существующая установка?", - "createAdminDesc": "Сначала введите имя администратора и надёжный пароль. Эти данные понадобятся для входа в панель управления", - "setupConfigDesc": "Введите информацию о хосте и порте. Она будет использоваться в конфигурации клиента при установке WireGuard на устройствах", - "setupMigrationDesc": "Укажите файл резервной копии, если хотите перенести данные из предыдущей версии wg-easy", + "welcomeDesc": "Вы нашли самый простой способ установить и управлять WireGuard на любом Linux‑хосте", + "existingSetup": "У вас уже есть существующая настройка?", + "createAdminDesc": "Сначала введите имя администратора и надёжный пароль. Эти данные будут использоваться для входа в Админ-панель.", + "setupConfigDesc": "Введите данные хоста и порта. Они будут использоваться для настройки клиента при установке WireGuard на устройствах.", + "setupMigrationDesc": "Укажите файл резервной копии, если хотите перенести данные из предыдущей версии wg-easy.", "upload": "Загрузить", "migration": "Восстановить из резервной копии:", "createAccount": "Создать аккаунт", - "successful": "Настройка успешна", + "successful": "Настройка завершена успешно", "hostDesc": "Публичное имя хоста, к которому будут подключаться клиенты", - "portDesc": "Публичный UDP‑порт для подключения клиентов и прослушивания WireGuard" + "portDesc": "Публичный UDP‑порт, к которому будут подключаться клиенты и на котором будет слушать WireGuard" }, "update": { "updateAvailable": "Доступно обновление!", @@ -68,7 +68,7 @@ }, "layout": { "toggleCharts": "Показать/скрыть графики", - "donate": "Пожертвовать" + "donate": "Поддержать" }, "login": { "signIn": "Войти", @@ -87,19 +87,19 @@ "new": "Новый клиент", "name": "Имя", "expireDate": "Дата отключения", - "expireDateDesc": "Дата, когда клиент будет отключён. Пусто — бессрочно", + "expireDateDesc": "Дата, когда клиент будет отключён. Оставьте пустым для бессрочного доступа", "delete": "Удалить", "deleteClient": "Удалить клиента", "deleteDialog1": "Вы уверены, что хотите удалить", - "deleteDialog2": "Это действие необратимо.", - "enabled": "Включен", + "deleteDialog2": "Это действие нельзя отменить.", + "enabled": "Включён", "address": "Адрес", - "serverAllowedIps": "Разрешённые IP сервера", - "otlDesc": "Сгенерировать одноразовую короткую ссылку", - "permanent": "Постоянный", + "serverAllowedIps": "Разрешённые IP‑адреса сервера", + "otlDesc": "Сгенерировать короткую одноразовую ссылку", + "permanent": "Бессрочный", "createdOn": "Создан ", "lastSeen": "Последнее подключение ", - "totalDownload": "Всего загружено: ", + "totalDownload": "Всего скачано: ", "totalUpload": "Всего отправлено: ", "newClient": "Новый клиент", "disableClient": "Отключить клиента", @@ -107,28 +107,28 @@ "noPrivKey": "У этого клиента нет приватного ключа. Невозможно создать конфигурацию.", "showQR": "Показать QR‑код", "downloadConfig": "Скачать конфигурацию", - "allowedIpsDesc": "Какие IP будут маршрутизироваться через VPN (перезаписывает общую конфигурацию)", - "serverAllowedIpsDesc": "Какие IP сервер будет отправлять клиенту", - "mtuDesc": "Максимальный размер пакета для VPN‑туннеля", - "persistentKeepaliveDesc": "Интервал пакетов для поддержания соединения (в секундах). 0 — отключено.", + "allowedIpsDesc": "Какие IP‑адреса будут маршрутизироваться через VPN (переопределяет глобальную конфигурацию)", + "serverAllowedIpsDesc": "Какие IP‑адреса сервер будет отправлять клиенту", + "mtuDesc": "Максимальный размер пакета (MTU) для VPN‑туннеля", + "persistentKeepaliveDesc": "Устанавливает интервал (в секундах) для пакетов поддержания соединения. 0 — отключить", "hooks": "Хуки", - "hooksDescription": "Хуки работают только с wg-quick", - "hooksLeaveEmpty": "Только для wg-quick. Иначе оставьте пустым", - "dnsDesc": "DNS‑сервер, который будут использовать клиенты (перезаписывает общую конфигурацию)", + "hooksDescription": "Хуки работают только с wg‑quick", + "hooksLeaveEmpty": "Только для wg‑quick. В остальных случаях оставьте пустым", + "dnsDesc": "DNS‑сервер, который будут использовать клиенты (переопределяет глобальную конфигурацию)", "notConnected": "Клиент не подключен", - "endpoint": "Конечная точка", - "endpointDesc": "IP-адрес клиента, с которого установлено соединение WireGuard", + "endpoint": "Точка подключения", + "endpointDesc": "IP‑адрес клиента, с которого установлено соединение WireGuard", "search": "Поиск клиентов...", - "config": "Настройка", - "viewConfig": "Просмотр настроек" + "config": "Конфигурация", + "viewConfig": "Просмотреть конфигурацию" }, "dialog": { "change": "Изменить", - "cancel": "Отмена", + "cancel": "Отменить", "create": "Создать" }, "toast": { - "success": "Успех", + "success": "Успешно", "saved": "Сохранено", "error": "Ошибка" }, @@ -137,18 +137,18 @@ "save": "Сохранить", "revert": "Отменить", "sectionGeneral": "Общие", - "sectionAdvanced": "Дополнительно", + "sectionAdvanced": "Расширенные", "noItems": "Нет элементов", "nullNoItems": "Нет элементов. Используется глобальная конфигурация", "add": "Добавить" }, "admin": { "general": { - "sessionTimeout": "Тайм-аут сессии", - "sessionTimeoutDesc": "Длительность сеанса для \"Запомнить меня\" (секунды)", + "sessionTimeout": "Время жизни сессии", + "sessionTimeoutDesc": "Длительность сессии для «Запомнить меня» (в секундах)", "metrics": "Метрики", "metricsPassword": "Пароль", - "metricsPasswordDesc": "Пароль Bearer для эндпоинта метрик (пароль или хеш argon2)", + "metricsPasswordDesc": "Пароль Bearer для конечной точки метрик (пароль или хэш argon2)", "json": "JSON", "jsonDesc": "Путь для метрик в формате JSON", "prometheus": "Prometheus", @@ -156,83 +156,83 @@ }, "config": { "connection": "Соединение", - "hostDesc": "Публичное имя хоста для подключения клиентов (сбросит конфигурацию)", - "portDesc": "Публичный UDP‑порт для подключения клиентов (также стоит изменить порт интерфейса)", - "allowedIpsDesc": "Разрешённые IP для клиентов (общая конфигурация)", - "dnsDesc": "DNS‑сервер для клиентов (общая конфигурация)", + "hostDesc": "Публичное имя хоста для подключения клиентов(обнуляет конфигурацию)", + "portDesc": "Публичный UDP‑порт для подключения клиентов (также рекомендуется изменить порт интерфейса)", + "allowedIpsDesc": "Разрешённые IP‑адреса для клиентов(глобальная конфигурация)", + "dnsDesc": "DNS‑сервер для клиентов (глобальная конфигурация)", "mtuDesc": "MTU для клиентов (только для новых)", - "persistentKeepaliveDesc": "Интервал отправки keepalive на сервер (секунды). 0 = отключено (только для новых)", - "suggest": "Определить", - "suggestDesc": "Выберите IP‑адрес или имя хоста для поля Host" + "persistentKeepaliveDesc": "Интервал в секундах для отправки пакетов поддержания соединения на сервер. 0 = отключено (только для новых клиентов)", + "suggest": "Предложить", + "suggestDesc": "Выберите IP‑адрес или имя хоста для поля «Хост»" }, "interface": { "cidrSuccess": "CIDR изменён", "device": "Устройство", - "deviceDesc": "Сетевое устройство, через которое должен проходить трафик WireGuard", - "mtuDesc": "MTU, который использует WireGuard", - "portDesc": "UDP‑порт, на котором WireGuard будет слушать (возможно, нужно изменить и порт конфигурации)", + "deviceDesc": "Сетевое устройство Ethernet, через которое должен проходить трафик WireGuard", + "mtuDesc": "MTU, который будет использовать WireGuard", + "portDesc": "UDP‑порт, на котором будет слушать WireGuard (возможно, нужно также изменить порт конфигурации)", "changeCidr": "Изменить CIDR", "restart": "Перезапустить интерфейс", "restartDesc": "Перезапустить интерфейс WireGuard", - "restartWarn": "Вы уверены, что хотите перезапустить интерфейс? Все клиенты будут отключены.", + "restartWarn": "Вы уверены, что хотите перезапустить интерфейс? Это приведёт к отключению всех клиентов.", "restartSuccess": "Интерфейс перезапущен" }, - "introText": "Добро пожаловать в панель администратора.\n\nЗдесь вы можете управлять общими настройками, конфигурацией, параметрами интерфейса и хуками.\n\nНачните с выбора раздела в боковой панели." + "introText": "Добро пожаловать в панель администратора.\n\nЗдесь вы можете управлять общими настройками, конфигурацией, настройками интерфейса и хуками.\n\nНачните с выбора одного из разделов на боковой панели." }, "zod": { "generic": { - "required": "{0} обязательное поле", - "validNumber": "{0} должен быть числом", - "validString": "{0} должна быть строкой", - "validBoolean": "{0} должен быть булевым значением", - "validArray": "{0} должен быть массивом", - "stringMin": "{0} должен содержать не менее {1} символов", - "numberMin": "{0} должен быть не меньше {1}" + "required": "{0} обязательно для заполнения", + "validNumber": "{0} должно быть числом", + "validString": "{0} должно быть строкой", + "validBoolean": "{0} должно быть логическим значением", + "validArray": "{0} должно быть массивом", + "stringMin": "{0} должно содержать не менее {1} символа", + "numberMin": "{0} должно быть не менее {1}" }, "client": { "id": "ID клиента", "name": "Имя", - "expiresAt": "Действителен до", - "address4": "IPv4 адрес", - "address6": "IPv6 адрес", - "serverAllowedIps": "Разрешённые IP сервера" + "expiresAt": "Дата окончания действия", + "address4": "IPv4‑адрес", + "address6": "IPv6‑адрес", + "serverAllowedIps": "Разрешённые IP‑адреса сервера" }, "user": { "username": "Имя пользователя", "password": "Пароль", "remember": "Запомнить", "name": "Имя", - "email": "Email", - "emailInvalid": "Email должен быть валидным", + "email": "Электронная почта", + "emailInvalid": "Адрес электронной почты должен быть корректным", "passwordMatch": "Пароли должны совпадать", "totpEnable": "Включить TOTP", - "totpEnableTrue": "Необходимо включить TOTP", - "totpCode": "TOTP‑код" + "totpEnableTrue": "TOTP должен быть включён", + "totpCode": "Код TOTP" }, "userConfig": { "host": "Хост" }, "general": { - "sessionTimeout": "Тайм-аут сессии", + "sessionTimeout": "Время жизни сессии", "metricsEnabled": "Метрики", "metricsPassword": "Пароль для метрик" }, "interface": { "cidr": "CIDR", "device": "Устройство", - "cidrValid": "CIDR должен быть валидным" + "cidrValid": "CIDR должен быть корректным" }, "otl": "Одноразовая ссылка", "stringMalformed": "Строка имеет неверный формат", - "body": "Тело должно быть объектом", + "body": "Тело должно быть корректным объектом", "hook": "Хук", "enabled": "Включено", "mtu": "MTU", "port": "Порт", - "persistentKeepalive": "Поддерживать соединение", + "persistentKeepalive": "Постоянное поддержание соединения", "address": "IP‑адрес", "dns": "DNS", - "allowedIps": "Разрешённые IP", + "allowedIps": "Разрешённые IP‑адреса", "file": "Файл" }, "hooks": { @@ -244,42 +244,42 @@ "copy": { "notSupported": "Копирование не поддерживается", "copied": "Скопировано!", - "failed": "Не удалось скопировать", + "failed": "Ошибка копирования", "copy": "Копировать" }, "awg": { - "jCLabel": "Количество мусорных пакетов (Jc)", - "jCDescription": "Количество отправляемых мусорных пакетов (1–128, рекомендуется: 4–12)", - "jMinLabel": "Минимальный размер мусорного пакета (Jmin)", - "jMinDescription": "Минимальный размер мусорных пакетов (0–1279*, рекомендуется: 8, должно быть < Jmax)", - "jMaxLabel": "Максимальный размер мусорного пакета (Jmax)", - "jMaxDescription": "Максимальный размер мусорных пакетов (1–1280*, рекомендуется: 80, должно быть > Jmin)", - "s1Label": "Размер мусора в инициализационном пакете (S1)", - "s1Description": "Размер мусора в инициализационном пакете (0–1132[1280* – 148 = 1132], рекомендуется: 15–150, S1+56 ≠ S2)", - "s2Label": "Размер мусора в пакете ответа (S2)", - "s2Description": "Размер мусора в пакете ответа (0–1188[1280* – 92 = 1188], рекомендуется: 15–150)", - "s3Label": "Размер мусора в пакете ответа с cookie (S3)", - "s3Description": "Размер мусора в пакете ответа с cookie", - "s4Label": "Размер мусора в транспортном пакете (S4)", - "s4Description": "Размер мусора в транспортном пакете", - "i1Label": "Специальный мусорный пакет 1 (I1)", - "i1Description": "Пакет для имитации протокола в шестнадцатеричном формате: ", - "i2Label": "Специальный мусорный пакет 2 (I2)", - "i2Description": "Пакет для имитации протокола в шестнадцатеричном формате: ", - "i3Label": "Специальный мусорный пакет 3 (I3)", - "i3Description": "Пакет для имитации протокола в шестнадцатеричном формате: ", - "i4Label": "Специальный мусорный пакет 4 (I4)", - "i4Description": "Пакет для имитации протокола в шестнадцатеричном формате: ", - "i5Label": "Специальный мусорный пакет 5 (I5)", - "i5Description": "Пакет для имитации протокола в шестнадцатеричном формате: ", - "h1Label": "Магический заголовок инициализации (H1)", - "h1Description": "Значение заголовка инициализационного пакета (5–2147483647, должно отличаться от H2–H4)", - "h2Label": "Магический заголовок ответа (H2)", - "h2Description": "Значение заголовка пакета ответа (5–2147483647, должно отличаться от H1, H3, H4)", - "h3Label": "Магический заголовок ответа с cookie (H3)", - "h3Description": "Значение заголовка пакета ответа с cookie (5–2147483647, должно отличаться от H1, H2, H4)", - "h4Label": "Магический заголовок транспортного пакета (H4)", - "h4Description": "Значение заголовка транспортного пакета (5–2147483647, должно отличаться от H1–H3)", + "jCLabel": "Количество шумовых пакетов (Jc)", + "jCDescription": "Число шумовых пакетов для отправки (1-128, рекомендуется: 4-12)", + "jMinLabel": "Минимальный размер шумовых пакетов (Jmin)", + "jMinDescription": "Минимальный размер шумовых пакетов (0-1279*, рекомендуется: 8, должен быть < Jmax)", + "jMaxLabel": "Максимальный размер шумовых пакетов (Jmax)", + "jMaxDescription": "Максимальный размер шумовых пакетов (1-1280*, рекомендуется: 80, должен быть > Jmin)", + "s1Label": "Размер шумовых данных в init-пакете (S1)", + "s1Description": "Размер шумовых данных в init-пакете (0-1132[1280* - 148 = 1132], рекомендуется: 15-150, S1+56 ≠ S2)", + "s2Label": "Размер шумовых данных в ответном пакете (S2)", + "s2Description": "Размер шумовых данных в ответном пакете (0-1188[1280* - 92 = 1188], рекомендуется: 15-150)", + "s3Label": "Размер шумовых данных в cookie-reply пакете (S3)", + "s3Description": "Размер шумовых данных в cookie-reply пакете", + "s4Label": "Размер шумовых данных в транспортном пакете (S4)", + "s4Description": "Размер шумовых данных в транспортном пакете", + "i1Label": "Специальный шумовой пакет 1 (I1)", + "i1Description": "Пакет имитации протокола в hex формате: ", + "i2Label": "Специальный шумовой пакет 2 (I2)", + "i2Description": "Пакет имитации протокола в hex формате: ", + "i3Label": "Специальный шумовой пакет 3 (I3)", + "i3Description": "Пакет имитации протокола в hex формате: ", + "i4Label": "Специальный шумовой пакет 4 (I4)", + "i4Description": "Пакет имитации протокола в hex формате: ", + "i5Label": "Специальный шумовой пакет 5 (I5)", + "i5Description": "Пакет имитации протокола в hex формате: ", + "h1Label": "Init magic заголовок (H1)", + "h1Description": "Значение заголовка init-пакета (5-2147483647, должно отличаться от H2-H4)", + "h2Label": "Response magic заголовок (H2)", + "h2Description": "Значение заголовка ответного пакета (5-2147483647, должно отличаться от H1, H3, H4)", + "h3Label": "Cookie reply magic заголовок (H3)", + "h3Description": "Значение заголовка cookie-reply пакета (5-2147483647, должно отличаться от H1, H2, H4)", + "h4Label": "Transport magic заголовок (H4)", + "h4Description": "Значение заголовка транспортного пакета (5-2147483647, должно отличаться от H1-H3)", "mtuNote": "Значения зависят от MTU", "obfuscationParameters": "Параметры обфускации AmneziaWG" }