adminizer 4.3.0-build.73 → 4.3.0-build.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/add-B-wtzl14.js +1 -0
- package/assets/{add-form-CGi_qv3J.js → add-form-BlPl0S7W.js} +1 -1
- package/assets/add-group-CGiSK3je.js +1 -0
- package/assets/{add-group-form-DSd4UrnU.js → add-group-form-Chb9XkVr.js} +1 -1
- package/assets/add-user-CI91aShE.js +1 -0
- package/assets/{add-user-form-BAssKDpI.js → add-user-form-CpszaZtW.js} +1 -1
- package/assets/{app-GsYdx39W.css → app-CpGtjhxF.css} +1 -1
- package/assets/app-layout-CDjEwM9a.js +1 -0
- package/assets/{app-shell-DHzMWA1L.js → app-shell-CByYJPLe.js} +1 -1
- package/assets/{app-sidebar-D7l5BJPV.js → app-sidebar-CLPoDV2f.js} +1 -1
- package/assets/app-sidebar-header-B1mI-oGm.js +1 -0
- package/assets/app.js +2 -2
- package/assets/{breadcrumbs-DnNOEnT4.js → breadcrumbs-0GLBx1iv.js} +1 -1
- package/assets/{catalog-BavcTVb4.js → catalog-BEnuFPi6.js} +1 -1
- package/assets/{dashboard-xr-OyVyG.js → dashboard-Cb4RAfgr.js} +1 -1
- package/assets/{date-picker-DBHnomTY.js → date-picker-Gy19IF7Q.js} +1 -1
- package/assets/{del-modal-BeF4r3gk.js → del-modal-COG1XcES.js} +1 -1
- package/assets/{field-renderer-Sd68OLyc.js → field-renderer-CrsFaZNM.js} +3 -3
- package/assets/{form-DomTBI89.js → form-BwafUUB7.js} +1 -1
- package/assets/form-X67d3x3D.js +1 -0
- package/assets/{geo-json-CVaNUZbb.js → geo-json-Dswzlx0K.js} +1 -1
- package/assets/{handsontable-CZQ5Ietj.js → handsontable-DQYtlTE2.js} +1 -1
- package/assets/home-DlxjWnrt.js +2 -0
- package/assets/icon-BWrEqTE-.js +1 -0
- package/assets/{init-user-DqMDju_E.js → init-user-DKSIGCcH.js} +1 -1
- package/assets/{input-error-g1h6ps7t.js → input-error-BBzQCTcg.js} +1 -1
- package/assets/list-CjOxUyML.js +1 -0
- package/assets/{list-table-Br0K3rXg.js → list-table-DMJKIWta.js} +1 -1
- package/assets/login-5G-1gzoH.js +1 -0
- package/assets/manifest.json +96 -101
- package/assets/{material-icon-BIcI8APG.js → material-icon-BE8cT_z7.js} +1 -1
- package/assets/{media-manager-CTstvyHm.js → media-manager-DWLUhFyJ.js} +1 -1
- package/assets/{module-CpZBs0fN.js → module-9RNagTns.js} +1 -1
- package/assets/{multi-select-BFWbEjH-.js → multi-select-BnR59_kI.js} +1 -1
- package/assets/{nav-footer-bO8D-Yir.js → nav-footer-Dq1Z6Fmw.js} +1 -1
- package/assets/{nav-main-DVgvko8g.js → nav-main-DQNNAKwu.js} +1 -1
- package/assets/{nav-user-vIwYShwE.js → nav-user-q7QW6ZiI.js} +1 -1
- package/assets/notification-CIUVTHsw.js +1 -0
- package/assets/{pagination-render-rZ5_6g0n.js → pagination-render-PLbPRWg5.js} +1 -1
- package/assets/{register-Kfu8zmmu.js → register-48nlLgHz.js} +1 -1
- package/assets/{tabs-CwgzWt48.js → tabs-D5eQoog9.js} +1 -1
- package/assets/{theme-switcher-fzVA8btX.js → theme-switcher-BZ6eg-WU.js} +1 -1
- package/assets/{user-info-Db5Y8KeN.js → user-info-CJp_GYZl.js} +1 -1
- package/assets/{user-menu-content-Bc8YNZPf.js → user-menu-content-ljwR9luU.js} +1 -1
- package/assets/{welcome-MKPFhPtG.js → welcome-CBKz_MRJ.js} +1 -1
- package/controllers/add.js +0 -2
- package/controllers/edit.js +3 -3
- package/controllers/login.js +21 -56
- package/controllers/remove.js +11 -2
- package/helpers/diffHelpers.d.ts +1 -1
- package/helpers/diffHelpers.js +52 -7
- package/helpers/inertiaAutHelper.js +19 -0
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/interfaces/adminpanelConfig.d.ts +12 -0
- package/interfaces/types.d.ts +12 -2
- package/lib/Adminizer.d.ts +0 -8
- package/lib/Adminizer.js +0 -9
- package/lib/v4/DataAccessor.d.ts +1 -1
- package/lib/v4/model/AbstractModel.js +12 -0
- package/lib/v4/model/adapter/sequelize.js +1 -1
- package/lib/v4/notifications/AbstractNotificationService.js +1 -0
- package/lib/v4/notifications/GeneralNotificationService.js +1 -1
- package/lib/v4/notifications/SystemNotificationService.js +4 -3
- package/package.json +1 -1
- package/translations/ar.json +5 -4
- package/translations/cn.json +5 -4
- package/translations/de.json +72 -71
- package/translations/en.json +5 -4
- package/translations/es.json +5 -4
- package/translations/fr.json +5 -4
- package/translations/hi.json +5 -4
- package/translations/jp.json +5 -4
- package/translations/ko.json +5 -4
- package/translations/pt.json +5 -4
- package/translations/ru.json +2 -1
- package/translations/ua.json +5 -4
- package/translations/uz.json +73 -72
- package/translations/vi.json +5 -4
- package/assets/add-BNb5A_qF.js +0 -1
- package/assets/add-group-RRjHTu93.js +0 -1
- package/assets/add-user-DSuvcKp6.js +0 -1
- package/assets/app-layout-ContoN1K.js +0 -1
- package/assets/app-sidebar-header-CK8t32cm.js +0 -1
- package/assets/form-C9P9m_9q.js +0 -1
- package/assets/home-BWHeZm-1.js +0 -2
- package/assets/icon-ChQBPA5l.js +0 -1
- package/assets/list-EEgAn-nx.js +0 -1
- package/assets/login-BR9cqsPn.js +0 -1
- package/assets/notification-BTXEslqa.js +0 -1
- package/lib/v4/model/adapter/typeorm.d.ts +0 -24
- package/lib/v4/model/adapter/typeorm.js +0 -88
package/index.js
CHANGED
|
@@ -16,7 +16,6 @@ export * from "./interfaces/types";
|
|
|
16
16
|
export * from "./interfaces/MaaterialIcons";
|
|
17
17
|
export * from "./lib/v4/model/AbstractModel";
|
|
18
18
|
export * from "./lib/v4/model/adapter/waterline";
|
|
19
|
-
export * from "./lib/v4/model/adapter/typeorm";
|
|
20
19
|
export * from "./lib/v4/model/adapter/sequelize";
|
|
21
20
|
export * from "./lib/Adminizer";
|
|
22
21
|
export * from "./models/GroupAP";
|
|
@@ -36,6 +36,18 @@ export interface AdminpanelConfig {
|
|
|
36
36
|
captcha?: boolean;
|
|
37
37
|
/** Description displayed on login page */
|
|
38
38
|
description?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Optional additional link at the bottom of the login page
|
|
41
|
+
* Example:
|
|
42
|
+
* addishinalLoginPage: { link: '/model/userap/register', textKey: 'Additional login page' }
|
|
43
|
+
* link can be relative to routePrefix (e.g. 'model/help' or '/model/help') or absolute (https://...)
|
|
44
|
+
*/
|
|
45
|
+
addishinalLoginPage?: {
|
|
46
|
+
/** Target URL; relative to routePrefix unless absolute */
|
|
47
|
+
link: string;
|
|
48
|
+
/** Optional i18n key for label; defaults to 'Additional login page' */
|
|
49
|
+
textKey?: string;
|
|
50
|
+
};
|
|
39
51
|
};
|
|
40
52
|
/**
|
|
41
53
|
* @alpha
|
package/interfaces/types.d.ts
CHANGED
|
@@ -25,6 +25,16 @@ export interface PropsField {
|
|
|
25
25
|
isIn?: string[] | number[] | boolean[];
|
|
26
26
|
options?: Record<string, unknown> | Record<string, unknown>[];
|
|
27
27
|
}
|
|
28
|
+
export interface DiffChanges {
|
|
29
|
+
field: string;
|
|
30
|
+
oldValue: any;
|
|
31
|
+
newValue: any;
|
|
32
|
+
type: string;
|
|
33
|
+
}
|
|
34
|
+
export interface Diff {
|
|
35
|
+
changes: DiffChanges[];
|
|
36
|
+
summary: string;
|
|
37
|
+
}
|
|
28
38
|
export interface INotification {
|
|
29
39
|
id: string;
|
|
30
40
|
title: string;
|
|
@@ -37,8 +47,8 @@ export interface INotification {
|
|
|
37
47
|
iconColor: string;
|
|
38
48
|
};
|
|
39
49
|
notificationClass: string;
|
|
40
|
-
channel: string;
|
|
41
|
-
metadata?: Record<string | number, any
|
|
50
|
+
channel: string | 'created' | 'updated' | 'deleted' | 'system';
|
|
51
|
+
metadata?: Record<string | number, any> | Diff;
|
|
42
52
|
}
|
|
43
53
|
export interface INotificationEvent {
|
|
44
54
|
type: 'notification' | 'heartbeat' | 'connected' | 'error';
|
package/lib/Adminizer.d.ts
CHANGED
|
@@ -14,8 +14,6 @@ import { ControlsHandler } from "./v4/controls/ControlsHandler";
|
|
|
14
14
|
import { CatalogHandler } from "./v4/catalog/CatalogHandler";
|
|
15
15
|
import { NotificationHandler } from './v4/notifications/NotificationHandler';
|
|
16
16
|
import { INotification } from "../interfaces/types";
|
|
17
|
-
import { UserAP } from "models/UserAP";
|
|
18
|
-
export type AuthHandler = (req: ReqType, login: string, password: string) => Promise<Partial<UserAP> | null>;
|
|
19
17
|
export declare class Adminizer {
|
|
20
18
|
/**
|
|
21
19
|
* If you convey this default Middleware, it will add it to the very top of the router,
|
|
@@ -37,14 +35,8 @@ export declare class Adminizer {
|
|
|
37
35
|
controlsHandler: ControlsHandler;
|
|
38
36
|
catalogHandler: CatalogHandler;
|
|
39
37
|
jwtSecret: string;
|
|
40
|
-
authHandler?: AuthHandler;
|
|
41
38
|
static logger: winston.Logger;
|
|
42
39
|
constructor(ormAdapters: AbstractAdapter[]);
|
|
43
|
-
/**
|
|
44
|
-
* Registers an external authentication handler. If a user is not found in UserAP
|
|
45
|
-
* during login, this handler will be invoked to authenticate against an external source.
|
|
46
|
-
*/
|
|
47
|
-
setAuthHandler(handler: AuthHandler): void;
|
|
48
40
|
getMiddleware(): (req: express.Request, res: express.Response, next: () => void) => void;
|
|
49
41
|
/**
|
|
50
42
|
* Vite middleware
|
package/lib/Adminizer.js
CHANGED
|
@@ -54,8 +54,6 @@ export class Adminizer {
|
|
|
54
54
|
catalogHandler;
|
|
55
55
|
// Constants
|
|
56
56
|
jwtSecret = process.env.JWT_SECRET ?? uuid();
|
|
57
|
-
// External auth handler
|
|
58
|
-
authHandler;
|
|
59
57
|
static logger = winston.createLogger({
|
|
60
58
|
level: process.env.LOG_LEVEL ?? "debug",
|
|
61
59
|
format: winston.format.combine(winston.format.timestamp(), winston.format.printf(({ timestamp, level, message, ...meta }) => {
|
|
@@ -72,13 +70,6 @@ export class Adminizer {
|
|
|
72
70
|
this._emitter = new EventEmitter();
|
|
73
71
|
this.ormAdapters = ormAdapters;
|
|
74
72
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Registers an external authentication handler. If a user is not found in UserAP
|
|
77
|
-
* during login, this handler will be invoked to authenticate against an external source.
|
|
78
|
-
*/
|
|
79
|
-
setAuthHandler(handler) {
|
|
80
|
-
this.authHandler = handler;
|
|
81
|
-
}
|
|
82
73
|
getMiddleware() {
|
|
83
74
|
return (req, res, next) => {
|
|
84
75
|
try {
|
package/lib/v4/DataAccessor.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { Fields } from "../../helpers/fieldsHelper";
|
|
|
7
7
|
import { Adminizer } from "../Adminizer";
|
|
8
8
|
import { UserAP } from "models/UserAP";
|
|
9
9
|
export declare class DataAccessor {
|
|
10
|
-
|
|
10
|
+
readonly adminizer: Adminizer;
|
|
11
11
|
user: UserAP;
|
|
12
12
|
entity: Entity;
|
|
13
13
|
action: ActionType;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatChanges, sanitizeForDiff } from "../../../helpers/diffHelpers";
|
|
1
2
|
export class AbstractModel {
|
|
2
3
|
modelname;
|
|
3
4
|
attributes;
|
|
@@ -12,6 +13,17 @@ export class AbstractModel {
|
|
|
12
13
|
async create(data, dataAccessor) {
|
|
13
14
|
let _data = await dataAccessor.setUserRelationAccess(dataAccessor.process(data));
|
|
14
15
|
let record = await this._create(_data);
|
|
16
|
+
// console.log(record.toJSON());
|
|
17
|
+
//Create diff
|
|
18
|
+
const cleanNewRecord = sanitizeForDiff(_data);
|
|
19
|
+
const formattedChanges = formatChanges({}, {}, cleanNewRecord, 'add');
|
|
20
|
+
// log system event notification с diff
|
|
21
|
+
await dataAccessor.adminizer.logSystemCreatedEvent('Created',
|
|
22
|
+
//@ts-ignore
|
|
23
|
+
`user ${dataAccessor.user.login} create ${dataAccessor.entity.name} ${record[this.primaryKey]}`, {
|
|
24
|
+
changes: formattedChanges,
|
|
25
|
+
summary: `Created ${formattedChanges.length} fields`
|
|
26
|
+
});
|
|
15
27
|
return dataAccessor.process(record);
|
|
16
28
|
}
|
|
17
29
|
async findOne(criteria, dataAccessor) {
|
|
@@ -325,7 +325,7 @@ export class SequelizeModel extends AbstractModel {
|
|
|
325
325
|
}
|
|
326
326
|
await instance.reload({ include: Object.values(this.model.associations) });
|
|
327
327
|
const pk = this.primaryKey;
|
|
328
|
-
const fresh = await this.model.findByPk(instance.get(pk), { include: assocNames.map(a => ({ association: a })) });
|
|
328
|
+
const fresh = (await this.model.findByPk(instance.get(pk), { include: assocNames.map(a => ({ association: a })) })).toJSON();
|
|
329
329
|
// console.debug(">> Результат после reload:", fresh?.toJSON());
|
|
330
330
|
return fresh;
|
|
331
331
|
}
|
|
@@ -8,6 +8,7 @@ export class AbstractNotificationService extends EventEmitter {
|
|
|
8
8
|
this.adminizer = adminizer;
|
|
9
9
|
}
|
|
10
10
|
// Добавление клиента
|
|
11
|
+
// TODO - Проверить, что клиент имеет права на получение уведомлений
|
|
11
12
|
addClient(clientId, sendFn) {
|
|
12
13
|
this.clients.set(clientId, sendFn);
|
|
13
14
|
Adminizer.log.info(`[${this.notificationClass}] Client ${clientId} connected. Total: ${this.clients.size}`);
|
|
@@ -16,6 +16,7 @@ export class SystemNotificationService extends AbstractNotificationService {
|
|
|
16
16
|
// Сохраняем в базу
|
|
17
17
|
if (this.adminizer.modelHandler.model.has('notificationap')) {
|
|
18
18
|
try {
|
|
19
|
+
// Idia how to keep in DB notification raw data ['user %s created %s in model %s', user, instance.name, modelName] as print_f()
|
|
19
20
|
notificationDB = await this.adminizer.modelHandler.model.get('notificationap')["_create"](fullNotification);
|
|
20
21
|
const users = await this.adminizer.modelHandler.model.get('userap')["_find"]({ isAdministrator: 1 });
|
|
21
22
|
for (const user of users) {
|
|
@@ -29,7 +30,7 @@ export class SystemNotificationService extends AbstractNotificationService {
|
|
|
29
30
|
const event = {
|
|
30
31
|
type: 'notification',
|
|
31
32
|
data: {
|
|
32
|
-
...notificationDB
|
|
33
|
+
...notificationDB,
|
|
33
34
|
icon: {
|
|
34
35
|
icon: this.icon,
|
|
35
36
|
iconColor: this.iconColor
|
|
@@ -37,14 +38,14 @@ export class SystemNotificationService extends AbstractNotificationService {
|
|
|
37
38
|
},
|
|
38
39
|
notificationClass: this.notificationClass,
|
|
39
40
|
userId: notification.userId ?? null,
|
|
40
|
-
channel: notification.channel // Добавляем информацию о канале
|
|
41
|
+
channel: notification.channel ?? 'system' // Добавляем информацию о канале
|
|
41
42
|
};
|
|
42
43
|
// Отправляем на все каналы или на конкретный канал
|
|
43
44
|
if (notification.channel) {
|
|
44
45
|
this.broadcastToChannel(notification.channel, event);
|
|
45
46
|
}
|
|
46
47
|
else {
|
|
47
|
-
this.
|
|
48
|
+
this.broadcastToChannel('system', event);
|
|
48
49
|
}
|
|
49
50
|
Adminizer.log.info(`[System] Notification dispatched: ${fullNotification.title}`);
|
|
50
51
|
return true;
|
package/package.json
CHANGED
package/translations/ar.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "ﺕﺍءﺍﺮﺟﻹﺍ",
|
|
4
4
|
"All": "ﻊﻴﻤﺠﻟﺍ",
|
|
5
5
|
"Are you sure?": "؟ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ",
|
|
6
|
-
"Back": "ﻒﻠﺧ",
|
|
7
|
-
"Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
|
|
8
|
-
"
|
|
6
|
+
"Back": "ﻒﻠﺧ",
|
|
7
|
+
"Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
|
|
8
|
+
"Additional login page": "صفحة تسجيل دخول إضافية",
|
|
9
|
+
"Clean": "Clean",
|
|
9
10
|
"Confirm Password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
|
|
10
11
|
"Confirm Password*": "*ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
|
|
11
12
|
"Create": "ﻖﻠﺨﻳ",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": ".ﻦﻴﻤﻴﻟﺍ ﻰﻠﻋﺃ ﻲﻓ Plus ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻨﻟﺎﺑ ﺎﻬﺘﻓﺎﺿﺇ ﻚﻨﻜﻤﻳ .ﻥﻵﺍ ﻰﺘﺣ ﺓﺩﺪﺤﻣ ﺓﺮﻐﺼﻣ ﻱﺃ ﻚﻳﺪ",
|
|
70
71
|
"create": "ﻖﻠﺨﻳ",
|
|
71
72
|
"create new": "ﺪﻳﺪﺟ ءﺎﺸﻧﺇ"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/cn.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "动作",
|
|
4
4
|
"All": "全部",
|
|
5
5
|
"Are you sure?": "你确定吗?",
|
|
6
|
-
"Back": "后退",
|
|
7
|
-
"Back to Login": "返回登录",
|
|
8
|
-
"
|
|
6
|
+
"Back": "后退",
|
|
7
|
+
"Back to Login": "返回登录",
|
|
8
|
+
"Additional login page": "额外的登录页面",
|
|
9
|
+
"Clean": "干净的",
|
|
9
10
|
"Confirm Password": "确认密码",
|
|
10
11
|
"Confirm Password*": "确认密码*",
|
|
11
12
|
"Create": "创造",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "您还没有选择任何小部件。您可以通过单击右上角的加号来添加它们。",
|
|
70
71
|
"create": "创造",
|
|
71
72
|
"create new": "创建新"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/de.json
CHANGED
|
@@ -1,72 +1,73 @@
|
|
|
1
1
|
{
|
|
2
|
-
"Action completed": "Aktion abgeschlossen",
|
|
3
|
-
"Actions": "Aktionen",
|
|
4
|
-
"All": "Alle",
|
|
5
|
-
"Are you sure?": "Bist du sicher?",
|
|
6
|
-
"Back": "Zurück",
|
|
7
|
-
"Back to Login": "Zurück zum Anmeldung",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"Confirm Password
|
|
11
|
-
"
|
|
12
|
-
"Create
|
|
13
|
-
"Create
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"Full
|
|
22
|
-
"
|
|
23
|
-
"Group
|
|
24
|
-
"Group
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"Is
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"No
|
|
36
|
-
"No
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"Record was removed
|
|
49
|
-
"Record was
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"Select
|
|
57
|
-
"Select
|
|
58
|
-
"Select
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"User
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"create
|
|
72
|
-
|
|
2
|
+
"Action completed": "Aktion abgeschlossen",
|
|
3
|
+
"Actions": "Aktionen",
|
|
4
|
+
"All": "Alle",
|
|
5
|
+
"Are you sure?": "Bist du sicher?",
|
|
6
|
+
"Back": "Zurück",
|
|
7
|
+
"Back to Login": "Zurück zum Anmeldung",
|
|
8
|
+
"Additional login page": "Zusätzliche Anmeldeseite",
|
|
9
|
+
"Clean": "Sauber",
|
|
10
|
+
"Confirm Password": "Passwort bestätigen",
|
|
11
|
+
"Confirm Password*": "Passwort bestätigen*",
|
|
12
|
+
"Create": "Erstellen",
|
|
13
|
+
"Create a new administrator": "Erstellen Sie einen neuen Administrator",
|
|
14
|
+
"Create an Account": "Ein Konto erstellen",
|
|
15
|
+
"Custom": "Brauch",
|
|
16
|
+
"Delete": "Löschen",
|
|
17
|
+
"E-mail": "E-Mail",
|
|
18
|
+
"Edit": "Bearbeiten",
|
|
19
|
+
"Email": "E-Mail",
|
|
20
|
+
"Fast links": "Schnelle Links",
|
|
21
|
+
"Full Name": "Vollständiger Name",
|
|
22
|
+
"Full name": "Vollständiger Name",
|
|
23
|
+
"Group description": "Gruppenbeschreibung",
|
|
24
|
+
"Group name": "Gruppenname",
|
|
25
|
+
"Group settings": "Gruppeneinstellungen",
|
|
26
|
+
"Info": "Info",
|
|
27
|
+
"Is Administrator": "Ist Administrator",
|
|
28
|
+
"Is confirmed": "Wird bestätigt",
|
|
29
|
+
"Link": "Link",
|
|
30
|
+
"Locale": "Gebietsschema",
|
|
31
|
+
"Log in": "Einloggen",
|
|
32
|
+
"Login": "Login",
|
|
33
|
+
"Members": "Mitglieder",
|
|
34
|
+
"New record was created": "Neuer Rekord wurde erstellt",
|
|
35
|
+
"No": "NEIN",
|
|
36
|
+
"No records found !": "Keine Aufzeichnungen gefunden!",
|
|
37
|
+
"No widgets found": "Keine Widgets gefunden",
|
|
38
|
+
"Not found": "Nicht gefunden",
|
|
39
|
+
"OR": "ODER",
|
|
40
|
+
"Open in a new window": "Öffnen Sie in einem neuen Fenster",
|
|
41
|
+
"Password": "Passwort",
|
|
42
|
+
"Passwords do not match!": "Passwörter stimmen nicht überein!",
|
|
43
|
+
"Performing an action...": "Eine Aktion ausführen ...",
|
|
44
|
+
"Please fill out the fields below": "Bitte füllen Sie die folgenden Felder aus",
|
|
45
|
+
"Pretend to be a user": "Vorgeben, Benutzer zu sein",
|
|
46
|
+
"Profile expires": "Profil läuft ab",
|
|
47
|
+
"Quick actions": "Schnelle Aktionen",
|
|
48
|
+
"Record was not removed": "Rekord wurde nicht entfernt",
|
|
49
|
+
"Record was removed successfully !": "Rekord wurde erfolgreich entfernt!",
|
|
50
|
+
"Record was updated": "Der Datensatz wurde aktualisiert",
|
|
51
|
+
"Register": "Registrieren",
|
|
52
|
+
"Repeat password": "Passwort wiederholen",
|
|
53
|
+
"Reset": "Zurücksetzen",
|
|
54
|
+
"Save": "Speichern",
|
|
55
|
+
"Search": "Suchen",
|
|
56
|
+
"Select": "Wählen",
|
|
57
|
+
"Select Ids": "IDS auswählen",
|
|
58
|
+
"Select Item type": "Wählen Sie den Elementtyp",
|
|
59
|
+
"Select Items": "Elemente auswählen",
|
|
60
|
+
"Switcher": "Schalter",
|
|
61
|
+
"Timezone": "Zeitzone",
|
|
62
|
+
"Title": "Titel",
|
|
63
|
+
"Toggle to change the grid. To save the grid, turn it off.": "Umschalten, um das Netz zu ändern. Um das Netz zu retten, schalten Sie es aus.",
|
|
64
|
+
"User groups": "Benutzergruppen",
|
|
65
|
+
"User settings": "Benutzereinstellungen",
|
|
66
|
+
"Values in \"password\" and \"repeatPassword\" fields should be the same": "Werte in \"Passwort\" und \"RepeatPassword\" -Feldern sollten gleich sein",
|
|
67
|
+
"View": "Sicht",
|
|
68
|
+
"Welcome": "Willkommen",
|
|
69
|
+
"Yes": "Ja",
|
|
70
|
+
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Sie haben noch keine Widgets ausgewählt. Sie können sie hinzufügen, indem Sie oben rechts auf das Pluszeichen klicken.",
|
|
71
|
+
"create": "erstellen",
|
|
72
|
+
"create new": "neu erstellen"
|
|
73
|
+
}
|
package/translations/en.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Actions",
|
|
4
4
|
"All": "All",
|
|
5
5
|
"Are you sure?": "Are you sure?",
|
|
6
|
-
"Back": "Back",
|
|
7
|
-
"Back to Login": "Back to Login",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Back",
|
|
7
|
+
"Back to Login": "Back to Login",
|
|
8
|
+
"Additional login page": "Additional login page",
|
|
9
|
+
"Clean": "Clean",
|
|
9
10
|
"Confirm Password": "Confirm Password",
|
|
10
11
|
"Confirm Password*": "Confirm Password*",
|
|
11
12
|
"Create": "Create",
|
|
@@ -139,4 +140,4 @@
|
|
|
139
140
|
"Sizes/Ver": "Sizes/Ver",
|
|
140
141
|
"Locales": "Locales",
|
|
141
142
|
"Date": "Date"
|
|
142
|
-
}
|
|
143
|
+
}
|
package/translations/es.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Comportamiento",
|
|
4
4
|
"All": "Todo",
|
|
5
5
|
"Are you sure?": "¿Está seguro?",
|
|
6
|
-
"Back": "Atrás",
|
|
7
|
-
"Back to Login": "Volver a iniciar sesión",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Atrás",
|
|
7
|
+
"Back to Login": "Volver a iniciar sesión",
|
|
8
|
+
"Additional login page": "Página adicional de inicio de sesión",
|
|
9
|
+
"Clean": "Limpio",
|
|
9
10
|
"Confirm Password": "confirmar Contraseña",
|
|
10
11
|
"Confirm Password*": "Confirmar Contraseña*",
|
|
11
12
|
"Create": "Crear",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Todavía no tiene widgets seleccionados. Puede agregarlos haciendo clic en el signo más en la parte superior derecha.",
|
|
70
71
|
"create": "crear",
|
|
71
72
|
"create new": "crear nuevo"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/fr.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Actes",
|
|
4
4
|
"All": "Tous",
|
|
5
5
|
"Are you sure?": "Es-tu sûr?",
|
|
6
|
-
"Back": "Dos",
|
|
7
|
-
"Back to Login": "Retour à la connexion",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Dos",
|
|
7
|
+
"Back to Login": "Retour à la connexion",
|
|
8
|
+
"Additional login page": "Page de connexion supplémentaire",
|
|
9
|
+
"Clean": "Faire le ménage",
|
|
9
10
|
"Confirm Password": "Confirmez le mot de passe",
|
|
10
11
|
"Confirm Password*": "Confirmez le mot de passe*",
|
|
11
12
|
"Create": "Créer",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Vous n'avez pas encore de widgets sélectionnés. Vous pouvez les ajouter en cliquant sur le panneau Plus en haut à droite.",
|
|
70
71
|
"create": "créer",
|
|
71
72
|
"create new": "créer un nouveau"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/hi.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "कार्रवाई",
|
|
4
4
|
"All": "सभी",
|
|
5
5
|
"Are you sure?": "क्या आपको यकीन है?",
|
|
6
|
-
"Back": "पीछे",
|
|
7
|
-
"Back to Login": "लॉगिन पर वापस जाएं",
|
|
8
|
-
"
|
|
6
|
+
"Back": "पीछे",
|
|
7
|
+
"Back to Login": "लॉगिन पर वापस जाएं",
|
|
8
|
+
"Additional login page": "अतिरिक्त लॉगिन पृष्ठ",
|
|
9
|
+
"Clean": "साफ",
|
|
9
10
|
"Confirm Password": "पासवर्ड की पुष्टि कीजिये",
|
|
10
11
|
"Confirm Password*": "पासवर्ड की पुष्टि कीजिये*",
|
|
11
12
|
"Create": "बनाएं",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "आपके पास अभी तक कोई विजेट नहीं है। आप उन्हें शीर्ष दाईं ओर प्लस साइन पर क्लिक करके जोड़ सकते हैं।",
|
|
70
71
|
"create": "बनाएं",
|
|
71
72
|
"create new": "नया निर्माण"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/jp.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "アクション",
|
|
4
4
|
"All": "全て",
|
|
5
5
|
"Are you sure?": "本気ですか?",
|
|
6
|
-
"Back": "戻る",
|
|
7
|
-
"Back to Login": "ログインに戻ります",
|
|
8
|
-
"
|
|
6
|
+
"Back": "戻る",
|
|
7
|
+
"Back to Login": "ログインに戻ります",
|
|
8
|
+
"Additional login page": "追加のログインページ",
|
|
9
|
+
"Clean": "クリーン",
|
|
9
10
|
"Confirm Password": "パスワードを認証する",
|
|
10
11
|
"Confirm Password*": "パスワードを認証する*",
|
|
11
12
|
"Create": "作成する",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "まだ選択されているウィジェットはありません。右上のプラスサインをクリックして追加できます。",
|
|
70
71
|
"create": "作成する",
|
|
71
72
|
"create new": "新しいものを作成します"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/ko.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "행위",
|
|
4
4
|
"All": "모두",
|
|
5
5
|
"Are you sure?": "확실합니까?",
|
|
6
|
-
"Back": "뒤쪽에",
|
|
7
|
-
"Back to Login": "로그인으로 돌아갑니다",
|
|
8
|
-
"
|
|
6
|
+
"Back": "뒤쪽에",
|
|
7
|
+
"Back to Login": "로그인으로 돌아갑니다",
|
|
8
|
+
"Additional login page": "추가 로그인 페이지",
|
|
9
|
+
"Clean": "깨끗한",
|
|
9
10
|
"Confirm Password": "비밀번호를 확인하십시오",
|
|
10
11
|
"Confirm Password*": "비밀번호 확인*",
|
|
11
12
|
"Create": "만들다",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "아직 위젯이 선택되지 않았습니다. 오른쪽 상단의 플러스 부호를 클릭하여 추가 할 수 있습니다.",
|
|
70
71
|
"create": "만들다",
|
|
71
72
|
"create new": "새로운 창조"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/pt.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Ações",
|
|
4
4
|
"All": "Todos",
|
|
5
5
|
"Are you sure?": "Tem certeza?",
|
|
6
|
-
"Back": "Voltar",
|
|
7
|
-
"Back to Login": "De volta ao login",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Voltar",
|
|
7
|
+
"Back to Login": "De volta ao login",
|
|
8
|
+
"Additional login page": "Página adicional de login",
|
|
9
|
+
"Clean": "Limpar",
|
|
9
10
|
"Confirm Password": "Confirme sua senha",
|
|
10
11
|
"Confirm Password*": "Confirme sua senha*",
|
|
11
12
|
"Create": "Criar",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Você ainda não tem widgets selecionados. Você pode adicioná -los clicando no sinal de mais no canto superior direito.",
|
|
70
71
|
"create": "criar",
|
|
71
72
|
"create new": "Crie novo"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/ru.json
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"Are you sure?": "Вы уверены?",
|
|
6
6
|
"Back": " Назад",
|
|
7
7
|
"Back to Login": "Назад ко входу",
|
|
8
|
+
"Additional login page": "Дополнительная страница входа",
|
|
8
9
|
"Clean": "Очистить",
|
|
9
10
|
"Confirm Password": "Подтвердите пароль",
|
|
10
11
|
"Confirm Password*": "Подтвердите пароль*",
|
|
@@ -118,4 +119,4 @@
|
|
|
118
119
|
"W x H (orig.)": "W x H (orig.)",
|
|
119
120
|
"Sizes/Ver": "Sizes/Ver",
|
|
120
121
|
"Locales": "Locales"
|
|
121
|
-
}
|
|
122
|
+
}
|
package/translations/ua.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Дії",
|
|
4
4
|
"All": "Все",
|
|
5
5
|
"Are you sure?": "Ви впевнені?",
|
|
6
|
-
"Back": "Спинка",
|
|
7
|
-
"Back to Login": "Назад до входу",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Спинка",
|
|
7
|
+
"Back to Login": "Назад до входу",
|
|
8
|
+
"Additional login page": "Додаткова сторінка входу",
|
|
9
|
+
"Clean": "Чистий",
|
|
9
10
|
"Confirm Password": "Підтвердити пароль",
|
|
10
11
|
"Confirm Password*": "Підтвердити пароль*",
|
|
11
12
|
"Create": "Створити",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "У вас ще не вибрано жодних віджетів. Ви можете додати їх, натиснувши на знак плюс у верхній частині праворуч.",
|
|
70
71
|
"create": "створити",
|
|
71
72
|
"create new": "створити нове"
|
|
72
|
-
}
|
|
73
|
+
}
|