3179 lines
132 KiB
JavaScript
3179 lines
132 KiB
JavaScript
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: "Ошибка удаления плагина",
|
||
},
|
||
},
|
||
};
|