ErrInvalidParams: "Недопустимые параметры запроса: {{ .detail }}"
ErrTokenParse: "Ошибка генерации токена: {{ .detail }}"
ErrInitialPassword: "Неверный начальный пароль"
ErrInternalServer: "Внутренняя ошибка сервера: {{ .detail }}"
ErrRecordExist: "Запись уже существует"
ErrRecordNotFound: "Запись не найдена"
ErrStructTransform: "Ошибка преобразования типа: {{ .detail }}"
ErrNotLogin: "Пользователь не авторизован: {{ .detail }}"
ErrPasswordExpired: "Текущий пароль истёк: {{ .detail }}"
ErrNotSupportType: "Текущий тип не поддерживается: {{ .detail }}"
ErrProxy: "Ошибка запроса, проверьте состояние узла: {{ .detail }}"
ErrApiConfigStatusInvalid: "Доступ к API запрещён: {{ .detail }}"
ErrApiConfigKeyInvalid: "Ошибка ключа API: {{ .detail }}"
ErrApiConfigIPInvalid: "IP запроса API отсутствует в списке разрешённых: {{ .detail }}"
ErrApiConfigDisable: "Этот интерфейс запрещает вызовы API: {{ .detail }}"
ErrApiConfigKeyTimeInvalid: "Ошибка временной метки API: {{ .detail }}"

# request
ErrNoSuchHost: "Не удалось найти запрашиваемый сервер {{ .err }}"
ErrHttpReqNotFound: "Не удалось найти запрашиваемый ресурс {{ .err }}"
ErrHttpReqFailed: "Ошибка запроса {{ .err }}"
ErrHttpReqTimeOut: "Время ожидания запроса истекло {{ .err }}"
ErrCreateHttpClient: "Ошибка создания запроса {{ .err }}"

# common
ErrDemoEnvironment: "Демонстрационный сервер, эта операция запрещена!"
ErrCmdTimeout: "Время выполнения команды истекло!"
ErrEntrance: "Ошибка информации о безопасном входе, проверьте и повторите попытку!"
ErrGroupIsDefault: "Группу по умолчанию нельзя удалить"
ErrGroupIsInUse: "Группа используется и не может быть удалена."
ErrLocalDelete: "Локальный узел нельзя удалить!"
ErrPortInUsed: "Порт {{ .name }} уже используется!"
ErrInternalServerKey: "Внутренняя ошибка сервера:"

# app
CustomAppStoreFileValid: "Пакет магазина приложений должен быть в формате .tar.gz"
ErrFileNotFound: "Файл {{ .name }} не найден"

# backup
ErrBackupInUsed: "Эта учетная запись резервного копирования используется в запланированных задачах и не может быть удалена"
ErrBackupCheck: "Ошибка тестирования соединения учетной записи резервного копирования {{ .err }}"
ErrBackupLocal: "Локальная учетная запись резервного копирования не поддерживает эту операцию!"
ErrBackupPublic: "Обнаружено, что эта учетная запись резервного копирования не является публичной, проверьте и повторите попытку!"
ErrOSSConn: "Не удалось получить последнюю версию, проверьте подключение сервера к внешней сети."

