Files
SingBox-Gopanel/frontend/admin/reverse/output/locales/ru-RU.pretty.js
CN-JS-HuiBai 25fd919477
All checks were successful
build / build (api, amd64, linux) (push) Successful in -43s
build / build (api, arm64, linux) (push) Successful in -44s
build / build (api.exe, amd64, windows) (push) Successful in -43s
API功能性修复
2026-04-17 15:13:43 +08:00

3179 lines
132 KiB
JavaScript
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.
window.XBOARD_TRANSLATIONS = window.XBOARD_TRANSLATIONS || {};
window.XBOARD_TRANSLATIONS["ru-RU"] = {
user: {
manage: {
title: "Управление пользователями",
description:
"Здесь вы можете управлять пользователями, включая добавление, удаление, редактирование и поиск.",
},
columns: {
is_admin: "Админ",
is_staff: "Персонал",
id: "ID",
email: "Email",
online_count: "Устройства онлайн",
status: "Статус",
subscription: "Подписка",
group: "Группа",
used_traffic: "Использовано",
total_traffic: "Всего трафика",
expire_time: "Срок действия",
balance: "Баланс",
commission: "Комиссия",
register_time: "Дата регистрации",
actions: "Действия",
next_reset_at: "След. сброс",
device_limit: {
unlimited: "Без лимита устройств",
limited: "Максимум {{count}} устройств",
},
status_text: {
normal: "Нормальный",
banned: "Забанен",
},
online_status: {
online: "В сети",
never: "Никогда не был в сети",
last_online: "Был в сети: {{time}}",
offline_duration: {
days: "Не в сети: {{count}}д",
hours: "Не в сети: {{count}}ч",
minutes: "Не в сети: {{count}}м",
seconds: "Не в сети: {{count}}с",
},
},
expire_status: {
permanent: "Бессрочно",
expired: "Истекло {{days}} дн. назад",
remaining: "Осталось {{days}} дн.",
},
actions_menu: {
edit: "Редактировать",
view_details: "Просмотреть детали",
assign_order: "Назначить заказ",
copy_url: "Копировать ссылку подписки",
reset_secret: "Сбросить UUID и URL",
orders: "Заказы",
invites: "Приглашения",
traffic_records: "Записи трафика",
reset_traffic: "Сбросить трафик",
delete: "Удалить",
delete_confirm_title: "Подтверждение удаления пользователя",
delete_confirm_description:
"Это действие навсегда удалит пользователя {{email}} и все связанные данные, включая заказы, купоны, записи трафика и тикеты. Это действие нельзя отменить. Продолжить?",
},
},
filter: {
selected: "Выбрано {{count}}",
no_results: "Результатов не найдено.",
clear: "Очистить фильтры",
search_placeholder: "Поиск...",
email_search: "Поиск по email...",
advanced: "Расширенный фильтр",
reset: "Сбросить фильтр",
sheet: {
title: "Расширенный фильтр",
description: "Добавьте одно или несколько условий для точного поиска пользователей",
conditions: "Условия фильтрации",
add: "Добавить условие",
condition: "Условие {{number}}",
field: "Выберите поле",
operator: "Выберите оператор",
value: "Введите значение",
value_number: "Введите значение ({{unit}})",
reset: "Сброс",
apply: "Применить фильтр",
},
fields: {
email: "Email",
id: "ID пользователя",
plan_id: "Подписка",
transfer_enable: "Трафик",
total_used: "Использовано",
online_count: "Устройства онлайн",
expired_at: "Срок действия",
uuid: "UUID",
token: "Токен",
banned: "Статус аккаунта",
remark: "Примечание",
inviter_email: "Email пригласителя",
invite_user_id: "ID пригласителя",
is_admin: "Админ",
is_staff: "Персонал",
},
operators: {
contains: "Содержит",
eq: "Равно",
gt: "Больше",
lt: "Меньше",
},
status: {
normal: "Нормальный",
banned: "Забанен",
},
boolean: {
true: "Да",
false: "Нет",
},
},
generate: {
button: "Создать пользователя",
title: "Создание пользователя",
form: {
email: "Email",
email_prefix: "Префикс аккаунта (оставьте пустым для пакетной генерации)",
email_domain: "Домен",
password: "Пароль",
password_placeholder: "Оставьте пустым, чтобы использовать email в качестве пароля",
expire_time: "Срок действия",
expire_time_placeholder: "Выберите срок действия, оставьте пустым для бессрочного",
permanent: "Бессрочно",
subscription: "Тарифный план",
subscription_none: "Нет",
generate_count: "Количество для генерации",
generate_count_placeholder: "Введите количество для пакетной генерации",
cancel: "Отмена",
submit: "Создать",
success: "Пользователи созданы",
download_csv: "Скачать как CSV",
},
},
edit: {
button: "Редактировать пользователя",
title: "Управление пользователем",
form: {
email: "Email",
email_placeholder: "Пожалуйста, введите email",
inviter_email: "Email пригласителя",
inviter_email_placeholder: "Пожалуйста, введите email",
password: "Пароль",
password_placeholder: "Введите новый пароль, если хотите изменить его",
balance: "Баланс",
balance_placeholder: "Пожалуйста, введите баланс",
commission_balance: "Баланс комиссии",
commission_balance_placeholder: "Пожалуйста, введите баланс комиссии",
upload: "Трафик (загрузка)",
upload_placeholder: "Введите трафик загрузки",
download: "Трафик (скачивание)",
download_placeholder: "Введите трафик скачивания",
total_traffic: "Общий трафик",
total_traffic_placeholder: "Пожалуйста, введите трафик",
expire_time: "Срок действия",
expire_time_placeholder: "Выберите дату, оставьте пустым для бессрочного",
expire_time_specific: "Конкретное время",
expire_time_today: "До конца сегодня",
expire_time_permanent: "Бессрочно",
expire_time_1month: "Один месяц",
expire_time_3months: "Три месяца",
expire_time_confirm: "Подтвердить",
subscription: "Тарифный план",
subscription_none: "Нет",
account_status: "Статус аккаунта",
commission_type: "Тип комиссии",
commission_type_system: "По системным настройкам",
commission_type_cycle: "Циклическая комиссия",
commission_type_onetime: "Единоразовая комиссия",
commission_rate: "Ставка комиссии",
commission_rate_placeholder: "Оставьте пустым для системной ставки",
discount: "Эксклюзивная скидка",
discount_placeholder: "Оставьте пустым, если нет скидки",
speed_limit: "Лимит скорости",
speed_limit_placeholder: "Оставьте пустым для безлимита",
device_limit: "Лимит устройств",
device_limit_placeholder: "Оставьте пустым для безлимита",
is_admin: "Админ",
is_staff: "Персонал",
remarks: "Примечания",
remarks_placeholder: "Введите примечания здесь",
cancel: "Отмена",
submit: "Отправить",
success: "Изменено успешно",
},
},
actions: {
title: "Действия",
send_email: "Отправить Email",
export_csv: "Экспорт в CSV",
traffic_reset_stats: "Статистика сброса трафика",
batch_ban: "Пакетный бан",
confirm_ban: {
title: "Подтверждение пакетного бана",
filtered_description:
"Это действие забанит всех пользователей, соответствующих вашим текущим фильтрам. Это нельзя отменить.",
all_description: "Это действие забанит всех пользователей в системе. Это нельзя отменить.",
cancel: "Отмена",
confirm: "Подтвердить бан",
banning: "Баню...",
},
},
messages: {
success: "Успех",
error: "Ошибка",
export: {
success: "Экспорт выполнен",
failed: "Ошибка экспорта",
},
batch_ban: {
success: "Пакетный бан выполнен",
failed: "Ошибка пакетного бана",
},
send_mail: {
success: "Email отправлен",
failed: "Ошибка отправки email",
required_fields: "Пожалуйста, заполните обязательные поля",
},
},
traffic_reset: {
title: "Сброс трафика",
description: "Сбросить трафик для пользователя {{email}}",
tabs: {
reset: "Сбросить трафик",
history: "История сбросов",
},
user_info: "Информация о пользователе",
warning: {
title: "Важное уведомление",
irreversible: "Операция сброса трафика необратима, пожалуйста, будьте осторожны",
reset_to_zero: "После сброса трафик загрузки и скачивания пользователя будет обнулен",
logged: "Все операции сброса записываются в системные логи",
},
reason: {
label: "Причина сброса",
placeholder: "Введите причину сброса (опционально)",
optional: "Это поле не обязательно и используется для записи причины сброса",
},
confirm_reset: "Подтвердить сброс",
resetting: "Сбрасываю...",
reset_success: "Трафик сброшен успешно",
reset_failed: "Ошибка при сбросе трафика",
history: {
summary: "Обзор сбросов",
reset_count: "Количество сбросов",
last_reset: "Последний сброс",
next_reset: "Следующий сброс",
never: "Никогда не сбрасывался",
no_schedule: "Сброс не запланирован",
records: "Записи о сбросе",
recent_records: "Последние 10 записей",
no_records: "Записей о сбросе нет",
reset_time: "Время сброса",
traffic_cleared: "Трафик обнулен",
},
stats: {
title: "Статистика сброса трафика",
description: "Просмотр системной статистики сброса трафика",
time_range: "Временной диапазон",
total_resets: "Всего сбросов",
auto_resets: "Автоматические",
manual_resets: "Ручные",
cron_resets: "По расписанию/Cron",
in_period: "За последние {{days}} дн.",
breakdown: "Разбивка по типам",
breakdown_description: "Процентное соотношение различных типов операций сброса",
auto_percentage: "Доля автосбросов",
manual_percentage: "Доля ручных сбросов",
cron_percentage: "Доля сбросов по Cron",
days_options: {
week: "За неделю",
month: "За месяц",
quarter: "За квартал",
year: "За год",
},
},
},
traffic_reset_logs: {
title: "Логи сброса трафика",
description: "Просмотр подробных записей всех операций сброса трафика в системе",
columns: {
id: "ID лога",
user: "Пользователь",
reset_type: "Тип сброса",
trigger_source: "Источник",
cleared_traffic: "Обнуленный трафик",
cleared: "Обнулено",
upload: "Загрузка",
download: "Скачивание",
reset_time: "Время сброса",
log_time: "Время записи",
},
filters: {
search_user: "Поиск по email...",
reset_type: "Тип сброса",
trigger_source: "Источник",
all_types: "Все типы",
all_sources: "Все источники",
start_date: "Дата начала",
end_date: "Дата окончания",
apply_date: "Применить фильтр",
reset: "Сбросить фильтр",
filter_title: "Параметры фильтрации",
filter_description: "Установите условия для поиска записей о сбросе трафика",
reset_types: {
monthly: "Ежемесячно",
first_day_month: "Первое число месяца",
yearly: "Ежегодно",
first_day_year: "Первое число года",
manual: "Вручную",
},
trigger_sources: {
auto: "Автоматически",
manual: "Вручную",
cron: "По расписанию/Cron",
},
},
actions: {
export: "Экспорт логов",
exporting: "Экспортирую...",
export_success: "Экспорт выполнен успешно",
export_failed: "Ошибка экспорта",
},
trigger_descriptions: {
manual: "Сброс трафика выполнен администратором вручную",
cron: "Сброс выполнен автоматически системной задачей (Cron)",
auto: "Автоматический сброс при выполнении условий системы",
other: "Сброс выполнен другим способом",
},
},
send_mail: {
title: "Отправить Email",
description: "Отправить сообщение выбранным или отфильтрованным пользователям",
subject: "Тема",
content: "Содержимое",
sending: "Отправка...",
send: "Отправить",
},
dialog: {
title: "Детали пользователя",
basicInfo: "Основная информация",
subscriptionInfo: "Информация о подписке",
trafficInfo: "Информация о трафике",
financialInfo: "Финансовая информация",
activityInfo: "Активность",
inviteInfo: "Реферальная информация",
timeInfo: "Временные метки",
subscriptionUrl: "Ссылка подписки",
fields: {
userId: "ID пользователя",
email: "Email",
uuid: "UUID",
token: "Токен",
remarks: "Примечания",
subscriptionPlan: "Тариф",
permissionGroup: "Группы доступа",
expiredAt: "Истекает",
deviceLimit: "Лимит устройств",
speedLimit: "Лимит скорости",
transferEnable: "Всего трафика",
uploadUsed: "Использовано (Up)",
downloadUsed: "Использовано (Down)",
totalUsed: "Всего использовано",
lastResetAt: "Последний сброс",
nextResetAt: "Следующий сброс",
resetCount: "Кол-во сбросов",
balance: "Баланс",
commissionBalance: "Баланс комиссии",
commissionType: "Тип комиссии",
commissionRate: "Ставка комиссии",
lastLoginAt: "Последний вход",
lastLoginIp: "IP последнего входа",
lastOnlineAt: "Последний раз онлайн",
onlineCount: "Устройства онлайн",
inviteUser: "Пригласитель",
inviteUserId: "ID пригласителя",
createdAt: "Дата создания",
updatedAt: "Дата обновления",
subscribeUrl: "Ссылка подписки",
telegramId: "Telegram ID",
},
},
status: {
normal: "Нормальный",
banned: "Забанен",
admin: "Админ",
staff: "Персонал",
},
},
route: {
title: "Управление маршрутами",
description: "Управление группами маршрутов, включая добавление, удаление и редактирование.",
columns: {
id: "ID группы",
remarks: "Примечание",
action: "Действие",
actions: "Действия",
matchRules: "Правил совпадения: {{count}}",
action_value: {
title: "Значение действия",
dns: "DNS: {{value}}",
proxy: "Прокси ({{value}})",
block: "Блокировать доступ",
direct: "Прямое соединение",
},
},
actions: {
dns: "Разрешать через DNS",
block: "Блокировать",
direct: "Напрямую",
proxy: "Прокси",
},
form: {
add: "Добавить маршрут",
edit: "Изменить маршрут",
create: "Создать маршрут",
remarks: "Примечание",
remarksPlaceholder: "Введите примечание",
match: "Правила совпадения",
matchPlaceholder: "example.com\n*.example.com",
action: "Действие",
actionPlaceholder: "Выберите действие",
dns: "DNS Сервер",
dnsPlaceholder: "Введите DNS сервер",
proxy: "Тег выхода",
proxyPlaceholder: "Введите тег выхода (Outbound Tag)",
cancel: "Отмена",
submit: "Отправить",
validation: {
remarks: "Введите корректное примечание",
},
},
toolbar: {
searchPlaceholder: "Поиск маршрутов...",
reset: "Сбросить",
},
messages: {
deleteConfirm: "Подтверждение удаления",
deleteDescription: "Это действие навсегда удалит эту группу маршрутов. Продолжить?",
deleteButton: "Удалить",
deleteSuccess: "Удалено успешно",
createSuccess: "Создано успешно",
updateSuccess: "Обновлено успешно",
},
},
knowledge: {
title: "База знаний",
description:
"Здесь вы можете управлять статьями базы знаний, включая их добавление, удаление и редактирование.",
columns: {
id: "ID",
status: "Статус",
title: "Заголовок",
category: "Категория",
actions: "Действия",
},
form: {
add: "Добавить статью",
edit: "Изменить статью",
title: "Заголовок",
titlePlaceholder: "Введите заголовок статьи",
category: "Категория",
categoryPlaceholder: "Введите категорию для автоматической группировки",
language: "Язык",
languagePlaceholder: "Выберите язык",
content: "Содержимое",
show: "Показывать",
cancel: "Отмена",
submit: "Отправить",
},
languages: {
"en-US": "English",
"ja-JP": "日本語",
"ko-KR": "한국어",
"vi-VN": "Tiếng Việt",
"zh-CN": "简体中文",
"zh-TW": "繁體中文",
"ru-RU": "Русский",
},
messages: {
deleteConfirm: "Подтверждение удаления",
deleteDescription:
"Это действие навсегда удалит статью из базы знаний. Вы уверены, что хотите продолжить?",
deleteButton: "Удалить",
operationSuccess: "Операция выполнена успешно",
},
toolbar: {
searchPlaceholder: "Поиск по базе знаний...",
reset: "Сбросить",
sortModeHint: "Перетаскивайте элементы для сортировки, затем нажмите сохранить",
editSort: "Изменить порядок",
saveSort: "Сохранить порядок",
},
},
giftCard: {
title: "Управление подарочными картами",
description:
"Управление шаблонами подарочных карт, кодами активации и записями об использовании.",
tabs: {
templates: "Управление шаблонами",
codes: "Коды активации",
usages: "История использования",
statistics: "Статистика",
},
template: {
title: "Управление шаблонами",
description: "Создание, редактирование и удаление шаблонов подарочных карт.",
table: {
title: "Список шаблонов",
columns: {
id: "ID",
name: "Название",
type: "Тип",
status: "Статус",
sort: "Сортировка",
rewards: "Награды",
created_at: "Дата создания",
actions: "Действия",
no_rewards: "Нет наград",
},
},
form: {
add: "Добавить шаблон",
edit: "Изменить шаблон",
name: {
label: "Название шаблона",
placeholder: "Введите название шаблона",
required: "Пожалуйста, введите название шаблона",
},
sort: {
label: "Сортировка",
placeholder: "Меньшие числа отображаются первыми",
},
type: {
label: "Тип",
placeholder: "Выберите тип карты",
},
description: {
label: "Описание",
placeholder: "Введите описание подарочной карты",
},
status: {
label: "Статус",
description:
"Если отключено, этот шаблон нельзя использовать для создания или активации новых карт.",
},
display: {
title: "Визуальные эффекты",
},
theme_color: {
label: "Цвет темы",
},
icon: {
label: "Иконка",
placeholder: "Введите URL иконки",
},
background_image: {
label: "Фоновое изображение",
placeholder: "Введите URL фонового изображения",
},
conditions: {
title: "Условия использования",
new_user_max_days: {
label: "Лимит дней регистрации нового пользователя",
placeholder:
"Пример: 7 (Только для пользователей, зарегистрированных в течение 7 дней)",
},
new_user_only: {
label: "Только для новых пользователей",
},
paid_user_only: {
label: "Только для платных пользователей",
},
require_invite: {
label: "Требуется наличие пригласителя",
},
allowed_plans: {
label: "Разрешенные тарифы",
placeholder: "Выберите тарифы, доступные для активации (оставьте пустым для всех)",
},
disallowed_plans: {
label: "Запрещенные тарифы",
placeholder: "Выберите тарифы, для которых активация запрещена",
},
},
limits: {
title: "Ограничения",
max_use_per_user: {
label: "Макс. использований на пользователя",
placeholder: "Оставьте пустым для безлимита",
},
cooldown_hours: {
label: "Кулдаун (часы) для однотипных карт",
placeholder: "Оставьте пустым для безлимита",
},
invite_reward_rate: {
label: "Доля вознаграждения пригласителя",
placeholder: "Пример: 0.2 (означает 20%)",
description:
"Если у пользователя есть пригласитель, его бонус = бонус пользователя × эта доля",
},
},
rewards: {
title: "Награды",
balance: {
label: "Бонусный баланс (Валюта)",
short_label: "Баланс",
placeholder: "Введите сумму вознаграждения",
},
transfer_enable: {
label: "Бонусный трафик (ГБ)",
short_label: "Трафик",
placeholder: "Введите объем трафика (ГБ)",
},
expire_days: {
label: "Продление срока (дней)",
short_label: "Срок",
placeholder: "Введите количество дней",
},
transfer: {
label: "Бонусный трафик (Байты)",
placeholder: "Введите объем трафика (байты)",
},
days: {
label: "Продление срока (дней)",
placeholder: "Введите количество дней",
},
device_limit: {
label: "Увеличить лимит устройств",
short_label: "Устройства",
placeholder: "Введите количество дополнительных устройств",
},
reset_package: {
label: "Сбросить месячный трафик",
description:
"Если включено, активация очистит использованный трафик текущего тарифа пользователя.",
},
reset_count: {
description: "Этот тип карты сбрасывает использование месячного трафика пользователя.",
},
task_card: {
description: "Награды для бонусных карт за задания настраиваются в системе заданий.",
},
plan_id: {
label: "Указанный тариф",
short_label: "Тариф",
placeholder: "Пожалуйста, выберите тариф",
},
plan_validity_days: {
label: "Срок действия тарифа (дней)",
short_label: "Срок тарифа",
placeholder: "Оставьте пустым для срока по умолчанию",
},
random_rewards: {
label: "Пул случайных наград",
add: "Добавить случайную награду",
weight: "Вес",
},
},
special_config: {
title: "Специальная конфигурация",
start_time: {
label: "Время начала события",
placeholder: "Выберите дату начала",
},
end_time: {
label: "Время окончания события",
placeholder: "Выберите дату окончания",
},
festival_bonus: {
label: "Множитель праздничной награды",
placeholder: "Пример: 1.5 (означает 1.5x)",
},
},
submit: {
saving: "Сохранение...",
save: "Сохранить",
},
},
actions: {
edit: "Изменить",
delete: "Удалить",
deleteConfirm: {
title: "Подтверждение удаления",
description:
"Это действие навсегда удалит этот шаблон. Вы уверены, что хотите продолжить?",
confirmText: "Удалить",
},
},
},
code: {
title: "Управление кодами активации",
form: {
generate: "Сгенерировать коды активации",
template_id: {
label: "Выберите шаблон",
placeholder: "Выберите шаблон для генерации кодов активации",
},
count: {
label: "Количество кодов",
},
prefix: {
label: "Кастомный префикс (опционально)",
},
expires_hours: {
label: "Срок действия (часов)",
},
max_usage: {
label: "Лимит использований кода",
},
download_csv: "Экспорт в CSV",
submit: {
generating: "Генерация...",
generate: "Сгенерировать сейчас",
},
},
description: "Управление кодами активации: генерация, просмотр и экспорт.",
table: {
title: "Список кодов активации",
columns: {
id: "ID",
code: "Код активации",
template_name: "Название шаблона",
status: "Статус",
expires_at: "Истекает",
usage_count: "Использовано",
max_usage: "Доступно",
created_at: "Дата создания",
},
},
actions: {
enable: "Включить",
disable: "Отключить",
export: "Экспорт",
exportConfirm: {
title: "Подтверждение экспорта",
description:
"Все коды из выбранной группы будут экспортированы в текстовый файл. Продолжить?",
confirmText: "Экспорт",
},
},
status: {
0: "Не использован",
1: "Использован",
2: "Отключен",
3: "Истек",
},
},
usage: {
title: "История использования",
description: "Просмотр записей об использовании подарочных карт.",
table: {
columns: {
id: "ID",
code: "Код активации",
template_name: "Название шаблона",
user_email: "Email пользователя",
rewards_given: "Выданные награды",
invite_rewards: "Бонус пригласителя",
multiplier_applied: "Применен множитель",
ip_address: "IP адрес",
created_at: "Время использования",
actions: "Действия",
},
},
actions: {
view: "Детали",
},
},
statistics: {
title: "Статистика",
description: "Анализ использования подарочных карт.",
total: {
title: "Общая статистика",
templates_count: "Всего шаблонов",
active_templates_count: "Активных шаблонов",
codes_count: "Всего кодов активации",
used_codes_count: "Использовано кодов",
usages_count: "Записей об активации",
},
daily: {
title: "Использование за день",
},
},
},
group: {
title: "Группы прав",
description: "Управление всеми группами прав, включая добавление, удаление и редактирование.",
columns: {
id: "ID группы",
name: "Название группы",
usersCount: "Пользователей",
serverCount: "Узлов",
actions: "Действия",
},
form: {
add: "Добавить группу",
edit: "Изменить группу",
create: "Создать группу",
update: "Обновить",
name: "Название группы",
namePlaceholder: "Введите название группы",
nameDescription:
"Название группы используется для идентификации. Рекомендуется использовать понятные имена.",
cancel: "Отмена",
editDescription: "Изменение информации о группе. Изменения вступят в силу немедленно.",
createDescription: "Создайте новую группу прав для разграничения доступа пользователей.",
},
toolbar: {
searchPlaceholder: "Поиск групп...",
reset: "Сбросить",
},
messages: {
deleteConfirm: "Подтверждение удаления",
deleteDescription: "Это действие навсегда удалит эту группу прав. Продолжить?",
deleteButton: "Удалить",
createSuccess: "Создано успешно",
updateSuccess: "Обновлено успешно",
nameValidation: {
min: "Название должно содержать минимум 2 символа",
max: "Название не может превышать 50 символов",
pattern:
"Название может содержать только буквы, цифры, китайские иероглифы, подчеркивания и дефисы",
},
},
},
nav: {
dashboard: "Панель управления",
systemManagement: "Управление системой",
systemConfig: "Настройки системы",
themeConfig: "Настройки темы",
noticeManagement: "Управление уведомлениями",
pluginManagement: "Управление плагинами",
paymentConfig: "Настройки оплаты",
knowledgeManagement: "База знаний",
nodeManagement: "Управление узлами",
permissionGroupManagement: "Группы доступа",
routeManagement: "Управление маршрутами",
subscriptionManagement: "Подписки",
planManagement: "Тарифные планы",
orderManagement: "Управление заказами",
couponManagement: "Купоны",
giftCardManagement: "Подарочные карты",
userManagement: "Пользователи",
trafficResetLogs: "Логи сброса трафика",
ticketManagement: "Тикеты",
},
sidebar: {
dashboard: "Панель управления",
systemManagement: "Управление системой",
systemConfig: "Конфигурация системы",
themeConfig: "Конфигурация тем",
noticeManagement: "Объявления",
paymentConfig: "Платежные методы",
knowledgeManagement: "База знаний",
nodeManagement: "Узлы",
permissionGroupManagement: "Группы прав",
routeManagement: "Маршруты",
subscriptionManagement: "Управление подписками",
planManagement: "Тарифы",
orderManagement: "Заказы",
couponManagement: "Купоны",
userManagement: "Пользователи",
ticketManagement: "Тикеты",
},
server: {
title: "Конфигурация узла",
description:
"Настройка параметров связи и синхронизации узла, включая ключ связи, интервал опроса, балансировку нагрузки и другие расширенные параметры.",
server_token: {
title: "Ключ связи",
description:
"Ключ для связи между Xboard и узлами для предотвращения несанкционированного доступа к данным.",
placeholder: "Пожалуйста, введите ключ связи",
},
server_pull_interval: {
title: "Интервал опроса Pull-действий",
description: "Частота получения данных узлом из панели.",
placeholder: "Пожалуйста, введите интервал получения",
},
server_push_interval: {
title: "Интервал опроса Push-действий",
description: "Частота отправки данных узлом в панель.",
placeholder: "Пожалуйста, введите интервал отправки",
},
device_limit_mode: {
title: "Режим ограничения устройств",
description:
"В мягком режиме несколько узлов с одного IP-адреса считаются за одно устройство.",
strict: "Строгий режим",
relaxed: "Мягкий режим",
placeholder: "Пожалуйста, выберите режим ограничения",
},
saving: "Сохранение...",
manage: {
title: "Управление узлами",
description:
"Управление всеми узлами, включая добавление, удаление, редактирование и другие операции.",
},
columns: {
sort: "Сортировка",
nodeId: "ID узла",
show: "Показ",
node: "Узел",
address: "Адрес",
onlineUsers: {
title: "Пользователи онлайн",
tooltip: "Количество пользователей онлайн на основе частоты отчетов сервера",
},
rate: {
title: "Множитель",
tooltip: "Множитель тарификации трафика",
},
traffic: {
title: "Трафик",
tooltip: "Использование трафика узлом",
total: "Всего",
used: "Использовано",
percentage: "Использование",
},
groups: {
title: "Группы доступа",
tooltip: "Группы, которые могут подписаться на этот узел",
empty: "--",
},
loadStatus: {
title: "Загрузка",
tooltip: "Использование ресурсов сервера",
noData: "Нет данных",
details: "Детали загрузки системы",
cpu: "Загрузка CPU",
memory: "Память",
swap: "Swap",
disk: "Диск",
lastUpdate: "Последнее обновление",
metrics: {
title: "Метрики",
uptime: "Аптайм",
conns: "Соединения",
speed: "Скорость",
},
},
customId: "Кастомный ID",
originalId: "Оригинальный ID",
type: "Тип",
actions: "Действия",
copyAddress: "Копировать адрес",
internalPort: "Внутр. порт",
status: {
0: "Не запущен",
1: "Не используется или ошибка",
2: "Работает нормально",
},
actions_dropdown: {
edit: "Редактировать",
copy: "Копировать",
delete: {
title: "Подтверждение удаления",
description:
"Это действие навсегда удалит этот узел и не может быть отменено. Вы уверены, что хотите продолжить?",
confirm: "Удалить",
},
copy_success: "Скопировано успешно",
delete_success: "Удалено успешно",
},
},
toolbar: {
search: "Поиск узлов...",
type: "Тип",
reset: "Сброс",
sort: {
tip: "Перетаскивайте узлы для сортировки, затем нажмите сохранить",
edit: "Редактировать порядок",
save: "Сохранить порядок",
},
},
form: {
add_node: "Добавить узел",
edit_node: "Изменить узел",
new_node: "Новый узел",
type: {
placeholder: "Выберите тип протокола",
select_prompt: "Сначала выберите тип протокола",
select_error: "Пожалуйста, выберите тип протокола",
},
name: {
label: "Название узла",
placeholder: "Пожалуйста, введите название узла",
error: "Пожалуйста, введите корректное название",
},
rate: {
label: "Базовый множитель",
error: "Множитель обязателен",
error_numeric: "Множитель должен быть числом",
error_gte_zero: "Множитель должен быть больше или равен 0",
child_node_tooltip:
"Множитель дочернего узла наследуется от родительского и не может быть изменен отдельно",
child_node_note: "Множитель наследуется от родителя",
},
dynamic_rate: {
section_title: "Конфигурация динамического множителя",
enable_label: "Включить дин. множитель",
enable_description: "Установите разные множители в зависимости от времени суток",
rules_label: "Правила периодов",
add_rule: "Добавить правило",
rule_title: "Правило {{index}}",
start_time: "Время начала",
end_time: "Время окончания",
multiplier: "Множитель",
no_rules: "Правил пока нет, нажмите кнопку выше, чтобы добавить",
start_time_error: "Время начала обязательно",
end_time_error: "Время окончания обязательно",
multiplier_error: "Множитель обязателен",
multiplier_error_numeric: "Множитель должен быть числом",
multiplier_error_gte_zero: "Множитель должен быть больше или равен 0",
},
code: {
label: "Кастомный ID узла",
optional: "(Опционально)",
placeholder: "Введите кастомный ID узла",
},
tags: {
label: "Теги узла",
placeholder: "Нажмите Enter для добавления",
},
groups: {
label: "Группы доступа",
add: "Добавить группу",
placeholder: "Пожалуйста, выберите группы",
empty: "Ничего не найдено",
},
host: {
label: "Адрес узла",
placeholder: "Введите домен или IP",
error: "Адрес узла обязателен",
},
port: {
label: "Порт подключения",
placeholder: "Порт для пользователей",
tooltip:
"Порт, к которому фактически подключаются пользователи. Если используется транзит или туннель, этот порт может отличаться от порта, который сервер слушает на самом деле.",
sync: "Синхронизировать с портом сервера",
error: "Порт подключения обязателен",
},
server_port: {
label: "Порт сервера",
placeholder: "Введите порт сервера",
error: "Порт сервера обязателен",
tooltip: "Фактический порт прослушивания на сервере.",
sync: "Синхронизировать с портом сервера",
},
parent: {
label: "Родительский узел",
placeholder: "Выберите родителя",
none: "Нет",
},
route: {
label: "Группы маршрутов",
placeholder: "Выберите маршруты",
empty: "Ничего не найдено",
},
submit: "Отправить",
cancel: "Отмена",
success: "Успешно отправлено",
},
dynamic_form: {
multiplex: {
enabled: {
label: "Multiplex",
description: "Передача нескольких потоков через одно TCP-соединение",
},
protocol: {
label: "Протокол",
},
max_connections: {
label: "Макс. соединений",
},
min_streams: {
label: "Мин. потоков",
},
padding: {
label: "Включить Padding",
},
brutal: {
enabled: {
label: "TCP Brutal",
},
up_mbps: {
label: "Upload Bandwidth",
},
down_mbps: {
label: "Download Bandwidth",
},
description:
"TCP Brutal — двусторонний алгоритм ускорения. Установите пропускную способность 80%-90% от реальной. BBR будет отключён при включении.",
},
},
anytls: {
tls: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure",
},
padding_scheme: {
description: "Each line represents a padding rule, format: stop=8, 0=30-30",
label: "Padding Scheme",
placeholder: "Enter padding rules",
use_default: "Use Default Scheme",
edit_btn: "Edit Padding Scheme",
configured: "{{count}} rules configured",
not_configured: "Not configured",
},
},
shadowsocks: {
cipher: {
label: "Encryption Method",
placeholder: "Select encryption method",
search_placeholder: "Search or enter custom encryption method...",
description: "Select preset encryption method or enter custom encryption method",
preset_group: "Preset Encryption Methods",
custom_group: "Custom Encryption Method",
current_value: "Current Value",
use_custom: "Use",
no_results: "No matching encryption method found",
custom_hint: "You can directly enter a custom encryption method, such as: aes-256-cfb",
custom_label: "Custom",
},
plugin: {
label: "Plugin",
placeholder: "Select plugin",
obfs_hint: "Hint: Configuration format like obfs=http;obfs-host=www.bing.com;path=/",
v2ray_hint:
"Hint: WebSocket mode format is mode=websocket;host=mydomain.me;path=/;tls=true, QUIC mode format is mode=quic;host=mydomain.me",
gost_hint:
"Hint: Configuration format like mode=websocket;host=mydomain.me;path=/;tls=true",
shadow_tls_hint:
"Hint: Configuration format like host=cloud.tencent.com;password=auth_password;version=3",
restls_hint:
"Hint: Configuration format like host=www.microsoft.com;password=auth_password;version-hint=tls13;restls-script=300?100<1,400~100",
kcptun_hint:
"Hint: Configuration format like key=psk;crypt=aes-128-gcm;mode=fast;mtu=1350",
},
plugin_opts: {
label: "Plugin Options",
description: "Enter plugin options in key=value;key2=value2 format",
placeholder: "Example: mode=tls;host=bing.com",
},
client_fingerprint: "Client Fingerprint",
client_fingerprint_placeholder: "Select client fingerprint",
client_fingerprint_description: "Client spoofing fingerprint to reduce detection risk",
obfs: {
label: "Obfuscation",
placeholder: "Select obfuscation method",
none: "None",
http: "HTTP",
},
obfs_settings: {
path: "Path",
host: "Host",
},
cert_config: {
tab: "TLS Cert",
cert_mode: {
label: "Cert Mode",
description: "Select how to manage certificates",
self_description: "Self-signed: Valid for 10 years, auto-generated by node",
http_description: "HTTP-01: Port 80 must be reachable",
dns_description: "DNS-01: Authenticate via DNS records, supports wildcard certs",
content_description: "Content: Push raw cert files to node",
},
domain: {
label: "Domain",
placeholder: "example.com",
},
email: {
label: "Notification Email",
placeholder: "admin@example.com",
},
http_port: {
label: "Challenge Port",
description: "ACME challenge port (default 80)",
},
dns_provider: {
label: "DNS Provider",
doc_link: "DNS provider configuration guide",
},
dns_env: {
label: "Env Vars (API Keys)",
description_short: "One KEY=VALUE per line",
},
cert_content: {
label: "Public Key content",
},
key_content: {
label: "Private Key content",
},
none_desc: "TLS config disabled",
},
},
vmess: {
tls: {
label: "TLS",
placeholder: "Please select security",
disabled: "Disabled",
enabled: "Enabled",
},
tls_settings: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Leave empty if not used",
},
allow_insecure: "Allow Insecure?",
},
network: {
label: "Transport Protocol",
placeholder: "Select transport protocol",
},
},
trojan: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder:
"Used for certificate verification when node address differs from certificate",
},
allow_insecure: "Allow Insecure?",
reality_settings: {
server_name: {
label: "Destination Site (dest)",
placeholder: "e.g., example.com",
},
server_port: {
label: "Port",
placeholder: "e.g., 443",
},
allow_insecure: "Allow Insecure?",
private_key: {
label: "Private Key",
},
public_key: {
label: "Public Key",
},
short_id: {
label: "Short ID",
placeholder: "Optional, length must be even, max 16 characters",
description:
"List of shortIds available to clients, can be used to distinguish different clients, using hexadecimal characters 0-f",
generate: "Generate Short ID",
success: "Short ID generated successfully",
},
key_pair: {
generate: "Generate Key Pair",
success: "Key pair generated successfully",
error: "Failed to generate key pair",
},
},
network: {
label: "Transport Protocol",
placeholder: "Select transport protocol",
},
},
hysteria: {
version: {
label: "Protocol Version",
placeholder: "Protocol version",
},
alpn: {
label: "ALPN",
placeholder: "ALPN",
},
obfs: {
label: "Obfuscation",
type: {
label: "Obfuscation Implementation",
placeholder: "Select obfuscation implementation",
salamander: "Salamander",
},
password: {
label: "Obfuscation Password",
placeholder: "Please enter obfuscation password",
generate_success: "Obfuscation password generated successfully",
},
},
tls: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder:
"Used for certificate verification when node address differs from certificate",
},
allow_insecure: "Allow Insecure?",
},
bandwidth: {
up: {
label: "Upload Bandwidth",
placeholder: "Please enter upload bandwidth",
suffix: "Mbps",
bbr_tip: ", leave empty to use BBR",
},
down: {
label: "Download Bandwidth",
placeholder: "Please enter download bandwidth",
suffix: "Mbps",
bbr_tip: ", leave empty to use BBR",
},
},
},
vless: {
tls: {
label: "Security",
placeholder: "Please select security",
none: "None",
tls: "TLS",
reality: "Reality",
},
tls_settings: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Leave empty if not used",
},
allow_insecure: "Allow Insecure?",
},
reality_settings: {
server_name: {
label: "Destination Site (dest)",
placeholder: "e.g., example.com",
},
server_port: {
label: "Port",
placeholder: "e.g., 443",
},
allow_insecure: "Allow Insecure?",
private_key: {
label: "Private Key",
},
public_key: {
label: "Public Key",
},
short_id: {
label: "Short ID",
placeholder: "Optional, length must be even, max 16 characters",
description:
"List of shortIds available to clients, can be used to distinguish different clients, using hexadecimal characters 0-f",
generate: "Generate Short ID",
success: "Short ID generated successfully",
},
key_pair: {
generate: "Generate Key Pair",
success: "Key pair generated successfully",
error: "Failed to generate key pair",
},
},
network: {
label: "Transport Protocol",
placeholder: "Select transport protocol",
},
flow: {
label: "Flow Control",
placeholder: "Select flow control",
},
encryption: {
label: "VLESS Encryption",
description: "Enable VLESS encryption",
server_label: "decryption",
server_placeholder: "./xray vlessenc",
server_description: "",
client_label: "encryption",
client_placeholder: "./xray vlessenc",
client_description: "",
generate_hint: "./xray vlessenc",
},
},
tuic: {
version: {
label: "Protocol Version",
placeholder: "Select TUIC Version",
},
password: {
label: "Password",
placeholder: "Enter Password",
generate_success: "Password Generated Successfully",
},
congestion_control: {
label: "Congestion Control",
placeholder: "Select Congestion Control Algorithm",
},
udp_relay_mode: {
label: "UDP Relay Mode",
placeholder: "Select UDP Relay Mode",
},
tls: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure?",
alpn: {
label: "ALPN",
placeholder: "Select ALPN Protocols",
empty: "No ALPN Protocols Available",
},
},
},
socks: {
version: {
label: "Protocol Version",
placeholder: "Select SOCKS Version",
},
tls: {
label: "TLS",
placeholder: "Please select security",
disabled: "Disabled",
enabled: "Enabled",
},
tls_settings: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Leave empty if not used",
},
allow_insecure: "Allow Insecure?",
},
network: {
label: "Transport Protocol",
placeholder: "Select transport protocol",
},
},
naive: {
tls_settings: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure",
},
tls: {
label: "TLS",
placeholder: "Please select security",
disabled: "Disabled",
enabled: "Enabled",
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure",
},
},
http: {
tls_settings: {
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure",
},
tls: {
label: "TLS",
placeholder: "Please select security",
disabled: "Disabled",
enabled: "Enabled",
server_name: {
label: "Server Name Indication (SNI)",
placeholder: "Used for certificate verification when domain differs from node address",
},
allow_insecure: "Allow Insecure",
},
},
mieru: {
transport: {
label: "Transport Protocol",
placeholder: "Select transport protocol",
},
traffic_pattern: {
label: "Traffic Pattern (Base64)",
placeholder: "Enter Base64 string for network fine-tuning",
success: "Traffic pattern generated",
},
},
advanced: {
trigger_label: "Расширенная конфигурация",
dialog_title: "Расширенная конфигурация протокола",
tls_tab: "TLS",
route_tab: "Маршрутизация",
multiplex_tab: "Мультиплексирование",
},
},
network_settings: {
edit_protocol: "Edit Protocol",
edit_protocol_config: "Edit Protocol Configuration",
use_template: "Use {{template}} Template",
json_config_placeholder: "Please enter JSON configuration",
json_config_placeholder_with_template:
"Please enter JSON configuration or select template above",
validation: {
must_be_object: "Configuration must be a JSON object",
invalid_json: "Invalid JSON format",
},
errors: {
save_failed: "Error occurred while saving",
},
},
common: {
cancel: "Cancel",
confirm: "Confirm",
},
},
common: {
loading: "Загрузка...",
error: "Ошибка",
success: "Успех",
save: "Сохранить",
cancel: "Отмена",
confirm: "Подтвердить",
close: "Закрыть",
delete: {
success: "Удалено успешно",
failed: "Не удалось удалить",
},
edit: "Редактировать",
view: "Просмотр",
toggleNavigation: "Переключить навигацию",
toggleSidebar: "Переключить боковую панель",
search: "Поиск...",
theme: {
light: "Светлая",
dark: "Темная",
system: "Системная",
},
user: "Пользователь",
defaultEmail: "user@example.com",
settings: "Настройки",
logout: "Выйти",
copy: {
success: "Скопировано успешно",
failed: "Не удалось скопировать",
error: "Ошибка копирования",
errorLog: "Ошибка при копировании в буфер обмена",
},
submit: "Отправить",
saving: "Сохранение...",
table: {
noData: "Нет данных",
pagination: {
selected: "Выбрано {{selected}} из {{total}}",
itemsPerPage: "На странице",
page: "Страница",
pageOf: "из {{total}}",
firstPage: "На первую страницу",
previousPage: "Предыдущая страница",
nextPage: "Следующая страница",
lastPage: "На последнюю страницу",
},
viewOptions: {
button: "Столбцы",
label: "Переключить видимость столбцов",
},
},
update: {
title: "System Update",
newVersion: "New Version Available",
currentVersion: "Current Version",
latestVersion: "Latest Version",
updateLater: "Update Later",
updateNow: "Update Now",
updating: "Updating...",
updateSuccess: "Update successful, system will restart shortly",
updateFailed: "Update failed, please try again later",
},
time: {
day: "day",
hour: " hour(s)",
},
reset: "Reset",
export: "Export",
currency: {
yuan: "Yuan",
},
http: {
notLoggedIn: "Not logged in",
unknownError: "Unknown error",
loginExpired: "Login expired",
noPermission: "No permission",
notFound: "Resource or API not found",
unknownException: "Unknown exception",
},
},
notice: {
title: "Управление объявлениями",
description:
"Здесь вы можете настраивать объявления, включая добавление, удаление, редактирование и другие операции.",
table: {
columns: {
id: "ID",
show: "Статус показа",
title: "Заголовок",
actions: "Действия",
},
toolbar: {
search: "Поиск по заголовку...",
reset: "Сброс",
sort: {
edit: "Изменить порядок",
save: "Сохранить порядок",
},
},
actions: {
edit: "Изменить",
delete: {
title: "Подтверждение удаления",
description:
"Вы уверены, что хотите удалить это объявление? Это действие нельзя отменить.",
success: "Успешно удалено",
},
},
},
form: {
add: {
title: "Добавить объявление",
button: "Добавить объявление",
},
edit: {
title: "Изменить объявление",
},
fields: {
title: {
label: "Заголовок",
placeholder: "Введите заголовок объявления",
},
content: {
label: "Содержимое",
},
img_url: {
label: "Фоновое изображение",
placeholder: "Введите URL фонового изображения",
},
show: {
label: "Показывать",
},
tags: {
label: "Теги",
placeholder: "Нажмите Enter для добавления тегов",
},
},
buttons: {
cancel: "Отмена",
submit: "Отправить",
success: "Успешно отправлено",
},
},
},
settings: {
title: "Системные настройки",
description:
"Управление основными конфигурациями системы, включая сайт, безопасность, подписки, реферальную программу, узлы и уведомления.",
server: {
title: "Конфигурация сервера",
description:
"Настройка связи и синхронизации узлов, включая ключи связи, интервалы опроса, балансировку нагрузки и другие параметры.",
server_token: {
title: "Токен связи",
placeholder: "Введите токен связи",
description: "Используется для аутентификации между серверами и панелью",
generate_tooltip: "Нажмите для генерации случайного токена",
},
server_pull_interval: {
title: "Интервал получения данных (Pull)",
description: "Частота, с которой узлы запрашивают данные из панели.",
placeholder: "Введите интервал",
},
server_push_interval: {
title: "Интервал отправки данных (Push)",
description: "Частота, с которой узлы отправляют статистику в панель.",
placeholder: "Введите интервал",
},
device_limit_mode: {
title: "Режим лимита устройств",
description: "В мягком режиме несколько узлов с одного IP считаются как одно устройство.",
strict: "Строгий режим",
relaxed: "Мягкий режим",
placeholder: "Выберите режим лимита",
},
server_ws_enable: {
title: "Включить связь через WebSocket",
description:
"При включении узлы будут связываться с панелью через WebSocket для снижения задержки.",
supported_clients: "Клиенты, поддерживающие WebSocket: Xboard Node",
},
server_ws_url: {
title: "URL WebSocket",
description:
"Адрес WebSocket для подключения узлов. Оставьте пустым, чтобы использовать URL сайта.",
placeholder: "Оставьте пустым для URL сайта",
},
saving: "Сохранение...",
},
invite: {
title: "Реферальная программа",
description: "Настройка регистрации по приглашениям и комиссионных вознаграждений.",
invite_force: {
title: "Принудительное приглашение",
description: "Если включено, регистрация доступна только по пригласительному коду.",
},
invite_commission: {
title: "Процент комиссии",
description:
"Процент вознаграждения по умолчанию. Можно настроить индивидуально для каждого пользователя.",
placeholder: "Введите процент",
},
invite_gen_limit: {
title: "Лимит генерации кодов",
description: "Максимальное количество кодов, которое может создать пользователь.",
placeholder: "Введите лимит",
},
invite_never_expire: {
title: "Бессрочные коды",
description: "Если включено, коды не сгорают после использования.",
},
commission_first_time: {
title: "Комиссия только за первую покупку",
description: "Вознаграждение начисляется только за первый платеж приглашенного.",
},
commission_auto_check: {
title: "Автоматическое подтверждение",
description: "Комиссия подтверждается автоматически через 3 дня после завершения заказа.",
},
commission_withdraw_limit: {
title: "Минимальная сумма вывода",
description: "Запросы на вывод ниже этой суммы не принимаются.",
placeholder: "Введите сумму",
},
commission_withdraw_method: {
title: "Методы вывода",
description: "Поддерживаемые способы вывода средств, разделяйте запятыми.",
placeholder: "Введите методы (напр. USDT, Карта)",
},
withdraw_close: {
title: "Отключить вывод средств",
description:
"Если включено, пользователи не могут запрашивать вывод, комиссия идет сразу на баланс.",
},
commission_distribution: {
title: "Трехуровневая система",
description:
"Распределение комиссии по трем уровням пригласителей. Сумма не должна превышать 100%.",
l1: "Уровень 1 (%)",
l2: "Уровень 2 (%)",
l3: "Уровень 3 (%)",
placeholder: "Введите процент",
},
saving: "Сохранение...",
},
site: {
title: "Настройки сайта",
description: "Базовая информация о сайте: название, описание, валюта и другие параметры.",
form: {
siteName: {
label: "Название сайта",
placeholder: "Введите название",
description: "Отображается в заголовках и интерфейсе.",
},
siteDescription: {
label: "Описание сайта",
placeholder: "Введите описание",
description: "Используется для SEO и подзаголовков.",
},
siteUrl: {
label: "URL сайта",
placeholder: "Напр. https://domain.com (без / в конце)",
description: "Используется в ссылках, письмах и API.",
},
forceHttps: {
label: "Принудительный HTTPS",
description:
"Включите, если сайт за прокси/CDN с HTTPS, но сам сервер работает без него.",
},
logo: {
label: "Логотип (URL)",
placeholder: "URL вашего логотипа",
description: "Ссылка на изображение логотипа.",
},
subscribeUrl: {
label: "URL подписки (кастомный)",
placeholder: "Разделяйте ',', оставьте пустым для URL сайта",
description: "URL для генерации ссылок подписки.",
},
tosUrl: {
label: "URL условий (TOS)",
placeholder: "Ссылка на правила сервиса",
description: "Ссылка на страницу правил использования.",
},
stopRegister: {
label: "Отключить регистрацию",
description: "Запретить регистрацию новых пользователей.",
},
ticketMustWaitReply: {
label: "Ожидание ответа в тикетах",
description: "Пользователь не может отправить новое сообщение, пока админ не ответит.",
},
tryOut: {
label: "Тестовый период",
placeholder: "Отключено",
description: "Выберите тариф для триала при регистрации.",
duration: {
label: "Длительность (часов)",
placeholder: "0",
description: "Время действия пробного периода.",
},
},
currency: {
label: "Код валюты",
placeholder: "RUB",
description: "Отображаемый код (влияет на весь интерфейс).",
},
currencySymbol: {
label: "Символ валюты",
placeholder: "₽",
description: "Отображаемый символ (влияет на весь интерфейс).",
},
},
},
safe: {
title: "Безопасность",
description:
"Настройки защиты: капча, лимиты паролей, белые списки Email и другие параметры.",
form: {
emailVerify: {
label: "Верификация Email",
description: "Обязательное подтверждение почты при регистрации.",
},
gmailLimit: {
label: "Запретить алиасы Gmail",
description: "Запретить регистрацию с использованием '+' в адресах Gmail.",
},
safeMode: {
label: "Безопасный режим домена",
description: "Доступ к сайту только через указанный URL (остальные 403).",
},
securePath: {
label: "Путь к админ-панели",
placeholder: "admin",
description: "Изменение стандартного адреса входа в админку.",
},
emailWhitelist: {
label: "Белый список доменов почты",
description: "Разрешить регистрацию только для указанных доменов.",
suffixes: {
label: "Домены почты",
placeholder: "Один домен на строку (напр. gmail.com)",
description: "Список разрешенных почтовых сервисов.",
},
},
captcha: {
enable: {
label: "Включить капчу",
description: "Проверка пользователя при регистрации.",
},
type: {
label: "Тип капчи",
description: "Выберите сервис проверки",
options: {
recaptcha: "Google reCAPTCHA v2",
"recaptcha-v3": "Google reCAPTCHA v3",
turnstile: "Cloudflare Turnstile",
},
},
recaptcha: {
key: {
label: "Secret Key",
placeholder: "Введите Secret Key",
description: "Ваш секретный ключ reCAPTCHA",
},
siteKey: {
label: "Site Key",
placeholder: "Введите Site Key",
description: "Ваш публичный ключ reCAPTCHA",
},
},
recaptcha_v3: {
secretKey: {
label: "v3 Secret Key",
placeholder: "Введите v3 Secret Key",
description: "Секретный ключ v3",
},
siteKey: {
label: "v3 Site Key",
placeholder: "Введите v3 Site Key",
description: "Публичный ключ v3",
},
scoreThreshold: {
label: "Порог оценки (Score)",
placeholder: "0.5",
description: "Порог (0-1), где выше — более вероятно человек.",
},
},
turnstile: {
secretKey: {
label: "Turnstile Secret Key",
placeholder: "Введите секретный ключ",
description: "Ключ от Cloudflare Turnstile",
},
siteKey: {
label: "Turnstile Site Key",
placeholder: "Введите Site Key",
description: "Публичный ключ Turnstile",
},
},
},
registerLimit: {
enable: {
label: "Лимит регистраций по IP",
description: "Ограничение количества аккаунтов с одного адреса.",
},
count: {
label: "Кол-во регистраций",
placeholder: "Максимум аккаунтов",
description: "Сколько раз можно зарегистрироваться с одного IP.",
},
expire: {
label: "Длительность (мин)",
placeholder: "Время блокировки",
description: "Через сколько минут лимит сбросится.",
},
},
passwordLimit: {
enable: {
label: "Лимит попыток входа",
description: "Защита от брутфорса паролей.",
},
count: {
label: "Кол-во попыток",
placeholder: "Макс. попыток входа",
description: "Допустимое количество неверных паролей.",
},
expire: {
label: "Время блокировки (мин)",
placeholder: "Длительность бана",
description: "На сколько минут блокируется вход.",
},
},
},
},
subscribe: {
title: "Настройки подписки",
description:
"Управление форматом ссылок, частотой обновления, статистикой трафика и другими параметрами подписок.",
plan_change_enable: {
title: "Разрешить смену тарифа",
description: "Позволить пользователям переходить на другие планы самостоятельно.",
},
reset_traffic_method: {
title: "Метод глобального сброса трафика",
description:
"Настройка сброса по умолчанию (1-е число месяца). Можно переопределить в тарифах.",
options: {
monthly_first: "1-е число месяца",
monthly_reset: "Ежемесячно (день покупки)",
no_reset: "Без сброса",
yearly_first: "1 января каждого года",
yearly_reset: "Раз в год (день покупки)",
},
},
surplus_enable: {
title: "Режим зачета средств",
description: "При смене тарифа остаток средств со старого плана пойдет в счет нового.",
},
new_order_event: {
title: "Событие при новой подписке",
description: "Что сделать, когда пользователь покупает новый тариф.",
options: {
no_action: "Ничего",
reset_traffic: "Сбросить использованный трафик",
},
},
renew_order_event: {
title: "Событие при продлении",
description: "Что сделать при оплате продления тарифа.",
options: {
no_action: "Ничего",
reset_traffic: "Сбросить использованный трафик",
},
},
change_order_event: {
title: "Событие при смене тарифа",
description: "Что сделать при переходе на другой тариф.",
options: {
no_action: "Ничего",
reset_traffic: "Сбросить использованный трафик",
},
},
subscribe_path: {
title: "Путь подписки",
description: "Формат ссылки. Изменение повлияет на все существующие ссылки.",
current_format: "Текущий формат: {path}/xxxxxxxxxx",
restart_tip: "Может потребоваться перезапуск сервиса для применения.",
},
show_info_to_server: {
title: "Инфо в подписке (клиент)",
description: "Показывать информацию о трафике и сроке действия в приложении пользователя.",
},
show_protocol_to_server: {
title: "Протокол в имени узла",
description: "Добавлять название протокола к узлам (напр. [Hy2] Hong Kong).",
},
saving: "Сохранение...",
plan: {
title: "Тарифные планы",
add: "Добавить",
search: "Поиск...",
sort: {
edit: "Сортировка",
save: "Сохранить",
},
columns: {
id: "ID",
show: "Показ",
sell: "Продажа",
renew: "Продл.",
renew_tooltip: "Можно ли продлевать, если тариф снят с продажи",
name: "Название",
stats: "Стат.",
group: "Группа",
price: "Цена",
actions: "Действия",
edit: "Изм.",
delete: "Уд.",
delete_confirm: {
title: "Удаление",
description: "Это действие нельзя отменить. Продолжить?",
success: "Удалено",
},
price_period: {
monthly: "Месяц",
quarterly: "Квартал",
half_yearly: "Полгода",
yearly: "Год",
two_yearly: "2 Года",
three_yearly: "3 Года",
onetime: "Единоразово",
reset_traffic: "Сброс трафика",
unit: {
month: "/мес",
quarter: "/кв",
half_year: "/п-года",
year: "/год",
two_year: "/2г",
three_year: "/3г",
times: "/раз",
},
},
},
form: {
add_title: "Добавить тариф",
edit_title: "Изменить тариф",
name: {
label: "Название",
placeholder: "Введите название",
},
group: {
label: "Группа доступа",
placeholder: "Выберите группу",
add: "Добавить",
},
transfer: {
label: "Трафик",
placeholder: "Объем трафика",
unit: "ГБ",
},
speed: {
label: "Лимит скорости",
placeholder: "Макс. скорость",
unit: "Мбит/с",
},
price: {
title: "Настройка цены",
base_price: "Базовая цена",
clear: {
button: "Очистить",
tooltip: "Удалить все цены",
},
},
device: {
label: "Лимит устройств",
placeholder: "Без лимита",
unit: "шт",
},
capacity: {
label: "Лимит емкости",
placeholder: "Без лимита",
unit: "чел",
},
reset_method: {
label: "Способ сброса",
placeholder: "Выберите способ",
description: "Как будет считаться трафик для этого тарифа.",
options: {
follow_system: "Как в системе",
monthly_first: "1-е число месяца",
monthly_reset: "День покупки",
no_reset: "Без сброса",
yearly_first: "1 января",
yearly_reset: "Раз в год",
},
},
content: {
label: "Описание тарифа",
placeholder: "Введите описание...",
description: "Markdown разрешен. Списки, жирный текст и т.д.",
preview: "Предпросмотр",
preview_button: {
show: "Показать",
hide: "Скрыть",
},
template: {
button: "Шаблон",
tooltip: "Вставить стандартное описание",
content:
"## Особенности тарифа\n• Высокая скорость и стабильность\n• Поддержка нескольких устройств\n• Регулярный сброс трафика\n\n## Инструкции\n1. Поддержка: iOS, Android, Windows, macOS\n2. Техподдержка 24/7\n3. Автообновление трафика\n\n## Важно\n- Запрещен абуз\n- Соблюдайте законодательство\n- Можно сменить тариф в любой момент",
},
},
force_update: {
label: "Принудительно обновить у всех",
},
submit: {
submitting: "Сохранение...",
submit: "Применить",
cancel: "Отмена",
success: {
add: "Тариф добавлен",
update: "Тариф обновлен",
},
},
},
page: {
description: "Настройка тарифных планов: лимиты, цены и видимость.",
},
},
},
email: {
title: "Настройки почты",
description:
"Настройка SMTP для отправки кодов подтверждения, восстановления пароля и системных уведомлений.",
email_host: {
title: "SMTP Сервер",
description: "Адрес сервера, напр. smtp.gmail.com",
},
email_port: {
title: "SMTP Порт",
description: "Обычно: 465 (SSL) или 587 (TLS)",
},
email_username: {
title: "Имя пользователя SMTP",
description: "Ваш Email или логин",
},
email_password: {
title: "Пароль SMTP",
description: "Пароль приложения или основной пароль",
},
email_encryption: {
title: "Шифрование",
description: "Способ защиты соединения",
none: "Нет",
ssl: "SSL/TLS",
tls: "STARTTLS",
},
email_from: {
title: "Email отправителя",
description: "Будет отображаться в заголовке письма",
},
email_from_name: {
title: "Имя отправителя",
description: "Напр. 'Администрация Xboard'",
},
email_template: {
title: "Шаблон письма",
description: "Выберите стиль оформления уведомлений",
placeholder: "Выберите шаблон",
},
remind_mail: {
title: "Email напоминания",
description: "Уведомлять пользователей об окончании трафика или срока действия.",
},
test: {
title: "Тестовое письмо",
sending: "Отправка...",
description: "Проверить настройки, отправив письмо себе",
success: "Письмо успешно отправлено",
error: "Ошибка при отправке теста",
},
},
telegram: {
title: "Настройки Telegram",
description: "Связь с Telegram ботом: уведомления, привязка аккаунтов и команды.",
bot_token: {
title: "Токен бота",
description: "Получите у @BotFather.",
placeholder: "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx",
},
webhook_url: {
title: "Webhook Base URL",
description: "Оставьте пустым для URL сайта. Система сама добавит нужные пути.",
docs: "Документация Telegram Webhook",
placeholder: "https://example.com",
},
webhook: {
title: "Установить Webhook",
description: "Без этой настройки бот не будет получать сообщения от пользователей.",
button: "Настройка в 1 клик",
setting: "Настройка...",
success: "Webhook установлен успешно",
target_default: "Используется основной URL сайта.",
target_custom: "Используется кастомный URL: {{url}}",
debug: {
title: "Отладка Webhook",
success: "Успех",
url: "Полный URL",
baseUrl: "Base URL",
},
},
bot_enable: {
title: "Гайд по привязке",
description: "Показывать инструкцию по подключению Telegram на стороне пользователя.",
},
discuss_link: {
title: "Ссылка на группу/чат",
description: "Будет отображаться в личном кабинете.",
placeholder: "https://t.me/your_chat",
},
},
app: {
title: "Настройки приложений",
description: "Конфигурация ссылок на скачивание и версий клиентов для различных платформ.",
common: {
placeholder: "Введите значение",
},
windows: {
version: {
title: "Версия Windows",
description: "Текущая версия клиента для Windows",
},
download: {
title: "Ссылка скачивания Windows",
description: "URL для загрузки .exe файла",
},
},
macos: {
version: {
title: "Версия macOS",
description: "Текущая версия клиента для macOS",
},
download: {
title: "Ссылка скачивания macOS",
description: "URL для загрузки .dmg файла",
},
},
android: {
version: {
title: "Версия Android",
description: "Текущая версия .apk",
},
download: {
title: "Ссылка скачивания Android",
description: "URL для загрузки APK",
},
},
},
common: {
saving: "Сохранение...",
save_success: "Автоматически сохранено",
placeholder: "Текст...",
autoSaved: "Сохранено",
},
subscribe_template: {
title: "Шаблоны подписки",
description: "Конфигурация форматов выдачи для различных клиентов.",
singbox: {
title: "Шаблон Sing-box",
description: "Формат конфига для Sing-box",
},
clash: {
title: "Шаблон Clash",
description: "Формат конфига для Clash",
},
clashmeta: {
title: "Шаблон Clash Meta",
description: "Формат конфига для Clash Meta (Mihomo)",
},
stash: {
title: "Шаблон Stash",
description: "Формат конфига для Stash (iOS)",
},
surge: {
title: "Шаблон Surge",
description: "Формат конфига для Surge",
},
surfboard: {
title: "Шаблон Surfboard",
description: "Формат конфига для Surfboard",
},
},
},
traffic: {
trafficRecord: {
title: "Записи использования трафика",
time: "Время",
upload: "Отдача",
download: "Загрузка",
rate: "Множитель",
total: "Всего",
noRecords: "Записей не найдено",
perPage: "Показывать по",
records: "записей",
page: "Страница {{current}} / {{total}}",
multiplier: "{{value}}x",
},
},
ticket: {
title: "Управление тикетами",
description:
"Просмотр и управление обращениями пользователей, включая ответы и закрытие тикетов.",
columns: {
id: "ID тикета",
subject: "Тема",
level: "Приоритет",
status: "Статус",
updated_at: "Обновлен",
created_at: "Создан",
actions: "Действия",
},
status: {
closed: "Закрыт",
replied: "Отвечен",
pending: "Ожидание",
processing: "В обработке",
},
level: {
low: "Низкий",
medium: "Средний",
high: "Высокий",
},
filter: {
placeholder: "Поиск {field}...",
no_results: "Результатов не найдено",
selected: "Выбрано: {count}",
clear: "Очистить фильтры",
},
actions: {
view_details: "Детали",
close_ticket: "Закрыть тикет",
close_confirm_title: "Подтверждение закрытия",
close_confirm_description:
"Вы уверены, что хотите закрыть этот тикет? После закрытия ответы будут невозможны.",
close_confirm_button: "Закрыть тикет",
close_success: "Тикет успешно закрыт",
view_ticket: "Посмотреть тикет",
},
detail: {
no_messages: "Сообщений нет",
created_at: "Создан",
user_info: "Инфо о пользователе",
traffic_records: "История трафика",
order_records: "История заказов",
input: {
closed_placeholder: "Тикет закрыт",
reply_placeholder: "Введите ваш ответ...",
sending: "Отправка...",
send: "Отправить",
},
},
list: {
title: "Список тикетов",
search_placeholder: "Поиск по теме или email",
no_tickets: "Тикетов нет",
no_open_tickets: "Нет открытых тикетов",
no_closed_tickets: "Нет закрытых тикетов",
no_search_results: "Тикеты не найдены",
collapse: "Свернуть список",
expand: "Развернуть список",
},
},
coupon: {
title: "Управление купонами",
description:
"Здесь вы можете управлять купонами на скидку, включая их добавление, просмотр и удаление.",
table: {
columns: {
id: "ID",
show: "Включен",
name: "Название",
type: "Тип",
code: "Код",
limitUse: "Осталось исп.",
limitUseWithUser: "Исп. на чел.",
validity: "Срок действия",
actions: "Действия",
},
validity: {
expired: "Истек {{days}} дн. назад",
notStarted: "Начнется через {{days}} дн.",
remaining: "Осталось {{days}} дн.",
startTime: "Начало",
endTime: "Конец",
unlimited: "Бессрочно",
noLimit: "Без лимита",
},
actions: {
edit: "Изменить",
delete: "Удалить",
deleteConfirm: {
title: "Подтверждение удаления",
description:
"Это действие навсегда удалит этот купон. Вы уверены, что хотите продолжить?",
confirmText: "Удалить",
},
},
toolbar: {
search: "Поиск купонов...",
type: "Тип",
reset: "Сбросить",
types: {
1: "Фиксированная сумма",
2: "Процент",
},
},
},
form: {
add: "Добавить купон",
edit: "Изменить купон",
name: {
label: "Название купона",
placeholder: "Введите название купона",
required: "Пожалуйста, введите название купона",
},
type: {
label: "Тип и значение купона",
placeholder: "Выберите тип купона",
},
value: {
placeholder: "Введите значение",
},
validity: {
label: "Срок действия",
to: "до",
endTimeError: "Время окончания должно быть позже времени начала",
},
limitUse: {
label: "Максимальное количество использований",
placeholder: "Оставьте пустым для неограниченного использования",
description: "Установите общее количество раз, которое этот купон может быть использован",
},
limitUseWithUser: {
label: "Лимит на пользователя",
placeholder: "Оставьте пустым для неограниченного использования",
description: "Ограничьте, сколько раз каждый пользователь может использовать этот купон",
},
limitPeriod: {
label: "Периоды подписки",
placeholder: "Ограничить конкретными периодами, оставьте пустым для всех",
description: "Выберите периоды подписки, для которых применим этот купон",
empty: "Периоды не найдены",
},
limitPlan: {
label: "Тарифные планы",
placeholder: "Ограничить конкретными тарифами, оставьте пустым для всех",
description:
"Выберите тарифные планы, для которых применим этот купон, оставьте пустым для всех",
empty: "Тарифы не найдены",
},
code: {
label: "Кастомный код купона",
placeholder: "Оставьте пустым для автогенерации",
description: "Вы можете задать свой код купона или оставить поле пустым",
},
generateCount: {
label: "Количество для генерации",
placeholder: "Сколько купонов создать, оставьте пустым для одного",
description: "Сгенерировать несколько кодов купонов за один раз",
},
submit: {
saving: "Сохранение...",
save: "Сохранить",
},
error: {
saveFailed: "Не удалось сохранить купон",
},
timeRange: {
quickSet: "Быстрая установка",
presets: {
"1week": "1 Неделя",
"2weeks": "2 Недели",
"1month": "1 Месяц",
"3months": "3 Месяца",
"6months": "6 Месяцев",
"1year": "1 Год",
},
},
},
period: {
monthly: "Ежемесячно",
quarterly: "Ежеквартально",
half_yearly: "Раз в полгода",
yearly: "Ежегодно",
two_yearly: "Раз в 2 года",
three_yearly: "Раз в 3 года",
onetime: "Единоразово",
reset_traffic: "Сброс трафика",
},
},
search: {
placeholder: "Поиск меню и функций...",
title: "Навигация по меню",
noResults: "Результатов не найдено",
shortcut: {
label: "Поиск",
key: "⌘K",
},
},
subscribe: {
plan: {
title: "Тарифные планы",
add: "Добавить план",
search: "Поиск планов...",
sort: {
edit: "Изменить порядок",
save: "Сохранить порядок",
},
columns: {
id: "ID",
show: "Показывать",
sell: "Продавать",
renew: "Продление",
renew_tooltip:
"Могут ли существующие пользователи продлевать подписку, когда она снята с продажи",
name: "Название",
stats: "Статистика",
group: "Группа доступа",
price: "Цена",
actions: "Действия",
edit: "Изменить",
delete: "Удалить",
delete_confirm: {
title: "Подтверждение удаления",
description:
"Это действие навсегда удалит этот тарифный план. Вы уверены, что хотите продолжить?",
success: "Тариф успешно удален",
},
price_period: {
monthly: "Ежемесячно",
quarterly: "Ежеквартально",
half_yearly: "Раз в полгода",
yearly: "Ежегодно",
two_yearly: "Раз в 2 года",
three_yearly: "Раз в 3 года",
onetime: "Единоразово",
reset_traffic: "Сброс трафика",
no_price: "Нет цены",
unit: {
month: "/мес",
quarter: "/квартал",
half_year: "/полгода",
year: "/год",
two_year: "/2 года",
three_year: "/3 года",
times: "/раз",
},
},
},
form: {
add_title: "Добавить тариф",
edit_title: "Изменить тариф",
name: {
label: "Название тарифа",
placeholder: "Введите название тарифа",
},
group: {
label: "Группа серверов",
add: "Добавить группу",
placeholder: "Выберите группу серверов",
},
transfer: {
label: "Трафик",
placeholder: "Введите лимит трафика",
unit: "ГБ",
},
speed: {
label: "Ограничение скорости",
placeholder: "Введите лимит скорости",
unit: "Мбит/с",
},
price: {
title: "Настройки цены",
base_price: "Базовая цена",
clear: {
button: "Очистить",
tooltip: "Очистить все цены",
},
period: {
monthly: "Добавить",
months: "{{count}} Мес.",
},
onetime_desc: "Единоразовый пакет трафика, без ограничения по времени",
reset_desc: "Пакет сброса трафика, может быть использован многократно",
},
device: {
label: "Лимит устройств",
placeholder: "Введите лимит устройств",
unit: "Устройств",
},
capacity: {
label: "Лимит пользователей",
placeholder: "Введите лимит емкости",
unit: "Пользователей",
},
tags: {
label: "Теги",
placeholder: "Введите тег и нажмите Enter",
},
reset_method: {
label: "Метод сброса трафика",
placeholder: "Выберите метод сброса",
description: "Метод сброса определяет, когда и как будет сброшен трафик пользователя",
options: {
follow_system: "Следовать системным настройкам",
monthly_first: "Первое число каждого месяца",
monthly_reset: "Ежемесячно (в день покупки)",
no_reset: "Без сброса",
yearly_first: "Первое число года",
yearly_reset: "Ежегодно (в день покупки)",
},
},
content: {
label: "Описание тарифа",
placeholder: "Введите описание тарифа",
description: "Поддерживается формат Markdown",
preview: "Предпросмотр",
preview_button: {
show: "Показать предпросмотр",
hide: "Скрыть предпросмотр",
},
template: {
button: "Использовать шаблон",
tooltip: "Использовать стандартный шаблон",
content:
"## Детали плана\n\n- Трафик: {{transfer}} ГБ\n- Скорость: {{speed}} Мбит/с\n- Устройств: {{devices}}\n\n## Информация о сервисе\n\n1. Сброс трафика: {{reset_method}}\n2. Поддержка всех платформ\n3. Техподдержка 24/7",
},
},
force_update: {
label: "Принудительно обновить планы пользователей",
},
submit: {
cancel: "Отмена",
submit: "Отправить",
submitting: "Отправка...",
success: {
add: "Тариф успешно добавлен",
update: "Тариф успешно обновлен",
},
error: {
validation: "Ошибка валидации формы. Пожалуйста, проверьте данные.",
},
},
},
page: {
description:
"Здесь вы можете настраивать тарифные планы, включая операции добавления, удаления и редактирования.",
},
},
},
theme: {
title: "Конфигурация тем",
description:
"Конфигурация тем, включая цвета, размеры шрифтов и т.д. Если вы развернули Xboard с раздельным фронтендом и бэкендом, конфигурация тем не вступит в силу.",
upload: {
button: "Загрузить тему",
title: "Загрузить тему",
description:
"Пожалуйста, загрузите корректный пакет темы (формат .zip). Пакет должен содержать полную структуру файлов темы.",
dragText: "Перетащите файл темы сюда или",
clickText: "нажмите для выбора",
supportText: "Поддерживаются пакеты тем в формате .zip",
uploading: "Загрузка...",
error: {
format: "Поддерживаются только файлы тем в формате ZIP",
},
},
preview: {
title: "Предпросмотр темы",
imageCount: "{{current}} / {{total}}",
},
card: {
version: "Версия: {{version}}",
currentTheme: "Текущая тема",
activateTheme: "Активировать тему",
configureTheme: "Настройки темы",
preview: "Предпросмотр",
delete: {
title: "Удалить тему",
description: "Вы уверены, что хотите удалить эту тему? Это действие нельзя отменить.",
button: "Удалить",
error: {
active: "Нельзя удалить активную тему",
},
},
},
config: {
title: "Настройка темы {{name}}",
description: "Изменение стилей темы, макетов и других параметров отображения.",
cancel: "Отмена",
save: "Сохранить",
success: "Настройки успешно сохранены",
},
},
auth: {
signIn: {
title: "Вход",
description: "Введите свой email и пароль для входа",
email: "Email",
emailPlaceholder: "name@example.com",
password: "Пароль",
passwordPlaceholder: "Введите ваш пароль",
forgotPassword: "Забыли пароль?",
submit: "Войти",
rememberMe: "Запомнить меня",
resetPassword: {
title: "Сброс пароля",
description: "Выполните следующую команду в директории сайта, чтобы сбросить пароль",
command: "php artisan reset:password admin-email",
},
validation: {
emailRequired: "Пожалуйста, введите адрес электронной почты",
emailInvalid: "Пожалуйста, введите корректный адрес электронной почты",
passwordRequired: "Пожалуйста, введите пароль",
passwordLength: "Пароль должен содержать не менее 7 символов",
},
},
},
dashboard: {
title: "Панель управления",
stats: {
newUsers: "Новые пользователи",
totalScore: "Общий балл",
monthlyUpload: "Загружено за месяц",
vsLastMonth: "к прошлому месяцу",
vsYesterday: "со вчера",
todayIncome: "Доход за сегодня",
monthlyIncome: "Доход за месяц",
totalIncome: "Общий доход",
totalUsers: "Всего пользователей",
activeUsers: "Активных: {{count}}",
totalOrders: "Всего заказов",
revenue: "Выручка",
todayRegistered: "Зарегистрировано сегодня",
monthlyRegistered: "Зарегистрировано за месяц",
onlineUsers: "Онлайн",
pendingTickets: "Открытых тикетов",
hasPendingTickets: "Есть тикеты, требующие ответа",
noPendingTickets: "Нет открытых тикетов",
pendingCommission: "Комиссии на выплату",
hasPendingCommission: "Есть комиссии, требующие подтверждения",
noPendingCommission: "Нет комиссий на выплату",
monthlyNewUsers: "Новых за месяц",
monthlyDownload: "Скачано за месяц",
todayTraffic: "Сегодня: {{value}}",
activeUserTrend: "Тренды активности",
realtimeUsers: "Пользователи в реальном времени",
todayPeak: "Пик за сегодня",
vsLastWeek: "к прошлой неделе",
},
trafficRank: {
nodeTrafficRank: "Рейтинг узлов",
userTrafficRank: "Рейтинг пользователей",
today: "Сегодня",
last7days: "7 дней",
last30days: "30 дней",
customRange: "Свой диапазон",
selectTimeRange: "Выбрать период",
selectDateRange: "Выбрать даты",
currentTraffic: "Трафик за период",
previousTraffic: "Трафик ранее",
changeRate: "Изменение",
recordTime: "Время записи",
},
overview: {
title: "Обзор доходов",
thisMonth: "Этот месяц",
lastMonth: "Прошлый месяц",
to: "по",
selectTimeRange: "Выбрать диапазон",
selectDate: "Выбрать дату",
last7Days: "7 дней",
last30Days: "30 дней",
last90Days: "90 дней",
last180Days: "180 дней",
lastYear: "Год",
customRange: "Свой диапазон",
amount: "Сумма",
count: "Количество",
transactions: "Транзакций: {{count}}",
orderAmount: "Сумма заказов",
commissionAmount: "Сумма комиссий",
orderCount: "Заказов",
commissionCount: "Комиссий",
totalIncome: "Прибыль",
totalCommission: "Всего комиссий",
totalTransactions: "Транзакций: {{count}}",
avgOrderAmount: "Средний чек:",
commissionRate: "Доля комиссий:",
},
traffic: {
title: "Рейтинг трафика",
rank: "Место",
domain: "Домен",
todayTraffic: "Трафик сегодня",
monthlyTraffic: "Трафик за месяц",
},
queue: {
title: "Очереди",
jobDetails: "Детали задачи",
status: {
description: "Текущий статус выполнения очередей",
running: "Статус",
normal: "Норма",
abnormal: "Ошибка",
waitTime: "Ожидание: {{seconds}} сек.",
pending: "В очереди",
processing: "В процессе",
completed: "Завершено",
failed: "Ошибка",
cancelled: "Отменено",
},
details: {
description: "Технические детали очередей",
recentJobs: "Последние задачи",
statisticsPeriod: "Период статистики: {{hours}} ч.",
jobsPerMinute: "Задач в минуту",
maxThroughput: "Пиковая нагрузка: {{value}}",
failedJobs7Days: "Ошибки (7 дней)",
retentionPeriod: "Период хранения: {{hours}} ч.",
longestRunningQueue: "Самая длинная очередь",
activeProcesses: "Активные процессы",
id: "ID задачи",
type: "Тип задачи",
status: "Статус",
progress: "Прогресс",
createdAt: "Создано",
updatedAt: "Обновлено",
error: "Ошибка",
data: "Данные задачи",
result: "Результат",
duration: "Длительность",
attempts: "Попыток",
nextRetry: "Минут до повтора",
failedJobsDetailTitle: "Ошибки очередей",
viewFailedJobs: "Ошибки",
jobDetailTitle: "Детали выполнения",
time: "Время",
queue: "Очередь",
name: "Имя задачи",
exception: "Исключение",
noFailedJobs: "Ошибок не найдено",
connection: "Соединение",
payload: "Payload",
viewDetail: "Детали",
action: "Действие",
},
actions: {
retry: "Повтор",
cancel: "Отмена",
delete: "Удалить",
viewDetails: "Подробнее",
},
empty: "Задач не найдено",
loading: "Загрузка статуса очередей...",
error: "Ошибка загрузки статуса",
},
common: {
refresh: "Обновить",
close: "Закрыть",
pagination: "Страница {{current}}/{{total}}, всего {{count}}",
},
search: {
placeholder: "Поиск меню и функций...",
title: "Навигация",
noResults: "Ничего не найдено",
loading: "Поиск...",
},
},
payment: {
title: "Способы оплаты",
description: "Настройка способов оплаты, включая Alipay, WeChat Pay и др.",
table: {
columns: {
id: "ID",
enable: "Включено",
name: "Название",
payment: "Шлюз",
notify_url: "URL уведомления",
notify_url_tooltip:
"Шлюз будет отправлять уведомления на этот адрес. Убедитесь, что он доступен через ваш брандмауэр.",
actions: "Действия",
},
actions: {
edit: "Изменить",
delete: {
title: "Подтверждение удаления",
description:
"Вы уверены, что хотите удалить этот способ оплаты? Это действие нельзя отменить.",
success: "Успешно удалено",
},
},
toolbar: {
search: "Поиск способов оплаты...",
reset: "Сбросить",
sort: {
hint: "Перетаскивайте для сортировки, затем нажмите сохранить",
save: "Сохранить порядок",
edit: "Изменить порядок",
},
},
},
form: {
add: {
button: "Добавить способ оплаты",
title: "Добавить способ оплаты",
},
edit: {
title: "Изменить способ оплаты",
},
fields: {
name: {
label: "Отображаемое название",
placeholder: "Введите название",
description: "Используется для отображения пользователям",
},
icon: {
label: "URL иконки",
placeholder: "https://example.com/icon.svg",
description: "URL иконки для отображения",
},
notify_domain: {
label: "Домен уведомлений",
placeholder: "https://example.com",
description: "Домен для получения уведомлений от шлюза",
},
handling_fee_percent: {
label: "Комиссия (%)",
placeholder: "0-100",
},
handling_fee_fixed: {
label: "Фиксированная комиссия",
placeholder: "0",
},
payment: {
label: "Платежный шлюз",
placeholder: "Выберите шлюз",
description: "Выберите технический шлюз для обработки оплаты",
},
},
validation: {
name: {
min: "Название должно содержать минимум 2 символа",
max: "Название не может превышать 30 символов",
},
notify_domain: {
url: "Пожалуйста, введите корректный URL",
},
payment: {
required: "Пожалуйста, выберите платежный шлюз",
},
},
buttons: {
cancel: "Отмена",
submit: "Отправить",
},
sections: {
payment_config: "Конфигурация шлюза",
},
messages: {
success: "Успешно сохранено",
},
},
},
order: {
title: "Управление заказами",
description:
"Здесь вы можете просматривать заказы пользователей, включая назначение, просмотр, удаление и другие операции.",
table: {
columns: {
tradeNo: "№ Заказа",
type: "Тип",
plan: "Тарифный план",
period: "Период",
amount: "Сумма оплаты",
status: "Статус заказа",
commission: "Сумма комиссии",
commissionStatus: "Статус комиссии",
createdAt: "Создан",
},
},
type: {
NEW: "Новая покупка",
RENEWAL: "Продление",
UPGRADE: "Апгрейд (Переход)",
RESET_FLOW: "Сброс трафика",
},
period: {
month_price: "Ежемесячно",
quarter_price: "Ежеквартально",
half_year_price: "Раз в полгода",
year_price: "Ежегодно",
two_year_price: "Раз в 2 года",
three_year_price: "Раз в 3 года",
onetime_price: "Единоразово",
reset_price: "Пакет сброса",
},
status: {
PENDING: "Ожидание",
PROCESSING: "В обработке",
CANCELLED: "Отменен",
COMPLETED: "Завершен",
DISCOUNTED: "Скидка",
tooltip: "После пометки [Оплачено] система выполнит активацию и завершит заказ",
},
commission: {
PENDING: "Ожидание",
PROCESSING: "В обработке",
VALID: "Действительна",
INVALID: "Недействительна",
},
actions: {
markAsPaid: "Пометить как оплаченный",
cancel: "Отменить заказ",
openMenu: "Открыть меню",
reset: "Сбросить",
},
search: {
placeholder: "Поиск заказов...",
},
dialog: {
title: "Информация о заказе",
basicInfo: "Основная информация",
amountInfo: "Информация о стоимости",
timeInfo: "Временные метки",
commissionInfo: "Информация о комиссии",
commissionStatusActive: "Активна",
addOrder: "Добавить заказ",
assignOrder: "Назначить заказ",
fields: {
userEmail: "Email пользователя",
orderPeriod: "Период заказа",
subscriptionPlan: "Тарифный план",
callbackNo: "№ Транзакции (Callback)",
paymentAmount: "Сумма к оплате",
balancePayment: "Оплата с баланса",
discountAmount: "Сумма скидки",
refundAmount: "Сумма возврата",
deductionAmount: "Сумма вычета",
createdAt: "Дата создания",
updatedAt: "Дата обновления",
commissionStatus: "Статус комиссии",
commissionAmount: "Заработок комиссии",
actualCommissionAmount: "Фактическая комиссия",
inviteUser: "Пригласитель",
inviteUserId: "ID пригласителя",
},
placeholders: {
email: "Введите email пользователя",
plan: "Выберите тарифный план",
period: "Выберите период подписки",
amount: "Введите сумму оплаты",
},
actions: {
cancel: "Отмена",
confirm: "Подтвердить",
},
messages: {
addOrder: "Заказ успешно добавлен",
addSuccess: "Успешно добавлено",
},
},
},
plugin: {
title: "Управление плагинами",
description: "Управление и настройка системных плагинов",
search: {
placeholder: "Поиск по названию или описанию...",
},
type: {
placeholder: "Выберите тип плагина",
all: "Все типы",
},
tabs: {
all: "Все плагины",
installed: "Установленные",
available: "Доступные",
},
status: {
enabled: "Включено",
disabled: "Отключено",
not_installed: "Не установлено",
protected: "Защищено",
filter_placeholder: "Статус управления",
all: "Все статусы",
installed: "Установленные",
available: "Доступные",
},
button: {
install: "Установить",
upgrade: "Обновить",
config: "Настроить",
enable: "Включить",
disable: "Отключить",
uninstall: "Удалить",
readme: "Документация",
},
upload: {
button: "Загрузить плагин",
title: "Загрузить плагин",
description: "Загрузите пакет плагина (.zip)",
dragText: "Перетащите пакет плагина сюда или",
clickText: "выберите файл",
supportText: "Поддерживаются только .zip файлы",
uploading: "Загрузка...",
error: {
format: "Поддерживаются только .zip файлы",
},
},
delete: {
title: "Удалить плагин",
description: "Вы уверены, что хотите удалить этот плагин? Это действие нельзя отменить.",
button: "Удалить",
},
uninstall: {
title: "Удалить плагин из системы",
description: "Вы уверены, что хотите удалить этот плагин? Все данные плагина будут стерты.",
button: "Удалить",
},
upgrade: {
title: "Обновить плагин",
description:
"Вы уверены, что хотите обновить этот плагин? Он будет временно недоступен в процессе.",
button: "Обновить",
},
config: {
title: "Конфигурация",
description: "Изменение настроек плагина",
save: "Сохранить",
cancel: "Отмена",
},
readme: {
title: "Документация плагина",
},
author: "Автор",
messages: {
installSuccess: "Плагин успешно установлен",
installError: "Ошибка при установке плагина",
upgradeSuccess: "Плагин успешно обновлен",
upgradeError: "Ошибка при обновлении плагина",
uninstallSuccess: "Плагин успешно удален",
uninstallError: "Ошибка при удалении плагина",
enableSuccess: "Плагин включен",
enableError: "Ошибка включения плагина",
disableSuccess: "Плагин отключен",
disableError: "Ошибка отключения плагина",
configLoadError: "Ошибка загрузки конфигурации плагина",
configSaveSuccess: "Конфигурация сохранена",
configSaveError: "Ошибка сохранения конфигурации",
uploadSuccess: "Плагин загружен",
uploadError: "Ошибка загрузки плагина",
deleteSuccess: "Плагин удален",
deleteError: "Ошибка удаления плагина",
},
},
};