mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-01-19 00:09:16 +08:00
Russian language support. (#7554)
* Add Russian language * Use prettier --------- Co-authored-by: Bubblegum <jack_benq@selfhosted.lan>
This commit is contained in:
parent
14095affa9
commit
d96ccd06a3
@ -29,7 +29,7 @@ type Login struct {
|
||||
Captcha string `json:"captcha"`
|
||||
CaptchaID string `json:"captchaID"`
|
||||
AuthMethod string `json:"authMethod" validate:"required,oneof=jwt session"`
|
||||
Language string `json:"language" validate:"required,oneof=zh en tw"`
|
||||
Language string `json:"language" validate:"required,oneof=zh en tw ru"`
|
||||
}
|
||||
|
||||
type MFALogin struct {
|
||||
|
@ -75,7 +75,6 @@ func GetMsgByKey(key string) string {
|
||||
return content
|
||||
}
|
||||
|
||||
//go:embed lang/*
|
||||
var fs embed.FS
|
||||
var bundle *i18n.Bundle
|
||||
|
||||
@ -100,6 +99,7 @@ func Init() {
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/zh-Hant.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/fa.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/pt.yaml")
|
||||
_, _ = bundle.LoadMessageFileFS(fs, "lang/ru.yaml")
|
||||
}
|
||||
|
||||
func UseI18nForCmd(lang string) {
|
||||
|
283
backend/i18n/lang/ru.yaml
Normal file
283
backend/i18n/lang/ru.yaml
Normal file
@ -0,0 +1,283 @@
|
||||
ErrInvalidParams: "Ошибка параметра запроса: {{ .detail }}"
|
||||
ErrTokenParse: "Ошибка генерации токена: {{ .detail }}"
|
||||
ErrInitialPassword: "Ошибка исходного пароля"
|
||||
ErrInternalServer: "Внутренняя ошибка сервиса: {{ .detail }}"
|
||||
ErrRecordExist: "Запись уже существует"
|
||||
ErrRecordNotFound: "Записи не найдены"
|
||||
ErrStructTransform: "Ошибка преобразования типа: {{ .detail }}"
|
||||
ErrNotLogin: "Пользователь не вошел в систему: {{ .detail }}"
|
||||
ErrPasswordExpired: "Текущий пароль истек: {{ .detail }}"
|
||||
ErrNotSupportType: "Система не поддерживает текущий тип: {{ .detail }}"
|
||||
ErrApiConfigStatusInvalid: "Доступ к API интерфейсу запрещен: {{ .detail }}"
|
||||
ErrApiConfigKeyInvalid: "Ошибка ключа API интерфейса: {{ .detail }}"
|
||||
ErrApiConfigIPInvalid: "IP API интерфейса отсутствует в белом списке: {{ .detail }}"
|
||||
ErrApiConfigDisable: "Этот интерфейс запрещает использование вызовов API интерфейса: {{ .detail }}"
|
||||
|
||||
#common
|
||||
ErrNameIsExist: "Имя уже существует"
|
||||
ErrDemoEnvironment: "Демо-сервер, операция запрещена!"
|
||||
ErrCmdTimeout: "Время выполнения команды истекло!"
|
||||
ErrCmdIllegal: "Команда содержит недопустимые символы. Пожалуйста, измените и попробуйте снова!"
|
||||
ErrPortExist: "{{ .port }} порт уже занят {{ .type }} [{{ .name }}]"
|
||||
TYPE_APP: "Приложение"
|
||||
TYPE_RUNTIME: "Среда выполнения"
|
||||
TYPE_DOMAIN: "Доменное имя"
|
||||
ErrTypePort: "Ошибка формата порта {{ .name }}"
|
||||
ErrTypePortRange: "Диапазон портов должен быть между 1-65535"
|
||||
Success: "Успех"
|
||||
Failed: "Неудача"
|
||||
SystemRestart: "Перезагрузка системы приводит к прерыванию задачи"
|
||||
|
||||
#app
|
||||
ErrPortInUsed: "Порт {{ .detail }} уже используется"
|
||||
ErrAppLimit: "Превышен лимит установки приложения"
|
||||
ErrAppRequired: "Требуется приложение {{ .detail }}"
|
||||
ErrNotInstall: "Приложение не установлено"
|
||||
ErrPortInOtherApp: "Порт {{ .port }} уже используется приложением {{ .apps }}"
|
||||
ErrDbUserNotValid: "База данных акций, имя пользователя и пароль не совпадают!"
|
||||
ErrDockerComposeNotValid: "Ошибка формата файла docker-compose!"
|
||||
ErrUpdateBuWebsite: "Приложение успешно обновлено, но изменение конфигурационного файла веб-сайта не удалось, пожалуйста, проверьте конфигурацию!"
|
||||
Err1PanelNetworkFailed: "Не удалось создать сеть контейнера по умолчанию! {{ .detail }}"
|
||||
ErrFileParse: "Не удалось разобрать файл docker-compose приложения!"
|
||||
ErrInstallDirNotFound: "Директория установки не существует"
|
||||
AppStoreIsUpToDate: "Обновлено"
|
||||
LocalAppVersionNull: "Приложение {{.name}} не синхронизировано с версией! Невозможно добавить в список приложений"
|
||||
LocalAppVersionErr: "{{.name}} не удалось синхронизировать версию {{.version}}! {{.err}}"
|
||||
ErrFileNotFound: "Файл {{.name}} не существует"
|
||||
ErrFileParseApp: "Не удалось проанализировать файл {{.name}} {{.err}}"
|
||||
ErrAppDirNull: "Папка версии не существует"
|
||||
LocalAppErr: "Синхронизация приложения {{.name}} не удалась! {{.err}}"
|
||||
ErrContainerName: "Имя контейнера уже существует"
|
||||
ErrAppSystemRestart: "Перезапуск 1Panel приводит к завершению задачи"
|
||||
ErrCreateHttpClient: "Не удалось создать HTTP-запрос {{.err}}"
|
||||
ErrHttpReqTimeOut: "Превышено время ожидания запроса {{.err}}"
|
||||
ErrHttpReqFailed: "Запрос не выполнен {{.err}}"
|
||||
ErrHttpReqNotFound: "Файл не существует"
|
||||
ErrNoSuchHost: "Сбой сетевого подключения"
|
||||
ErrImagePullTimeOut: "Тайм-аут загрузки образа"
|
||||
ErrContainerNotFound: "Контейнер {{ .name }} не существует"
|
||||
ErrContainerMsg: "Контейнер {{ .name }} работает ненормально, пожалуйста, проверьте журнал на странице контейнера для подробностей"
|
||||
ErrAppBackup: "Резервное копирование приложения {{ .name }} не удалось, ошибка {{.err}}"
|
||||
ErrImagePull: "Не удалось загрузить образ {{ .name }}, ошибка {{.err}}"
|
||||
ErrVersionTooLow: "Текущая версия 1Panel слишком стара для обновления магазина приложений, пожалуйста, обновите версию"
|
||||
ErrAppNameExist: "Имя приложения уже существует"
|
||||
AppStoreIsSyncing: "Магазин приложений синхронизируется, пожалуйста, попробуйте позже"
|
||||
ErrGetCompose: "Не удалось получить файл docker-compose.yml! {{ .detail }}"
|
||||
ErrAppWarn: "Аномальный статус, пожалуйста, проверьте журнал"
|
||||
ErrAppParamKey: "Исключение в поле параметра {{ .name }}"
|
||||
ErrAppUpgrade: "Не удалось обновить приложение {{ .name }} {{ .err }}"
|
||||
AppRecover: "Приложение {{ .name }} откатилось "
|
||||
PullImageStart: "Начало загрузки образа {{ .name }}"
|
||||
PullImageSuccess: "Образ успешно загружен"
|
||||
UpgradeAppStart: "Начало обновления приложения {{ .name }}"
|
||||
UpgradeAppSuccess: "Приложение {{ .name }} успешно обновлено"
|
||||
|
||||
#file
|
||||
ErrFileCanNotRead: "Файл недоступен для чтения"
|
||||
ErrFileToLarge: "Файл слишком большой"
|
||||
ErrPathNotFound: "Путь не найден"
|
||||
ErrMovePathFailed: "Целевой путь не может содержать исходный путь!"
|
||||
ErrLinkPathNotFound: "Целевой путь не существует!"
|
||||
ErrFileIsExist: "Файл или каталог уже существует!"
|
||||
ErrFileUpload: "Не удалось загрузить файл {{.name}} {{.detail}}"
|
||||
ErrFileDownloadDir: "Скачивание папки не поддерживается"
|
||||
ErrCmdNotFound: "Команда {{ .name}} не существует, пожалуйста, сначала установите эту команду на хосте"
|
||||
ErrSourcePathNotFound: "Исходный каталог не существует"
|
||||
ErrFavoriteExist: "Этот путь уже в избранном"
|
||||
ErrInvalidChar: "Недопустимые символы запрещены"
|
||||
ErrPathNotDelete: "Выбранный каталог не может быть удален"
|
||||
|
||||
#website
|
||||
ErrDomainIsExist: "Доменное имя уже существует"
|
||||
ErrAliasIsExist: "Псевдоним уже существует"
|
||||
ErrAppDelete: "Другой веб-сайт использует это приложение"
|
||||
ErrGroupIsUsed: "Группа используется и не может быть удалена"
|
||||
ErrBackupMatch: "файл резервной копии не соответствует текущим данным части сайта: {{ .detail}}"
|
||||
ErrBackupExist: "файл резервной копии соответствует части исходных данных, которая не существует: {{ .detail}}"
|
||||
ErrPHPResource: "Локальная среда выполнения не поддерживает переключение!"
|
||||
ErrPathPermission: "Обнаружена папка с правами доступа не 1000:1000 в каталоге индекса, что может вызвать ошибку отказа в доступе при доступе к веб-сайту. Пожалуйста, нажмите кнопку сохранения выше"
|
||||
ErrDomainIsUsed: "Домен уже используется веб-сайтом {{ .name }}"
|
||||
ErrDomainFormat: "Ошибка формата домена {{ .name }}"
|
||||
ErrDefaultAlias: "default — зарезервированное кодовое имя, пожалуйста, используйте другое кодовое имя"
|
||||
ErrImageNotExist: "Образ рабочей среды {{.name}} не существует, пожалуйста, перенастройте рабочую среду"
|
||||
|
||||
#ssl
|
||||
ErrSSLCannotDelete: "Сертификат {{ .name }} используется веб-сайтом и не может быть удален"
|
||||
ErrAccountCannotDelete: "Сертификат, связанный с учетной записью, не может быть удален"
|
||||
ErrSSLApply: "Сертификат продолжает успешно подписываться, но перезагрузка openresty не удалась, пожалуйста, проверьте конфигурацию!"
|
||||
ErrEmailIsExist: "Электронная почта уже существует"
|
||||
ErrSSLKeyNotFound: "Файл закрытого ключа не существует"
|
||||
ErrSSLCertificateNotFound: "Файл сертификата не существует"
|
||||
ErrSSLKeyFormat: "Ошибка проверки файла закрытого ключа"
|
||||
ErrSSLCertificateFormat: "Ошибка формата файла сертификата, пожалуйста, используйте формат pem"
|
||||
ErrEabKidOrEabHmacKeyCannotBlank: "EabKid или EabHmacKey не могут быть пустыми"
|
||||
ErrOpenrestyNotFound: "Режим HTTP требует предварительной установки Openresty"
|
||||
ApplySSLStart: "Начать подачу заявки на сертификат, доменное имя [{{ .domain }}] метод подачи заявки [{{ .type }}] "
|
||||
dnsAccount: "Автоматический DNS"
|
||||
dnsManual: "Ручной DNS"
|
||||
http: "HTTP"
|
||||
ApplySSLFailed: "Заявка на сертификат для [{{ .domain }}] не удалась, {{.detail}} "
|
||||
ApplySSLSuccess: "Заявка на сертификат для [{{ .domain }}] успешна! "
|
||||
DNSAccountName: "Учетная запись DNS [{{ .name }}] производитель [{{.type}}]"
|
||||
PushDirLog: "Сертификат отправлен в каталог [{{ .path }}] {{ .status }}"
|
||||
ErrDeleteCAWithSSL: "Существует выданный сертификат под текущей организацией, удаление невозможно"
|
||||
ErrDeleteWithPanelSSL: "Конфигурация SSL панели использует этот сертификат и не может быть удален"
|
||||
ErrDefaultCA: "Уполномоченный центр по умолчанию не может быть удален"
|
||||
ApplyWebSiteSSLLog: "Начать обновление сертификата веб-сайта {{ .name }}"
|
||||
ErrUpdateWebsiteSSL: "Не удалось обновить сертификат веб-сайта {{ .name }}: {{ .err }}"
|
||||
ApplyWebSiteSSLSuccess: "Сертификат веб-сайта успешно обновлен"
|
||||
ErrExecShell: "Не удалось выполнить скрипт {{ .err }}"
|
||||
ExecShellStart: "Начать выполнение скрипта"
|
||||
ExecShellSuccess: "Скрипт успешно выполнен"
|
||||
StartUpdateSystemSSL: "Начать обновление системного сертификата"
|
||||
UpdateSystemSSLSuccess: "Системный сертификат успешно обновлен"
|
||||
|
||||
#mysql
|
||||
ErrUserIsExist: "Текущий пользователь уже существует. Пожалуйста, введите нового пользователя"
|
||||
ErrDatabaseIsExist: "Текущая база данных уже существует. Пожалуйста, введите новую базу данных"
|
||||
ErrExecTimeOut: "Время выполнения SQL запроса истекло, пожалуйста, проверьте базу данных"
|
||||
ErrRemoteExist: "Удаленная база данных с таким именем уже существует, пожалуйста, измените и попробуйте снова"
|
||||
ErrLocalExist: "Локальная база данных с таким именем уже существует, пожалуйста, измените и попробуйте снова"
|
||||
|
||||
#redis
|
||||
ErrTypeOfRedis: "Тип восстановленного файла не соответствует текущему режиму сохранения. Измените тип файла и попробуйте снова"
|
||||
|
||||
#container
|
||||
ErrInUsed: "{{ .detail }} используется и не может быть удален"
|
||||
ErrObjectInUsed: "Этот объект используется и не может быть удален"
|
||||
ErrPortRules: "Количество портов не совпадает, пожалуйста, введите заново!"
|
||||
ErrPgImagePull: "Тайм-аут загрузки образа. Пожалуйста, настройте ускорение загрузки образа или вручную загрузите образ postgres:16.0-alpine и попробуйте снова"
|
||||
|
||||
#runtime
|
||||
ErrDirNotFound: "Папка сборки не существует! Пожалуйста, проверьте целостность файла!"
|
||||
ErrFileNotExist: "Файл {{ .detail }} не существует! Пожалуйста, проверьте целостность исходного файла!"
|
||||
ErrImageBuildErr: "Не удалось создать образ"
|
||||
ErrImageExist: "Образ уже существует!"
|
||||
ErrDelWithWebsite: "Рабочая среда уже связана с веб-сайтом и не может быть удалена"
|
||||
ErrRuntimeStart: "Не удалось запустить"
|
||||
ErrPackageJsonNotFound: "Файл package.json не существует"
|
||||
ErrScriptsNotFound: "Конфигурационный элемент scripts не найден в package.json"
|
||||
ErrContainerNameNotFound: "Не удалось получить имя контейнера, пожалуйста, проверьте файл .env"
|
||||
ErrNodeModulesNotFound: "Папка node_modules не существует! Пожалуйста, отредактируйте среду выполнения или дождитесь успешного запуска среды выполнения"
|
||||
|
||||
#setting
|
||||
ErrBackupInUsed: "Учетная запись резервного копирования уже используется в cronjob и не может быть удалена."
|
||||
ErrBackupCheck: "Проверка подключения учетной записи резервного копирования не выполнена {{ .err}}"
|
||||
ErrOSSConn: "Не удалось получить последнюю версию, пожалуйста, проверьте возможность подключения сервера к внешней сети."
|
||||
ErrEntrance: "Информация о безопасном входе неверна. Пожалуйста, проверьте и попробуйте снова!"
|
||||
|
||||
#tool
|
||||
ErrConfigNotFound: "Конфигурационный файл не существует"
|
||||
ErrConfigParse: "Ошибка формата конфигурационного файла"
|
||||
ErrConfigIsNull: "Конфигурационный файл не может быть пустым"
|
||||
ErrConfigDirNotFound: "Каталог выполнения не существует"
|
||||
ErrConfigAlreadyExist: "Конфигурационный файл с таким именем уже существует"
|
||||
ErrUserFindErr: "Не удалось найти пользователя {{ .name }} {{ .err }}"
|
||||
|
||||
#ssh
|
||||
ErrFirewallNone: "На системе не обнаружен сервис firewalld или ufw. Пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrFirewallBoth: "На системе обнаружены оба сервиса firewalld и ufw. Чтобы избежать конфликтов, удалите один и попробуйте снова!"
|
||||
|
||||
#cronjob
|
||||
ErrBashExecute: "Ошибка выполнения скрипта, пожалуйста, проверьте конкретную информацию в области вывода задачи."
|
||||
ErrCutWebsiteLog: "Не удалось разрезать лог веб-сайта {{ .name }}, ошибка {{ .err }}"
|
||||
CutWebsiteLogSuccess: "Лог веб-сайта {{ .name }} успешно разрезан, путь к резервной копии {{ .path }}"
|
||||
|
||||
#toolbox
|
||||
ErrNotExistUser: "Текущий пользователь не существует. Пожалуйста, измените и попробуйте снова!"
|
||||
ErrBanAction: "Установка не выполнена, текущий сервис {{ .name }} недоступен, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrClamdscanNotFound: "Команда clamdscan не обнаружена, пожалуйста, обратитесь к документации для установки!"
|
||||
|
||||
#waf
|
||||
ErrScope: "Изменение этой конфигурации не поддерживается"
|
||||
ErrStateChange: "Не удалось изменить состояние"
|
||||
ErrRuleExist: "Правило уже существует"
|
||||
ErrRuleNotExist: "Правило не существует"
|
||||
ErrParseIP: "Ошибка формата IP"
|
||||
ErrDefaultIP: "default — зарезервированное имя, пожалуйста, измените на другое имя"
|
||||
ErrGroupInUse: "IP-группа используется в черно/белом списке и не может быть удалена"
|
||||
ErrGroupExist: "Имя IP-группы уже существует"
|
||||
ErrIPRange: "Неверный диапазон IP"
|
||||
ErrIPExist: "IP уже существует"
|
||||
|
||||
#license
|
||||
ErrLicense: "Ошибка формата лицензии, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrLicenseCheck: "Проверка лицензии не выполнена, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrLicenseSave: "Не удалось сохранить информацию о лицензии, ошибка {{ .err }}, пожалуйста, попробуйте снова!"
|
||||
ErrLicenseSync: "Не удалось синхронизировать информацию о лицензии, в базе данных не обнаружена информация о лицензии!"
|
||||
ErrXpackNotFound: "Этот раздел является функцией профессионального издания, пожалуйста, сначала импортируйте лицензию в интерфейсе Настройки панели — Лицензия"
|
||||
ErrXpackNotActive: "Этот раздел является функцией профессионального издания, пожалуйста, сначала синхронизируйте статус лицензии в интерфейсе Настройки панели — Лицензия"
|
||||
ErrXpackOutOfDate: "Текущая лицензия истекла, пожалуйста, повторно импортируйте лицензию в интерфейсе Настройки панели — Лицензия"
|
||||
ErrXpackLost: "Лицензия достигла максимального числа попыток повторной попытки. Пожалуйста, перейдите на страницу [Настройки] [Лицензия] и вручную нажмите кнопку синхронизации, чтобы обеспечить корректную работу функций профессиональной версии."
|
||||
ErrXpackTimeout: "Превышено время ожидания запроса, возможно, нестабильное сетевое соединение, пожалуйста, повторите попытку позже!"
|
||||
|
||||
#license
|
||||
ErrAlert: "Ошибка формата информации об оповещении, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrAlertPush: "Ошибка отправки оповещения, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrAlertSave: "Ошибка сохранения оповещения, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrAlertSync: "Ошибка синхронизации оповещения, пожалуйста, проверьте и попробуйте снова!"
|
||||
ErrAlertRemote: "Ошибка удаленного оповещения, пожалуйста, проверьте и попробуйте снова!"
|
||||
|
||||
#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: "режим: "
|
@ -2,6 +2,7 @@ import { createI18n } from 'vue-i18n';
|
||||
import zh from './modules/zh';
|
||||
import tw from './modules/tw';
|
||||
import en from './modules/en';
|
||||
import ru from './modules/ru';
|
||||
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
@ -12,6 +13,7 @@ const i18n = createI18n({
|
||||
zh,
|
||||
tw,
|
||||
en,
|
||||
ru,
|
||||
},
|
||||
warnHtmlMessage: false,
|
||||
});
|
||||
|
2535
frontend/src/lang/modules/ru.ts
Normal file
2535
frontend/src/lang/modules/ru.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-row :gutter="10">
|
||||
<el-row :gutter="10" class="status-container">
|
||||
<el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center">
|
||||
<el-popover placement="bottom" :width="loadWidth()" trigger="hover" v-if="chartsOption['cpu']">
|
||||
<div>
|
||||
@ -52,7 +52,7 @@
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center">
|
||||
<el-popover placement="bottom" :width="160" trigger="hover" v-if="chartsOption['memory']">
|
||||
<el-popover placement="bottom" :width="200" trigger="hover" v-if="chartsOption['memory']">
|
||||
<el-tag style="font-weight: 500">{{ $t('home.mem') }}:</el-tag>
|
||||
<el-tag class="tagClass">{{ $t('home.total') }}: {{ computeSize(currentInfo.memoryTotal) }}</el-tag>
|
||||
<el-tag class="tagClass">{{ $t('home.used') }}: {{ computeSize(currentInfo.memoryUsed) }}</el-tag>
|
||||
@ -431,6 +431,39 @@ defineExpose({
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.status-container {
|
||||
:deep(.el-button) {
|
||||
min-width: 180px;
|
||||
padding: 8px 16px;
|
||||
height: auto;
|
||||
white-space: normal;
|
||||
line-height: 1.5;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
:deep(.el-tag) {
|
||||
min-width: 180px;
|
||||
padding: 8px 12px;
|
||||
height: auto;
|
||||
white-space: normal;
|
||||
line-height: 1.5;
|
||||
margin: 4px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
:deep(.el-button--primary) {
|
||||
background-color: var(--el-color-primary);
|
||||
&.is-plain {
|
||||
background: var(--el-color-primary-light-9);
|
||||
color: var(--el-color-primary);
|
||||
&:hover {
|
||||
background: var(--el-color-primary);
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cpuModeTag {
|
||||
justify-content: flex-start !important;
|
||||
text-align: left !important;
|
||||
@ -445,6 +478,10 @@ defineExpose({
|
||||
}
|
||||
.tagClass {
|
||||
margin-top: 3px;
|
||||
min-width: 140px;
|
||||
white-space: normal;
|
||||
height: auto;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.tagCPUClass {
|
||||
@ -460,6 +497,14 @@ defineExpose({
|
||||
margin-top: 28%;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.input-help {
|
||||
display: inline-block;
|
||||
min-width: 120px;
|
||||
white-space: normal;
|
||||
line-height: 1.2;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.nameTag {
|
||||
margin-top: 3px;
|
||||
height: auto;
|
||||
|
@ -55,12 +55,16 @@
|
||||
<el-dropdown-item v-if="globalStore.isIntl" command="en">
|
||||
English
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="globalStore.isIntl" command="ru">
|
||||
Русский
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item command="zh">中文(简体)</el-dropdown-item>
|
||||
<el-dropdown-item command="tw">中文(繁體)</el-dropdown-item>
|
||||
<el-dropdown-item v-if="!globalStore.isIntl" command="en">
|
||||
English
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
<el-dropdown-item v-if="!globalStore.isIntl" command="ru">Русский</el-dropdown-item>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
@ -272,6 +276,8 @@ function handleCommand(command: string) {
|
||||
dropdownText.value = 'English';
|
||||
} else if (command === 'tw') {
|
||||
dropdownText.value = '中文(繁體)';
|
||||
} else if (command === 'ru') {
|
||||
dropdownText.value = 'Русский';
|
||||
}
|
||||
nextTick(() => {
|
||||
loginFormRef.value.clearValidate();
|
||||
|
@ -78,9 +78,11 @@
|
||||
v-model="form.language"
|
||||
>
|
||||
<el-radio v-if="globalStore.isIntl" value="en">English</el-radio>
|
||||
<el-radio v-if="globalStore.isIntl" value="ru">Русский</el-radio>
|
||||
<el-radio value="zh">中文(简体)</el-radio>
|
||||
<el-radio value="tw">中文(繁體)</el-radio>
|
||||
<el-radio v-if="!globalStore.isIntl" value="en">English</el-radio>
|
||||
<el-radio v-if="!globalStore.isIntl" value="ru">Русский</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user