#license
LicenseCheck: 'Проверить доступность лицензии'
ErrLicenseInUsed: 'Лицензия уже привязана. Пожалуйста, проверьте и повторите попытку!'
ErrLicenseExpired: 'Срок действия лицензии истек. Пожалуйста, проверьте и повторите попытку!'
ErrLicense: "Неверный формат лицензии, проверьте и повторите попытку!"
ErrLicenseCheck: "Ошибка проверки лицензии, проверьте и повторите попытку!"
ErrXpackVersion: "Ошибка проверки лицензии, лицензия ограничена по версии, проверьте и повторите попытку!"
ErrLicenseSave: "Ошибка сохранения информации о лицензии {{ .err }}, повторите попытку!"
ErrLicenseSync: "Ошибка синхронизации информации о лицензии, информация не найдена в базе данных!"
ErrLicenseExist: "Данная лицензия уже существует. Вы можете перейти на страницу лицензий для привязки узлов."
ErrXpackNotFound: "Эта часть доступна только в профессиональной версии, сначала импортируйте лицензию в разделе Настройки панели - Лицензия."
ErrXpackExceptional: "Эта часть доступна только в профессиональной версии, сначала синхронизируйте лицензию в разделе Настройки панели - Лицензия."
ErrXpackOutOfDate: "Текущая лицензия истекла, повторно импортируйте лицензию в разделе Настройки панели - Лицензия."
ErrXpackLost: "Лицензия достигла максимального количества попыток, перейдите в [Настройки панели][Лицензия] и нажмите кнопку синхронизации вручную."
ErrDeviceLost: "Необходимые файлы для проверки лицензии отсутствуют, пожалуйста, проверьте и попробуйте снова!"
ErrDeviceErr: "Текущая среда не соответствует среде импорта лицензии. Отредактируйте лицензию и повторите импорт!"
ErrXpackTimeout: "Время ожидания запроса истекло, возможно нестабильное сетевое соединение, повторите попытку позже!"
ErrUnbindMaster: "В управлении узлами обнаружены узлы, сначала удалите их и повторите попытку!"
ErrFreeNodeLimit: "Количество узлов в версии сообщества достигло бесплатного лимита, посетите www.lxware.cn/1panel для покупки!"
ErrNodeBound: "Эта лицензия уже связана с другим узлом, проверьте и повторите попытку!"
ErrNodeBoundDelete: "Эта лицензия привязана и не поддерживает операции удаления. Пожалуйста, проверьте и попробуйте снова!"
ErrNodeBoundLimit: "Текущий бесплатный узел достиг предела, пожалуйста, проверьте и попробуйте снова!"
ErrLicenseFree: "Бесплатные узлы доступны только при правильной привязке лицензии к узлу. Проверьте и повторите попытку!"
ErrLicenseUnbind: "Обнаружены узлы Community Edition для этой лицензии. Отвяжите в [Настройки панели - Лицензия] и повторите попытку!"
ErrNoSuchNode: "Информация об узле не найдена, проверьте и повторите попытку!"
ErrNodeUnbind: "Обнаружен узел вне области действия лицензии, проверьте и повторите попытку!"
ErrNodeBind: "Этот узел уже связан с лицензией, проверьте и повторите попытку!"
ErrNodeLocalRollback: "Основной узел не поддерживает прямой откат. Пожалуйста, вручную выполните команду '1pctl restore' для отката!"

# alert
ErrAlertSync: "Ошибка синхронизации информации об оповещениях, пожалуйста, проверьте и повторите попытку!"

# task
TaskStart: "{{ .name }} задача начата [START]"
TaskEnd: "{{ .name }} задача завершена [COMPLETED]"
TaskFailed: "{{ .name }} задача не выполнена"
TaskTimeout: "{{ .name }} истекло время"
TaskSuccess: "{{ .name }} задача выполнена успешно"
TaskRetry: "Начало повторной попытки {{ .name }}"
SubTaskSuccess: "{{ .name }} успешно"
SubTaskFailed: "{{ .name }} не удалось: {{ .err }}"
TaskInstall: "Установить"
TaskUpgrade: "Обновить"
TaskSync: 'Синхронизация'
TaskBackup: "Резервная копия"
SuccessStatus: "{{ .name }} успешно"
FailedStatus: "{{ .name }} не удалось {{ .err }}"
Start: "Начать"
SubTask: "Подзадача"
Skip: "Пропустить ошибки и продолжить..."

#script
ScriptLibrary: "Библиотека скриптов"
ScriptSyncSkip: "Текущая библиотека скриптов уже является последней версией!"
DownloadData: "Загрузка файла библиотеки скриптов data.yaml"
DownloadPackage: "Загрузка архива библиотеки скриптов"
AnalyticCompletion: "Анализ завершён, начинается синхронизация с базой данных..."

