diff --git a/README-ru.md b/README-ru.md new file mode 100644 index 0000000000..62d020baa0 --- /dev/null +++ b/README-ru.md @@ -0,0 +1,321 @@ + +
Обнаружена ошибка запроса
", + "requestError": "Ошибка запроса", + "tryAgainLater": "Попробуйте позже", + "interfaceError": "Ошибка интерфейса", + "interfaceErrorDetected": "Обнаружена ошибка интерфейса
", + "errorCode": "Код ошибки", + "interfaceErrorNote": "Этот тип ошибки часто связан с паникой на бэкенде. Сначала проверьте логи бэкенда. Если это влияет на нормальное использование, вы можете принудительно выйти, чтобы очистить кэш.", + "clearCache": "Очистить кэш", + "interfaceNotRegisteredNote": "Этот тип ошибки обычно вызван тем, что интерфейс не зарегистрирован (или не перезапущен) или путь запроса (метод) не соответствует пути API (методу). Если это автоматизированный код, проверьте, нет ли пробелов.", + "iGotIt": "Понял", + "invalidToken": "Недействительный токен
", + "errorMessage": "Сообщение об ошибке", + "identityInfo": "Информация об идентификации", + "loginAgain": "Войти снова" + } + }, + "view": { + "about": { + "flippedAuroraTeam": "Команда Flipped-Aurora", + "submitRecords": "История выпусков" + }, + "dashboard": { + "about": "О нас", + "announcement": "Объявление", + "codeGen": "Генератор кода", + "components": { + "card": { + "seeMore": "Подробнее" + }, + "table": { + "attention": "Внимание", + "content1": "Более простой интерфейс, более быстрая работа", + "content2": "Лучший сервис, более удобный пользовательский опыт", + "content3": "Быстрее реализация идей, эффективнее работа", + "content4": "Больше творческих ресурсов, больше вдохновения", + "content5": "Более разумная структура кода, ясная логика кода", + "contentTitle": "Заголовок содержимого", + "ranking": "Рейтинг", + "heat": "Популярность", + "PluginTitle": "Название плагина" + } + }, + "grids": { + "menuManage": "Управление меню", + "apiManage": "Управление API", + "roleManage": "Управление ролями", + "userManage": "Управление пользователями", + "automationPackage": "Автоматизированный пакет", + "autoCode": "Автоматизация кода", + "licensePurchase": "Покупка лицензии", + "pluginMarket": "Рынок плагинов", + "ginDoc": "Документация GIN", + "gvaDoc": "Документация GVA", + "githubRepo": "Репозиторий GitHub" + }, + "contentData": "Данные содержимого", + "dashboardCharts": { + "accesssTrends": "Тенденции доступа", + "month": "Месяц" + }, + "dashboardTable": { + "changeLog": "Журнал изменений" + }, + "documentation": "Документация", + "formCreator": "Конструктор форм", + "instructionalUse": "Инструкция по использованию:", + "lastUpdate": "Последнее обновление", + "latestPlugins": "Последние плагины", + "menuManage": "Управление меню", + "newCustomers": "Новые клиенты", + "noOfSolutions": "Количество решений", + "noOfVisitors": "Количество посетителей", + "note": "Сегодня солнечно, 0℃ - 10℃, холодная погода, пожалуйста, оденьтесь теплее.", + "pluginRepo": "Репозиторий плагинов:", + "positiveRatings": "Положительные оценки", + "quickEntry": "Быстрый доступ", + "quickFunctions": "Быстрые функции", + "roleManage": "Управление ролями", + "statistics": "Статистика", + "title": "Доброе утро, администратор, начните свой день", + "todaysTraffic": "Сегодняшний трафик", + "totalNumberOfUsers": "Общее количество пользователей", + "userManage": "Управление пользователями", + "notification": "Уведомление", + "violation": "Нарушение", + "information": "Информация", + "error": "Ошибка", + "noticeList": { + "notice1": "Первая ценовая градация лицензионного сбора закончится 1 июня и перейдет на вторую ценовую градацию.", + "notice2": "После авторизации вы войдете в эксклюзивную группу Feishu для получения официальной помощи.", + "notice3": "Авторизация дает большие скидки на рынке плагинов.", + "notice4": "Неавторизованное коммерческое использование может быть обнаружено инструментами сбора ресурсов и повлечь ответственность.", + "notice5": "Спасибо за поддержку дела открытого исходного кода", + "notice6": "Сделайте творчество более ценным.", + "notice7": "Сделайте труд более значимым.", + "notice8": "Сделайте мышление глубже.", + "notice9": "Сделайте жизнь интереснее.", + "notice10": "Сделайте компанию более динамичной." + } + }, + "example": { + "breakpoint": { + "largeFileUpload": "Загрузка больших файлов", + "selectFile": "Выбрать файл", + "uploadFiles": "Загрузить файлы", + "uploadFilesNote": "Загружайте файлы размером не более 5 МБ", + "breakpointNote": "Это бета-версия для предварительного тестирования. Стилизация и оптимизация производительности в процессе. Файлы фрагментов загружаются в папку breakpointDir, а полные файлы — в папку fileDir на сервере QMPlus.", + "fileTransferredSec": "Файл передан за секунды", + "uploadFileSizeNote": "Загружайте файл размером менее 5 МБ", + "uploadFileFirst": "Сначала загрузите файл", + "uploadCompleted": "Загрузка завершена", + "uploadSuccessfully": "Загружено успешно" + }, + "customer": { + "customerNote": "Очистите разрешения на ресурсы этой роли в настройках разрешений или исключите роль создателя, чтобы заблокировать отображение ресурсов этого клиента.", + "accessDate": "Дата доступа", + "name": "Имя", + "phone": "Телефон", + "accessorId": "ID доступа", + "client": "Клиент", + "customerName": "Имя клиента", + "customerPhone": "Телефон клиента" + }, + "upload": { + "importURL": "Импортировать URL", + "image": "Изображение", + "upload": "Загрузить", + "mediaLibrary": "Медиа-библиотека", + "fileNameComments": "Имя файла/Комментарии", + "link": "Ссылка", + "label": "Метка", + "download": "Скачать", + "deleteAllFilesNote": "Это действие навсегда удалит файл, хотите продолжить?", + "formatNote": "Формат: имя_файла|ссылка или только ссылка.", + "editFileNote": "Нажмите на «Имя файла/Комментарии», чтобы изменить имя файла или комментарии.", + "enterFileName": "Введите имя файла или комментарий", + "browserNotSupportVideo": "Ваш браузер не поддерживает воспроизведение видео", + "enterFileNameOrComment": "Введите имя файла или комментарий", + "typeNotSupported": "Текущий тип не поддерживается.", + "deleteFileConfirmation": "Вы хотите удалить файл?", + "review": "Просмотр", + "inputPlaceholder": "Моя_картинка|https://my-oss.com/my.png\nhttps://my-oss.com/my_1.png", + "importSuccess": "Импорт выполнен успешно!", + "cancelImport": "Отменить импорт" + } + }, + "layout": { + "header": { + "tools": { + "video01": "1. Клонирование проекта и установка зависимостей", + "video02": "2. Инициализация проекта", + "video03": "3. Открытие инструмента отладки + создание начального пакета", + "video04": "4. Ручное использование функции автоматического создания", + "video05": "5. Использование существующих таблиц для создания бизнеса", + "video06": "6. Использование ИИ для создания бизнеса и выбора режима источника данных", + "video07": "7. Создание собственного метода бэкенда", + "video08": "8. Добавление фронтенд-страницы", + "video09": "9. Настройка вторичной фронтенд-страницы", + "video10": "10. Настройка параметра фронтенд-меню", + "video11": "11. Практика параметров меню + динамический заголовок меню + настройка подсветки меню", + "video12": "12. Добавление управляемой кнопки меню", + "video13": "13. Добавление ролей клиентов и соответствующие инструкции по настройке", + "video14": "14. Публикация проекта онлайн" + } + } + }, + "superAdmin": { + "authority": { + "components": { + "apis": { + "filterName": "Фильтр по имени", + "filterPath": "Фильтр по пути" + }, + "datas": { + "datasNote": "Эта функция используется только для создания таблицы отношений многие-ко-многим для ролей и ролей. Для конкретного использования необходимо также комбинировать с таблицей для реализации бизнеса. Подробности см. в примере кода (пример клиента). Эта функция не рекомендуется. Рекомендуется использовать [Функция управления организацией] на рынке плагинов для управления разрешениями на ресурсы.", + "resourceSetupSuccess": "Ресурсы настроены успешно!", + "thisRole": "Эта роль", + "thisRoleAndSubRoles": "Эта роль и подроли" + }, + "menus": { + "home": "Главная", + "menuSetupSuccess": "Меню настроено успешно!", + "setAsHome": "Установить как главную", + "assignButton": "Назначить кнопку" + } + } + }, + "menu": { + "components": { + "componentsCascader": { + "selectFilePathNote": "Выберите путь к файлу", + "filePathNote": "Страница: view/xxx/xx.vue Плагин: plugin/xx/xx.vue", + "manualInput": "Ручной ввод", + "quickSelection": "Быстрый выбор" + } + }, + "addMenu": "Добавить меню", + "addMenuParameters": "Добавить параметры меню", + "addParameter": "Добавить параметр", + "addRootMenu": "Добавить корневое меню", + "addSubMenu": "Добавить подменю", + "clickMe": "Нажмите, чтобы настроить", + "closeTabNote": "Автоматически закрывать вкладку", + "deleteAllRolesConfirm": "Это действие навсегда удалит все роли под этим меню, хотите продолжить?", + "displayName": "Отображаемое имя", + "titleNote": "Пример: system.view.superAdmin.menu.website", + "editMenu": "Редактировать меню", + "enterFilePathNote": "Введите путь к файлу", + "enterMenuDisplayNameNote": "Введите отображаемое имя меню", + "enterMenuNameNote": "Введите имя меню", + "filePath": "Путь к файлу", + "hide": "Скрыть", + "icon": "Иконка", + "keepAliveNote": "Кэшировать страницы через keepAlive", + "newMenuNote": "Новое меню, необходимо настроить разрешения в управлении ролями для использования", + "parameterType": "Тип параметра", + "parameterValue": "Значение параметра", + "paremeterKey": "Ключ параметра", + "parent": "Родитель", + "parentId": "ID родителя", + "rootDirctory": "Корневая директория", + "rootMenu": "Корневое меню", + "routeName": "Имя маршрута", + "routeNameNote": "Уникальная английская строка", + "routePath": "Путь маршрута", + "routePathNote": "Рекомендуется добавлять параметры только в конец", + "show": "Показать", + "sort": "Сортировка", + "subMenuNote": "Если меню содержит подменю, создайте страницу вторичной маршрутизации router-view или", + "visibility": "Видимость", + "visibilityNote": "Скрыть в списке", + "addButton": "Добавить управляемую кнопку", + "buttonName": "Имя кнопки", + "comments": "Комментарии", + "highlightMenu": "Подсветка меню", + "highlightMenuNote": "Примечание: При достижении этого маршрута указанное левое меню с именем будет активно (подсвечено). Может быть null, в этом случае используется имя текущего маршрута.", + "basicPage": "Базовая страница?", + "basicPageNote": "Если выбрано «Да», левое меню и верхняя информация не будут отображаться.", + "": "" + }, + "params": { + "paramNote": "Метод получения параметров и кэширования инкапсулирован в фронтенд utils/params. Вам не нужно писать его самостоятельно. См. комментарии в файле для использования.", + "paramName": "Имя параметра", + "paramKey": "Ключ параметра", + "paramValue": "Значение параметра", + "paramDesc": "Описание параметра", + "enterParamName": "Введите имя параметра", + "enterParamKey": "Введите ключ параметра", + "enterParamValue": "Введите значение параметра", + "enterParamDesc": "Введите описание параметра", + "instruction": "Инструкции", + "instructionNote1": "Фронтенд может ", + "instructionNote2": " и затем вызвать ", + "instructionNote3": " для получения соответствующих параметров.", + "instructionNote4": "Бэкенд должен ", + "instructionNote5": " затем вызвать ", + "instructionNote6": " для получения соответствующего значения." + }, + "user": { + "addUser": "Добавить пользователя", + "anotherUserEdit": "В настоящее время другой пользователь редактирует", + "avatar": "Аватар", + "deleteUserConfrim": "Вы уверены, что хотите удалить этого пользователя?", + "email": "Электронная почта", + "mediaLibrary": "Выбрать из медиа-библиотеки", + "nickName": "Псевдоним", + "nickNameNote": "Введите псевдоним", + "password": "Пароль", + "passwordLenNote": "Пароль должен содержать не менее 6 символов.", + "passwordNote": "Введите пароль", + "phone": "Телефон", + "resetPassword": "Сбросить пароль", + "resetPasswordConfrim": "Вы хотите сбросить текущий пароль на: 123456?", + "roleSetNote": "Роль успешно установлена!", + "userAddedNote": "Пользователь успешно добавлен!", + "userEditedNote": "Пользователь успешно отредактирован!", + "userName": "Имя пользователя", + "userNameLenNote": "Имя пользователя должно содержать не менее 5 символов.", + "userNameNote": "Введите имя пользователя", + "userRole": "Роль пользователя", + "userRoleNote": "Выберите роль пользователя", + "enable": "Включить", + "disable": "Отключить", + "enabledSuccessfully": "Включено успешно", + "disabledSuccessfully": "Отключено успешно", + "user": "Пользователь", + "enterPhoneNoNote": "Введите действительный номер мобильного телефона", + "enterEmailNote": "Введите действительный адрес электронной почты", + "": "" + } + }, + "api": { + "path": "Путь", + "apiGroup": "Группа API", + "apiPath": "Путь API", + "apiGrouping": "Группировка API", + "apiDescription": "Описание API", + "newApiNote": "Новый API, необходимо настроить разрешения в управлении ролями для использования", + "create": "Создать", + "view": "Просмотр", + "update": "Обновить", + "enterApiPath": "Введите путь API", + "enterGroupName": "Введите имя группы", + "selectRequestMethod": "Выберите метод запроса", + "enterApiDescription": "Введите описание API", + "newApi": "Новый API", + "editApi": "Редактировать API", + "unknownOperation": "Неизвестная операция", + "deleteApiConfirm": "Это действие навсегда удалит API из всех ролей, хотите продолжить?", + "refreshCache": "Обновить кэш", + "synchronousAPI": "Синхронизировать API", + "synchronousAPINote": "Синхронизация API, если группа маршрутов не указана, она не будет автоматически синхронизирована", + "synchronousRouting": "Синхронизировать маршруты", + "newAddedRouteNote1": "Новый добавленный маршрут ", + "newAddedRouteNote2": " не синхронизирован автоматически, если не указана группа маршрутов" + }, + "system": { + "components": { + "config": { + "GVAConfig": "Конфигурация GVA", + "appConfig": "Конфигурация приложения", + "autoCode": "Автоматизация кода", + "captchaConfig": "Конфигурация CAPTCHA", + "corsConfig": "Конфигурация CORS", + "dbConfig": "Конфигурация базы данных", + "emailConfig": "Конфигурация электронной почты", + "excelConfig": "Конфигурация Excel", + "jwtConfig": "Конфигурация JWT", + "logConfig": "Конфигурация логов", + "mongodbConfig": "Конфигурация MongoDB", + "ossConfig": "Конфигурация OSS", + "serverConfig": "Конфигурация сервера", + "timerConfig": "Конфигурация таймера", + "aiPath": "AI Path", + "aiPathNote": "Путь для использования функций ИИ", + "apiWhiteList": "Белый список API", + "apiWhiteListNote": "Примечание: Белый список API не требует авторизации", + "autoCodePath": "Путь автоматизации кода", + "backendPath": "Путь к бэкенду", + "captchaLength": "Длина CAPTCHA", + "captchaType": "Тип CAPTCHA", + "corsAllowCredentials": "Разрешить учетные данные CORS", + "corsAllowHeaders": "Разрешить заголовки CORS", + "corsAllowMethods": "Разрешить методы CORS", + "corsAllowOrigin": "Разрешить источники CORS", + "corsExposeHeaders": "Открытые заголовки CORS", + "corsMaxAge": "Максимальный возраст CORS", + "dbList": "Список баз данных", + "dbListNote": "Примечание: Список баз данных для настройки нескольких баз данных", + "emailHost": "Хост электронной почты", + "emailPort": "Порт электронной почты", + "emailSender": "Отправитель электронной почты", + "emailSecret": "Секретный ключ электронной почты", + "excelDir": "Папка Excel", + "jwtBufferPeriod": "Буферный период JWT", + "jwtExpiration": "Срок действия JWT", + "jwtIssuer": "Эмитент JWT", + "jwtSignature": "Подпись JWT", + "logDir": "Папка логов", + "logLevel": "Уровень логов", + "logPrefix": "Префикс логов", + "mongodbDatabase": "База данных MongoDB", + "mongodbOptions": "Опции MongoDB", + "mongodbPassword": "Пароль MongoDB", + "mongodbUsername": "Имя пользователя MongoDB", + "ossAccessKey": "Ключ доступа OSS", + "ossAccessKeySecret": "Секретный ключ доступа OSS", + "ossBucketName": "Имя корзины OSS", + "ossCdnAcceleratedDomain": "Домен ускорения CDN OSS", + "ossPath": "Путь OSS", + "ossRegion": "Регион OSS", + "ossSecretID": "Секретный ID OSS", + "ossSecretKey": "Секретный ключ OSS", + "ossSpaceName": "Имя пространства OSS", + "serverPort": "Порт сервера", + "timerEnable": "Включить таймер", + "timerTasks": "Задачи таймера", + "enableCaptcha": "Включить CAPTCHA", + "enableCors": "Включить CORS", + "enableMultiLogin": "Включить множественный вход", + "enableOss": "Включить OSS", + "enableTimer": "Включить таймер", + "projectRootPath": "Корневой путь проекта", + "redisAdminDBConfig": "Конфигурация базы данных Redis Admin", + "restartService": "Перезапустить службу (в разработке)", + "showLine": "Показать строку", + "socketTimeout": "Тайм-аут сокета", + "startEnableDisable": "Запуск (включить/отключить)", + "storehouse": "Склад", + "systemConfig": "Конфигурация системы", + "timedTask": "Таймер (запланированная задача)", + "updateNow": "Обновить сейчас", + "verCodeConfig": "Конфигурация кода подтверждения", + "zapLogConfig": "Конфигурация логов Zap", + "fatal": "Фатальный", + "debug": "Отладка", + "trace": "Трассировка", + "portValue": "Введите значение порта", + "local": "Локальный", + "qiniu": "Qiniu", + "tencentCOS": "Tencent Cloud COS", + "alibabaOSS": "Alibaba Cloud OSS", + "huaweiOBS": "Huawei Cloud OBS", + "globalRoutePrefix": "Введите глобальный префикс маршрута", + "jwtSignature": "Введите подпись JWT", + "expiration": "Введите срок действия", + "bufferPeriod": "Введите буферный период", + "issuer": "Введите эмитента", + "logPrefix": "Введите префикс логов", + "logFolder": "Введите папку логов", + "stackName": "Введите имя стека", + "address": "Введите адрес", + "password": "Введите пароль", + "recipientEmail": "Электронная почта получателя", + "multipleEmailsNote": "Несколько адресов, разделенных запятыми", + "port": "Порт", + "senderEmail": "Электронная почта отправителя", + "enterSenderEmail": "Введите электронную почту отправителя", + "enterHost": "Введите хост", + "isSSL": "Использовать SSL", + "useLoginAuth": "Использовать аутентификацию LoginAuth", + "enterSecret": "Введите секретный ключ", + "testEmail": "Тестовое письмо", + "mongodbOptions": "Введите опции MongoDB", + "databaseName": "Введите имя базы данных", + "userName": "Введите имя пользователя", + "typePassword": "Введите пароль", + "defaultEmpty": "По умолчанию пусто", + "defaultInnoDB": "По умолчанию InnoDB", + "enterPrefix": "Введите префикс", + "enterEngine": "Введите движок", + "writeLog": "Записать лог", + "enableMongo": "Включить MongoDB", + "strictRoleMode": "Строгий режим ролей", + "localFileAccessPath": "Локальный путь доступа к файлам", + "enterLocalFileAccessPath": "Введите локальный путь доступа к файлам", + "enterLocalFileStoragePath": "Введите локальный путь хранения файлов", + "qiniuUploadConfig": "Конфигурация загрузки Qiniu", + "enterStorageRegion": "Введите регион хранения", + "enterSpaceName": "Введите имя пространства", + "enterCdnAcceleratedDomain": "Введите домен ускорения CDN", + "enterAccessKey": "Введите ключ доступа", + "storageRegion": "Регион хранения", + "spaceName": "Имя пространства", + "cdnAcceleratedDomain": "Домен ускорения CDN", + "useHttps": "Использовать HTTPS", + "cdnUploadAccelerated": "Использовать ускорение загрузки CDN", + "tencentCosUploadConfig": "Конфигурация загрузки Tencent Cloud COS", + "bucketName": "Имя корзины", + "enterBucketName": "Введите имя корзины", + "region": "Регион", + "enterRegion": "Введите регион", + "pathPrefix": "Префикс пути", + "enterPathPrefix": "Введите префикс пути", + "accessDomain": "Домен доступа", + "enterAccessDomain": "Введите домен доступа", + "enterSecretID": "Введите секретный ID", + "enterSecretKey": "Введите секретный ключ", + "aliyunOssUploadConfig": "Конфигурация загрузки Alibaba Cloud OSS", + "enterAccessKeyId": "Введите ID ключа доступа", + "enterAccessKeySecret": "Введите секретный ключ доступа", + "huaweiObsUploadConfig": "Конфигурация загрузки Huawei Cloud OBS", + "enterPath": "Введите путь", + "cloudflareR2UploadConfig": "Конфигурация загрузки Cloudflare R2", + "enterBaseUrl": "Введите базовый URL", + "enterCompositeTargetAddress": "Введите составной целевой адрес", + "enterBackendCodeAddress": "Введите адрес кода бэкенда", + "enterBackendApiFolderAddress": "Введите адрес папки API бэкенда", + "enterBackendInitializeFolder": "Введите адрес папки инициализации бэкенда", + "enterBackendModelFileAddress": "Введите адрес файла модели бэкенда", + "enterBackendRequestFolderAddress": "Введите адрес папки запросов бэкенда", + "enterBackendRouterFolderAddress": "Введите адрес папки маршрутов бэкенда", + "enterBackendServiceFolderAddress": "Введите адрес папки сервисов бэкенда", + "enterFrontendFolderAddress": "Введите адрес папки фронтенда", + "enterBackendWApiFolderAddress": "Введите адрес папки WApi бэкенда", + "enterBackendWFormFolderAddress": "Введите адрес папки WForm бэкенда", + "enterBackendWTableFolderAddress": "Введите адрес папки WTable бэкенда", + "confirmRestartService": "Подтвердить перезапуск службы", + "operationSuccess": "Операция выполнена успешно", + "cancelRestart": "Отменить перезапуск" + } + }, + "autoPkg": { + "autoPkgNote": "Эта функция предназначена только для среды разработки и не рекомендуется для продакшена. Для конкретных эффектов использования смотрите видео https://www.bilibili.com/video/BV1kv4y1g7nT?p=3", + "packageName": "Имя пакета", + "template": "Шаблон", + "displayName": "Отображаемое имя", + "description": "Описание", + "templatePackageNote": "Пакет шаблона создаст код, интегрированный в основное тело проекта, а плагин шаблона создаст пакет плагина", + "creatingPackage": "Создание пакета", + "enterPackageNameNote": "Введите имя пакета", + "selectTemplateNote": "Выберите шаблон", + "cannotStartWithNumberNote": "Не может начинаться с цифры", + "addSuccess": "Добавлено успешно", + "deletePackageNote": "Эта операция удалит только запись pkg в базе данных. Удалите соответствующую структуру директорий бэкенда самостоятельно, чтобы сохранить соответствие с базой данных!", + "cannotBeChinese": "Ввод не может быть на китайском.", + "cannotStartWithNumber": "Ввод не может начинаться с цифр." + }, + "autoCode": { + "getAiPath": "Получить AI Path", + "aiCodeNote": "Сейчас это совершенно бесплатно\nОпишите вашу таблицу, и ИИ поможет вам завершить работу. \nДля этой функции нужно получить AI-Path в личном кабинете рынка плагинов, указать AI-Path в autocode-->ai-path в config.yaml и перезапустить проект. \nНажмите Ctrl+Enter или Cmd+Enter для генерации.", + "generate": "Сгенерировать", + "aiNote1": "【Совершенно бесплатно】Перейдите в ", + "aiNote2": "Личный кабинет рынка плагинов ", + "aiNote3": "Получите AIPath и укажите его в свойстве ai-path в config.yaml для использования.", + "imageRecognition": "Распознавание изображений", + "actionBar": "Панель действий:", + "autoAPIDBCreate": "Автоматически создать API", + "autoAPIDBTip": "Примечание: Зарегистрировать автоматически созданный API в базе данных", + "autoCodeNote": "Эта функция для среды разработки, не рекомендуется для продакшена. Нажмите, чтобы увидеть эффект использования.", + "autoMoveFiles": "Автоматически перемещать файлы", + "autoMoveFilesTip": "Примечание: Автоматически перемещать сгенерированные файлы в соответствующие места, указанные в ymal", + "codeGenDownload": "Автоматическое создание кода успешно, загрузка", + "codeGenMoveSuccess": "Автоматическое создание кода успешно, автоматическое перемещение успешно", + "codePreview": "Предпросмотр кода", + "columnName": "Поле базы данных", + "comment": "Описание поля", + "componentContent": "Содержимое компонента", + "confirmDelete": "Вы уверены, что хотите удалить?", + "copy": "Копировать", + "createUsingTable": "Создать с использованием этой таблицы", + "createdByAI": "Создано ИИ", + "dbName": "Имя базы данных", + "dictionary": "Словарь", + "entFileName": "Имя файла: sysXxxxXxxx", + "entStructAbbreviation": "Введите сокращение структуры", + "entStructDesc": "Введите описание структуры", + "entStructName": "Введите имя структуры", + "errNoFields": "Заполните хотя бы одно поле", + "errSameFieldName": "Есть поле с таким же именем, как у структуры", + "errJsonFieldNameAsTemplate": "Есть поле JSON с таким же именем, как у шаблона", + "errSameStructDescAbbr": "Имя структуры и сокращение структуры не могут совпадать", + "existDB": "Нажмите здесь, чтобы создать код из существующей базы данных", + "field": "Поле", + "fieldDataType": "Тип данных поля", + "fieldDesc": "Ключ мультиязычности поля", + "fieldIndex": "Индекс", + "fieldLen": "Длина поля базы данных", + "fileName": "Имя файла", + "fileNameNote": "Имя файла по умолчанию (рекомендуется использовать верблюжий регистр, начиная с маленькой буквы, например sysXxxXxxx)", + "generateCode": "Сгенерировать код", + "viewCode": "Просмотреть код", + "previewCode": "Предпросмотр кода", + "generate": "Сгенерировать", + "moveDown": "Переместить вниз", + "moveUp": "Переместить вверх", + "selectDB": "Выберите базу данных", + "selectTable": "Выберите таблицу", + "structAbbreviation": "Сокращение структуры", + "structAbbreviationNote": "Сокращение будет использоваться как имя объекта параметров и группа маршрутов", + "structChineseName": "Имя структуры", + "structChineseNameNote": "Описание, используемое как описание автоматического API", + "structNameNote": "Первая буква автоматически преобразуется в заглавную", + "table": "Таблица", + "tableName": "Имя таблицы", + "tableNameNote": "Укажите имя таблицы (необязательно)", + "createdFromDB": "Создано из базы данных", + "businessLibrary": "Бизнес-библиотека", + "businessLibraryNotice": "Примечание: Необходимо заранее настроить несколько баз данных в db-list. Если не настроено, настройте и перезапустите службу перед использованием. (Здесь можно выбрать соответствующую таблицу библиотеки, то есть выбрать таблицу из какой библиотеки)", + "selectBusinessLibrary": "Выберите бизнес-библиотеку", + "selectTableBtn": "Выбрать эту таблицу", + "automationStructure": "Автоматизированная структура", + "structureName": "Имя структуры", + "structureSimpleName": "Сокращение структуры", + "StructureOverview": "Обзор структуры", + "structNameInput": "Введите сокращение структуры", + "structNameIs": "Имя структуры: ", + "fineNameInput": "Введите имя файла", + "capitalizeFirstLetterAutomatically": "Первая буква автоматически становится заглавной", + "objectNameAndRouteGroup": "Сокращение используется как имя объекта параметров и группа маршрутов", + "templateChoose": "Выбрать шаблон", + "libraryNote": "Примечание: Необходимо заранее настроить несколько баз данных в db-list. Если этот пункт пуст, автоматизированный код будет создан с использованием главной библиотеки gva (global.GVA_DB). Если заполнено, код будет создан для указанной библиотеки (global.MustGetGlobalDBByDBName(dbname))", + "useGvaNote": "Примечание: Структура global.Model автоматически включает первичный ключ и операции мягкого удаления", + "aiClearDataNote": "Генерация ИИ очистит текущие данные, хотите продолжить?", + "fillJsonDataNote": "Заполните свойства json для отображения древовидной структуры на фронтенде", + "expertMode": "Экспертный режим", + "basicSettings": "Базовые настройки", + "generateFrontend": "Сгенерировать фронтенд", + "generateBackend": "Сгенерировать бэкенд", + "automationSettings": "Настройки автоматизации", + "advancedSettings": "Расширенные настройки", + "treeStructureSettings": "Настройки древовидной структуры", + "groupInfos": { + "useGvaStructure": "Структура GVA", + "note1": "Примечание: Зарегистрировать автоматически созданный API в базе данных", + "autoCreateApi": "Создать API", + "note2": "Примечание: Зарегистрировать автоматически созданное меню в базе данных", + "autoCreateMenu": "Создать меню", + "note3": "Примечание: Автоматически синхронизировать структуру таблицы базы данных, если не требуется, можно отключить.", + "syncTableStructure": "Синхронизировать таблицу", + "note4": "Примечание: Автоматически генерировать конфигурацию разрешений кнопок на странице. Если кнопка не назначена в управлении ролями, она не будет видна", + "createButtonPermissions": "Разрешения кнопок", + "note5": "Примечание: Автоматически добавить created_by, updated_by, deleted_by в структуру, упрощая управление разрешениями ресурсов", + "createResourceIdentifier": "Идентификатор ресурса", + "note6": "Примечание: Использование базового шаблона не создаст структуры и CURD, только настроит enter и другие атрибуты для упрощения разработки не-CURD логики", + "basicTemplate": "Базовый шаблон", + "parentIdNote": "Примечание: ParentID будет автоматически создан для связи родитель-потомок. Поддерживается только тип int для первичного ключа", + "treeStructure": "Древовидная структура", + "frontendJsonAttr": "Атрибуты json для отображения на фронтенде" + }, + "addField": "Добавить поле", + "primaryKey": "Первичный ключ", + "fieldName": "Имя поля", + "chineseName": "Название на китайском", + "defaultValue": "Значение по умолчанию", + "required": "Обязательное", + "createEdit": "Создание/Редактирование", + "importExport": "Импорт/Экспорт", + "fieldJson": "JSON поля", + "fieldType": "Тип поля", + "selectFieldType": "Выберите тип поля", + "indexType": "Тип индекса", + "selectIndexType": "Выберите тип индекса поля", + "selectSearchCondition": "Выберите условие поиска поля", + "advancedEdit": "Расширенное редактирование", + "exportJson": "Экспортировать JSON", + "importJson": "Импортировать JSON", + "clearTemp": "Очистить временные данные", + "temporary": "Временные", + "selectPackage": "Выберите пакет", + "gvaStructureNote": "Если включена структура GVA по умолчанию, поля ID, CreatedAt, UpdatedAt, DeletedAt будут автоматически добавлены. Это действие очистит дублирующиеся поля, созданные ниже. Хотите продолжить?", + "note": "Примечание", + "primaryKeyRequirement": "Необходимо создать хотя бы один первичный ключ для обеспечения работоспособности автоматизированного кода", + "fillFieldTypes": "Заполните все типы полей перед отправкой", + "packageNameConflict": "Имя пакета и сокращение структуры не могут совпадать", + "jsonImportSuccess": "JSON файл успешно импортирован", + "invalidJsonFile": "Недействительный JSON файл", + "basicTemplateNote": "Использование базового шаблона не создаст структуры и CURD, только настроит enter и другие атрибуты для упрощения разработки не-CURD логики", + "fieldDialog": { + "associativeDictionary": "Ассоциативный словарь", + "autoFill": "Автозаполнение", + "dataTypeNote": "Длина типа данных базы", + "entColumnName": "Введите поле базы данных", + "entFieldDataType": "Выберите тип данных поля", + "entFieldDesc": "Введите краткое описание поля", + "entFieldJson": "Введите форматированный JSON поля", + "entFieldName": "Введите имя поля на английском", + "note": "id, created_at, updated_at, deleted_at будут автоматически сгенерированы, не создавайте их повторно. При поиске, если условие LIKE, поддерживаются только строки", + "selectDataType": "Выберите тип данных поля", + "selectDictionary": "Выберите словарь", + "selectSearchType": "Выберите условие поиска поля", + "enumValue": "Значение перечисления", + "typeLength": "Длина типа", + "enumExample": "Пример: 'Пекин', 'Тяньцзинь'", + "dataTypeLength": "Длина типа данных базы", + "enterDefaultValueNote": "Введите значение по умолчанию", + "frontendCreateEdit": "Создание/Редактирование на фронтенде", + "frontendTableColmuns": "Столбцы таблицы на фронтенде", + "frontendDetails": "Детали на фронтенде", + "sort": "Сортировка", + "required": "Обязательное", + "canBeCleared": "Можно очистить", + "hideSearch": "Скрыть условие поиска", + "verificationError": "Сообщение об ошибке проверки", + "dataSourceConfigNote": "Конфигурация источника данных (если ваша программистская база слаба, это может привести к неработоспособности автоматизированного кода)", + "dataSourceNameNote": "База данных [база GVA, если пусто] ", + "associationMode": "Режим ассоциации", + "oneToOne": "Один-к-одному", + "oneToMany": "Один-ко-многим", + "selectDataSourceTable": "Выберите таблицу источника данных", + "selectDataToStore": "Сначала выберите данные для хранения", + "storage": "Хранилище: ", + "type": "Тип: ", + "fileDesc": ", Описание поля: ", + "selectDataToDisplay": "Сначала выберите данные для отображения", + "display": "Отображение: ", + "enumValueValidationError": "Ошибка проверки значения перечисления", + "oneToManyNote": "В режиме ассоциации один-ко-многим тип данных изменится на массив, на бэкенде будет представлен как JSON, в частности, как массив. Хотите продолжить?", + "string": "Строка", + "richText": "Форматированный текст", + "integer": "Целое число", + "boolean": "Логическое", + "float": "Число с плавающей точкой", + "time": "Время", + "enum": "Перечисление", + "singleImage": "Одно изображение", + "multipleImages": "Несколько изображений", + "video": "Видео", + "file": "Файл", + "array": "Массив" + } + }, + "autoCodeAdmin": { + "structName": "Имя структуры", + "structDesc": "Описание структуры", + "deleteHistoryConfirm": "Эта операция удалит эту историю, хотите продолжить?", + "notRolledBack": "Не откачено", + "reuse": "Повторное использование", + "rollBack": "Откат", + "rollBackDeleteTable": "Откат (удалить таблицу)", + "rollBackWithoutDeleteTable": "Откат (без удаления таблицы)", + "rollBackMark": "Метка отката", + "rollbackConfirm": "Эта операция удалит автоматически созданные файлы и API, хотите продолжить?", + "includeDBTables": " (включая таблицы базы данных!), ", + "rollBackContinue": " хотите продолжить?", + "rollbackSuccess": "Откат выполнен успешно!", + "rolledBack": "Откачено", + "addField": "Добавить поле", + "xiaoMiaoIsThinking": "Сяо Мяо думает, пожалуйста, подождите...", + "aiWritingNote": "В настоящее время написание ИИ нестабильно. Пожалуйста, обратите внимание на ручную корректировку содержимого после генерации кода." + }, + "exportTemplate": { + "syncTableExportFeature": "Эта функция предоставляет синхронную и асинхронную функцию экспорта таблиц для больших объемов данных. Вы можете настроить ее по своему усмотрению.", + "templateIdentifier": "Идентификатор шаблона", + "add": "Добавить", + "edit": "Редактировать", + "gvaDatabase": "Библиотека GVA", + "dbListNote": "Примечание: Необходимо заранее настроить несколько баз данных в db-list. Если не настроено, настройте и перезапустите службу перед использованием. Если выбор невозможен, установите disabled:false в config.yaml и выберите целевую библиотеку для импорта и экспорта.", + "enterTemplateName": "Введите имя шаблона", + "templateIdentifierInfo": "Идентификатор шаблона — это атрибут идентификатора, который должен быть привязан к фронтенд-компоненту", + "associationCondition": "Условия ассоциации", + "selectAssociationMethod": "Выберите метод соединения", + "enterAssociationTable": "Введите таблицу ассоциации", + "associationConditionExample": "Условие соединения table1.a = table2.b", + "addCondition": "Добавить условие", + "defaultExportCount": "Количество экспортируемых записей по умолчанию", + "defaultSortCondition": "Критерии сортировки по умолчанию", + "jsonKeyFromQuery": "Ключ JSON, который нужно взять из условия запроса", + "tableColumn": "Соответствующий столбец таблицы", + "selectQueryCondition": "Выберите условия запроса", + "creationDate": "Дата создания", + "searchDateHint": "Диапазон поиска: от даты начала (включительно) до даты окончания (исключительно)", + "startDate": "Дата начала", + "endDate": "Дата окончания", + "templateName": "Имя шаблона", + "searchCriteria": "Критерии поиска", + "tableName": "Имя таблицы", + "templateId": "ID шаблона", + "database": "База данных", + "gvaLibrary": "Библиотека GVA", + "templateInfo": "Информация о шаблоне", + "code": "Код", + "addTo": "Добавить в", + "templateName2": "Имя шаблона:", + "templateNameNote": "Введите имя шаблона", + "tableName2": "Имя таблицы:", + "autoGenerateTemplate": "Автоматически генерировать шаблоны", + "templateId2": "ID шаблона:", + "templateIdNote": "Идентификатор шаблона — это атрибут идентификатора, который должен быть привязан к фронтенд-компоненту", + "associationConditions": "Условия ассоциации:", + "associationConditionsNote": "Выберите метод соединения", + "associationTableNote": "Введите таблицу ассоциации", + "joinConditionNote": "Условие соединения table1.a = table2.b", + "addingCondtion": "Добавление условий", + "noOfExportedRecords": "Количество экспортируемых записей:", + "sortingCriteria": "Критерии сортировки:", + "sortingCriteriaNote": "Пример: id desc", + "exportCondition": "Условия экспорта:", + "jsonKeyNote": "Ключ JSON, который нужно извлечь из условия запроса", + "columnNote": "Соответствующий столбец таблицы", + "queryConditionNote": "Выберите условия запроса", + "templatePlaceholder1": "Формат информации о шаблоне: ключ определяет имя столбца базы данных (в режиме соединения нужно писать как table.column), значение определяет имя столбца экспортируемого Excel. Если ключ является ключевым словом или функцией базы данных, обработайте его в соответствии с режимом обработки ключевых слов. В качестве примера используется MySQL, как показано ниже:", + "templatePlaceholder2": "Первый столбец", + "templatePlaceholder3": "Третий столбец", + "templatePlaceholder4": "Четвертый столбец", + "templatePlaceholder5": "Я ключевое слово или функция базы данных", + "templatePlaceholder6": "Если добавлены JOINS, экспортируемый ключ должен быть указан как {table_name1.table_column1:\"первый столбец\",table_name2.table_column2:\"второй столбец\"}\r\nЕсли есть дублирующиеся имена столбцов, формат экспорта должен быть {table_name1.table_column1 as key:\"первый столбец\",table_name2.table_column2 as key2:\"второй столбец\"}\r\nИмпорт не поддерживается в режиме JOINS", + "noSpaceOnlyNote": "Нельзя вводить только пробелы", + "enterEndDate": "Введите дату окончания", + "enterStartDate": "Введите дату начала", + "startDateBeforeEndDate": "Дата начала должна быть раньше даты окончания", + "selectDBAndTable": "Выберите бизнес-библиотеку и таблицу перед выполнением операции", + "templateInfoFormatError": "Неверный формат информации о шаблоне, проверьте", + "exportConditionError": "Заполните полные условия экспорта", + "completeAssociationError": "Заполните полные ассоциации", + "xiaoMiaoIsThinking": "Сяо Мяо думает...", + "tableToBeUsed": "Таблица для использования", + "selectWhenUSingAi": "Выберите при использовании ИИ", + "aiHelpWriting": "Помощь ИИ в написании", + "aiNote": "Опишите функцию экспорта, которую вы хотите реализовать, и позвольте ИИ помочь вам. Перед этим выберите бизнес-библиотеку, в которой находится таблица для экспорта. Если выбор не сделан, по умолчанию будет использована библиотека gva.", + "helpWrite": "Помощь в написании", + "autoComplete": "Автозаполнение", + "autoGenerateTemplates": "Автоматически генерировать шаблоны", + "selectTableToExport": "Выберите таблицу для экспорта.", + "aiAutoCompleteFail": "Автозаполнение ИИ не удалось, переключено на логическое завершение" + }, + "installPlugin": { + "dragOrClickUpload": "Перетащите или нажмите для загрузки", + "uploadPackage": "Перетащите zip-пакет установки сюда для загрузки" + }, + "pubPlug": { + "pluginSupport": "В настоящее время поддерживаются только стандартные плагины (сгенерированные через шаблон плагина для создания стандартной структуры директорий). Упакуйте нестандартные плагины самостоятельно.", + "pluginNameInput": "Введите имя плагина в шаблоне плагина", + "menuSelectionNote": "Выбирайте только подменю в шаттл-боксе", + "menuGroupNameInput": "Введите имя группы меню, например, Управление объявлениями", + "menuNamePathInput": "Введите имя меню/путь", + "optionalMenu": "Опциональное меню", + "useMenu": "Использовать меню", + "remove": "Удалить", + "selected": "Выбрано", + "defineMenuInstall": "Определить установку меню", + "apiDescriptionPathInput": "Введите описание API/путь", + "optionalAPI": "Опциональный API", + "useAPI": "Использовать API", + "defineAPIInstall": "Определить установку API", + "packagePlugin": "Упаковать плагин", + "package": "Упаковать", + "closePackage": "Закрыть упаковку", + "enterMenuGroupName": "Введите имя группы меню", + "selectAtLeastOneMenu": "Выберите хотя бы одно меню", + "enterPluginName": "Введите имя плагина", + "generateInitialMenu": "Сгенерировать начальное меню", + "generate": "Сгенерировать", + "closeGenerateMenu": "Закрыть генерацию меню", + "selectAtLeastOneAPI": "Выберите хотя бы один API", + "enterPluginNameAgain": "Введите имя плагина еще раз", + "closeGenerateAPI": "Закрыть генерацию API" + } + } + } +} \ No newline at end of file diff --git a/web/src/view/systemTools/formCreate/index.vue b/web/src/view/systemTools/formCreate/index.vue index 0fe0a97ce9..74b846119c 100644 --- a/web/src/view/systemTools/formCreate/index.vue +++ b/web/src/view/systemTools/formCreate/index.vue @@ -16,6 +16,7 @@ import zh from './locale/zh_cn.js' // 导入中文语言包 import zh_tw from './locale/zh_tw.js' // 导入中文语言包 import ar from './locale/ar.js' + import ru from './locale/ru.js' import { useI18n } from 'vue-i18n' // 导入中文语言包 const { locale } = useI18n() @@ -30,7 +31,8 @@ 'zh-cn': zh, 'zh-TW': zh_tw, en: en, - ar: ar + ar: ar, + ru: ru } const designer = ref(null) diff --git a/web/src/view/systemTools/formCreate/locale/ru.js b/web/src/view/systemTools/formCreate/locale/ru.js new file mode 100644 index 0000000000..6dd0404927 --- /dev/null +++ b/web/src/view/systemTools/formCreate/locale/ru.js @@ -0,0 +1,780 @@ +export default { + name: 'ru', + form: { + field: 'Поле', + title: 'Заголовок', + info: 'Информация', + control: 'Управление', + labelPosition: 'Положение метки', + labelStyle: 'Стиль метки', + labelSuffix: 'Суффикс метки', + size: 'Размер формы', + event: 'Событие формы', + labelWidth: 'Ширина метки', + hideRequiredAsterisk: 'Скрыть красную звездочку рядом с меткой обязательного поля', + showMessage: 'Показать сообщение об ошибке проверки', + inlineMessage: 'Показать информацию о проверке в строке', + submitBtn: 'Показывать кнопку отправки формы', + resetBtn: 'Показывать кнопку сброса формы', + appendChild: 'Вставить дочерний элемент', + formMode: 'Режим формы', + formName: 'Название формы', + componentMode: 'Компонент', + document: 'Документация' + }, + computed: { + fieldUsed: '[{label}] Используется в формуле вычисления, сначала измените соответствующую формулу', + fieldExist: '[{label}] Поле уже существует', + fieldEmpty: 'Поле обязательно для заполнения', + fieldChar: 'Поле должно начинаться с буквы' + }, + validate: { + type: 'Тип', + typePlaceholder: 'Выберите', + trigger: 'Триггер', + mode: 'Метод проверки', + modes: { + required: 'обязательное', + pattern: 'шаблон', + validator: 'валидатор', + min: 'минимум', + max: 'максимум', + len: 'длина' + }, + types: { + string: 'Строка', + array: 'Множественный выбор', + number: 'Число', + integer: 'Целое число', + float: 'Число с плавающей точкой', + object: 'Коллекция', + date: 'Дата', + url: 'URL', + email: 'Электронная почта' + }, + message: 'Ошибка', + auto: 'Автоматически', + autoRequired: 'Введите {title}', + autoMode: 'Введите корректный {title}', + requiredPlaceholder: 'Введите', + required: 'Обязательное', + rule: 'Проверка' + }, + tableOptions: { + handle: 'Операция', + add: 'Добавить', + empty1: 'Нажмите в правом нижнем углу', + empty2: 'Кнопку для добавления столбца', + rmCol: 'Удалить текущий столбец', + rmRow: 'Удалить текущую строку', + splitRow: 'Разделить на строки', + splitCol: 'Разделить на столбцы', + mergeBottom: 'Объединить вниз', + mergeRight: 'Объединить вправо', + addTop: 'Добавить столбец сверху', + addBottom: 'Добавить снизу', + addLeft: 'Добавить столбец слева', + addRight: 'Добавить столбец справа', + keyValue: 'ключ-значение' + }, + struct: { + title: 'Редактировать', + only: '[{label}] Разрешено добавить только один', + errorMsg: 'Введенное содержимое синтаксически неверно', + configured: 'Настроено' + }, + event: { + title: 'Редактировать', + create: 'Создать', + list: 'Список', + placeholder: 'Введите название события', + saveMsg: 'Сохраните редактируемое событие', + type: 'Тип', + info: 'Информация', + label: 'Поле', + inject: { + api: 'API текущей формы', + rule: 'Создать правила для текущей формы', + self: 'Правило генерации компонента', + option: 'Конфигурация формы', + args: 'Исходные параметры события' + } + }, + fetch: { + title: 'Настроить данные', + create: 'Создать данные', + config: 'Запрос', + action: 'Действие', + actionRequired: 'Введите корректную ссылку', + placeholder: 'Введите название источника данных', + method: 'Метод', + data: 'Прикрепленные данные', + headers: 'Заголовки', + parse: 'Обработка', + response: 'Данные, возвращенные интерфейсом', + onError: 'При ошибке', + remote: 'Удаленный', + static: 'Статический', + optionsType: { + fetch: 'Запрос', + struct: 'Статический' + } + }, + style: { + width: 'Ширина', + height: 'Высота', + color: 'Цвет', + backgroundColor: 'Цвет фона', + margin: 'Внешний отступ', + padding: 'Внутренний отступ', + borderRadius: 'Радиус границы', + border: 'Граница', + solid: 'Сплошная', + dashed: 'Пунктирная', + dotted: 'Точечная', + double: 'Двойная', + opacity: 'Прозрачность', + scale: 'Масштаб', + shadow: { + name: 'Тень', + x: 'Смещение по оси X', + y: 'Смещение по оси Y', + vague: 'Радиус размытия', + extend: 'Радиус расширения', + inset: 'Внутренняя', + external: 'Внешняя', + mode: 'Режим', + classic: 'Классический', + flat: 'Плоский', + solid: 'Объемный' + }, + font: { + name: 'Шрифт', + size: 'Размер', + align: 'Выравнивание', + height: 'Высота строки', + spacing: 'Межбуквенный интервал', + preview: 'Предпросмотр' + }, + decoration: { + name: 'Оформление', + underline: 'Подчеркивание', + 'line-through': 'Зачеркивание', + overline: 'Надчеркивание' + }, + weight: { + name: 'Толщина шрифта', + 300: 'Тонкий', + 400: 'По умолчанию', + 500: 'Средний', + 700: 'Жирный' + } + }, + designer: { + component: 'Компонент', + id: 'Уникальный ID', + name: 'Серийный номер', + type: 'Тип', + form: 'Форма', + style: 'Стиль', + rule: 'Основа', + advanced: 'Расширенные', + props: 'Свойства', + validate: 'Проверка', + event: 'Событие', + clearWarn: 'После очистки восстановление невозможно. Вы уверены, что хотите очистить?', + childEmpty: 'Нажмите кнопку \\e789 в правом нижнем углу, чтобы добавить столбец', + dragEmpty: 'Перетащите компоненты из списка слева сюда', + unload: 'Вы уверены, что хотите покинуть текущую страницу?' + }, + menu: { + main: 'Основные', + aide: 'Вспомогательные', + layout: 'Макет', + component: 'Компонент', + subform: 'Подформа', + tree: 'Структура' + }, + props: { + disabled: 'Отключено', + time: 'Время', + email: 'Электронная почта', + number: 'Число', + globalData: 'Глобальные данные', + mobile: 'Мобильный', + pc: 'ПК', + reactive: 'Реактивный', + title: 'Заголовок', + content: 'Содержимое', + collection: 'Коллекция', + group: 'Группа', + custom: 'Пользовательский', + change: 'Изменить', + blur: 'Потеря фокуса', + preview: 'Предпросмотр', + clear: 'Очистить', + cancel: 'Отмена', + close: 'Закрыть', + ok: 'ОК', + save: 'Сохранить', + refresh: 'Обновить', + submit: 'Отправить', + reset: 'Сбросить', + copy: 'Копировать', + delete: 'Удалить', + hide: 'Скрыть', + show: 'Показать', + position: 'Положение', + render: 'Рендеринг', + large: 'Большой', + default: 'По умолчанию', + small: 'Маленький', + always: 'Всегда', + never: 'Никогда', + hover: 'Наведение', + click: 'Клик', + button: 'Кнопка', + year: 'Год', + month: 'Месяц', + date: 'Дата', + dates: 'Даты', + week: 'Неделя', + datetime: 'Дата и время', + 'datetime-local': 'Дата и время', + datetimerange: 'Диапазон даты и времени', + daterange: 'Диапазон дат', + monthrange: 'Диапазон месяцев', + left: 'Слева', + right: 'Справа', + top: 'Сверху', + text: 'Текст', + picture: 'Изображение', + 'picture-card': 'Изображение-карточка', + center: 'Центр', + vertical: 'Вертикальный', + horizontal: 'Горизонтальный', + manage: 'Управление', + key: 'Ключ', + name: 'Имя', + value: 'Значение', + inputData: 'Значение по умолчанию', + append: 'Добавить', + options: 'Опции', + option: 'Опция', + callback: 'Обратный вызов', + _self: 'Текущее окно', + _blank: 'Новое окно', + _parent: 'Родительское окно', + _top: 'Верхнее окно' + }, + com: { + cascader: { + name: 'Cascader', + event: { + expandChange: 'Срабатывает при изменении развернутого узла', + removeTag: 'В режиме множественного выбора срабатывает при удалении тега' + }, + props: { + props: 'Опции', + placeholder: 'Заполнитель', + disabled: 'Отключено', + clearable: 'Поддерживается очистка опций', + showAllLevels: 'Отображать полный путь выбранного значения в поле ввода', + collapseTags: 'Сворачивать теги в режиме множественного выбора', + collapseTagsTooltip: 'Отображать все выбранные теги при наведении на текст свернутого тега', + separator: 'Разделитель', + filterable: 'Можно ли искать опцию', + tagType: 'Тип тега' + }, + propsOpt: { + multiple: 'Множественный выбор', + expandTrigger: 'Способ развертывания подменю', + checkStrictly: 'Строго ли не связаны родительские и дочерние узлы', + emitPath: 'При изменении выбранного узла возвращать массив значений меню каждого уровня', + value: 'Значение указанной опции как атрибут объекта опции', + label: 'Метка указанной опции как атрибут объекта опции', + children: 'Дочерняя опция указанной опции как атрибут объекта опции', + disabled: 'Отключение указанной опции как атрибут объекта опции', + leaf: 'Флаг листового узла указанной опции как атрибут объекта опции' + } + }, + checkbox: { + name: 'Чек-бокс', + props: { + input: 'Заполнять ли', + type: 'Тип', + disabled: 'Отключено', + min: 'Минимальное количество выбираемых элементов', + max: 'Максимальное количество выбираемых элементов', + textColor: 'Цвет шрифта при активной кнопке', + fill: 'Цвет границы и фона при активной кнопке' + } + }, + col: { + name: 'Столбец', + props: { + span: 'Количество столбцов, занимаемых сеткой', + offset: 'Количество пробелов слева от сетки', + push: 'Смещение сетки вправо на количество ячеек', + pull: 'Смещение сетки влево на количество ячеек' + } + }, + colorPicker: { + name: 'Выбор цвета', + event: { + activeChange: 'Срабатывает при изменении цвета, отображаемого в панели' + }, + props: { + disabled: 'Отключено', + showAlpha: 'Поддерживается ли выбор прозрачности', + colorFormat: 'Формат цвета', + predefine: 'Предопределенный цвет' + } + }, + datePicker: { + name: 'Дата', + props: { + pickerOptions: 'Опции, специфичные для текущего выбора времени и даты', + readonly: 'Только для чтения', + disabled: 'Отключено', + type: 'Тип', + editable: 'Можно ли вводить в текстовое поле', + clearable: 'Показывать кнопку очистки', + placeholder: 'Заполнитель для выбора без диапазона', + startPlaceholder: 'Заполнитель для начальной даты при выборе диапазона', + endPlaceholder: 'Заполнитель для конечной даты при выборе диапазона', + format: 'Формат, отображаемый в поле ввода', + align: 'Выравнивание', + rangeSeparator: 'Разделитель при выборе диапазона', + unlinkPanels: 'Разъединить две панели дат в селекторе диапазона' + } + }, + dateRange: { + name: 'Диапазон дат' + }, + timeRange: { + name: 'Диапазон времени' + }, + elAlert: { + name: 'Оповещение', + description: 'Описание', + props: { + title: 'Заголовок', + type: 'Тип', + description: 'Вспомогательный текст', + closable: 'Можно ли закрыть', + center: 'Центрирован ли текст', + closeText: 'Пользовательский текст кнопки закрытия', + showIcon: 'Показывать иконку', + effect: 'Выбрать предоставленную тему' + } + }, + elButton: { + name: 'Кнопка', + props: { + formCreateChild: 'Содержимое', + size: 'Размер', + type: 'Тип', + plain: 'Простая кнопка', + round: 'Скругленные углы', + circle: 'Круглая кнопка', + loading: 'Состояние загрузки', + disabled: 'Отключено' + } + }, + elCard: { + name: 'Карточка', + props: { + header: 'Заголовок', + shadow: 'Время отображения тени' + } + }, + elCollapse: { + name: 'Сворачиваемая панель', + event: { + change: 'Переключение активной панели, тип — строка в режиме аккордеона, массив в других режимах' + }, + props: { + accordion: 'Режим аккордеона' + } + }, + elCollapseItem: { + name: 'Элемент сворачиваемой панели', + props: { + title: 'Заголовок панели', + name: 'Идентификатор', + disabled: 'Отключено' + } + }, + elDivider: { + name: 'Разделитель', + props: { + formCreateChild: 'Установить содержимое', + contentPosition: 'Положение содержимого' + } + }, + elTabPane: { + name: 'Вкладка', + props: { + label: 'Заголовок', + disabled: 'Отключено', + name: 'Идентификатор вкладки', + lazy: 'Отложенный рендеринг метки' + } + }, + elTabs: { + name: 'Вкладки', + event: { + tabClick: 'Срабатывает при выборе вкладки', + tabChange: 'Срабатывает при изменении activeName', + tabRemove: 'Срабатывает при нажатии кнопки удаления вкладки', + tabAdd: 'Срабатывает при нажатии кнопки добавления новой вкладки', + edit: 'Срабатывает после нажатия кнопки добавления или удаления вкладки' + }, + props: { + type: 'Тип', + closable: 'Можно ли закрыть метку', + tabPosition: 'Положение вкладки', + stretch: 'Растягивается ли ширина метки автоматически' + } + }, + elTag: { + name: 'Tag', + props: { + formCreateNative: 'Показывать заголовок', + formCreateTitle: 'Заголовок', + formCreateChild: 'Содержимое', + type: 'Тип', + size: 'Размер тега', + effect: 'Тема тега', + closable: 'Можно ли закрыть', + disableTransitions: 'Отключить анимацию перехода', + hit: 'Есть ли обводка границы', + round: 'Круглый тег', + color: 'Цвет фона' + } + }, + elTransfer: { + name: 'Transfer', + event: { + leftCheckChange: 'Срабатывает, когда пользователь выбирает/снимает выбор с элемента левого списка', + rightCheckChange: 'Срабатывает, когда пользователь выбирает/снимает выбор с элемента правого списка' + }, + props: { + filterable: 'Можно ли искать', + filterPlaceholder: 'Заполнитель поля поиска', + targetOrder: 'Стратегия сортировки элементов списка справа', + targetOrderInfo: 'Если original, сохраняется тот же порядок, что и в данных; если push, новые элементы помещаются в конец; если unshift, новые элементы помещаются в начало', + titles: 'Заголовок', + buttonTexts: 'Содержимое кнопок', + props: 'Псевдоним поля источника данных' + } + }, + elTreeSelect: { + name: 'TreeSelect', + event: { + removeTag: 'Срабатывает при удалении тега в режиме множественного выбора' + }, + props: { + multiple: 'Множественный выбор', + disabled: 'Отключено', + clearable: 'Можно ли очистить опцию', + collapseTags: 'Отображать выбранное значение как текст при множественном выборе', + multipleLimit: 'Максимальное количество элементов, выбираемых пользователем при множественном выборе, 0 — без ограничений', + placeholder: 'Заполнитель', + props: 'Опции', + renderAfterExpand: 'Рендерить дочерние узлы после первого развертывания узла дерева', + defaultExpandAll: 'Развернуть все узлы по умолчанию', + expandOnClickNode: 'Развернуть или свернуть узел при клике на него', + checkOnClickNode: 'Выбирать узел при клике на него', + nodeKey: 'Атрибут для уникальной идентификации каждого узла дерева, должен быть уникальным для всего дерева' + } + }, + fcEditor: { + name: 'Редактор', + props: { + disabled: 'Отключено' + } + }, + fcRow: { + name: 'Строка', + props: { + gutter: 'Интервал сетки', + type: 'Режим гибкого макета', + justify: 'Горизонтальное выравнивание в гибком макете', + align: 'Вертикальное выравнивание в гибком макете' + } + }, + fcTable: { + name: 'Таблица', + props: { + border: 'Показывать границу', + borderColor: 'Цвет границы', + borderWidth: 'Ширина границы' + } + }, + fcTableGrid: { + name: 'Сетка' + }, + group: { + name: 'Подформа', + props: { + disabled: 'Отключено', + syncDisabled: 'Принудительно синхронизировать состояние отключения с подформой', + expand: 'Установить элементы, развернутые по умолчанию', + button: 'Показывать кнопку операций', + sortBtn: 'Показывать кнопку сортировки', + min: 'Минимальное количество добавляемых элементов', + max: 'Максимальное количество добавляемых элементов' + } + }, + html: { + name: 'HTML', + props: { + formCreateNative: 'Показывать заголовок', + formCreateTitle: 'Заголовок', + formCreateChild: 'Содержимое' + } + }, + input: { + name: 'Поле ввода', + event: { + change: 'Срабатывает при изменении значения, когда компонент теряет фокус или пользователь нажимает Enter' + }, + props: { + type: 'Тип', + maxlength: 'Максимальная длина ввода', + minlength: 'Минимальная длина ввода', + placeholder: 'Заполнитель', + clearable: 'Показывать кнопку очистки', + disabled: 'Отключено', + readonly: 'Только для чтения' + } + }, + inputNumber: { + name: 'Числовое поле', + props: { + precision: 'Точность входного значения', + min: 'Минимальное допустимое значение счетчика', + max: 'Максимальное допустимое значение счетчика', + step: 'Шаг', + stepStrictly: 'Можно ли вводить только кратные шагу значения', + disabled: 'Отключено', + controls: 'Использовать кнопки управления', + controlsPosition: 'Положение кнопок управления', + placeholder: 'Заполнитель' + } + }, + password: { + name: 'Пароль', + event: { + change: 'Срабатывает при изменении значения, когда компонент теряет фокус или пользователь нажимает Enter' + }, + props: { + disabled: 'Отключено', + readonly: 'Только для чтения', + maxlength: 'Максимальная длина ввода', + minlength: 'Минимальная длина ввода', + placeholder: 'Заполнитель', + clearable: 'Показывать кнопку очистки' + } + }, + radio: { + name: 'Радио кнопка', + props: { + input: 'Заполнять ли', + disabled: 'Отключено', + type: 'Тип', + textColor: 'Цвет текста при активации формы кнопки', + fill: 'Цвет заливки и границы при активации формы кнопки' + } + }, + rate: { + name: 'Оценка', + props: { + max: 'Максимальный балл', + disabled: 'Отключено', + allowHalf: 'Разрешить половинный выбор', + voidColor: 'Цвет иконки, когда не выбрано', + disabledVoidColor: 'Цвет иконки, когда не выбрано в режиме только чтение', + voidIconClass: 'Имя класса иконки, когда не выбрано', + disabledVoidIconClass: 'Имя класса иконки, когда не выбрано в режиме только чтение', + showScore: 'Показывать текущий балл', + textColor: 'Цвет вспомогательного текста', + scoreTemplate: 'Шаблон отображения балла' + } + }, + select: { + name: 'Выбор', + event: { + removeTag: 'Срабатывает при удалении тега в режиме множественного выбора' + }, + props: { + multiple: 'Множественный выбор', + disabled: 'Отключено', + clearable: 'Можно ли очистить опцию', + collapseTags: 'Отображать выбранное значение как текст при множественном выборе', + multipleLimit: 'Максимальное количество элементов, выбираемых пользователем при множественном выборе, 0 — без ограничений', + placeholder: 'Заполнитель', + filterable: 'Можно ли искать', + allowCreate: 'Разрешено ли пользователю создавать новые записи', + noMatchText: 'Текст, отображаемый, когда нет совпадений с условиями поиска', + noDataText: 'Текст, отображаемый, когда опция пуста', + reserveKeyword: 'При множественном выборе и поиске сохранять текущие ключевые слова поиска после выбора опции', + defaultFirstOption: 'Нажмите Enter в поле ввода, чтобы выбрать первый подходящий элемент', + remote: 'Загружаются ли опции удаленно с сервера', + remoteMethod: 'Пользовательские методы удаленного поиска' + } + }, + slider: { + name: 'Слайдер', + props: { + min: 'Минимальное значение', + max: 'Максимальное значение', + disabled: 'Отключено', + step: 'Шаг', + showInput: 'Показывать поле ввода, действует только при выборе без диапазона', + showInputControls: 'Показывать кнопки управления полем ввода, если поле ввода отображается', + showStops: 'Показывать точки останова', + range: 'Выбор диапазона', + vertical: 'Вертикальный режим', + height: 'Высота слайдера, обязательна в вертикальном режиме' + } + }, + space: { + name: 'Space', + props: { + height: 'Высота' + } + }, + subForm: { + name: 'Группа', + props: { + disabled: 'Отключено', + syncDisabled: 'Принудительно синхронизировать состояние отключения с подформой' + } + }, + switch: { + name: 'Переключатель', + props: { + disabled: 'Отключено', + width: 'Ширина (пиксели)', + activeText: 'Описание текста при включении', + inactiveText: 'Описание текста при выключении', + activeValue: 'Значение при включении', + inactiveValue: 'Значение при выключении', + activeColor: 'Цвет фона при включении', + inactiveColor: 'Цвет фона при выключении' + } + }, + tableForm: { + name: 'TableForm', + props: { + disabled: 'Отключено', + max: 'Максимальное количество добавляемых строк, 0 — без ограничений' + } + }, + tableFormColumn: { + name: 'TableFormColumn', + label: 'TableFormColumn', + props: { + label: 'Заголовок', + width: 'Ширина', + color: 'Цвет' + } + }, + text: { + name: 'Текст', + props: { + formCreateNative: 'Показывать заголовок', + formCreateTitle: 'Заголовок', + formCreateChild: 'Содержимое' + } + }, + textarea: { + name: 'Текстовое поле', + event: { + change: 'Срабатывает при изменении значения, когда компонент теряет фокус или пользователь нажимает Enter' + }, + props: { + disabled: 'Отключено', + readonly: 'Только для чтения', + maxlength: 'Максимальная длина ввода', + minlength: 'Минимальная длина ввода', + showWordLimit: 'Показывать статистику количества слов', + placeholder: 'Заполнитель', + rows: 'Количество строк поля ввода', + autosize: 'Адаптивная высота' + } + }, + timePicker: { + name: 'Время', + props: { + pickerOptions: 'Опции, специфичные для текущего выбора времени и даты', + readonly: 'Только для чтения', + disabled: 'Отключено', + editable: 'Можно ли вводить в текстовое поле', + clearable: 'Показывать кнопку очистки', + placeholder: 'Заполнитель для выбора без диапазона', + startPlaceholder: 'Заполнитель для начального времени при выборе диапазона', + endPlaceholder: 'Заполнитель для конечного времени при выборе диапазона', + isRange: 'Выбор диапазона времени', + arrowControl: 'Использовать стрелки для выбора времени', + align: 'Выравнивание' + } + }, + tree: { + name: 'Tree', + event: { + nodeClick: 'Срабатывает при клике на узел', + nodeContextmenu: 'Срабатывает при правом клике на узел', + checkChange: 'Срабатывает при клике на флажок', + check: 'Срабатывает после клика на флажок узла', + currentChange: 'Срабатывает при изменении текущего выбранного узла', + nodeExpand: 'Срабатывает при развертывании узла', + nodeCollapse: 'Срабатывает при сворачивании узла', + nodeDragStart: 'Срабатывает при начале перетаскивания узла', + nodeDragEnter: 'Срабатывает при перетаскивании в другие узлы', + nodeDragLeave: 'Срабатывает при покидании узла при перетаскивании', + nodeDragOver: 'Срабатывает при перетаскивании узла', + nodeDragEnd: 'Срабатывает при завершении перетаскивания', + nodeDrop: 'Срабатывает при успешном завершении перетаскивания и сброса' + }, + props: { + emptyText: 'Текст, отображаемый при пустом содержимом', + props: 'Опции', + renderAfterExpand: 'Рендерить дочерние узлы после первого развертывания узла дерева', + defaultExpandAll: 'Развернуть все узлы по умолчанию', + expandOnClickNode: 'Развернуть или свернуть узел при клике на него, если false, узел развернется или свернется только при клике на иконку стрелки', + checkOnClickNode: 'Выбирать узел при клике на него', + autoExpandParent: 'Автоматически развернуть родительский узел при развертывании дочернего', + checkStrictly: 'При отображении флажка строго ли не связаны родительские и дочерние узлы', + accordion: 'Развертывать только один узел дерева на одном уровне за раз', + indent: 'Горизонтальный отступ (пиксели) между узлами соседних уровней', + nodeKey: 'Атрибут для уникальной идентификации каждого узла дерева, должен быть уникальным для всего дерева' + } + }, + upload: { + name: 'Upload', + info: 'Присвойте URL, возвращенный интерфейсом, полю file.url в методе onSuccess', + event: { + remove: 'Срабатывает при удалении файла из списка файлов' + }, + props: { + listType: 'Тип загрузки', + multiple: 'Поддерживается ли множественный выбор файлов', + action: 'Адрес загрузки (обязательно)', + beforeUpload: 'Хук перед загрузкой файла', + onSuccess: 'Обратный вызов успешной загрузки', + headers: 'Установить заголовки запроса загрузки', + data: 'Дополнительные параметры, прикрепляемые при загрузке', + name: 'Имя поля загружаемого файла', + withCredentials: 'Поддержка отправки информации об учетных данных cookie', + accept: 'Принимаемые типы загружаемых файлов', + autoUpload: 'Загружать файл сразу после выбора', + disabled: 'Отключено', + limit: 'Максимальное количество разрешенных загрузок' + } + } + } +} \ No newline at end of file