Merge branch 'next' into develop

This commit is contained in:
xilesun
2025-11-20 10:57:58 +08:00
149 changed files with 2080 additions and 68 deletions
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-acl",
"displayName": "Access control",
"displayName.ru-RU": "Контроль доступа",
"displayName.zh-CN": "权限控制",
"description": "Based on roles, resources, and actions, access control can precisely manage interface configuration permissions, data operation permissions, menu access permissions, and plugin permissions.",
"description.ru-RU": "На основе ролей, ресурсов и действий система контроля доступа может точно управлять разрешениями на изменение интерфейса, работу с данными, доступ к меню и разрешениями для подключаемых модулей.",
"description.zh-CN": "基于角色、资源和操作的权限控制,可以精确控制界面配置权限、数据操作权限、菜单访问权限、插件权限。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/acl",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/acl",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/acl",
"keywords": [
"Users & permissions"
@@ -0,0 +1,18 @@
{
"The current user has no roles. Please try another account.": "У текущего пользователя нет ролей. Попробуйте другой аккаунт.",
"The user role does not exist. Please try signing in again": "Роль пользователя не существует. Попробуйте войти снова.",
"New role": "Новая роль",
"Permissions": "Права доступа",
"Desktop menu": "Меню рабочего стола",
"Independent roles": "Независимые роли",
"Allow roles union": "Разрешить объединение ролей",
"Roles union only": "Только объединение ролей",
"Role mode": "Режим ролей",
"Saved successfully": "Успешно сохранено",
"Please select role mode": "Пожалуйста, выберите режим ролей",
"Full permissions": "Полные права",
"Role mode doc": "https://docs.nocobase.com/handbook/acl/manual",
"Do not use role union. Users need to switch between their roles individually.": "Не использовать объединение ролей. Пользователям нужно переключаться между ролями по отдельности.",
"Allow users to use role union, which means they can use permissions from all their roles simultaneously, or switch between individual roles.": "Разрешить пользователям использовать объединение ролей, то есть они могут одновременно использовать права всех своих ролей или переключаться между отдельными ролями.",
"Force users to use only role union. They cannot switch between individual roles.": "Принудительно использовать только объединение ролей. Переключение между отдельными ролями недоступно."
}
@@ -322,4 +322,166 @@ describe('association operate', async () => {
expect(res.status).toBe(200);
});
it('should not allow to change associations when outside scope', async () => {
await db.getCollection('collections').repository.create({
values: {
name: 'comments',
fields: [
{
name: 'content',
type: 'string',
},
],
},
context: {},
});
await db.getCollection('collections').repository.create({
values: {
name: 'posts',
fields: [
{
name: 'title',
type: 'string',
},
{
name: 'comments',
type: 'hasMany',
target: 'comments',
interface: 'linkTo',
},
],
},
context: {},
});
await db.getRepository('posts').create({
values: {
title: 'test-post',
},
});
await db.getRepository('roles').create({
values: {
name: 'test-role',
},
});
const scope = await adminAgent.resource('dataSourcesRolesResourcesScopes').create({
values: {
name: 'posts',
resourceName: 'posts',
scope: { $and: [{ id: { $eq: 2 } }] },
},
});
await adminAgent.resource('roles.resources', 'test-role').create({
values: {
usingActionsConfig: true,
name: 'posts',
actions: [
{
name: 'update',
fields: ['comments'],
scopeId: scope.body.data.id,
},
],
},
});
const user = await db.getRepository('users').create({
values: {
roles: ['test-role'],
},
});
const agent = await app.agent().login(user);
const res = await agent.resource('posts.comments', 1).add({
values: [],
});
expect(res.status).toBe(403);
});
it('should allow to change associations when under scope', async () => {
await db.getCollection('collections').repository.create({
values: {
name: 'comments',
fields: [
{
name: 'content',
type: 'string',
},
],
},
context: {},
});
await db.getCollection('collections').repository.create({
values: {
name: 'posts',
fields: [
{
name: 'title',
type: 'string',
},
{
name: 'comments',
type: 'hasMany',
target: 'comments',
interface: 'linkTo',
},
],
},
context: {},
});
const post = await db.getRepository('posts').create({
values: {
title: 'test-post',
},
});
await db.getRepository('roles').create({
values: {
name: 'test-role',
},
});
const scope = await adminAgent.resource('dataSourcesRolesResourcesScopes').create({
values: {
name: 'posts',
resourceName: 'posts',
scope: { $and: [{ id: { $eq: post.id } }] },
},
});
await adminAgent.resource('roles.resources', 'test-role').create({
values: {
usingActionsConfig: true,
name: 'posts',
actions: [
{
name: 'update',
fields: ['comments'],
scopeId: scope.body.data.id,
},
],
},
});
const user = await db.getRepository('users').create({
values: {
roles: ['test-role'],
},
});
const agent = await app.agent().login(user);
const res = await agent.resource('posts.comments', 1).add({
values: [],
});
expect(res.status).toBe(200);
});
});
@@ -7,11 +7,11 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { ACL } from '@nocobase/acl';
import { ACL, NoPermissionError } from '@nocobase/acl';
import { Context, Next } from '@nocobase/actions';
export async function checkAssociationOperate(ctx: Context, next: Next) {
const { actionName, resourceName } = ctx.action;
const { actionName, resourceName, sourceId } = ctx.action;
if (!(resourceName.includes('.') && ['add', 'set', 'remove', 'toggle'].includes(actionName))) {
return next();
}
@@ -36,6 +36,25 @@ export async function checkAssociationOperate(ctx: Context, next: Next) {
if (params.whitelist && !params.whitelist?.includes(association)) {
ctx.throw(403, 'No permissions');
}
if (params.filter) {
try {
const filteredParams = ctx.acl.filterParams(ctx, resource, params);
const parsedParams = await ctx.acl.parseJsonTemplate(filteredParams, ctx);
const repo = ctx.db.getRepository(resource);
const record = await repo.findOne({
filterByTk: sourceId,
filter: parsedParams.filter,
});
if (!record) {
ctx.throw(403, 'No permissions');
}
} catch (e) {
if (e instanceof NoPermissionError) {
ctx.throw(403, 'No permissions');
}
throw e;
}
}
ctx.permission = {
...ctx.permission,
skip: true,
@@ -3,10 +3,13 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-bulk-edit",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-bulk-edit",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-bulk-edit",
"displayName": "Action: Batch edit",
"displayName.ru-RU": "Действие: Массовое редактирование",
"displayName.zh-CN": "操作:批量编辑",
"description": "Batch edit all records or selected records.",
"description.ru-RU": "Массовое редактирование всех или только выбранных записей.",
"description.zh-CN": "对全部数据或选中的数据进行批量编辑。",
"license": "AGPL-3.0",
"peerDependencies": {
@@ -0,0 +1,5 @@
{
"Bulk edit": "Массовое редактирование",
"Data will be updated": "Данные будут обновлены",
"Entire collection": "Вся коллекция"
}
@@ -3,10 +3,13 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-bulk-update",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-bulk-update",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-bulk-update",
"displayName": "Action: Batch update",
"displayName.ru-RU": "Действие: Массовое обновление",
"displayName.zh-CN": "操作:批量更新",
"description": "Batch update all records or selected records.",
"description.ru-RU": "Массовое обновление всех или только выбранных записей.",
"description.zh-CN": "对全部数据或选中的数据进行批量更新。",
"license": "AGPL-3.0",
"peerDependencies": {
@@ -0,0 +1,6 @@
{
"After successful bulk update": "После успешного массового обновления",
"Bulk update": "Массовое обновление",
"Entire collection": "Вся коллекция",
"Please select the records to be updated": "Пожалуйста, выберите записи для обновления"
}
@@ -3,10 +3,13 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-custom-request",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-custom-request",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-custom-request",
"displayName": "Action: Custom request",
"displayName.ru-RU": "Действие: Пользовательский запрос",
"displayName.zh-CN": "操作:自定义请求",
"description": "Sending a request to any HTTP service supports sending context data to the target service.",
"description.ru-RU": "Отправка запроса к любому HTTP-сервису, поддерживается отправка контекстных данных в целевой сервис.",
"description.zh-CN": "向任意 HTTP 服务发送请求,支持将上下文数据发送给目标服务。",
"license": "AGPL-3.0",
"devDependencies": {
@@ -0,0 +1,26 @@
{
"Access control": "Контроль доступа",
"Add parameter": "Добавить параметр",
"Add request header": "Добавить заголовок запроса",
"Body": "Тело",
"Custom Request": "Пользовательский запрос",
"Enter description info": "Введите описание",
"Format": "Формат",
"Headers": "Заголовки",
"HTTP method": "Метод HTTP",
"If not set, all roles can see this action": "Если не указано, все роли смогут видеть это действие",
"Input request data": "Ввести данные запроса",
"Insert": "Вставить",
"ms": "мс",
"Only support standard JSON data": "Поддерживаются только стандартные данные JSON",
"Parameters": "Параметры",
"Please configure the request settings first": "Пожалуйста, сначала настройте параметры запроса",
"Request settings": "Настройки запроса",
"Roles": "Роли",
"Timeout config": "Настройка тайм-аута",
"Title": "Заголовок",
"URL": "URL",
"Use variable": "Использовать переменную",
"When the HTTP method is Post, Put or Patch, and this custom request inside the form, the request body will be automatically filled in with the form data": "Когда метод HTTP — Post, Put или Patch, и этот пользовательский запрос находится внутри формы, тело запроса автоматически заполняется данными формы",
"\"Content-Type\" only support \"application/json\", and no need to specify": "\"Content-Type\" поддерживает только \"application/json\", указывать не требуется"
}
@@ -3,11 +3,14 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-duplicate",
"homepage.ru-RU": "https://docs.nocobase.ru/handbook/action-duplicate",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-duplicate",
"displayName": "Action: Duplicate record",
"displayName.ru-RU": "Действие: Дублирование записи",
"displayName.zh-CN": "操作:复制记录",
"description": "Duplicate a record, you can either duplicate it into a form and edit it before saving it, or you can duplicate it directly to generate a new record.",
"description.zh-CN": "复制一条记录,可以复制到表单中编辑后再提交,也可以直接复制并生成一条新记录。",
"description.ru-RU": "Дублирование записи: можно скопировать запись в форму для редактирования перед сохранением или сразу создать новую запись-дубликат.",
"license": "AGPL-3.0",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -2,13 +2,16 @@
"name": "@nocobase/plugin-action-export",
"displayName": "Action: Export records",
"displayName.zh-CN": "操作:导出记录",
"displayName.ru-RU": "Действие: Экспорт записей",
"description": "Export filtered records to excel, you can configure which fields to export.",
"description.ru-RU": "Экспорт в Excel: можно настроить, какие поля будут экспортироваться.",
"description.zh-CN": "导出筛选后的记录到 Excel 中,可以配置导出哪些字段。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-export",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-export",
"homepage.ru-RU": "https://docs.nocobase.ru/handbook/action-export",
"devDependencies": {
"@formily/antd-v5": "1.x",
"@formily/react": "2.x",
@@ -0,0 +1,7 @@
{
"Export warning": "Вы можете экспортировать до {{limit}} строк данных за раз, излишки будут проигнорированы.",
"Start export": "Начать экспорт",
"True": "True",
"False": "False",
"Another export action is running, please try again later.": "Действие экспорта уже выполняется, попробуйте позже."
}
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-action-import",
"displayName": "Action: Import records",
"displayName.zh-CN": "操作:导入记录",
"displayName.ru-RU": "Действие: Импорт записей",
"description": "Import records using excel templates. You can configure which fields to import and templates will be generated automatically.",
"description.ru-RU": "Импорт записей с помощью шаблонов Excel: можно настроить, какие поля импортировать, шаблоны будут генерироваться автоматически.",
"description.zh-CN": "使用 Excel 模板导入数据,可以配置导入哪些字段,自动生成模板。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-import",
"homepage.ru-RU": "https://docs.nocobase.ru/handbook/action-import",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-import",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -0,0 +1,51 @@
{
"Add importable field": "Добавить импортируемое поле",
"another import action is running, please try again later.": "Действие импорта уже выполняется, попробуйте позже.",
"can not find value": "Значение не найдено",
"Columns configuration is empty": "Конфигурация столбцов пуста",
"Custom column title": "Пользовательский заголовок столбца",
"Done": "Готово",
"Download template": "Скачать шаблон",
"Download tips": "- Скачайте шаблон и заполните данные в соответствии с форматом \r\n - Импортируется только первый лист \r\n - Не изменяйте заголовки шаблона, чтобы избежать ошибок импорта",
"Excel data importing": "Импорт данных Excel",
"Failed to import row {{row}}, {{message}}, row data: {{data}}": "Не удалось импортировать строку {{row}}, {{message}}, данные строки: {{data}}",
"Field description": "Описание поля",
"Field description placeholder": "Введите описание поля",
"Field not found: {{field}}": "Поле не найдено: {{field}}",
"Field {{fieldName}} does not exist": "Поле {{fieldName}} не существует",
"File size cannot exceed 10M": "Размер файла не должен превышать 10 МБ",
"Header mismatch at column {{column}}: expected \"{{expected}}\", but got \"{{actual}}\"": "Несоответствие заголовка в столбце {{column}}: ожидалось \"{{expected}}\", получено \"{{actual}}\"",
"Headers not found. Expected headers: {{headers}}": "Заголовки не найдены. Ожидаемые заголовки: {{headers}}",
"Illegal percentage format": "Недопустимый формат процента",
"Import": "Импорт",
"Import Data": "Импортировать данные",
"Import completed": "Импорт завершен",
"Import explain": "Руководство",
"Import warnings": "Вы можете импортировать до {{limit}} строк данных за раз, излишки будут проигнорированы.",
"ImportResult": "Результат импорта",
"Imported template does not match, please download again.": "Импортированный шаблон не соответствует, пожалуйста, скачайте снова.",
"import-error": "Не удалось импортировать строку {{rowIndex}}, данные строки: {{rowData}}, причина: {{causeMessage}}",
"Incorrect date format": "Неверный формат даты",
"Incorrect email format": "Неверный формат email",
"Incorrect time format": "Неверный формат времени",
"No": "Нет",
"No data to import": "Нет данных для импорта",
"Only one file is allowed to be uploaded": "Разрешена загрузка только одного файла",
"password is empty": "Пароль пуст",
"Please select": "Пожалуйста, выберите",
"Please upload the file of Excel": "Пожалуйста, загрузите файл Excel",
"Skipped records": "Пропущенные записи",
"Start import": "Начать импорт",
"Step 1: Download template": "Шаг 1: Скачать шаблон",
"Step 2: Upload Excel": "Шаг 2: Загрузить Excel",
"Step 3: Import options": "Шаг 3: Параметры импорта",
"Successfully imported": "Успешно импортировано",
"Task result": "Результат задачи",
"To download the failure data": "Скачать данные об ошибках",
"Total records": "Всего записей",
"Updated records": "Обновленные записи",
"Upload placeholder": "Перетащите файл сюда или нажмите для загрузки.",
"View result": "Просмотреть результат",
"Yes": "Да",
"{{successCount}} records have been successfully imported": "{{successCount}} записей успешно импортировано"
}
@@ -3,10 +3,13 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-print",
"homepage.ru-RU": "https://docs.nocobase.ru/handbook/action-print",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-print",
"displayName": "Action: Print",
"displayName.ru-RU": "Действие: Печать",
"displayName.zh-CN": "操作:打印",
"description": "Calls the browser's print function to print a record.",
"description.ru-RU": "Вызов функции для печати выбранной записи или для быстрого экспорта в формат .pdf.",
"description.zh-CN": "调用浏览器的打印功能实现单条数据的打印。",
"license": "AGPL-3.0",
"peerDependencies": {
@@ -1,11 +1,16 @@
{
"name": "@nocobase/plugin-ai",
"displayName": "AI employees",
"displayName.ru-RU": "AI: Интеграция",
"displayName.zh-CN": "AI 员工",
"description": "Create AI employees with diverse skills to collaborate with humans, build systems, and handle business operations.",
"description.ru-RU": "Поддержка интеграции с AI-сервисами: предоставляются AI-узлы для рабочих процессов, расширяя возможности бизнес-обработки.",
"description.zh-CN": "创建各种技能的 AI 员工,与人类协同,搭建系统,处理业务。",
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/action-ai",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-ai",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/action-ai",
"peerDependencies": {
"@nocobase/client": "2.x",
"@nocobase/flow-engine": "2.x",
@@ -0,0 +1,25 @@
{
"Add content": "Добавить контент",
"Add prompt": "Добавить запрос",
"AI integration": "Интеграция с ИИ",
"Frequency penalty description": "Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от их частоты в тексте, уменьшая вероятность повторения модели.",
"Get models list failed, you can enter a model name manually.": "Не удалось получить список моделей, вы можете ввести имя модели вручную.",
"Image": "Изображение",
"LLM service": "Сервис LLM",
"LLM services": "Сервисы LLM",
"Max completion tokens description": "Верхняя граница количества токенов, которые могут быть сгенерированы для завершения, включая видимые выходные токены и токены рассуждений.",
"Max retries": "Максимум попыток",
"Message": "Сообщение",
"Messages": "Сообщения",
"Model": "Модель",
"Presence penalty description": "Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от их присутствия в тексте, увеличивая вероятность обсуждения новых тем.",
"Provider": "Провайдер",
"Response format description": "Важно: при использовании режима JSON необходимо также указать модели генерировать JSON через системное или пользовательское сообщение.",
"Role": "Роль",
"Structured output": "Структурированный вывод",
"Temperature description": "Температура выборки от 0 до 2. Высокие значения (например, 0.8) делают вывод более случайным, низкие (например, 0.2) — более сфокусированным и детерминированным.",
"Text": "Текст",
"Timout (ms)": "Тайм-аут (мс)",
"Top P description": "Альтернатива выборке с температурой — ядерная выборка, где модель учитывает токены с массой вероятности top_p. Например, 0.1 означает учет только 10% наиболее вероятных токенов.",
"UID": "UID"
}
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-api-doc",
"version": "2.0.0-alpha.42",
"displayName": "API documentation",
"displayName.ru-RU": "Документация API",
"displayName.zh-CN": "API 文档",
"description": "An OpenAPI documentation generator for NocoBase HTTP API.",
"description.ru-RU": "Генератор документации OpenAPI для HTTP API системы NocoBase.",
"description.zh-CN": "NocoBase HTTP API 的 OpenAPI 文档生成器。",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/api-doc",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/api-doc",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/api-doc",
"types": "./dist/server/index.d.ts",
"devDependencies": {
@@ -0,0 +1,5 @@
{
"API documentation": "Документация API",
"Documentation": "Документация",
"Select a definition": "Выбрать определение"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-api-keys",
"displayName": "Auth: API keys",
"displayName.ru-RU": "Аутентификация: API ключи",
"displayName.zh-CN": "认证:API 密钥",
"description": "Allows users to use API key to access application's HTTP API",
"description.ru-RU": "Позволяет пользователям использовать API ключ для доступа к HTTP API приложения",
"description.zh-CN": "允许用户使用 API 密钥访问应用的 HTTP API",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/api-keys",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/api-keys",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/api-keys",
"keywords": [
"Authentication"
@@ -0,0 +1,21 @@
{
"1 Day": "1 день",
"30 Days": "30 дней",
"7 Days": "7 дней",
"90 Days": "90 дней",
"Add API key": "Добавить ключ API",
" Allow only your own roles to be selected": "Разрешить выбор только собственных ролей",
"API key created successfully": "Ключ API успешно создан",
"API keys": "Ключи API",
"Created at": "Создано",
"Custom": "Пользовательский",
"Delete API key": "Удалить ключ API",
"Expiration": "Срок действия",
"Key name": "Название ключа",
"Keys manager": "Менеджер ключей",
"Make sure to copy your personal access key now as you will not be able to see this again.": "Убедитесь, что вы скопировали свой личный ключ доступа сейчас, так как вы не сможете увидеть его снова.",
"Never": "Никогда",
"Never expires": "Без срока действия",
"Role": "Роль",
"Role not found": "Роль не найдена"
}
@@ -1,8 +1,10 @@
{
"name": "@nocobase/plugin-async-task-manager",
"displayName": "Async task manager",
"displayName.ru-RU": "Менеджер асинхронных задач",
"displayName.zh-CN": "异步任务管理器",
"description": "Manage and monitor asynchronous tasks such as data import/export. Support task progress tracking and notification.",
"description.ru-RU": "Управление асинхронными задачами и мониторинг (например, импорт/экспорт данных). Поддержка отслеживания прогресса и уведомлений о задачах.",
"description.zh-CN": "管理和监控数据导入导出等异步任务。支持任务进度跟踪和通知。",
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
@@ -0,0 +1,45 @@
{
"Actions": "Действия",
"Cancel": "Отменить",
"Cancelled": "Отменено",
"Cancelling": "Отмена",
"Close": "Закрыть",
"Completed": "Завершено",
"Confirm": "Подтвердить",
"Confirm cancel": "Подтвердить отмену",
"Confirm cancel description": "Описание подтверждения отмены",
"Created at": "Создано",
"Data": "Данные",
"Download": "Скачать",
"Error Details": "Детали ошибки",
"Error code": "Код ошибки",
"Error details": "Детали ошибки",
"Export": "Экспорт",
"Export {collection} attachments": "Экспорт вложений {collection}",
"Export {collection} data": "Экспорт данных {collection}",
"Failed": "Не удалось",
"Import": "Импорт",
"Import completed": "Импорт завершен",
"Import details": "Детали импорта",
"Import result": "Результат импорта",
"Import summary": "Сводка импорта",
"Import {collection} data": "Импорт данных {collection}",
"ImportResult": "Результат импорта",
"Imported": "Импортировано",
"OK": "ОК",
"Processing": "Обработка",
"Skipped records": "Пропущенные записи",
"Status": "Статус",
"Successfully imported": "Успешно импортировано",
"Task": "Задача",
"Task cancelled": "Задача отменена",
"Task completed": "Задача завершена",
"Task failed": "Задача не выполнена",
"Task result": "Результат задачи",
"Total records": "Всего записей",
"Type": "Тип",
"Unknown error": "Неизвестная ошибка",
"Updated records": "Обновленные записи",
"View result": "Просмотреть результат",
"Waiting": "Ожидание"
}
@@ -3,11 +3,14 @@
"version": "2.0.0-alpha.42",
"private": true,
"displayName": "Audit logs (deprecated)",
"displayName.ru-RU": "Журнал аудита (устарел)",
"displayName.zh-CN": "审计日志(废弃)",
"description": "This plugin is deprecated. There will be a new audit log plugin in the future.",
"description.ru-RU": "Этот плагин устарел. В будущем будет выпущен новый плагин для журнала аудита.",
"description.zh-CN": "该插件已废弃,请勿使用,未来将有新的审计日志插件。",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/audit-logs",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/audit-logs",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/audit-logs",
"license": "AGPL-3.0",
"devDependencies": {
@@ -0,0 +1,3 @@
{
"Details of changes": "Детали изменений"
}
@@ -1,12 +1,15 @@
{
"name": "@nocobase/plugin-auth-sms",
"displayName": "Auth: SMS",
"displayName.ru-RU": "Аутентификация: SMS",
"displayName.zh-CN": "认证:短信",
"description": "SMS authentication.",
"description.ru-RU": "Аутентификация по SMS.",
"description.zh-CN": "通过短信验证码认证身份。",
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/auth-sms",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/auth-sms",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/auth-sms",
"license": "AGPL-3.0",
"devDependencies": {
@@ -0,0 +1,7 @@
{
"Sign in via SMS": "Вход через SMS",
"Sign up automatically when the user does not exist": "Автоматическая регистрация, если пользователь не существует",
"SMS": "SMS",
"User will be registered automatically if not exists.": "Пользователь будет автоматически зарегистрирован, если не существует.",
"Verifier": "Верификатор"
}
@@ -3,6 +3,7 @@
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/auth",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/auth",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/auth",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -24,8 +25,10 @@
"@nocobase/test": "2.x"
},
"displayName": "Authentication",
"displayName.ru-RU": "Аутентификация пользователей",
"displayName.zh-CN": "用户认证",
"description": "User authentication management, including password, SMS, and support for Single Sign-On (SSO) protocols, with extensibility.",
"description.ru-RU": "Управление аутентификацией пользователей: пароли, SMS, поддержка протоколов единого входа (SSO) и возможность расширения.",
"description.zh-CN": "用户认证管理,包括基础的密码认证、短信认证、SSO 协议的认证等,可扩展。",
"gitHead": "d0b4efe4be55f8c79a98a331d99d9f8cf99021a1",
"keywords": [
@@ -0,0 +1,81 @@
{
"1. Select notification channel": "1. Выберите канал уведомлений",
"2. Configure reset email": "2. Настройте email для сброса",
"add one first": "сначала добавьте",
"Allow to sign in with": "Разрешить вход с помощью",
"Allow to sign up": "Разрешить регистрацию",
"At least one of the username or email fields is required": "Требуется хотя бы одно из полей: имя пользователя или email",
"Auth Type": "Тип аутентификации",
"Auth UID": "UID аутентификации",
"Authentication": "Аутентификация",
"Authenticators": "Аутентификаторы",
"Back to login": "Вернуться к входу",
"Content type": "Тип контента",
"Days": "Дни",
"defaultResetPasswordEmailContentHTML": "<p>Привет {{$user.username}},</p>\n\n<p>Мы получили запрос на сброс пароля для вашей учетной записи {{$systemSettings.title}}.</p>\n\n<p>Пожалуйста, нажмите на ссылку ниже, чтобы установить новый пароль:</p>\n\n<p>\n <a href=\"{{$resetLink}}\">Сбросить пароль</a>\n</p>\n\n<p>\n Если вы не запрашивали сброс пароля, пожалуйста, проигнорируйте это письмо. Ваш пароль останется неизменным.\n</p>\n\n<p>\n Обратите внимание: Для вашей безопасности эта ссылка для сброса пароля истечет через <strong>{{$resetLinkExpiration}} минут</strong>.\n</p>\n\n<p>Если у вас возникли проблемы со сбросом пароля, пожалуйста, обратитесь в нашу службу поддержки.</p>\n\n<p>\n Спасибо,<br>\n Команда {{$systemSettings.title}}\n</p>",
"defaultResetPasswordEmailContentText": "Привет {{$user.username}},\n\nМы получили запрос на сброс пароля для вашей учетной записи {{$systemSettings.title}}.\n\nПожалуйста, нажмите на ссылку ниже, чтобы установить новый пароль:\n\n{{$resetLink}}\n\nЕсли вы не запрашивали сброс пароля, пожалуйста, проигнорируйте это письмо. Ваш пароль останется неизменным.\n\nОбратите внимание: Для вашей безопасности эта ссылка для сброса пароля истечет через {{$resetLinkExpiration}} минут.\n\nЕсли у вас возникли проблемы со сбросом пароля, пожалуйста, обратитесь в нашу службу поддержки.\n\nСпасибо, Команда {{$systemSettings.title}}",
"defaultResetPasswordEmailSubject": "Сброс пароля для {{$systemSettings.title}}",
"Email channel not found": "Email канал не найден",
"Enable forget password": "Включить забытый пароль",
"Expired token refresh limit": "Лимит обновления истекшего токена",
"Forgot password": "Забыли пароль",
"Go to login": "Перейти к входу",
"Hours": "Часы",
"In configuration mode, the entire column becomes transparent. In non-configuration mode, the entire column will be hidden. Even if the entire column is hidden, its configured default values and other settings will still take effect.": "В режиме конфигурации весь столбец становится прозрачным. В неконфигурационном режиме столбец будет скрыт. Даже если столбец скрыт, заданные значения по умолчанию и другие настройки останутся в силе.",
"Minutes": "Минуты",
"Missing X-Authenticator in request header": "Отсутствует X-Authenticator в заголовке запроса",
"No authentication methods available.": "Методы аутентификации недоступны.",
"No notification channels found. Please ": "Каналы уведомлений не найдены. Пожалуйста, ",
"Not a valid cellphone number, please re-enter": "Недопустимый номер телефона, пожалуйста, введите снова",
"Not allowed to reset password": "Сброс пароля не разрешен",
"Not allowed to sign up": "Регистрация не разрешена",
"Password": "Пароль",
"Password is not allowed to be changed": "Изменение пароля не разрешено",
"Plain text": "Обычный текст",
"Please enter a password": "Пожалуйста, введите пароль",
"Please enter a valid email": "Пожалуйста, введите действительный email",
"Please enter a valid username": "Пожалуйста, введите действительное имя пользователя",
"Please enter new password": "Пожалуйста, введите новый пароль",
"Please enter the same password again": "Пожалуйста, введите тот же пароль снова",
"Please enter your email": "Пожалуйста, введите ваш email",
"Please enter your username or email": "Пожалуйста, введите имя пользователя или email",
"Please keep and enable at least one authenticator": "Пожалуйста, сохраните и включите хотя бы один аутентификатор",
"Reset email sent successfully": "Email для сброса успешно отправлен",
"Reset link expiration (minutes)": "Срок действия ссылки сброса (минуты)",
"Reset link has expired": "Ссылка сброса истекла",
"Reset password": "Сбросить пароль",
"Reset password email": "Email для сброса пароля",
"Reset password link": "Ссылка сброса пароля",
"Saved successfully!": "Успешно сохранено!",
"Seconds": "Секунды",
"Send reset email": "Отправить email для сброса",
"Session validity period": "Срок действия сессии",
"Show": "Показать",
"Sign in via email": "Войти через email",
"Sign in via password": "Войти через пароль",
"Sign up form": "Форма регистрации",
"Sign up settings": "Настройки регистрации",
"Sign-in": "Вход",
"Subject": "Тема",
"The authentication allows users to sign in via username or email.": "Аутентификация позволяет пользователям входить через имя пользователя или email.",
"The maximum time limit allowed for refreshing a Token after it expires. After this time limit, the token cannot be automatically renewed, and the user needs to log in again.": "Максимальный срок, разрешенный для обновления токена после истечения. После этого срока токен не может быть автоматически обновлен, и пользователю нужно войти снова.",
"The maximum valid time for each user login. During the session validity, the Token will be automatically updated. After the timeout, the user is required to log in again.": "Максимальное время действия каждого входа пользователя. В течение срока действия сессии токен будет автоматически обновляться. После истечения времени пользователю потребуется войти снова.",
"The notification channel used to send the reset password email, only support email channel": "Канал уведомлений, используемый для отправки email сброса пароля, поддерживает только email канал",
"The password is inconsistent, please re-enter": "Пароли не совпадают, пожалуйста, введите снова",
"The password is incorrect, please re-enter": "Пароль неверный, пожалуйста, введите снова",
"The passwords entered twice are inconsistent": "Введенные пароли не совпадают",
"The phone number has been registered, please login directly": "Номер телефона зарегистрирован, пожалуйста, войдите напрямую",
"The phone number is not registered, please register first": "Номер телефона не зарегистрирован, пожалуйста, зарегистрируйтесь сначала",
"The username or email is incorrect, please re-enter": "Имя пользователя или email неверны, пожалуйста, введите снова",
"The username/email or password is incorrect, please re-enter": "Имя пользователя/email или пароль неверны, пожалуйста, введите снова",
"The validity period of each issued API Token. After the Token expires, if it is within the session validity period and has not exceeded the refresh limit, the server will automatically issue a new Token to maintain the user session, otherwise the user is required to log in again. (Each Token can only be refreshed once)": "Срок действия каждого выданного API-токена. После истечения срока токена, если он находится в пределах срока действия сессии и не превысил лимит обновления, сервер автоматически выдаст новый токен для поддержания сессии, иначе пользователю потребуется войти снова. (Каждый токен может быть обновлен только один раз)",
"Token expired": "Токен истек",
"Token policy": "Политика токенов",
"Token validity period": "Срок действия токена",
"Token validity period must be less than session validity period!": "Срок действия токена должен быть меньше срока действия сессии!",
"Unauthenticated. Please sign in to continue.": "Пожалуйста, войдите, чтобы продолжить.",
"User not found": "Пользователь не найден",
"User not found. Please sign in again to continue.": "Пользователь не найден. Пожалуйста, войдите снова, чтобы продолжить.",
"Username/Email": "Имя пользователя/Email",
"Your session has expired. Please sign in again.": "Ваша сессия истекла. Пожалуйста, войдите снова."
}
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-backup-restore",
"displayName": "App backup & restore (deprecated)",
"displayName.zh-CN": "应用的备份与还原(废弃)",
"displayName.ru-RU": "Резервное копирование и восстановление приложения (устаревшее)",
"description": "Backup and restore applications for scenarios such as application replication, migration, and upgrades.",
"description.ru-RU": "Резервное копирование и восстановление приложений для задач репликации, миграции и обновления.",
"description.zh-CN": "备份和还原应用,可用于应用的复制、迁移、升级等场景。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/backup-restore",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/backup-restore",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/backup-restore",
"repository": {
"type": "git",
@@ -0,0 +1,50 @@
{
"Backed up successfully": "Резервное копирование выполнено успешно",
"Backing up": "Создание резервной копии",
"Backup": "Резервное копирование",
"Backup & Restore": "Резервное копирование и восстановление",
"Backup file": "Файл резервной копии",
"Backup instructions": "Инструкции по резервному копированию",
"Basic Data": "Базовые данные",
"Business data": "Данные бизнеса",
"Click or drag file to this area to upload": "Нажмите или перетащите файл в эту область для загрузки",
"Configuration": "Конфигурация",
"custom.description": "Данные пользовательских коллекций",
"custom.title": "Данные пользовательских коллекций",
"Delete": "Удалить",
"Deleted successfully": "Успешно удалено",
"Download": "Скачать",
"file upload failed": "Загрузка файла не удалась",
"file uploaded successfully": "Файл успешно загружен",
"File size": "Размер файла",
"Learn more": "Узнать больше",
"log.description": "Данные логов",
"log.title": "Данные логов",
"New backup": "Новая резервная копия",
"Optional Data": "Дополнительные данные",
"Origin": "Источник",
"Plugin": "Плагин",
"Refresh": "Обновить",
"required.description": "Обязательные данные",
"required.title": "Обязательные данные",
"Restore": "Восстановить",
"Restore backup from local": "Восстановить резервную копию с локального устройства",
"Select Import Plugins": "Выбрать плагины для импорта",
"Select Import data": "Выбрать данные для импорта",
"Select the data to be backed up": "Выбрать данные для резервного копирования",
"Select the data to be restored": "Выбрать данные для восстановления",
"Select User Collections": "Выбрать пользовательские коллекции",
"skipped.description": "Пропущенные данные",
"skipped.title": "Пропущенные данные",
"Start backup": "Начать резервное копирование",
"Start restore": "Начать восстановление",
"System config": "Системная конфигурация",
"System metadata": "Системные метаданные",
"third-party.description": "Информация сторонних сервисов",
"third-party.title": "Информация сторонних сервисов",
"unknown.description": "Данные без настроенных правил дампа",
"unknown.title": "Неизвестно",
"User Data": "Данные пользователя",
"user.description": "Данные пользователя",
"user.title": "Данные пользователя"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-block-iframe",
"displayName": "Block: iframe",
"displayName.ru-RU": "Блок: iframe",
"displayName.zh-CN": "区块:iframe",
"description": "Create an iframe block on the page to embed and display external web pages or content.",
"description.ru-RU": "Создавайте iframe-блоки и управляйте ими на странице для встраивания и отображения внешних веб-страниц или контента.",
"description.zh-CN": "在页面上创建和管理iframe,用于嵌入和展示外部网页或内容。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/block-iframe",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/block-iframe",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/block-iframe",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-block-template",
"displayName": "Block: template (deprecated)",
"displayName.ru-RU": "Блок: шаблон",
"displayName.zh-CN": "区块:模板(已废弃)",
"description": "Create and manage block templates for reuse on pages.",
"description.ru-RU": "Создавайте и управляйте шаблонами блоков для повторного использования на страницах.",
"description.zh-CN": "创建和管理区块模板,用于在页面中重复使用。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/block-template",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/block-template",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/block-template",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,42 @@
{
"Add new": "Добавить новый",
"Are you sure you want to convert this template block to a normal block?": "Вы уверены, что хотите преобразовать этот блок шаблона в обычный блок?",
"Are you sure you want to delete it?": "Вы уверены, что хотите удалить это?",
"Are you sure you want to revert all changes from the template?": "Вы уверены, что хотите отменить все изменения из шаблона?",
"Associate record": "Связать запись",
"Block template": "Шаблон блока",
"Block templates": "Шаблоны блоков",
"Cancel": "Отменить",
"Configure": "Настроить",
"Convert to normal block": "Преобразовать в обычный блок",
"Converted successfully": "Успешно преобразовано",
"Current": "Текущая запись",
"Delete": "Удалить",
"Delete record": "Удалить запись",
"Delete successfully": "Успешно удалено",
"Deleted successfully": "Успешно удалено",
"Description": "Описание",
"Desktop": "Рабочий стол",
"Duplicate": "Дублировать",
"Duplicate to new template": "Дублировать в новый шаблон",
"Edit": "Редактировать",
"Filter": "Фильтр",
"Form type": "Тип формы",
"Keep the created blocks?": "Сохранить созданные блоки?",
"Mobile": "Мобильный",
"None": "Нет",
"Please select the records you want to delete": "Пожалуйста, выберите записи, которые хотите удалить",
"Refresh": "Обновить",
"Reset successfully": "Успешно сброшено",
"Revert to template": "Вернуться к шаблону",
"Save as template successfully": "Успешно сохранено как шаблон",
"Saved successfully": "Успешно сохранено",
"Search and select template": "Найти и выбрать шаблон",
"Submit": "Отправить",
"Template block settings": "Настройки блока шаблона",
"Templates": "Шаблоны",
"This block is using some reference templates, please convert to duplicate template first.": "Этот блок использует некоторые ссылочные шаблоны, пожалуйста, сначала преобразуйте в дублированный шаблон.",
"This is part of a template, deletion is not allowed": "Это часть шаблона, удаление не разрешено",
"Title": "Заголовок",
"Type": "Тип"
}
@@ -2,8 +2,10 @@
"name": "@nocobase/plugin-block-workbench",
"version": "2.0.0-alpha.42",
"displayName": "Block: Action panel",
"displayName.ru-RU": "Блок: Панель действий",
"displayName.zh-CN": "区块:操作面板",
"description": "Centrally manages and displays various actions, allowing users to efficiently perform tasks. It supports extensibility, with current action types including pop-ups, links, scanning, and custom requests.",
"description.ru-RU": "Централизованное управление и отображение различных действий для эффективного выполнения задач. Поддерживает расширяемость, текущие типы действий — всплывающие окна, ссылки, сканирование и произвольные запросы.",
"description.zh-CN": "集中管理和展示各种操作,方便用户快速执行任务。支持扩展,目前支持的操作类型有弹窗、链接、扫描、自定义请求。",
"main": "dist/server/index.js",
"peerDependencies": {
@@ -0,0 +1,18 @@
{
"Action panel": "Панель действий",
"Add custom request": "Добавить пользовательский запрос",
"Add popup": "Добавить всплывающее окно",
"Album": "Альбом",
"At least 1, up to 6": "От 1 до 6",
"Grid": "Сетка",
"Items per row": "Элементов в строке",
"Layout": "Макет",
"List": "Список",
"No camera device detected": "Устройство камеры не обнаружено",
"QR code recognition failed, please scan again": "Распознавание QR-кода не удалось, пожалуйста, отсканируйте снова",
"Scan QR code": "Сканировать QR-код",
"The image size is too large. Please compress it to below 1MB before uploading": "Размер изображения слишком большой. Сожмите его до менее 1 МБ перед загрузкой",
"Unknown error": "Неизвестная ошибка",
"Workbench": "Рабочее пространство",
"You have not granted permission to use the camera": "Вы не предоставили разрешение на использование камеры"
}
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-calendar",
"version": "2.0.0-alpha.42",
"displayName": "Calendar",
"displayName.ru-RU": "Календарь",
"displayName.zh-CN": "日历",
"description": "Provides callendar collection template and block for managing date data, typically for date/time related information such as events, appointments, tasks, and so on.",
"description.ru-RU": "Предоставляет шаблон коллекции календаря и блок для управления данными дат — такими как события, встречи, задачи и другие связанные с датой/временем данные.",
"description.zh-CN": "提供日历数据表模板和区块,用于管理日期数据,通常用于事件、约会、任务等与日期/时间相关的信息。",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/calendar",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/calendar",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/calendar",
"types": "./dist/server/index.d.ts",
"devDependencies": {
@@ -52,6 +52,7 @@ import { dateFnsLocalizer } from 'react-big-calendar';
import { format, parse, startOfWeek, getDay } from 'date-fns';
import enUS from 'date-fns/locale/en-US';
import zhCN from 'date-fns/locale/zh-CN';
import ru from 'date-fns/locale/ru';
interface Event {
id: string;
@@ -295,26 +296,47 @@ export const Calendar: any = withDynamicSchemaProps(
const locales = {
'zh-CN': zhCN,
'en-US': enUS,
ru: ru,
};
const locale = apiClient.auth.locale || 'en-US';
const formats = useMemo(() => {
return {
monthHeaderFormat: (date, culture, local) =>
local.format(date, locale === 'zh-CN' ? 'yyyy年M月' : 'MMM yyyy', locales[locale]),
local.format(
date,
locale === 'zh-CN' ? 'yyyy年M月' : locale === 'ru' ? 'LLLL yyyy' : 'MMM yyyy',
locales[locale],
),
dayHeaderFormat: (date, culture, local) => {
return local.format(date, props.locale === 'zh-CN' ? 'eee, M/d' : 'EEE, MMM d', locales[locale]);
return local.format(
date,
props.locale === 'zh-CN' ? 'eee, M/d' : props.locale === 'ru' ? 'EEE, d MMM' : 'EEE, MMM d',
locales[locale],
);
},
agendaDateFormat: (date, culture, local) => {
return local.format(date, props.locale === 'zh-CN' ? 'M月d日' : 'M-dd', locales[locale]);
return local.format(
date,
props.locale === 'zh-CN' ? 'M月d日' : props.locale === 'ru' ? 'd MMM' : 'M-dd',
locales[locale],
);
},
dayRangeHeaderFormat: ({ start, end }, culture, local) => {
if (start.getMonth() === end.getMonth()) {
return local.format(start, locale === 'zh-CN' ? 'yyyy年M月' : 'MMM yyyy', locale);
return local.format(
start,
locale === 'zh-CN' ? 'yyyy年M月' : locale === 'ru' ? 'LLLL yyyy' : 'MMM yyyy',
locale,
);
}
return `${local.format(start, locale === 'zh-CN' ? 'yyyy年M月' : 'MMM yyyy', locale)} - ${local.format(
return `${local.format(
start,
locale === 'zh-CN' ? 'yyyy年M月' : locale === 'ru' ? 'LLLL yyyy' : 'MMM yyyy',
locale,
)} - ${local.format(
end,
locale === 'zh-CN' ? 'yyyy年M月' : 'MMM yyyy',
locale === 'zh-CN' ? 'yyyy年M月' : locale === 'ru' ? 'LLLL yyyy' : 'MMM yyyy',
locale,
)}`;
},
@@ -1,31 +1,55 @@
{
"Configure calendar": "Настроить календарь",
"Title field": "Поле заголовка",
"Start date field": "Поле даты начала",
"End date field": "Поле даты окончания",
"Work week": "Рабочая неделя",
"Today": "Сегодня",
"Day": "День",
"Agenda": "Расписание",
"Date": "Дата",
"Time": "Время",
"Event": "Событие",
"None": "Ничего",
"Calendar": "Календарь",
"Create calendar block": "Создать блок календаря",
"Filter": "Фильтр",
"Configure actions": "Настройка действий",
"Enable actions": "Разрешить действия",
"Turn pages": "Перелистывать страницы",
"Select view": "Выбрать вид",
"Add new": "Добавить новый",
"View record": "Показать запись",
"Details": "Подробности",
"Customize": "Настроить",
"Popup": "Всплывающий",
"Updated successfully": "Успешно обновлено",
"Agenda": "Расписание",
"All events": "Все события",
"Calendar": "Календарь",
"Calendar collection": "Коллекция календаря",
"Color field": "Поле цвета",
"Configure actions": "Настроить действия",
"Configure calendar": "Настроить календарь",
"Create calendar block": "Создать блок календаря",
"Custom request": "Пользовательский запрос",
"Edit": "Изменить",
"Custom title": "Пользовательский заголовок",
"Customize": "Настроить",
"Daily": "Ежедневно",
"Date": "Дата",
"Day": "День",
"Default view": "Вид по умолчанию",
"Delete": "Удалить",
"Print": "Печать"
}
"Delete Event": "Удалить событие",
"Delete events": "Удалить события",
"Delete this event?": "Удалить это событие?",
"Details": "Подробности",
"Edit": "Редактировать",
"Enable actions": "Включить действия",
"End date field": "Поле даты окончания",
"Event": "Событие",
"Event open mode": "Режим открытия события",
"Filter": "Фильтр",
"Month": "Месяц",
"Monthly": "Ежемесячно",
"None": "Ничего",
"Not selected": "Не выбрано",
"Popup": "Всплывающее окно",
"Print": "Печать",
"Quick create event": "Быстро создать событие",
"Repeats": "Повторы",
"Select view": "Выбрать вид",
"Show lunar": "Показать лунный календарь",
"Start date field": "Поле даты начала",
"This and following events": "Это и последующие события",
"This event": "Это событие",
"Time": "Время",
"Title": "Заголовок",
"Title field": "Поле заголовка",
"Today": "Сегодня",
"Turn pages": "Перелистывать страницы",
"Update record": "Обновить запись",
"Updated successfully": "Успешно обновлено",
"View record": "Просмотреть запись",
"Week": "Неделя",
"Weekly": "Еженедельно",
"Work week": "Рабочая неделя",
"Yearly": "Ежегодно",
"{{count}} more items": "Еще {{count}} элементов"
}
@@ -1,9 +1,11 @@
{
"name": "@nocobase/plugin-charts",
"displayName": "Charts (deprecated)",
"displayName.ru-RU": "Графики (устаревший)",
"displayName.zh-CN": "图表(废弃)",
"private": true,
"description": "The plugin has been deprecated, please use the data visualization plugin instead.",
"description.ru-RU": "Данный плагин устарел, используйте вместо него плагин для визуализации данных.",
"description.zh-CN": "已废弃插件,请使用数据可视化插件代替。",
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
@@ -1 +1,74 @@
{}
{
"1 「Numeric」 field, 0~ 1 「Unordered Noun」 field": "1 поле 「Числовое」, 0–1 поле 「Неупорядоченное существительное」",
"1 「Time」 or 「Order Noun」 field, 1 「Value」 field": "1 поле 「Время」 или 「Упорядоченное существительное」, 1 поле 「Значение」",
"1 「Unordered Noun」 field, 1 「Numeric」 field": "1 поле 「Неупорядоченное существительное」, 1 поле 「Числовое」",
"1 「time」 or 「ordered noun」 field, 1 「value」 field, 0 to 1 「unordered noun」": "1 поле 「Время」 или 「Упорядоченное существительное」, 1 поле 「Значение」, 0–1 поле 「Неупорядоченное существительное」",
"1 「time」 or 「ordered noun」 field, 1 「value」 field, 0~ 1 「unordered noun」": "1 поле 「Время」 или 「Упорядоченное существительное」, 1 поле 「Значение」, 0–1 поле 「Неупорядоченное существительное」",
"1 「time」or 「Ordered Noun」 field,1 「Numerical」 field,1 「Unordered Noun」 field (optional)": "1 поле 「Время」 или 「Упорядоченное существительное」, 1 поле 「Числовое」, 1 поле 「Неупорядоченное существительное」 (опционально)",
"1~ 2 「Unordered Noun」 fields, 1 「Numeric」 field": "1–2 поля 「Неупорядоченное существительное」, 1 поле 「Числовое」",
"Actions": "Действия",
"Add JSON query": "Добавить запрос JSON",
"Add SQL query": "Добавить запрос SQL",
"Add chart query": "Добавить запрос для диаграммы",
"Add provider": "Добавить провайдера",
"Add query": "Добавить запрос",
"Are you sure you want to delete it?": "Вы уверены, что хотите удалить?",
"Area": "Область",
"Bar": "Столбец",
"Basic charts": "Базовые диаграммы",
"Branch Length/Metrics": "Длина ветви/Метрики",
"Branch Tags/Dimensions": "Теги ветви/Измерения",
"Cancel": "Отменить",
"Category axis / Dimension": "Ось категорий / Измерение",
"Chart": "Диаграмма",
"Chart (Old)": "Диаграмма (старая)",
"Chart config": "Конфигурация диаграммы",
"Chart preview": "Предпросмотр диаграммы",
"Chart title": "Заголовок диаграммы",
"Chart type": "Тип диаграммы",
"Charts": "Диаграммы",
"Client id": "ID клиента",
"Color legend / Dimensional": "Легенда цвета / Измерение",
"Column": "Колонка",
"Create chart block": "Создать блок диаграммы",
"Data preview": "Предпросмотр данных",
"Delete": "Удалить",
"Delete provider": "Удалить провайдера",
"Delete queries": "Удалить запросы",
"Delete query": "Удалить запрос",
"Edit": "Редактировать",
"Edit chart block": "Редактировать блок диаграммы",
"Edit provider": "Редактировать провайдера",
"Edit query": "Редактировать запрос",
"Enable": "Включить",
"Entity id or issuer": "ID сущности или эмитент",
"Funnel": "Воронка",
"Funnel Layer Width/Metrics": "Ширина слоя воронки/Метрики",
"Invalid JSON format": "Неверный формат JSON",
"Invalid JSON format,must be an object array.": "Неверный формат JSON, должен быть массив объектов.",
"JSON config": "Конфигурация JSON",
"Json config references": "Ссылки на конфигурацию JSON",
"Json config references: ": "Ссылки на конфигурацию JSON: ",
"Line": "Линия",
"Login Url": "URL входа",
"More charts": "Дополнительные диаграммы",
"Pie": "Круговая",
"Please check the chart config": "Пожалуйста, проверьте конфигурацию диаграммы",
"Public cert": "Публичный сертификат",
"Queries": "Запросы",
"Radar": "Радар",
"Redirect url": "URL перенаправления",
"SAML Providers": "Провайдеры SAML",
"SAML manager": "Менеджер SAML",
"SP entity id": "ID сущности SP",
"Scatter": "Точечная",
"Sector Angle / Metric": "Угол сектора / Метрика",
"Sector label / Dimensional": "Метка сектора / Измерение",
"Select chart query": "Выбрать запрос для диаграммы",
"Select query data": "Выбрать данные запроса",
"Sign in button name, which will be displayed on the sign in page": "Название кнопки входа, отображаемое на странице входа",
"Submit": "Отправить",
"Title": "Заголовок",
"Type": "Тип",
"Value axis / Metrics": "Ось значений / Метрики"
}
@@ -1,8 +1,10 @@
{
"name": "@nocobase/plugin-client",
"displayName": "WEB client",
"displayName.ru-RU": "WEB-клиент",
"displayName.zh-CN": "WEB 客户端",
"description": "Provides a client interface for the NocoBase server",
"description.ru-RU": "Предоставляет клиентский интерфейс для сервера NocoBase",
"description.zh-CN": "为 NocoBase 服务端提供客户端界面",
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
@@ -1,11 +1,14 @@
{
"name": "@nocobase/plugin-collection-sql",
"displayName": "Collection: SQL",
"displayName.ru-RU": "Коллекция: SQL",
"displayName.zh-CN": "数据表: SQL",
"description": "Provides SQL collection template",
"description.ru-RU": "Предоставляет шаблон коллекции на основе SQL",
"description.zh-CN": "提供 SQL 数据表模板",
"version": "2.0.0-alpha.42",
"homepage": "https://docs-cn.nocobase.com/handbook/collection-sql",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/collection-sql",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/collection-sql",
"main": "dist/server/index.js",
"license": "AGPL-3.0",
@@ -2,8 +2,10 @@
"name": "@nocobase/plugin-collection-tree",
"version": "2.0.0-alpha.42",
"displayName": "Collection: Tree",
"displayName.ru-RU": "Древовидная Коллекция",
"displayName.zh-CN": "数据表:树",
"description": "Provides tree collection template",
"description.ru-RU": "Предоставляет шаблон коллекции в виде дерева. Широко используется для организации документов, каталожных разделов, управляемых задач, меню, комментариев и других сценариев, где важна вложенность и классификация.",
"description.zh-CN": "提供树数据表模板",
"keywords": [
"Collections"
@@ -1,12 +1,15 @@
{
"name": "@nocobase/plugin-data-source-main",
"displayName": "Data source: Main",
"displayName.ru-RU": "Основной Источник данных",
"displayName.zh-CN": "数据源:主数据库",
"description": "NocoBase main database, supports relational databases such as PostgreSQL, MySQL, MariaDB and so on.",
"description.ru-RU": "Основная база данных NocoBase: поддерживает реляционные СУБД, включая PostgreSQL, MySQL, MariaDB и другие.",
"description.zh-CN": "NocoBase 主数据库,支持 PostgreSQL、MySQL、MariaDB 等关系型数据库。",
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/data-source-main",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/data-source-main",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/data-source-main",
"license": "AGPL-3.0",
"devDependencies": {
@@ -0,0 +1,4 @@
{
"field-name-exists": "Имя поля \"{{name}}\" уже существует в коллекции \"{{collectionName}}\"",
"field-is-depended-on-by-other": "Нельзя удалить поле \"{{fieldName}}\" в \"{{fieldCollectionName}}\", оно используется полем \"{{dependedFieldName}}\" в \"{{dependedFieldCollectionName}}\" как \"{{dependedFieldAs}}\""
}
@@ -135,4 +135,18 @@ describe('hasMany field options', () => {
targetKey: 'ghi',
});
});
it('should reload collection`s fields after foreignKey added', async () => {
await Field.repository.create({
values: {
type: 'hasMany',
collectionName: 'tests',
target: 'foos',
foreignKey: 'test_id',
interface: 'o2m',
},
context: {},
});
expect(db.getCollection('foos').getField('test_id')).toBeDefined();
});
});
@@ -8,6 +8,7 @@
*/
import Database from '@nocobase/database';
import { FieldModel } from '../models';
export function afterCreateForForeignKeyField(db: Database) {
function generateFkOptions(collectionName: string, foreignKey: string) {
@@ -83,7 +84,7 @@ export function afterCreateForForeignKeyField(db: Database) {
throw new Error(`field options invalid`);
}
const r = db.getRepository('fields');
const instance = await r.findOne({
const instance: FieldModel = await r.findOne({
filter: {
collectionName,
name,
@@ -98,6 +99,7 @@ export function afterCreateForForeignKeyField(db: Database) {
instance.set('sort', 1);
instance.set('isForeignKey', true);
await instance.save({ transaction });
await instance.load({ transaction });
} else {
const createOptions = {
values: {
@@ -111,10 +113,11 @@ export function afterCreateForForeignKeyField(db: Database) {
createOptions['context'] = {};
}
const creatInstance = await r.create(createOptions);
const createdInstance: FieldModel = await r.create(createOptions);
// SortField#setSortValue instance._previousDataValues[scopeKey] judgment cause create set sort:1 invalid, need update
creatInstance.set('sort', 1);
await creatInstance.save({ transaction });
createdInstance.set('sort', 1);
await createdInstance.save({ transaction });
await createdInstance.load({ transaction });
}
// update ID sort:0
await r.update({
@@ -3,10 +3,13 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"displayName": "Data source manager",
"displayName.ru-RU": "Менеджер управления источниками данных",
"displayName.zh-CN": "数据源管理",
"description": "Manage data sources, including the built-in Master database, external databases, APIs, etc.",
"description.ru-RU": "Управление источниками данных: встроенная основная база данных, внешние базы данных, API и другие источники.",
"description.zh-CN": "管理数据源,包括内置的 Master 数据库,外部的数据库、API。",
"homepage": "https://docs.nocobase.com/handbook/data-source-manager",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/data-source-manager",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/data-source-manager",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,40 @@
{
"Data source name": "Имя источника данных",
"Data source display name": "Отображаемое имя источника данных",
"Host": "Хост",
"Port": "Порт",
"Database": "База данных",
"Data source manager": "Менеджер источников данных",
"Data sources": "Источники данных",
"No external data source plugin installed": "Внешний плагин источника данных не установлен",
"View documentation": "Просмотр документации",
"Test Connection": "Тест соединения",
"Connection successful": "Соединение успешно",
"Display name": "Отображаемое имя",
"Username": "Имя пользователя",
"Password": "Пароль",
"Type": "Тип",
"Description": "Описание",
"Storage": "Хранилище",
"Collections": "Коллекции",
"Permissions": "Разрешения",
"Allow adding and modifying collection": "Разрешить добавление и изменение коллекции",
"Unknown field type": "Неизвестный тип поля",
"The following field types are not compatible and do not support output and display": "Следующие типы полей несовместимы и не поддерживают вывод и отображение",
"Field database type": "Тип поля базы данных",
"Field interface": "Интерфейс поля",
"Status": "Статус",
"Loading": "Загрузка",
"Failed": "Ошибка",
"Loaded": "Загружено",
"Reloading": "Перезагрузка",
"Data source synchronization in progress": "Синхронизация источника данных в процессе",
"Data source synchronization successful": "Синхронизация источника данных успешна",
"Filter target key": "Ключ фильтра цели",
"Select field": "Выбрать поле",
"OK": "ОК",
"Please select a field.": "Пожалуйста, выберите поле.",
"Are you sure you want to set the \"{{title}}\" field as a record unique key? This setting cannot be changed after it's been set.": "Вы уверены, что хотите установить поле \"{{title}}\" как уникальный ключ записи? Этот параметр нельзя изменить после установки.",
"If a collection lacks a primary key, you must configure a unique record key to locate row records within a block, failure to configure this will prevent the creation of data blocks for the collection.": "Если в коллекции отсутствует первичный ключ, необходимо настроить уникальный ключ записи, чтобы можно было находить строки (записи) внутри блока. Если уникальный ключ не будет настроен, создание блоков данных для этой коллекции будет невозможно.",
"Filter data based on the specific field, with the requirement that the field value must be unique.": "Отфильтровать данные по определённому полю с требованием, чтобы значение этого поля было уникальным."
}
@@ -2,11 +2,14 @@
"name": "@nocobase/plugin-data-visualization",
"version": "2.0.0-alpha.42",
"displayName": "Data visualization",
"displayName.ru-RU": "Визуализация данных",
"displayName.zh-CN": "数据可视化",
"description": "Provides data visualization feature, including chart block and chart filter block, support line charts, area charts, bar charts and more than a dozen kinds of charts, you can also extend more chart types.",
"description.ru-RU": "Предоставляет функции визуализации данных: включает блоки графиков и фильтрации графиков, поддерживает линейные, областные, столбчатые и более десятка других типов графиков, а также возможность расширения дополнительными типами.",
"description.zh-CN": "提供数据可视化功能,包含图表区块和图表筛选区块,支持折线图、面积图、柱状图等十几种图表,你也可以扩展更多图表类型。",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/data-visualization",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/data-visualization",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/data-visualization",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -0,0 +1,103 @@
{
"Edit": "Редактировать",
"Delete": "Удалить",
"Cancel": "Отмена",
"Submit": "Отправить",
"Actions": "Действия",
"Title": "Заголовок",
"Enable": "Включить",
"Chart": "Диаграмма",
"ChartV2": "ДиаграммаV2",
"Charts": "Диаграммы",
"Configure": "Настроить",
"Duplicate": "Дублировать",
"Configure chart": "Настроить диаграмму",
"Transform": "Преобразовать",
"Chart type": "Тип диаграммы",
"JSON config": "JSON конфигурация",
"Query": "Запрос",
"Data": "Данные",
"Run query": "Выполнить запрос",
"Measures": "Единицы измерения",
"Dimensions": "Размеры",
"Filter": "Фильтр",
"Sort": "Сортировка",
"Limit": "Лимит",
"Offset": "Смещение",
"Enable cache": "Включить кэш",
"TTL (second)": "TTL- время жизни (секунд)",
"Field": "Поле",
"Aggregation": "Агрегация",
"Alias": "Псевдоним",
"Format": "Формат",
"The first 10 records of the query result:": "Первые 10 записей результата запроса:",
"Please run query to retrive data.": "Пожалуйста, выполните запрос для получения данных.",
"Type": "Тип",
"Add field": "Добавить поле",
"Add chart": "Добавить диаграмму",
"xField": "X поле",
"yField": "Y поле",
"seriesField": "Поле серии",
"angleField": "Поле угла",
"colorField": "Поле цвета",
"Line": "Линия",
"Area": "Область",
"Column": "Столбец",
"Bar": "Полоса",
"Pie": "Круговая",
"Dual axes": "Двойные оси",
"Scatter": "Точечная",
"Gauge": "Индикатор",
"Statistic": "Статистика",
"Currency": "Валюта",
"Percent": "Процент",
"Exponential": "Экспоненциальный",
"Abbreviation": "Сокращение",
"Please configure and run query": "Пожалуйста, настройте и выполните запрос",
"Please configure chart": "Пожалуйста, настройте диаграмму",
"Are you sure to cancel?": "Вы уверены, что хотите отменить?",
"You changes are not saved. If you click OK, your changes will be lost.": "Ваши изменения не сохранены. Если вы нажмете OK, ваши изменения будут потеряны.",
"Same properties set in the form above will be overwritten by this JSON config.": "Те же свойства, установленные в форме выше, будут перезаписаны этой JSON конфигурацией.",
"Built-in": "Встроенный",
"Config reference: ": "Ссылка на конфигурацию: ",
"Table": "Таблица",
"Sum": "Сумма",
"Avg": "Среднее",
"Count": "Количество",
"Min": "Минимум",
"Max": "Максимум",
"Please select a chart type.": "Пожалуйста, выберите тип диаграммы.",
"Collection": "Коллекция",
"isStack": "Стек",
"isPercent": "В процентах",
"isGroup": "Группировать",
"smooth": "Сглаживание",
"Expand": "Развернуть",
"Current filter": "Текущий фильтр",
"Add custom field": "Добавить пользовательское поле",
"To filter with custom fields, use \"Current filter\" variables in the chart configuration.": "Для фильтрации с пользовательскими полями используйте переменные \"Текущий фильтр\" в конфигурации диаграммы.",
"Input": "Ввод",
"Date range": "Диапазон дат",
"Time range": "Временной диапазон",
"Edit field properties": "Редактировать свойства поля",
"Select a source field to use metadata of the field": "Выберите исходное поле для использования метаданных поля",
"Original field": "Исходное поле",
"Transformation": "Преобразование",
"Add transformation": "Добавить преобразование",
"Container": "Контейнер",
"Show border": "Показать границу",
"Transformation tip": "Поля позволяют множественные преобразования, применяемые последовательно. Обратите внимание на изменения типа данных после каждого преобразования. Перетаскивание позволяет настраивать порядок преобразований.",
"Type conversion": "Преобразование типа",
"Transformer": "Преобразователь",
"Size": "Размер",
"Width": "Ширина",
"Height": "Высота",
"Aspect ratio": "Соотношение сторон",
"Fixed height": "Фиксированная высота",
"Show background": "Показать фон",
"Show padding": "Показать отступы",
"Distinct": "Уникальные",
"Auto refresh": "Автообновление",
"Divide": "Разделить",
"Multiply": "Умножить"
}
@@ -1,8 +1,10 @@
{
"name": "@nocobase/plugin-departments",
"displayName": "Departments",
"displayName.ru-RU": "Подразделения",
"displayName.zh-CN": "部门",
"description": "Organize users by departments, set hierarchical relationships, link roles to control permissions, and use departments as variables in workflows and expressions.",
"description.ru-RU": "Организация пользователей по подразделениям, установление иерархических связей, привязка ролей для управления правами и использование подразделений в качестве переменных в рабочих процессах и выражениях.",
"description.zh-CN": "以部门来组织用户,设定上下级关系,绑定角色控制权限,并支持作为变量用于工作流和表达式。",
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
@@ -0,0 +1,35 @@
{
"Department": "Отдел",
"All users": "Все пользователи",
"New department": "Новый отдел",
"Add department": "Добавить отдел",
"Add departments": "Добавить отделы",
"New sub department": "Новый подотдел",
"Edit department": "Редактировать отдел",
"Delete department": "Удалить отдел",
"Departments": "Отделы",
"Main department": "Главный отдел",
"Owner": "Владелец",
"Department name": "Название отдела",
"Superior department": "Вышестоящий отдел",
"Owners": "Владельцы",
"Add members": "Добавить участников",
"Search for departments, users": "Поиск отделов, пользователей",
"Search results": "Результаты поиска",
"Departments management": "Управление отделами",
"Roles management": "Управление ролями",
"Remove members": "Удалить участников",
"Remove member": "Удалить участника",
"Remove departments": "Удалить отделы",
"Remove department": "Удалить отдел",
"Are you sure you want to remove it?": "Вы уверены, что хотите удалить это?",
"Are you sure you want to remove these members?": "Вы уверены, что хотите удалить этих участников?",
"Are you sure you want to remove these departments?": "Вы уверены, что хотите удалить эти отделы?",
"Please select members": "Пожалуйста, выберите участников",
"Please select departments": "Пожалуйста, выберите отделы",
"The department has sub-departments, please delete them first": "У отдела есть подотделы, пожалуйста, удалите их сначала",
"The department has members, please remove them first": "У отдела есть участники, пожалуйста, удалите их сначала",
"Main": "Главный",
"Set as main department": "Установить как главный отдел",
"This field is currently not supported for use in form blocks.": "Это поле в настоящее время не поддерживается для использования в блоках форм."
}
@@ -9,8 +9,11 @@
},
"displayName": "Variables and secrets",
"displayName.zh-CN": "变量和密钥",
"displayName.ru-RU": "Переменные и секреты",
"description.ru-RU": "Централизованное управление переменными окружения и секретами для хранения конфиденциальных данных, повторного использования конфигураций, изоляции окружений и прочих задач.",
"description": "Centralized management of environment variables and secrets, used for sensitive data storage, configuration data reuse, multi-environment isolation, and more.",
"description.zh-CN": "集中管理环境变量和密钥,用于敏感数据存储、配置数据重用、多环境隔离等。",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/environment-variables",
"homepage": "https://docs.nocobase.com/handbook/environment-variables",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/environment-variables",
"keywords": [
@@ -0,0 +1,16 @@
{
"Environment": "Окружение",
"Variables and secrets": "Переменные и секреты",
"Variables": "Переменные",
"Secrets": "Секреты",
"Add variable": "Добавить переменную",
"Bulk import": "Массовый импорт",
"Name": "Имя",
"Value": "Значение",
"Type": "Тип",
"Plain text": "Обычный текст",
"Encrypted": "Зашифровано",
"Delete variable": "Удалить переменную",
"Restart now": "Перезапустить сейчас",
"Variables and secrets have been updated. A restart is required for the changes to take effect.": "Переменные и секреты были обновлены. Требуется перезапуск для применения изменений."
}
@@ -1,12 +1,17 @@
{
"name": "@nocobase/plugin-error-handler",
"displayName": "Error handler",
"displayName.ru-RU": "Обработчик ошибок",
"displayName.zh-CN": "错误处理器",
"description.ru-RU": "Обработка ошибок и исключений приложения.",
"description": "Handling application errors and exceptions.",
"description.zh-CN": "处理应用程序中的错误和异常。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/error-handler",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/error-handler",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/error-handler",
"devDependencies": {
"@formily/json-schema": "2.x",
"supertest": "^6.1.6"
@@ -0,0 +1,5 @@
{
"unique violation": "{{field}} уже существует",
"notNull violation": "{{field}} не может быть пустым",
"Validation error": "{{field}} ошибка валидации"
}
@@ -3,8 +3,10 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"displayName": "Collection field: Attachment(URL)",
"displayName.ru-RU": "Поле коллекции: Вложение (URL)",
"displayName.zh-CN": "数据表字段:附件(URL",
"description": "Supports attachments in URL format.",
"description.ru-RU": "Поддержка вложений в формате URL.",
"description.zh-CN": "支持 URL 格式的附件。",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,4 @@
{
"Which file collection should it be uploaded to":"В какую коллекцию файлов загрузить",
"Attachment (URL)":"Вложение (URL)"
}
@@ -3,11 +3,14 @@
"version": "2.0.0-alpha.42",
"displayName": "Collection field: administrative divisions of China",
"displayName.zh-CN": "数据表字段:中国行政区划",
"displayName.ru-RU": "Поле коллекции: административное деление Китая",
"description": "Provides data and field type for administrative divisions of China.",
"description.zh-CN": "提供中国行政区划数据和字段类型。",
"description.ru-RU": "Предоставляет данные и тип поля для административного деления Китая.",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/china-region",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/china-region",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/china-region",
"license": "AGPL-3.0",
"devDependencies": {
"@formily/core": "2.x",
@@ -2,13 +2,16 @@
"name": "@nocobase/plugin-field-formula",
"displayName": "Collection field: Formula",
"displayName.zh-CN": "数据表字段:公式",
"displayName.ru-RU": "Поле коллекции: Формула",
"description": "Configure and store the results of calculations between multiple field values in the same record, supporting both Math.js and Excel formula functions.",
"description.zh-CN": "可以配置并存储同一条记录的多字段值之间的计算结果,支持 Math.js 和 Excel formula functions 两种引擎",
"description.ru-RU": "Настройка и сохранение результатов вычислений между значениями нескольких полей в одной записи с поддержкой движков Math.js и Excel formula functions.",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/field-formula",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/field-formula",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/field-formula",
"devDependencies": {
"@formily/antd-v5": "1.x",
"@formily/core": "2.x",
@@ -0,0 +1,8 @@
{
"Formula": "Формула",
"Calculation engine": "Вычислительный механизм",
"Expression": "Выражение",
"Expression syntax error": "Ошибка синтаксиса выражения",
"Syntax references": "Справочник синтаксиса",
"Compute a value based on the other fields": "Вычислить значение на основе других полей"
}
@@ -1,8 +1,10 @@
{
"name": "@nocobase/plugin-field-m2m-array",
"displayName": "Collection field: Many to many (array)",
"displayName.ru-RU": "Связь коллекций: «многие ко многим» (массив)",
"displayName.zh-CN": "数据表字段:多对多 (数组)",
"description": "Allows to create many to many relationships between two models by storing an array of unique keys of the target model.",
"description.ru-RU": "Позволяет создавать отношения «многие ко многим» между двумя моделями, сохраняя массив уникальных ключей целевой модели.",
"description.zh-CN": "支持通过在数组中存储目标表唯一键的方式建立多对多关系。",
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
@@ -0,0 +1,4 @@
{
"Many to many (array)": "Многие ко многим (массив)",
"Many to many (array) description": "Позволяет создавать связи многие ко многим между двумя моделями, сохраняя массив уникальных ключей целевой модели."
}
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-field-markdown-vditor",
"displayName": "Collection field: Markdown(Vditor)",
"displayName.zh-CN": "数据表字段:Markdown(Vditor)",
"displayName.ru-RU": "Поле коллекции: Markdown(Vditor)",
"description": "Used to store Markdown and render it using Vditor editor, supports common Markdown syntax such as list, code, quote, etc., and supports uploading images, recordings, etc.It also allows for instant rendering, where what you see is what you get.",
"description.ru-RU": "Используется для хранения Markdown и его отображения с помощью редактора Vditor, поддерживает общие синтаксисы Markdown: списки, код, цитаты и т.д., а также загрузку изображений и аудиозаписей. Обеспечивает мгновенный рендеринг «что видишь — то получаешь».",
"description.zh-CN": "用于存储 Markdown,并使用 Vditor 编辑器渲染,支持常见 Markdown 语法,如列表,代码,引用等,并支持上传图片,录音等。同时可以做到即时渲染,所见即所得。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/field-markdown-vditor",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/field-markdown-vditor",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/field-markdown-vditor",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,38 @@
{
"Vditor": "Markdown(Vditor)",
"File collection": "Коллекция файлов",
"Used to store files uploaded in the Markdown editor (default: attachments)": "Используется для хранения файлов, загруженных в редакторе Markdown (по умолчанию: вложения)",
"Toolbar": "Конфигурация панели инструментов редактора",
"Emoji": "Эмодзи",
"Headings": "Заголовки",
"Bold": "Жирный",
"Italic": "Курсив",
"Strike": "Зачеркнутый",
"Record": "Начать запись/Завершить запись",
"Line": "Линия",
"Quote": "Цитата",
"List": "Список",
"OrderedList": "Нумерованный список",
"Check": "Список задач",
"Outdent": "Уменьшить отступ",
"Indent": "Увеличить отступ",
"Code": "Блок кода",
"InlineCode": "Встроенный код",
"InsertAfter": "Вставить строку после",
"InsertBefore": "Вставить строку перед",
"Undo": "Отменить",
"Redo": "Повторить",
"Upload": "Загрузить изображение или файл",
"Link": "Ссылка",
"Table": "Таблица",
"EditMode": "Режим редактирования",
"Both": "Редактор и предпросмотр",
"Preview": "Предпросмотр",
"Fullscreen": "Полноэкранный режим",
"Outline": "Структура",
"uploading": "Загрузка...",
"upload failed": "Ошибка загрузки",
"vditor.uploadError.message": "Невозможно загрузить файлы в текущее хранилище. Вы пытаетесь загрузить файлы в редактор Markdown, но текущая конфигурация хранилища не поддерживает эту операцию. Чтобы включить функциональность загрузки, выполните следующие настройки: 1. Перейдите в \"Диспетчер файлов\". 2. Выберите хранилище, которое сейчас используется ({{storageTitle}}). 3. Установите \"Базовый URL\" и включите опцию \"Публичный доступ\".",
"Storage configuration not found. Please configure a storage provider first.": "Конфигурация хранилища не найдена. Сначала настройте поставщика хранилища.",
"Response data is empty": "Данные ответа пусты"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-field-sequence",
"displayName": "Collection field: Sequence",
"displayName.ru-RU": "Поле коллекции: Последовательность",
"displayName.zh-CN": "数据表字段:自动编码",
"description": "Automatically generate codes based on configured rules, supporting combinations of dates, numbers, and text.",
"description.ru-RU": "Автоматически генерирует коды по заданным правилам с поддержкой комбинаций дат, чисел и текста.",
"description.zh-CN": "根据配置的规则自动生成编码,支持日期、数字、文本的组合。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/field-sequence",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/field-sequence",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/field-sequence",
"devDependencies": {
"@formily/antd-v5": "1.x",
@@ -0,0 +1,24 @@
{
"Sequence": "Последовательность",
"Sequence rules": "Правила последовательности",
"Add rule": "Добавить правило",
"Inputable": "Вводимый",
"Match rules": "Правила соответствия",
"Type": "Тип",
"Autoincrement": "Автоинкремент",
"Fixed text": "Фиксированный текст",
"Text content": "Содержимое текста",
"Rule content": "Содержимое правила",
"{{value}} Digits": "{{value}} цифр",
"Digits": "Цифры",
"Start from": "Начать с",
"Starts from {{value}}": "Начинается с {{value}}",
"Reset cycle": "Цикл сброса",
"No reset": "Без сброса",
"Daily": "Ежедневно",
"Every Monday": "Каждый понедельник",
"Monthly": "Ежемесячно",
"Yearly": "Ежегодно",
"Operations": "Операции",
"Customize": "Настроить"
}
@@ -3,8 +3,10 @@
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"displayName": "Collection field: Sort",
"displayName.ru-RU": "Поле коллекции: Сортировка",
"displayName.zh-CN": "数据表字段:排序",
"description": "Used to sort the data in a collection.",
"description.ru-RU": "Используется для сортировки данных в коллекции.",
"description.zh-CN": "用于对数据表的数据进行排序。",
"main": "dist/server/index.js",
"peerDependencies": {
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-file-manager",
"version": "2.0.0-alpha.42",
"displayName": "File manager",
"displayName.ru-RU": "Менеджер файлов",
"displayName.zh-CN": "文件管理器",
"description": "Provides files storage services with files collection template and attachment field.",
"description.ru-RU": "Предоставляет сервисы хранения файлов, шаблон коллекции файлов и поле вложений.",
"description.zh-CN": "提供文件存储服务,并提供了文件表模板和附件字段。",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/file-manager",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/file-manager",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/file-manager",
"devDependencies": {
"@aws-sdk/client-s3": "3.750.0",
@@ -1,18 +1,43 @@
{
"File manager": "Файловые хранилища",
"File collection": "Коллекция файлов",
"File name": "Имя файла",
"Extension name": "Имя расширения",
"Size": "Размер",
"File size limit": "Ограничение размера файла",
"Minimum from 1 byte, maximum up to 1GB.": "Минимум от 1 байта, максимум до 1 ГБ.",
"MIME type": "MIME тип",
"File type (in MIME type format)": "Тип файла (в формате MIME типа)",
"Multi-types seperated with comma, for example: \"image/*\", \"image/png\", \"image/*, application/pdf\" etc.": "Множественные типы, разделенные запятой, например: \"image/*\", \"image/png\", \"image/*, application/pdf\" и т.д.",
"URL": "URL",
"File storage": "Файловое хранилище",
"File manager": "Управление файлами",
"Attachment": "Вложение",
"MIME type": "Подтвердить",
"Allow uploading multiple files": "Позволить загружать много файлов",
"Storage display name": "Имя храшилища на экране",
"Storage": "Хранилище",
"Storages": "Хранилища",
"Storage name": "Имя хранилища",
"Storage type": "Тип Хранилища",
"Storage type": "Тип хранилища",
"Default storage": "Хранилище по умолчанию",
"Storage base URL": "Базовый URL хранилища",
"Access base URL": "Базовый URL доступа",
"Base URL for file access, could be your CDN base URL. For example: \"https://cdn.nocobase.com\".": "Базовый URL для доступа к файлам, может быть базовым URL вашего CDN. Например: \"https://cdn.nocobase.com\".",
"Destination": "Назначение",
"Use the built-in static file server": "Использовать встроенный статический файл-сервер",
"Local storage": "Локальное хранилище",
"Aliyun OSS": "Aliyun OSS",
"Amazon S3": "Amazon S3",
"Tencent COS": "Tencent COS",
"Filename": "Имя файла"
"Region": "Регион",
"Bucket": "Корзина",
"Path": "Путь",
"Relative path the file will be saved to. Left blank as root path. The leading and trailing slashes \"/\" will be ignored. For example: \"user/avatar\".": "Относительный путь, по которому будет сохранен файл. Оставьте пустым для корневого пути. Начальные и конечные слеши \"/\" будут проигнорированы. Например: \"user/avatar\".",
"Filename": "Имя файла",
"Will be used for API": "Будет использоваться для API",
"Default storage will be used when not selected": "Хранилище по умолчанию будет использоваться, если не выбрано",
"Keep file in storage when destroy record": "Сохранить файл в хранилище при удалении записи",
"See more": "Подробнее",
"Aliyun OSS region part of the bucket. For example: \"oss-cn-beijing\".": "Часть региона Aliyun OSS корзины. Например: \"oss-cn-beijing\".",
"Timeout": "Таймаут",
"Upload timeout for a single file in milliseconds. Default is 600000.": "Таймаут загрузки для одного файла в миллисекундах. По умолчанию 600000.",
"Storage display name": "Отображаемое имя хранилища",
"Storage base URL": "Базовый URL хранилища"
}
@@ -1,8 +1,10 @@
{
"name": "@nocobase/plugin-file-previewer-office",
"displayName": "Office File Previewer",
"displayName.ru-RU": "Просмотр MS Office-файлов",
"displayName.zh-CN": "Office 文件预览",
"description": "A plugin for previewing office files via Microsoft live preview service.",
"description.ru-RU": "Плагин для просмотра Office-файлов через Microsoft live preview service.",
"description.zh-CN": "基于微软在线服务预览 Office 文件的插件。",
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
@@ -2,12 +2,15 @@
"name": "@nocobase/plugin-gantt",
"version": "2.0.0-alpha.42",
"displayName": "Block: Gantt",
"displayName.ru-RU": "Блок: Диаграмма Ганта",
"displayName.zh-CN": "区块:甘特图",
"description": "Provides Gantt block.",
"description.ru-RU": "Предоставляет блок диаграммы Ганта.",
"description.zh-CN": "提供甘特图区块。",
"license": "AGPL-3.0",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/block-gantt",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/block-gantt",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/block-gantt",
"devDependencies": {
"antd-style": "3.7.1"
@@ -0,0 +1,6 @@
{
"Title field": "Поле заголовка",
"Time scale": "Временная шкала",
"Start date field": "Поле даты начала",
"Progress field": "Поле прогресса"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-graph-collection-manager",
"displayName": "Graph collection manager",
"displayName.ru-RU": "Менеджер графовых коллекций",
"displayName.zh-CN": "可视化数据表管理",
"description": "An ER diagram-like tool. Currently only the Master database is supported.",
"description.ru-RU": "Инструмент в стиле ER-диаграммы. В настоящий момент поддерживается только основная база данных.",
"description.zh-CN": "类似 ER 图的工具,目前只支持主数据库。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/graph-collection-manager",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/graph-collection-manager",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/graph-collection-manager",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -0,0 +1,15 @@
{
"Graph Collection": "Граф коллекций",
"Collection List": "Список коллекций",
"Full Screen": "Полный экран",
"Collection Search": "Поиск коллекций",
"Create Collection": "Создать коллекцию",
"All Fields": "Все поля",
"Association Fields": "Поля ассоциации",
"Choices fields": "Поля выбора",
"All relationships": "Все связи",
"Entity relationship only": "Только связи сущностей",
"Inheritance relationship only": "Только связи наследования",
"Graphical interface": "Графический интерфейс",
"Selection": "Выбор"
}
@@ -6,8 +6,10 @@
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/block-kanban",
"license": "AGPL-3.0",
"displayName": "Block: Kanban",
"displayName.ru-RU": "Блок: Канбан",
"displayName.zh-CN": "区块:看板",
"description": "Provides kanban block.",
"description.ru-RU": "Предоставляет блок канбан.",
"description.zh-CN": "提供看板区块。",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,10 @@
{
"Used for sorting kanban cards, only sorting fields corresponding to grouping fields can be selected": "Используется для сортировки карточек канбан, можно выбрать только поля сортировки, соответствующие полям группировки",
"Global sorting": "Глобальная сортировка",
"Create sort field": "Создать поле сортировки",
"Convert the following integer fields to sorting fields": "Преобразовать следующие целочисленные поля в поля сортировки",
"Sorting field": "Поле сортировки",
"Grouped sorting based on": "Групповая сортировка на основе",
"Enable drag and drop sorting": "Включить сортировку перетаскиванием",
"Set column width": "Установить ширину столбца"
}
@@ -3,8 +3,10 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"displayName": "License settings",
"displayName.ru-RU": "Настройки лицензии",
"displayName.zh-CN": "授权设置",
"description": "Instance ID and license key settings",
"description.ru-RU": "Настройка идентификатора экземпляра и ключа лицензии",
"description.zh-CN": "实例 ID 和授权密钥设置",
"devDependencies": {
"@nocobase/license-kit": "^0.2.17"
@@ -0,0 +1,13 @@
{
"License key saved successfully, please re-run the plugin installation.": "Лицензионный ключ успешно сохранен, пожалуйста, перезапустите установку плагина.",
"License settings": "Настройки лицензии",
"Instance ID": "ID экземпляра",
"License key": "Лицензионный ключ",
"Enter license key": "Введите лицензионный ключ",
"Invalid license key": "Неверный лицензионный ключ",
"Change key": "Изменить ключ",
"License key has been set": "Лицензионный ключ был установлен",
"Copied": "Скопировано",
"Copy": "Копировать",
"Failed to copy, please open ./storage/.license/instance-id and copy it": "Не удалось скопировать, пожалуйста, откройте ./storage/.license/instance-id и скопируйте его"
}
@@ -1,6 +1,7 @@
{
"name": "@nocobase/plugin-locale-tester",
"displayName": "Locale tester",
"displayName.ru-RU": "Тестер локализации",
"displayName.zh-CN": "翻译测试工具",
"version": "2.0.0-alpha.42",
"homepage": "https://github.com/nocobase/locales",
@@ -0,0 +1,5 @@
{
"Locale": "Локализация",
"Locale tester": "Тестер локализации",
"Please go to <a target=\"_blank\" href=\"https://github.com/nocobase/locales\">nocobase/locales</a> to get the language file that needs translation, then paste it below and provide the translation.": "Пожалуйста, перейдите на <a target=\"_blank\" href=\"https://github.com/nocobase/locales\">nocobase/locales</a> чтобы получить языковой файл, который нужно перевести, затем вставьте его ниже и предоставьте перевод."
}
@@ -3,6 +3,7 @@
"version": "2.0.0-alpha.42",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/localization-management",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/localization-management",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/localization-management",
"license": "AGPL-3.0",
"devDependencies": {
@@ -20,7 +21,9 @@
],
"displayName": "Localization",
"displayName.zh-CN": "本地化",
"displayName.ru-RU": "Локализация",
"description": "Allows to manage localization resources of the application.",
"description.ru-RU": "Позволяет управлять ресурсами локализации приложения.",
"description.zh-CN": "支持管理应用程序的本地化资源。",
"gitHead": "d0b4efe4be55f8c79a98a331d99d9f8cf99021a1"
}
@@ -0,0 +1,24 @@
{
"Edit": "Редактировать",
"Add new": "Добавить новый",
"Localization management": "Управление локализацией",
"No data": "Нет данных",
"Delete text": "Удалить текст",
"Delete translation": "Удалить перевод",
"Module": "Модуль",
"Text": "Текст",
"Translation": "Перевод",
"Sync": "Синхронизировать",
"Current language": "Текущий язык",
"Keyword": "Ключевое слово",
"All": "Все",
"No translation": "Нет перевода",
"System & Plugins": "Система и плагины",
"User interfaces": "Пользовательские интерфейсы",
"Collections & Fields": "Коллекции и поля",
"Please select the resources you want to synchronize": "Пожалуйста, выберите ресурсы, которые хотите синхронизировать",
"Menu": "Меню",
"Publish": "Опубликовать",
"Translations": "Переводы",
"Localization": "Локализация"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-logger",
"displayName": "Logger",
"displayName.ru-RU": "Логгер",
"displayName.zh-CN": "日志",
"description": "Server-side logs, mainly including API request logs and system runtime logs, and allows to package and download log files.",
"description.ru-RU": "Серверные логи, включают журналы запросов API и системные журналы, с возможностью архивации и скачивания лог-файлов.",
"description.zh-CN": "服务端日志,主要包括接口请求日志和系统运行日志,并支持打包和下载日志文件。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/logger",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/logger",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/logger",
"devDependencies": {
"@types/tar-fs": "^2.0.2",
@@ -0,0 +1,9 @@
{
"Logger": "Логгер",
"Search": "Поиск",
"Download": "Скачать",
"Download logs": "Скачать логи",
"API request and response logs": "Логи запросов и ответов API",
"Application, database, plugins and other system logs, the error level logs will be sent to": "Логи приложения, базы данных, плагинов и других систем, логи уровня ошибок будут отправлены в",
"SQL execution logs, printed by Sequelize when the db logging is enabled": "Логи выполнения SQL, выводимые Sequelize при включенном логировании базы данных"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-map",
"displayName": "Block: Map",
"displayName.ru-RU": "Блок: Карта",
"displayName.zh-CN": "区块:地图",
"version": "2.0.0-alpha.42",
"description": "Map block, support Gaode map and Google map, you can also extend more map types.",
"description.ru-RU": "Блок карты, поддерживает карты Gaode и Google, можно расширить поддержку других типов карт.",
"description.zh-CN": "地图区块,支持高德地图和 Google 地图,你也可以扩展更多地图类型。",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/block-map",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/block-map",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/block-map",
"devDependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
@@ -0,0 +1,51 @@
{
"Map": "Карта",
"Map-based geometry": "Геометрия на основе карты",
"Map type": "Тип карты",
"Point": "Точка",
"Line": "Линия",
"Circle": "Круг",
"Polygon": "Многоугольник",
"Access key": "Ключ доступа",
"securityJsCode or serviceHost": "securityJsCode или serviceHost",
"AMap": "AMap",
"Google Maps": "Google Карты",
"Clear": "Очистить",
"Click to select the starting point and double-click to end the drawing": "Нажмите, чтобы выбрать начальную точку, и дважды нажмите, чтобы закончить рисование",
"Clear the canvas": "Очистить холст",
"Are you sure to clear the canvas?": "Вы уверены, что хотите очистить холст?",
"Confirm": "Подтвердить",
"Cancel": "Отмена",
"Enter keywords to search": "Введите ключевые слова для поиска",
"The AccessKey is incorrect, please check it": "Ключ доступа неверный, пожалуйста, проверьте его",
"Please configure the AMap securityCode or serviceHost correctly": "Пожалуйста, правильно настройте securityCode или serviceHost для AMap",
"Map manager": "Менеджер карт",
"Configuration": "Конфигурация",
"Saved successfully": "Сохранено успешно",
"Saved failed": "Сохранение не удалось",
"Edit": "Редактировать",
"Save": "Сохранить",
"Please configure the AccessKey and SecurityJsCode first": "Пожалуйста, сначала настройте AccessKey и SecurityJsCode",
"Go to the configuration page": "Перейти на страницу конфигурации",
"Zoom": "Масштаб",
"Set default zoom level": "Установить уровень масштаба по умолчанию",
"The default zoom level of the map": "Уровень масштаба карты по умолчанию",
"Edit field title": "Редактировать заголовок поля",
"Field title": "Заголовок поля",
"Edit tooltip": "Редактировать подсказку",
"Delete field": "Удалить поле",
"Required": "Обязательное",
"Pattern": "Шаблон",
"Operator": "Оператор",
"Editable": "Редактируемое",
"Readonly": "Только для чтения",
"Easy-reading": "Легкое чтение",
"Edit description": "Редактировать описание",
"Map field": "Поле карты",
"Marker field": "Поле маркера",
"Load google maps failed, Please check the Api key and refresh the page": "Загрузка Google карт не удалась, пожалуйста, проверьте API ключ и обновите страницу",
"Create map block": "Создать блок карты",
"Start point": "Начальная точка",
"End point": "Конечная точка",
"Concatenation order field": "Поле порядка конкатенации"
}
@@ -7,8 +7,10 @@
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/mobile-client",
"license": "AGPL-3.0",
"displayName": "Mobile client(Deprecated)",
"displayName.ru-RU": "Мобильный клиент (устарел)",
"displayName.zh-CN": "移动端(已废弃)",
"description": "Provides the ability to configure mobile pages.",
"description.ru-RU": "Предоставляет возможность настройки мобильных страниц.",
"description.zh-CN": "提供移动端页面配置的能力。",
"devDependencies": {
"@ant-design/icons": "5.x",
@@ -0,0 +1,32 @@
{
"Mobile Client-side(Deprecated)": "Мобильная клиентская часть (устарело)",
"Interface Configuration": "Конфигурация интерфейса",
"App Configuration": "Конфигурация приложения",
"Enable TabBar": "Включить панель вкладок",
"Untitled": "Без названия",
"Edit info": "Редактировать информацию",
"Title": "Заголовок",
"Display back button": "Показывать кнопку назад",
"Delete menu": "Удалить меню",
"Edit menu info": "Редактировать информацию меню",
"Menu": "Меню",
"Menu name": "Название меню",
"Icon": "Иконка",
"Delete menu item?": "Удалить элемент меню?",
"Add menu item": "Добавить элемент меню",
"Page template": "Шаблон страницы",
"Template mode": "Режим шаблона",
"Enable Header": "Включить заголовок",
"Enable Tabs": "Включить вкладки",
"Delete tab item?": "Удалить элемент вкладки?",
"Add tab": "Добавить вкладку",
"App level Configuration": "Конфигурация уровня приложения",
"Menu configuration": "Конфигурация меню",
"Page configuration": "Конфигурация страницы",
"Settings": "Настройки",
"Delete settings block": "Удалить блок настроек",
"Delete menu block": "Удалить блок меню",
"Mobile client access address": "Адрес доступа мобильного клиента",
"The full address is": "Полный адрес:",
"Preview": "Предварительный просмотр"
}
@@ -7,7 +7,9 @@
"license": "AGPL-3.0",
"displayName": "Mobile (deprecated)",
"displayName.zh-CN": "移动端(已废弃)",
"displayName.ru-RU": "Мобильная версия (устарело)",
"description": "Provides the ability to configure mobile pages.",
"description.ru-RU": "Предоставляет возможность настройки мобильных страниц.",
"description.zh-CN": "提供移动端页面配置的能力。",
"peerDependencies": {
"@nocobase/client": "2.x",
@@ -0,0 +1,30 @@
{
"App settings": "Настройки приложения",
"Page settings": "Настройки страницы",
"Info": "Информация",
"Back": "Назад",
"Link": "Ссылка",
"Remove": "Удалить",
"Add page": "Добавить страницу",
"Title": "Заголовок",
"Icon": "Иконка",
"Selected icon": "Выбранная иконка",
"Add link": "Добавить ссылку",
"Display tab bar": "Показывать панель вкладок",
"Display page header": "Показывать заголовок страницы",
"Display navigation bar": "Показывать панель навигации",
"Display page title": "Показывать название страницы",
"Display tabs": "Показывать вкладки",
"Add tab": "Добавить вкладку",
"Mobile": "Мобильный",
"Title field is required": "Поле названия обязательно",
"Icon field is required": "Поле иконки обязательно",
"Desktop data blocks": "Блоки данных рабочего стола",
"Other desktop blocks": "Другие блоки рабочего стола",
"Settings": "Настройки",
"Mobile menu": "Мобильное меню",
"Mobile routes": "Мобильные маршруты",
"No accessible pages found": "Доступные страницы не найдены",
"This might be due to permission configuration issues": "Это может быть связано с проблемами конфигурации разрешений",
"Select time": "Выбрать время"
}
@@ -1,13 +1,16 @@
{
"name": "@nocobase/plugin-multi-app-manager",
"displayName": "Multi-app manager (deprecated)",
"displayName.ru-RU": "Менеджер мульти-приложений",
"displayName.zh-CN": "多应用管理器(已废弃)",
"description": "Multi-app runs applications in a process-sharing manner, suitable for testing and demo environments only. Do not use it in production.",
"description.ru-RU": "Позволяет динамически создавать несколько приложений без отдельных развертываний.",
"description.zh-CN": "多应用以进程共享的方式运行,仅适合测试和演示环境,生产环境下请勿使用。",
"version": "2.0.0-alpha.42",
"license": "AGPL-3.0",
"main": "./dist/server/index.js",
"homepage": "https://docs.nocobase.com/handbook/multi-app-manager",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/multi-app-manager",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/multi-app-manager",
"devDependencies": {
"@formily/react": "2.x",
@@ -0,0 +1,11 @@
{
"Multi-app manager": "Менеджер мультиприложений",
"Applications": "Приложения",
"App display name": "Отображаемое имя приложения",
"App ID": "ID приложения",
"Pin to menu": "Закрепить в меню",
"Custom domain": "Пользовательский домен",
"Manage applications": "Управление приложениями",
"Standalone deployment": "Автономное развертывание",
"Auto start": "Автозапуск"
}
@@ -1,9 +1,11 @@
{
"name": "@nocobase/plugin-multi-app-share-collection",
"displayName": "Multi-app share collection",
"private": true,
"displayName.ru-RU": "Совместное использование коллекций приложениями",
"displayName.zh-CN": "多应用数据表共享",
"private": true,
"description": "",
"description.ru-RU": "Обеспечивает совместное использование коллекций между несколькими приложениями.",
"description.zh-CN": "",
"version": "2.0.0-alpha.42",
"main": "./dist/server/index.js",
@@ -2,10 +2,13 @@
"name": "@nocobase/plugin-notification-email",
"version": "2.0.0-alpha.42",
"displayName": "Notification: Email",
"displayName.ru-RU": "Уведомления: Электронная почта (Email)",
"displayName.zh-CN": "通知:电子邮件",
"description": "Used for sending email notifications with built-in SMTP transport.",
"description.ru-RU": "Используется для отправки уведомлений по электронной почте с помощью встроенного SMTP транспорта.",
"description.zh-CN": "通过电子邮件渠道发送通知,目前只支持 SMTP 传输方式。",
"homepage": "https://docs.nocobase.com/handbook/notification-email",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/notification-email",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-email",
"main": "dist/server/index.js",
"devDependencies": {
@@ -0,0 +1,22 @@
{
"Email": "Электронная почта",
"From": "От",
"To": "Кому",
"CC": "Копия",
"BCC": "Скрытая копия",
"Add email address": "Добавить адрес электронной почты",
"Subject": "Тема",
"Content": "Содержание",
"Host": "Хост",
"Port": "Порт",
"Secure": "Безопасный",
"Account": "Аккаунт",
"Password": "Пароль",
"Configure": "Настроить",
"The email address that will be used as the sender": "Адрес электронной почты, который будет использоваться как отправитель",
"SMTP mail": "SMTP почта",
"SMTP server host": "Хост SMTP сервера",
"Content type": "Тип содержимого",
"Plain text": "Обычный текст",
"Transport": "Транспорт"
}
@@ -2,10 +2,13 @@
"name": "@nocobase/plugin-notification-in-app-message",
"version": "2.0.0-alpha.42",
"displayName": "Notification: In-app message",
"displayName.ru-RU": "Уведомления: Всплывающие сообщения внутри приложения",
"displayName.zh-CN": "通知:站内信",
"description": "It supports users in receiving real-time message notifications within the NocoBase application.",
"description.ru-RU": "Поддерживает получение пользователями уведомлений в реальном времени внутри приложения NocoBase.",
"description.zh-CN": "支持用户在 NocoBase 应用内实时接收消息通知。",
"homepage": "https://docs.nocobase.com/handbook/notification-in-app-message",
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/notification-in-app-message",
"homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-in-app-message",
"keywords": [
"Notification"

Some files were not shown because too many files have changed in this diff Show More