Node: "Узел"
SyncNode: "Синхронизация данных узла"
LocalName: "Имя 'local' используется только для локальной идентификации в системе"
SyncPackageData: "Упаковка данных синхронизации [{{ .detail }}]"
SyncPackageEncrypt: "Шифрование пакета данных"
SyncRequest: "Запрос API синхронизации узла"
SyncFailedRetry: "Таймаут синхронизации данных узла (попытка {{ .index }}), повторная попытка..."
SyncFailed: "Ошибка синхронизации, выполните ручную синхронизацию в списке узлов!"

#upgrade node
NodeUpgrade: "Обновление узла {{ .name }}"
UpgradeCheck: "Проверить обновления узла"
UpgradeCheckLocal: "Локальные узлы не поддерживают массовое обновление, пропуск..."
UpgradeCheckLatest: "Узел уже имеет последнюю версию, пропуск..."
NewSSHClient: "Инициализация SSH-соединения"
BackupBeforeUpgrade: "Резервное копирование данных перед обновлением"
UploadUpgradeFile: "Распределение файлов обновления"
RestartAfterUpgrade: "Запуск службы после обновления"

#add node
MasterData: "Данные главного узла"
LoadSftpClient: "Загрузить SFTP-клиент"
PackageMasterData: "Создать архив резервной копии главного узла"
UploadBackup: "Загрузить резервные данные"
MvBackup: "Переместить данные в резервный каталог"
TaskAddNode: "Добавить узел"
LoadNodeArch: "Получить информацию об архитектуре узла"
LoadNodeArchDetail: "Обнаружена архитектура главного узла: {{ .local }}, архитектура дочернего узла: {{ .node }}"
LoadNodeUpgradeDetail: "Используется каталог установки исторической версии v1: {{ .baseDir }}, порт прослушивания службы: {{ .port }}"
SyncAgentBaseInfo: "Синхронизировать базовую информацию узла"
GenerateSSLInfo: "Сгенерировать SSL информацию узла"
ConnInfoNotMatch: "Информация о соединении не совпадает"
MakeAgentPackage: "Сгенерировать установочный пакет узла"
SendAgent: "Отправить установочный пакет узла"
StartService: "Запустить сервис"
NoBackupNode: "Резервный узел в настоящее время пуст. Выберите резервный узел для сохранения и повторите попытку!"

#cmd
AppVersion: "Версия приложения"
AppCommands: "Команды приложения"
AppInit: "Инициализация приложения"
AppKeyVal: "Ключ приложения (поддерживаются только английские символы)"
AppCreateFileErr: "Не удалось создать файл {{ .name }} {{ .err }}"
AppCreateDirErr: "Не удалось создать папку {{ .name }} {{ .err }}"
AppMissKey: "Отсутствует ключ приложения, используйте -k для указания"
AppMissVersion: "Отсутствует версия приложения, используйте -v для указания"
AppVersionExist: "Версия уже существует!"
AppCreateSuccessful: "Успешно создано!"
AppWriteErr: "Не удалось записать файл {{ .name }} {{ .err }}"
SudoHelper: "Пожалуйста, используйте {{ .cmd }} или переключитесь на пользователя root"
ListenIPCommands: "Переключить IP для прослушивания"
ListenIPv4: "Прослушивание IPv4"
ListenIPv6: "Прослушивание IPv6"
ListenChangeSuccessful: "Переключено успешно! Теперь прослушиваем {{ .value }}"
ResetCommands: "Сбросить информацию о системе"
ResetMFA: "Отменить двухфакторную аутентификацию 1Panel"
ResetHttps: "Отменить вход в 1Panel через https"
ResetEntrance: "Отменить безопасный вход 1Panel"
ResetIPs: "Отменить ограничения авторизованных IP для 1Panel"
ResetDomain: "Отменить привязку домена доступа 1Panel"
RestoreCommands: "Откатить сервисы и данные 1Panel"
RestoreNoSuchFile: "Нет доступных для отката файлов"
RestoreStep1: "（1/5）Начинаем откат сервисов и данных 1Panel из каталога {{ .name }}..."
RestoreStep2: "（2/5）Откат бинарного файла 1Panel завершён"
RestoreStep3: "（3/5）Откат скриптов 1Panel завершён"
RestoreStep4: "（4/5）Откат сервисов 1Panel завершён"
RestoreStep5: "（5/5）Откат данных 1Panel завершён"
RestoreSuccessful: "Откат успешен! Перезапускаем сервисы, пожалуйста, подождите..."
UpdateCommands: "Изменить информацию панели"
UpdateUser: "Изменить пользователя панели"
UpdatePassword: "Изменить пароль панели"
UpdatePort: "Изменить порт панели"
UpdateUserNull: "Ошибка: введён пользователь панели пуст!"
UpdateUserBlank: "Ошибка: введён пользователь панели с пробелами!"
UpdateUserFormat: "Ошибка: неверный формат имени пользователя панели! Поддерживаются только английские, китайские символы, цифры и _ , длина 3-30 символов"
UpdateUserErr: "Ошибка: не удалось изменить пользователя панели, {{ .err }}"
UpdateSuccessful: "Успешно изменено!"
UpdateUserResult: "Пользователь панели: {{ .name }}"
UpdatePasswordRead: "Ошибка: не удалось прочитать информацию о пароле панели, {{ .err }}"
UpdatePasswordNull: "Ошибка: введён пароль пуст!"
UpdateUPasswordBlank: "Ошибка: введён пароль с пробелами!"
UpdatePasswordFormat: "Ошибка: пароль должен содержать только буквы, цифры, специальные символы (!@#$%*_,.?), длина 8-30 символов!"
UpdatePasswordLen: "Ошибка: пароль должен быть длиной не менее 6 символов!"
UpdatePasswordRe: "Подтверждение пароля:"
UpdatePasswordErr: "Ошибка: не удалось изменить пароль панели, {{ .err }}"
UpdatePasswordSame: "Ошибка: пароли не совпадают, пожалуйста, проверьте и попробуйте снова!"
UpdatePasswordResult: "Пароль панели: {{ .name }}"
UpdatePortFormat: "Ошибка: введённый порт должен быть в пределах от 1 до 65535!"
UpdatePortUsed: "Ошибка: этот порт уже занят, пожалуйста, проверьте и попробуйте снова!"
UpdatePortErr: "Ошибка: не удалось изменить порт панели, {{ .err }}"
UpdatePortResult: "Порт панели: {{ .name }}"
UpdatePortFirewallAdd: "Не удалось добавить правило фаервола для порта, {{ .err }}, пожалуйста, вручную добавьте порт {{ .name }} в правила фаервола."
UpdatePortFirewallDel: "Ошибка: не удалось удалить правило фаервола для порта, {{ .err }}"
UpdatePortFirewallReload: "Не удалось перезагрузить фаервол, {{ .err }}, пожалуйста, вручную перезагрузите фаервол."
UserInfo: "Получить информацию о панели"
UserInfoAddr: "Адрес панели:"
UserInfoPassHelp: "Подсказка: для изменения пароля можно выполнить команду:"
DBConnErr: "Ошибка: не удалось инициализировать соединение с базой данных, {{ .err }}"
SystemVersion: "Версия:"
SystemMode: "Режим:"

#mobile app
ErrVerifyToken: 'шибка проверки токена, пожалуйста, сбросьте и отсканируйте снова.'
ErrInvalidToken: 'Неверный токен, пожалуйста, сбросьте и отсканируйте снова.'
ErrExpiredToken: 'Токен истек, пожалуйста, сбросьте и отсканируйте снова.'

#cluster
ErrMasterDelete: "Невозможно удалить основной узел, сначала удалите подчиненные узлы."
ClusterNameIsExist: "Имя кластера уже существует."
AppStatusUnHealthy: "Получение статуса приложения аномально, пожалуйста, проверьте статус узлов установки в списке узлов."
MasterNodePortNotAvailable: "Проверка подключения порта {{ .port }} узла {{ .name }} не удалась, пожалуйста, проверьте настройки брандмауэра/группы безопасности и статус главного узла."
ClusterMasterNotExist: "Основной узел кластера отключен, пожалуйста, удалите дочерние узлы."