iobroker.time-tracker 0.7.1 → 0.7.2
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/README.md +18 -9
- package/build/lib/reports/pdf.js +8 -2
- package/build/lib/reports/pdf.js.map +2 -2
- package/build/lib/web/api.js +24 -4
- package/build/lib/web/api.js.map +2 -2
- package/build/lib/web/problem.js.map +2 -2
- package/io-package.json +14 -14
- package/package.json +1 -1
- package/src-pwa/src/i18n/de.json +5 -0
- package/src-pwa/src/i18n/en.json +5 -0
- package/src-pwa/src/i18n/es.json +5 -0
- package/src-pwa/src/i18n/fr.json +5 -0
- package/src-pwa/src/i18n/it.json +5 -0
- package/src-pwa/src/i18n/nl.json +5 -0
- package/src-pwa/src/i18n/pl.json +5 -0
- package/src-pwa/src/i18n/pt.json +5 -0
- package/src-pwa/src/i18n/ru.json +5 -0
- package/src-pwa/src/i18n/uk.json +5 -0
- package/src-pwa/src/i18n/zh-cn.json +5 -0
- package/www/assets/{index-D5fSC8CA.js → index-C0z1CkCi.js} +3 -3
- package/www/assets/index-C0z1CkCi.js.map +1 -0
- package/www/index.html +1 -1
- package/www/sw.js +1 -1
- package/www/sw.js.map +1 -1
- package/www/assets/index-D5fSC8CA.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/web/problem.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * `application/problem+json` responses (RFC 7807) with stable machine readable codes.\n *\n * Expected failures are raised as `HttpProblem` by the route handlers. Errors from the domain and storage\n * layers are mapped here, so a client always receives the same shape:\n *\n * ```\n * { \"type\": \"about:blank\", \"title\": \"Not Found\", \"status\": 404, \"code\": \"not_found\", \"detail\": \"\u2026\" }\n * ```\n *\n * Messages of unknown errors are **not** exposed (they may contain internals); they are logged by the caller.\n */\n\nimport { RevisionConflictError } from \"../db/repositories/entries\";\nimport { LoginExistsError, UnknownRoleError } from \"../db/repositories/users\";\nimport { UnknownAbsenceTypeError } from \"../db/repositories/absences\";\nimport { NotFoundError, ValidationError, type FieldIssue } from \"../errors\";\n\n/** The content type every problem document is sent with (RFC 9457). */\nexport const PROBLEM_CONTENT_TYPE = \"application/problem+json; charset=utf-8\";\n\n/** Stable error codes of the API. */\nexport type ProblemCode =\n\t| \"bad_request\"\n\t| \"invalid_credentials\"\n\t| \"locked_out\"\n\t| \"no_session\"\n\t| \"session_expired\"\n\t| \"user_inactive\"\n\t| \"permission_denied\"\n\t| \"csrf_rejected\"\n\t| \"not_found\"\n\t| \"method_not_allowed\"\n\t| \"conflict\"\n\t| \"revision_conflict\"\n\t| \"payload_too_large\"\n\t| \"unsupported_media_type\"\n\t| \"kiosk_disabled\"\n\t| \"not_configured\"\n\t| \"report_font_missing\"\n\t| \"backup_invalid\"\n\t| \"import_mismatch\"\n\t| \"rate_limited\"\n\t// an employee may only change own punches inside the edit window of the instance\n\t| \"edit_window_closed\"\n\t| \"internal_error\";\n\n/** A problem document. */\nexport interface ProblemDetails {\n\t/** URI reference identifying the problem type (always `about:blank` here) */\n\ttype: string;\n\t/** Short, human readable summary */\n\ttitle: string;\n\t/** HTTP status code */\n\tstatus: number;\n\t/** Stable machine readable code */\n\tcode: ProblemCode;\n\t/** Explanation of this occurrence */\n\tdetail?: string;\n\t/** Request path the problem occurred on */\n\tinstance?: string;\n\t/** Invalid fields of a validation failure (RFC 9457) */\n\terrors?: { path: string; message: string }[];\n}\n\nconst TITLES: Record<number, string> = {\n\t400: \"Bad Request\",\n\t401: \"Unauthorized\",\n\t403: \"Forbidden\",\n\t404: \"Not Found\",\n\t405: \"Method Not Allowed\",\n\t409: \"Conflict\",\n\t413: \"Payload Too Large\",\n\t415: \"Unsupported Media Type\",\n\t423: \"Locked\",\n\t429: \"Too Many Requests\",\n\t500: \"Internal Server Error\",\n};\n\n/** An error that is returned to the client as `application/problem+json`. */\nexport class HttpProblem extends Error {\n\t/** Title used in the problem document. */\n\tpublic readonly problemTitle: string;\n\n\t/**\n\t * Creates the error.\n\t *\n\t * @param status - HTTP status code\n\t * @param code - stable error code\n\t * @param detail - optional explanation\n\t * @param title - optional title (defaults to the reason phrase of the status)\n\t * @param fields - optional list of invalid fields\n\t */\n\tconstructor(\n\t\tpublic readonly status: number,\n\t\tpublic readonly code: ProblemCode,\n\t\tpublic readonly detail?: string,\n\t\ttitle?: string,\n\t\tpublic readonly fields: FieldIssue[] = [],\n\t) {\n\t\tsuper(`${status} ${code}${detail ? `: ${detail}` : \"\"}`);\n\t\tthis.name = \"HttpProblem\";\n\t\tthis.problemTitle = title ?? TITLES[status] ?? \"Error\";\n\t}\n\n\t/**\n\t * Converts the error into a problem document.\n\t *\n\t * @param instance - request path the problem occurred on\n\t * @returns problem document\n\t */\n\tpublic toProblem(instance?: string): ProblemDetails {\n\t\treturn {\n\t\t\ttype: \"about:blank\",\n\t\t\ttitle: this.problemTitle,\n\t\t\tstatus: this.status,\n\t\t\tcode: this.code,\n\t\t\t...(this.detail ? { detail: this.detail } : {}),\n\t\t\t...(this.fields.length > 0\n\t\t\t\t? { errors: this.fields.map(field => ({ path: field.path, message: field.message })) }\n\t\t\t\t: {}),\n\t\t\t...(instance ? { instance } : {}),\n\t\t};\n\t}\n}\n\n/**\n * Short helper for the common cases.\n *\n * @param status - HTTP status code\n * @param code - stable error code\n * @param detail - optional explanation\n * @returns the problem error\n */\nexport function problem(status: number, code: ProblemCode, detail?: string): HttpProblem {\n\treturn new HttpProblem(status, code, detail);\n}\n\n/**\n * Maps an arbitrary error onto a problem document.\n *\n * Known domain errors keep their meaning (a stale revision is a `409`, a duplicate login a `409`); messages of\n * unknown errors are replaced by a generic text, so no internals leak into the response.\n *\n * @param error - error thrown by a handler or a service\n * @param instance - request path\n * @returns problem document and a flag telling whether this is an unexpected (server side) failure\n */\nexport function toProblem(error: unknown, instance?: string): { problem: ProblemDetails; unexpected: boolean } {\n\tif (error instanceof HttpProblem) {\n\t\treturn { problem: error.toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof ValidationError) {\n\t\treturn {\n\t\t\tproblem: new HttpProblem(400, \"bad_request\", error.message, undefined, error.fields).toProblem(instance),\n\t\t\tunexpected: false,\n\t\t};\n\t}\n\tif (error instanceof NotFoundError) {\n\t\treturn { problem: new HttpProblem(404, \"not_found\", error.message).toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof RevisionConflictError) {\n\t\treturn {\n\t\t\tproblem: new HttpProblem(\n\t\t\t\t409,\n\t\t\t\t\"revision_conflict\",\n\t\t\t\t`the record was changed by someone else (current revision ${error.current.revision})`,\n\t\t\t).toProblem(instance),\n\t\t\tunexpected: false,\n\t\t};\n\t}\n\tif (error instanceof LoginExistsError || error instanceof UnknownRoleError) {\n\t\treturn { problem: new HttpProblem(409, \"conflict\", error.message).toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof UnknownAbsenceTypeError) {\n\t\treturn { problem: new HttpProblem(400, \"bad_request\", error.message).toProblem(instance), unexpected: false };\n\t}\n\n\treturn {\n\t\tproblem: new HttpProblem(500, \"internal_error\", \"the request could not be processed\").toProblem(instance),\n\t\tunexpected: true,\n\t};\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,qBAAsC;AACtC,mBAAmD;AACnD,sBAAwC;AACxC,oBAAgE;AAGzD,MAAM,uBAAuB;
|
|
4
|
+
"sourcesContent": ["/**\n * `application/problem+json` responses (RFC 7807) with stable machine readable codes.\n *\n * Expected failures are raised as `HttpProblem` by the route handlers. Errors from the domain and storage\n * layers are mapped here, so a client always receives the same shape:\n *\n * ```\n * { \"type\": \"about:blank\", \"title\": \"Not Found\", \"status\": 404, \"code\": \"not_found\", \"detail\": \"\u2026\" }\n * ```\n *\n * Messages of unknown errors are **not** exposed (they may contain internals); they are logged by the caller.\n */\n\nimport { RevisionConflictError } from \"../db/repositories/entries\";\nimport { LoginExistsError, UnknownRoleError } from \"../db/repositories/users\";\nimport { UnknownAbsenceTypeError } from \"../db/repositories/absences\";\nimport { NotFoundError, ValidationError, type FieldIssue } from \"../errors\";\n\n/** The content type every problem document is sent with (RFC 9457). */\nexport const PROBLEM_CONTENT_TYPE = \"application/problem+json; charset=utf-8\";\n\n/** Stable error codes of the API. */\nexport type ProblemCode =\n\t| \"bad_request\"\n\t| \"invalid_credentials\"\n\t| \"locked_out\"\n\t| \"no_session\"\n\t| \"session_expired\"\n\t| \"user_inactive\"\n\t| \"permission_denied\"\n\t| \"csrf_rejected\"\n\t| \"not_found\"\n\t| \"method_not_allowed\"\n\t| \"conflict\"\n\t| \"revision_conflict\"\n\t| \"payload_too_large\"\n\t| \"unsupported_media_type\"\n\t| \"kiosk_disabled\"\n\t| \"not_configured\"\n\t| \"report_font_missing\"\n\t| \"backup_invalid\"\n\t| \"import_mismatch\"\n\t| \"rate_limited\"\n\t// an employee may only change own punches inside the edit window of the instance\n\t| \"edit_window_closed\"\n\t// the installation always keeps one active administrator\n\t| \"last_administrator\"\n\t| \"internal_error\";\n\n/** A problem document. */\nexport interface ProblemDetails {\n\t/** URI reference identifying the problem type (always `about:blank` here) */\n\ttype: string;\n\t/** Short, human readable summary */\n\ttitle: string;\n\t/** HTTP status code */\n\tstatus: number;\n\t/** Stable machine readable code */\n\tcode: ProblemCode;\n\t/** Explanation of this occurrence */\n\tdetail?: string;\n\t/** Request path the problem occurred on */\n\tinstance?: string;\n\t/** Invalid fields of a validation failure (RFC 9457) */\n\terrors?: { path: string; message: string }[];\n}\n\nconst TITLES: Record<number, string> = {\n\t400: \"Bad Request\",\n\t401: \"Unauthorized\",\n\t403: \"Forbidden\",\n\t404: \"Not Found\",\n\t405: \"Method Not Allowed\",\n\t409: \"Conflict\",\n\t413: \"Payload Too Large\",\n\t415: \"Unsupported Media Type\",\n\t423: \"Locked\",\n\t429: \"Too Many Requests\",\n\t500: \"Internal Server Error\",\n};\n\n/** An error that is returned to the client as `application/problem+json`. */\nexport class HttpProblem extends Error {\n\t/** Title used in the problem document. */\n\tpublic readonly problemTitle: string;\n\n\t/**\n\t * Creates the error.\n\t *\n\t * @param status - HTTP status code\n\t * @param code - stable error code\n\t * @param detail - optional explanation\n\t * @param title - optional title (defaults to the reason phrase of the status)\n\t * @param fields - optional list of invalid fields\n\t */\n\tconstructor(\n\t\tpublic readonly status: number,\n\t\tpublic readonly code: ProblemCode,\n\t\tpublic readonly detail?: string,\n\t\ttitle?: string,\n\t\tpublic readonly fields: FieldIssue[] = [],\n\t) {\n\t\tsuper(`${status} ${code}${detail ? `: ${detail}` : \"\"}`);\n\t\tthis.name = \"HttpProblem\";\n\t\tthis.problemTitle = title ?? TITLES[status] ?? \"Error\";\n\t}\n\n\t/**\n\t * Converts the error into a problem document.\n\t *\n\t * @param instance - request path the problem occurred on\n\t * @returns problem document\n\t */\n\tpublic toProblem(instance?: string): ProblemDetails {\n\t\treturn {\n\t\t\ttype: \"about:blank\",\n\t\t\ttitle: this.problemTitle,\n\t\t\tstatus: this.status,\n\t\t\tcode: this.code,\n\t\t\t...(this.detail ? { detail: this.detail } : {}),\n\t\t\t...(this.fields.length > 0\n\t\t\t\t? { errors: this.fields.map(field => ({ path: field.path, message: field.message })) }\n\t\t\t\t: {}),\n\t\t\t...(instance ? { instance } : {}),\n\t\t};\n\t}\n}\n\n/**\n * Short helper for the common cases.\n *\n * @param status - HTTP status code\n * @param code - stable error code\n * @param detail - optional explanation\n * @returns the problem error\n */\nexport function problem(status: number, code: ProblemCode, detail?: string): HttpProblem {\n\treturn new HttpProblem(status, code, detail);\n}\n\n/**\n * Maps an arbitrary error onto a problem document.\n *\n * Known domain errors keep their meaning (a stale revision is a `409`, a duplicate login a `409`); messages of\n * unknown errors are replaced by a generic text, so no internals leak into the response.\n *\n * @param error - error thrown by a handler or a service\n * @param instance - request path\n * @returns problem document and a flag telling whether this is an unexpected (server side) failure\n */\nexport function toProblem(error: unknown, instance?: string): { problem: ProblemDetails; unexpected: boolean } {\n\tif (error instanceof HttpProblem) {\n\t\treturn { problem: error.toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof ValidationError) {\n\t\treturn {\n\t\t\tproblem: new HttpProblem(400, \"bad_request\", error.message, undefined, error.fields).toProblem(instance),\n\t\t\tunexpected: false,\n\t\t};\n\t}\n\tif (error instanceof NotFoundError) {\n\t\treturn { problem: new HttpProblem(404, \"not_found\", error.message).toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof RevisionConflictError) {\n\t\treturn {\n\t\t\tproblem: new HttpProblem(\n\t\t\t\t409,\n\t\t\t\t\"revision_conflict\",\n\t\t\t\t`the record was changed by someone else (current revision ${error.current.revision})`,\n\t\t\t).toProblem(instance),\n\t\t\tunexpected: false,\n\t\t};\n\t}\n\tif (error instanceof LoginExistsError || error instanceof UnknownRoleError) {\n\t\treturn { problem: new HttpProblem(409, \"conflict\", error.message).toProblem(instance), unexpected: false };\n\t}\n\tif (error instanceof UnknownAbsenceTypeError) {\n\t\treturn { problem: new HttpProblem(400, \"bad_request\", error.message).toProblem(instance), unexpected: false };\n\t}\n\n\treturn {\n\t\tproblem: new HttpProblem(500, \"internal_error\", \"the request could not be processed\").toProblem(instance),\n\t\tunexpected: true,\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,qBAAsC;AACtC,mBAAmD;AACnD,sBAAwC;AACxC,oBAAgE;AAGzD,MAAM,uBAAuB;AAgDpC,MAAM,SAAiC;AAAA,EACtC,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACN;AAGO,MAAM,oBAAoB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAatC,YACiB,QACA,MACA,QAChB,OACgB,SAAuB,CAAC,GACvC;AArGH;AAsGE,UAAM,GAAG,MAAM,IAAI,IAAI,GAAG,SAAS,KAAK,MAAM,KAAK,EAAE,EAAE;AANvC;AACA;AACA;AAEA;AAGhB,SAAK,OAAO;AACZ,SAAK,gBAAe,6BAAS,OAAO,MAAM,MAAtB,YAA2B;AAAA,EAChD;AAAA;AAAA,EArBgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BT,UAAU,UAAmC;AACnD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,MAC7C,GAAI,KAAK,OAAO,SAAS,IACtB,EAAE,QAAQ,KAAK,OAAO,IAAI,YAAU,EAAE,MAAM,MAAM,MAAM,SAAS,MAAM,QAAQ,EAAE,EAAE,IACnF,CAAC;AAAA,MACJ,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAChC;AAAA,EACD;AACD;AAUO,SAAS,QAAQ,QAAgB,MAAmB,QAA8B;AACxF,SAAO,IAAI,YAAY,QAAQ,MAAM,MAAM;AAC5C;AAYO,SAAS,UAAU,OAAgB,UAAqE;AAC9G,MAAI,iBAAiB,aAAa;AACjC,WAAO,EAAE,SAAS,MAAM,UAAU,QAAQ,GAAG,YAAY,MAAM;AAAA,EAChE;AACA,MAAI,iBAAiB,+BAAiB;AACrC,WAAO;AAAA,MACN,SAAS,IAAI,YAAY,KAAK,eAAe,MAAM,SAAS,QAAW,MAAM,MAAM,EAAE,UAAU,QAAQ;AAAA,MACvG,YAAY;AAAA,IACb;AAAA,EACD;AACA,MAAI,iBAAiB,6BAAe;AACnC,WAAO,EAAE,SAAS,IAAI,YAAY,KAAK,aAAa,MAAM,OAAO,EAAE,UAAU,QAAQ,GAAG,YAAY,MAAM;AAAA,EAC3G;AACA,MAAI,iBAAiB,sCAAuB;AAC3C,WAAO;AAAA,MACN,SAAS,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,QACA,4DAA4D,MAAM,QAAQ,QAAQ;AAAA,MACnF,EAAE,UAAU,QAAQ;AAAA,MACpB,YAAY;AAAA,IACb;AAAA,EACD;AACA,MAAI,iBAAiB,iCAAoB,iBAAiB,+BAAkB;AAC3E,WAAO,EAAE,SAAS,IAAI,YAAY,KAAK,YAAY,MAAM,OAAO,EAAE,UAAU,QAAQ,GAAG,YAAY,MAAM;AAAA,EAC1G;AACA,MAAI,iBAAiB,yCAAyB;AAC7C,WAAO,EAAE,SAAS,IAAI,YAAY,KAAK,eAAe,MAAM,OAAO,EAAE,UAAU,QAAQ,GAAG,YAAY,MAAM;AAAA,EAC7G;AAEA,SAAO;AAAA,IACN,SAAS,IAAI,YAAY,KAAK,kBAAkB,oCAAoC,EAAE,UAAU,QAAQ;AAAA,IACxG,YAAY;AAAA,EACb;AACD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "time-tracker",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.2",
|
|
5
5
|
"nogit": true,
|
|
6
6
|
"news": {
|
|
7
|
+
"0.7.2": {
|
|
8
|
+
"en": "security: the administration cannot lock itself out any more. Deactivating or taking the admin role away from the last active administrator is refused (409 `last_administrator`), and the web app warns before it is tried on the own account — the switch of the own account explains why an account cannot deactivate itself. The PDF statement writes the absences left aligned on lines of their own, and the list of the absence types shows “visible for everybody” on a line of its own so that “reduces vacation” cannot push it out of the row any more.",
|
|
9
|
+
"de": "Sicherheit: Die Verwaltung kann sich nicht mehr aussperren – das Deaktivieren und das Entziehen der Administrator-Rolle wird abgelehnt, wenn es den letzten aktiven Administrator treffen würde (409 `last_administrator`), und die App warnt, wenn man es beim eigenen Konto versucht – der Schalter des eigenen Kontos erklärt, warum ein Konto sich nicht selbst deaktivieren kann. Der PDF-Stundennachweis schreibt die Abwesenheiten linksbündig in eigenen Zeilen, und die Liste der Abwesenheitsarten zeigt „Für alle sichtbar“ in einer eigenen Zeile, damit „Zieht vom Urlaub ab“ sie nicht mehr aus der Zeile drängt.",
|
|
10
|
+
"ru": "безопасность: администрация больше не может запереть себя — деактивация или снятие роли администратора отклоняется, если это последний активный администратор (409 `last_administrator`), а приложение предупреждает при попытке сделать это со своей учётной записью — переключатель своей учётной записи объясняет, почему она не может деактивировать себя сама. PDF-отчёт пишет отсутствия с выравниванием по левому краю отдельными строками, а список видов отсутствия показывает «видно всем» отдельной строкой, чтобы «уменьшает отпуск» больше не вытеснял её из строки.",
|
|
11
|
+
"pt": "segurança: a administração já não se pode bloquear — desativar ou retirar o papel de administrador ao último administrador ativo é recusado (409 `last_administrator`) e a aplicação avisa antes de o tentar na própria conta — o interruptor da própria conta explica porque é que ela não se pode desativar a si mesma. O extrato em PDF escreve as ausências alinhadas à esquerda em linhas próprias, e a lista dos tipos de ausência mostra «visível para todos» numa linha própria, para que «reduz as férias» já não a empurre para fora da linha.",
|
|
12
|
+
"nl": "veiligheid: de administratie kan zichzelf niet meer buitensluiten — het deactiveren of afnemen van de beheerdersrol wordt geweigerd als het de laatste actieve beheerder zou treffen (409 `last_administrator`), en de app waarschuwt voordat het op het eigen account wordt geprobeerd — de schakelaar van het eigen account legt uit waarom een account zichzelf niet kan deactiveren. De PDF-afrekening schrijft de afwezigheden links uitgelijnd in eigen regels, en de lijst met afwezigheidstypes toont „zichtbaar voor iedereen“ op een eigen regel, zodat „trekt vakantie af“ die niet meer uit de regel duwt.",
|
|
13
|
+
"fr": "sécurité : l'administration ne peut plus se verrouiller — la désactivation ou le retrait du rôle d'administrateur est refusé s'il touche le dernier administrateur actif (409 `last_administrator`), et l'application avertit avant de l'essayer sur le propre compte — l'interrupteur du propre compte explique pourquoi un compte ne peut pas se désactiver lui-même. Le relevé PDF écrit les absences alignées à gauche sur des lignes propres, et la liste des types d'absence affiche « visible pour tout le monde » sur une ligne à part, pour que « déduit des vacances » ne la repousse plus hors de la ligne.",
|
|
14
|
+
"it": "sicurezza: l'amministrazione non può più chiudersi fuori — la disattivazione o la rimozione del ruolo di amministratore viene rifiutata se riguarda l'ultimo amministratore attivo (409 `last_administrator`) e l'app avvisa prima di provarla sul proprio account — l'interruttore del proprio account spiega perché un account non può disattivarsi da solo. Il rendiconto PDF scrive le assenze allineate a sinistra su righe proprie, e l'elenco dei tipi di assenza mostra «visibile a tutti» su una riga propria, così «riduce le ferie» non la spinge più fuori riga.",
|
|
15
|
+
"es": "seguridad: la administración ya no puede bloquearse a sí misma — desactivar o retirar el rol de administrador se rechaza si afecta al último administrador activo (409 `last_administrator`), y la aplicación avisa antes de intentarlo en la cuenta propia — el interruptor de la cuenta propia explica por qué una cuenta no puede desactivarse a sí misma. El extracto en PDF escribe las ausencias alineadas a la izquierda en líneas propias, y la lista de tipos de ausencia muestra «visible para todos» en una línea propia, para que «descuenta vacaciones» no la empuje fuera de la línea.",
|
|
16
|
+
"pl": "bezpieczeństwo: administracja nie może już sama się zablokować — dezaktywacja lub odebranie roli administratora jest odrzucane, jeśli dotyczy ostatniego aktywnego administratora (409 `last_administrator`), a aplikacja ostrzega przed próbą wykonania tego na własnym koncie — przełącznik własnego konta wyjaśnia, dlaczego nie może się ono samo dezaktywować. Zestawienie PDF zapisuje nieobecności wyrównane do lewej w osobnych wierszach, a lista typów nieobecności pokazuje „widoczne dla wszystkich” w osobnym wierszu, aby „odejmuje urlop” nie wypychało jej z wiersza.",
|
|
17
|
+
"uk": "безпека: адміністрація більше не може заблокувати себе — деактивацію або позбавлення ролі адміністратора відхилено, якщо це останній активний адміністратор (409 `last_administrator`), а застосунок попереджає перед спробою зробити це з власним обліковим записом — перемикач власного облікового запису пояснює, чому він не може деактивувати себе сам. PDF-звіт пише відсутності з вирівнюванням ліворуч окремими рядками, а список видів відсутності показує «видно всім» окремим рядком, щоб «зменшує відпустку» не витісняло його з рядка.",
|
|
18
|
+
"zh-cn": "安全:管理方不会再把自己锁在外面 —— 若涉及最后一位在职管理员,停用或移除管理员角色会被拒绝(409 `last_administrator`),而应用在自己的账户上尝试时也会先提示 —— 自己的账户开关会说明为什么账户无法停用自己。PDF 报表将缺勤改为左对齐、独立成行;缺勤类型列表把「所有人可见」单独放在一行,因此「扣减假期」不会再把它挤出该行。"
|
|
19
|
+
},
|
|
7
20
|
"0.7.1": {
|
|
8
21
|
"en": "fix and change: the day dialog in the month view of an employee shows and changes his punches - before it acted on the own account, so a punch added there went to the wrong person. Times belong to the administration: an employee no longer changes own times but leaves a note for the day (forgot to clock out), which the office books and marks as handled. The administrator account belongs to nobody and does not punch any more. The list of the absence types writes “visible for everybody” at the types the employees may really pick.",
|
|
9
22
|
"de": "Korrektur und Änderung: Der Tages-Dialog im Monat eines Mitarbeiters zeigt und ändert dessen Stempel – vorher arbeitete er auf dem eigenen Konto, ein dort ergänzter Stempel landete bei der falschen Person. Zeiten gehören der Verwaltung: Ein Mitarbeiter ändert keine eigenen Zeiten mehr, sondern hinterlässt eine Notiz zum Tag („An-/Ausstempeln vergessen“), die die Verwaltung bucht und als erledigt abhakt. Das Administrator-Konto gehört niemandem und stempelt nicht mehr. Die Liste der Abwesenheitsarten schreibt „Für alle sichtbar“ nur noch an den Arten, die die Mitarbeiter wirklich wählen dürfen.",
|
|
@@ -81,19 +94,6 @@
|
|
|
81
94
|
"pl": "zmiana: „aktywny” rodzaju nieobecności nazywa się teraz „widoczny dla wszystkich” i dokładnie to oznacza. Włączony — pracownicy wybierają rodzaj w aplikacji i składają wniosek (urlop, szkolenie); wyłączony — rodzaj należy tylko do administracji (choroba, wypadek, służba wojskowa — takie zgłoszenie trafia do firmy tego samego dnia i jest księgowane, nie wnioskowane). Serwer odmawia pracownikowi niepublicznego rodzaju, choroba, wypadek i służba wojskowa startują wyłączone (migracja 22), a podpowiedź na karcie wyjaśnia przełącznik",
|
|
82
95
|
"uk": "зміна: «активно» для виду відсутності тепер називається «видно всім» і означає саме це. Увімкнено — працівники вибирають вид у застосунку й запитують його (відпустка, підвищення кваліфікації); вимкнено — вид належить лише адмініструванню (хвороба, нещасний випадок, військова служба — така довідка надходить на підприємство того ж дня й оформлюється, а не запитується). Сервер відмовляє працівникові в непублічному виді, хвороба, нещасний випадок і військова служба стартують вимкненими (міграція 22), а підказка на картці пояснює перемикач",
|
|
83
96
|
"zh-cn": "变更:缺勤类型的「启用」现在称为「所有人可见」,并且正是指这一点。开启时,员工可在应用中选择该类型并申请(如休假、进修);关闭时该类型仅属于管理方(如疾病、事故、兵役 —— 此类通知当天就到达企业,是登记而非申请)。服务器会拒绝员工使用非公开类型;疾病、事故与兵役默认为关闭(迁移 22),卡片中的提示说明了该开关"
|
|
84
|
-
},
|
|
85
|
-
"0.4.2": {
|
|
86
|
-
"en": "fix: the roles appear in the language of the display (the database keeps “Administrator”, “Manager” and “Employee”, the app translates them now), the two date fields of “enter an absence” no longer overlap with their label, an absence type can be removed again as long as no absence uses it (new DELETE /absence-types/:id with a confirmation that names the type), and an inactive type stays in the lists of the administration while the employees no longer see it in their picker",
|
|
87
|
-
"de": "fix: die Rollen erscheinen in der Sprache der Anzeige (die Datenbank behält „Administrator“, „Manager“ und „Employee“, die App übersetzt sie jetzt), die beiden Datumsfelder von „Abwesenheit erfassen“ überlappen nicht mehr mit ihrer Beschriftung, eine Abwesenheitsart lässt sich wieder entfernen, solange keine Abwesenheit sie nutzt (neues DELETE /absence-types/:id mit einer Bestätigung, die die Art nennt), und eine inaktive Art bleibt in den Listen der Verwaltung, während die Mitarbeiter sie nicht mehr in ihrer Auswahl sehen",
|
|
88
|
-
"ru": "исправление: роли отображаются на языке интерфейса (база данных хранит «Administrator», «Manager» и «Employee», приложение теперь переводит их), два поля даты в «внести отсутствие» больше не перекрываются с подписью, вид отсутствия снова можно удалить, пока его не использует ни одно отсутствие (новый DELETE /absence-types/:id с подтверждением, называющим вид), а неактивный вид остаётся в списках администрирования, тогда как сотрудники его в выборе больше не видят",
|
|
89
|
-
"pt": "correção: as funções aparecem na língua do ecrã (a base de dados mantém «Administrator», «Manager» e «Employee», a aplicação traduz-as agora), os dois campos de data de «registar uma ausência» já não se sobrepõem à etiqueta, um tipo de ausência pode voltar a ser eliminado enquanto nenhuma ausência o usar (novo DELETE /absence-types/:id com uma confirmação que nomeia o tipo), e um tipo inativo permanece nas listas da administração enquanto os funcionários já não o veem na sua escolha",
|
|
90
|
-
"nl": "fix: de rollen verschijnen in de taal van de weergave (de database houdt “Administrator”, “Manager” en “Employee”, de app vertaalt ze nu), de twee datumvelden van “een afwezigheid invoeren” overlappen niet meer met hun label, een afwezigheidstype kan weer worden verwijderd zolang geen afwezigheid het gebruikt (nieuw DELETE /absence-types/:id met een bevestiging die het type noemt), en een inactief type blijft in de lijsten van het beheer terwijl de medewerkers het niet meer in hun keuzelijst zien",
|
|
91
|
-
"fr": "correctif : les rôles apparaissent dans la langue de l'affichage (la base de données garde « Administrator », « Manager » et « Employee », l'application les traduit désormais), les deux champs de date de « saisir une absence » ne chevauchent plus leur libellé, un type d'absence peut à nouveau être supprimé tant qu'aucune absence ne l'utilise (nouveau DELETE /absence-types/:id avec une confirmation qui nomme le type), et un type inactif reste dans les listes de l'administration tandis que les employés ne le voient plus dans leur choix",
|
|
92
|
-
"it": "correzione: i ruoli appaiono nella lingua dell'interfaccia (il database conserva «Administrator», «Manager» e «Employee», l'app li traduce ora), i due campi data di «inserisci un'assenza» non si sovrappongono più all'etichetta, un tipo di assenza può essere di nuovo rimosso finché nessuna assenza lo usa (nuovo DELETE /absence-types/:id con una conferma che nomina il tipo), e un tipo inattivo resta negli elenchi dell'amministrazione mentre i dipendenti non lo vedono più nella loro scelta",
|
|
93
|
-
"es": "corrección: los roles aparecen en el idioma de la pantalla (la base de datos conserva «Administrator», «Manager» y «Employee», la aplicación los traduce ahora), los dos campos de fecha de «registrar una ausencia» ya no se solapan con su etiqueta, un tipo de ausencia se puede volver a eliminar mientras ninguna ausencia lo use (nuevo DELETE /absence-types/:id con una confirmación que nombra el tipo), y un tipo inactivo permanece en las listas de la administración mientras los empleados ya no lo ven en su elección",
|
|
94
|
-
"pl": "poprawka: role pojawiają się w języku interfejsu (baza danych zachowuje „Administrator”, „Manager” i „Employee”, aplikacja tłumaczy je teraz), dwa pola daty w „wpisz nieobecność” nie nachodzą już na etykietę, rodzaj nieobecności można znów usunąć, dopóki nie używa go żadna nieobecność (nowy DELETE /absence-types/:id z potwierdzeniem nazywającym rodzaj), a nieaktywny rodzaj pozostaje na listach administracji, gdy pracownicy nie widzą go już w swoim wyborze",
|
|
95
|
-
"uk": "виправлення: ролі відображаються мовою інтерфейсу (база даних зберігає «Administrator», «Manager» і «Employee», застосунок тепер перекладає їх), два поля дати у «внести відсутність» більше не перекриваються з підписом, вид відсутності знову можна видалити, доки його не використовує жодна відсутність (новий DELETE /absence-types/:id із підтвердженням, що називає вид), а неактивний вид залишається у списках адміністрування, тоді як працівники його у своєму виборі більше не бачать",
|
|
96
|
-
"zh-cn": "修复:角色现在以界面语言显示(数据库保留「Administrator」「Manager」「Employee」,应用现在会翻译它们);「登记缺勤」的两个日期字段不再与标签重叠;只要没有缺勤使用该类型,就可以再次删除它(新增 DELETE /absence-types/:id,并有指明该类型的确认提示);停用的类型仍保留在管理列表中,而员工在选择中不再看到它"
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"titleLang": {
|
package/package.json
CHANGED
package/src-pwa/src/i18n/de.json
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"error.revision_conflict": "Der Stempel wurde zwischenzeitlich geändert, bitte neu laden.",
|
|
30
30
|
"error.conflict": "Die Änderung steht im Konflikt mit vorhandenen Daten.",
|
|
31
31
|
"error.report_font_missing": "Für diesen Bericht wird eine Unicode-Schrift benötigt (report_font_path).",
|
|
32
|
+
"error.last_administrator": "Der letzte aktive Administrator kann nicht deaktiviert werden oder die Rolle verlieren.",
|
|
32
33
|
"error.unknown_error": "Unerwarteter Fehler.",
|
|
33
34
|
"punch.now": "Stempeln",
|
|
34
35
|
"punch.in": "Einstempeln",
|
|
@@ -125,6 +126,10 @@
|
|
|
125
126
|
"admin.user.name": "Name",
|
|
126
127
|
"admin.user.password": "Passwort",
|
|
127
128
|
"admin.user.passwordHint": "Mindestens 8 Zeichen mit Gross- und Kleinschreibung und Ziffern.",
|
|
129
|
+
"admin.user.selfTitle": "Eigenes Konto",
|
|
130
|
+
"admin.user.selfDeactivate": "Das eigene Konto lässt sich nicht deaktivieren – die laufende Sitzung würde sofort enden und niemand könnte sich mehr anmelden. Bitte einen anderen Administrator darum bitten.",
|
|
131
|
+
"admin.user.selfRoles": "Achtung: Ohne die Rolle „Administrator“ verlierst du sofort alle Verwaltungsrechte.",
|
|
132
|
+
"admin.user.lastAdminRoles": "Das ist der letzte aktive Administrator: die Rolle lässt sich ihm nicht entnehmen.",
|
|
128
133
|
"admin.user.roles": "Rollen",
|
|
129
134
|
"admin.user.active": "Aktiv",
|
|
130
135
|
"admin.user.inactive": "Deaktiviert",
|
package/src-pwa/src/i18n/en.json
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"error.revision_conflict": "The punch was changed in the meantime, please reload.",
|
|
30
30
|
"error.conflict": "The change conflicts with existing data.",
|
|
31
31
|
"error.report_font_missing": "This report needs a Unicode font (report_font_path).",
|
|
32
|
+
"error.last_administrator": "The last active administrator cannot be deactivated or lose the role.",
|
|
32
33
|
"error.unknown_error": "Unexpected error.",
|
|
33
34
|
"punch.now": "Punch",
|
|
34
35
|
"punch.in": "Clock in",
|
|
@@ -125,6 +126,10 @@
|
|
|
125
126
|
"admin.user.name": "Name",
|
|
126
127
|
"admin.user.password": "Password",
|
|
127
128
|
"admin.user.passwordHint": "At least 8 characters with upper and lower case and digits.",
|
|
129
|
+
"admin.user.selfTitle": "Own account",
|
|
130
|
+
"admin.user.selfDeactivate": "The own account cannot be deactivated — the running session would end at once and nobody could sign in any more. Please ask another administrator to do it.",
|
|
131
|
+
"admin.user.selfRoles": "Careful: without the “Administrator” role you lose every administration right at once.",
|
|
132
|
+
"admin.user.lastAdminRoles": "This is the last active administrator: the role cannot be taken away from it.",
|
|
128
133
|
"admin.user.roles": "Roles",
|
|
129
134
|
"admin.user.active": "Active",
|
|
130
135
|
"admin.user.inactive": "Deactivated",
|
package/src-pwa/src/i18n/es.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN",
|
|
34
34
|
"admin.user.pinHint": "4 a 8 dígitos para el terminal",
|
|
35
35
|
"admin.user.pinTitle": "PIN de la tarjeta de {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Cuenta propia",
|
|
37
|
+
"admin.user.selfDeactivate": "La cuenta propia no se puede desactivar: la sesión en curso terminaría de inmediato y nadie más podría iniciar sesión. Pide a otro administrador que lo haga.",
|
|
38
|
+
"admin.user.selfRoles": "Atención: sin el rol «Administrador» pierdes de inmediato todos los derechos de administración.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Este es el último administrador activo: no se le puede quitar el rol.",
|
|
36
40
|
"admin.user.roles": "Roles",
|
|
37
41
|
"admin.users": "Empleados",
|
|
38
42
|
"app.offline": "Sin conexión: los marcajes están en cola",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Este informe necesita una fuente Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "Mientras tanto, el punzón fue cambiado, por favor recarga.",
|
|
59
63
|
"error.session_expired": "Su sesión ha caducado, inicie sesión nuevamente.",
|
|
64
|
+
"error.last_administrator": "El último administrador activo no puede desactivarse ni perder el rol.",
|
|
60
65
|
"error.unknown_error": "Error inesperado.",
|
|
61
66
|
"error.user_inactive": "Esta cuenta está desactivada.",
|
|
62
67
|
"login.failed": "Error al iniciar sesión",
|
package/src-pwa/src/i18n/fr.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "Code PIN",
|
|
34
34
|
"admin.user.pinHint": "4 à 8 chiffres pour le terminal",
|
|
35
35
|
"admin.user.pinTitle": "Code PIN du badge de {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Propre compte",
|
|
37
|
+
"admin.user.selfDeactivate": "Le propre compte ne peut pas être désactivé : la session en cours se terminerait aussitôt et plus personne ne pourrait se connecter. Demande à un autre administrateur de le faire.",
|
|
38
|
+
"admin.user.selfRoles": "Attention : sans le rôle « Administrateur », tu perds immédiatement tous les droits d'administration.",
|
|
39
|
+
"admin.user.lastAdminRoles": "C'est le dernier administrateur actif : le rôle ne peut pas lui être retiré.",
|
|
36
40
|
"admin.user.roles": "Rôles",
|
|
37
41
|
"admin.users": "Employés",
|
|
38
42
|
"app.offline": "Hors ligne : les pointages sont mis en file d'attente",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Ce rapport nécessite une police Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "Le pointage a été modifié entre temps, merci de recharger.",
|
|
59
63
|
"error.session_expired": "Votre session a expiré, veuillez vous reconnecter.",
|
|
64
|
+
"error.last_administrator": "Le dernier administrateur actif ne peut pas être désactivé ni perdre son rôle.",
|
|
60
65
|
"error.unknown_error": "Erreur inattendue.",
|
|
61
66
|
"error.user_inactive": "Ce compte est désactivé.",
|
|
62
67
|
"login.failed": "Échec de la connexion",
|
package/src-pwa/src/i18n/it.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN",
|
|
34
34
|
"admin.user.pinHint": "Da 4 a 8 cifre per il terminale",
|
|
35
35
|
"admin.user.pinTitle": "PIN del badge di {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Proprio account",
|
|
37
|
+
"admin.user.selfDeactivate": "Il proprio account non può essere disattivato: la sessione in corso terminerebbe subito e nessuno potrebbe più accedere. Chiedilo a un altro amministratore.",
|
|
38
|
+
"admin.user.selfRoles": "Attenzione: senza il ruolo «Amministratore» perdi subito tutti i diritti di amministrazione.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Questo è l'ultimo amministratore attivo: il ruolo non può essergli tolto.",
|
|
36
40
|
"admin.user.roles": "Ruoli",
|
|
37
41
|
"admin.users": "Dipendenti",
|
|
38
42
|
"app.offline": "Offline: le timbrature sono in coda",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Questo report necessita di un carattere Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "Nel frattempo il punzone è stato cambiato, ricaricare.",
|
|
59
63
|
"error.session_expired": "La tua sessione è scaduta, accedi nuovamente.",
|
|
64
|
+
"error.last_administrator": "L'ultimo amministratore attivo non può essere disattivato né perdere il ruolo.",
|
|
60
65
|
"error.unknown_error": "Errore imprevisto.",
|
|
61
66
|
"error.user_inactive": "Questo account è disattivato.",
|
|
62
67
|
"login.failed": "Accesso non riuscito",
|
package/src-pwa/src/i18n/nl.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN",
|
|
34
34
|
"admin.user.pinHint": "4 tot 8 cijfers voor de terminal",
|
|
35
35
|
"admin.user.pinTitle": "Badge-pincode voor {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Eigen account",
|
|
37
|
+
"admin.user.selfDeactivate": "Het eigen account kan niet worden gedeactiveerd: de lopende sessie eindigt meteen en niemand kan meer inloggen. Vraag het een andere beheerder.",
|
|
38
|
+
"admin.user.selfRoles": "Let op: zonder de rol „Beheerder“ verlies je meteen alle beheerrechten.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Dit is de laatste actieve beheerder: de rol kan niet worden afgenomen.",
|
|
36
40
|
"admin.user.roles": "Rollen",
|
|
37
41
|
"admin.users": "Medewerkers",
|
|
38
42
|
"app.offline": "Offline – stoten worden in de wachtrij geplaatst",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Dit rapport heeft een Unicode-lettertype nodig (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "De punch is in de tussentijd gewijzigd. Herlaad alstublieft.",
|
|
59
63
|
"error.session_expired": "Uw sessie is verlopen. Meld u opnieuw aan.",
|
|
64
|
+
"error.last_administrator": "De laatste actieve beheerder kan niet worden gedeactiveerd en kan de rol niet verliezen.",
|
|
60
65
|
"error.unknown_error": "Onverwachte fout.",
|
|
61
66
|
"error.user_inactive": "Dit account is gedeactiveerd.",
|
|
62
67
|
"login.failed": "Aanmelden mislukt",
|
package/src-pwa/src/i18n/pl.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN",
|
|
34
34
|
"admin.user.pinHint": "4 do 8 cyfr dla terminala",
|
|
35
35
|
"admin.user.pinTitle": "PIN identyfikatora dla {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Własne konto",
|
|
37
|
+
"admin.user.selfDeactivate": "Własnego konta nie można dezaktywować — bieżąca sesja zakończyłaby się natychmiast i nikt nie mógłby się zalogować. Poproś o to innego administratora.",
|
|
38
|
+
"admin.user.selfRoles": "Uwaga: bez roli „Administrator” natychmiast tracisz wszystkie uprawnienia administracyjne.",
|
|
39
|
+
"admin.user.lastAdminRoles": "To ostatni aktywny administrator: nie można odebrać mu roli.",
|
|
36
40
|
"admin.user.roles": "Role",
|
|
37
41
|
"admin.users": "Pracownicy",
|
|
38
42
|
"app.offline": "Offline – ciosy są w kolejce",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Ten raport wymaga czcionki Unicode (ścieżka_fontu_reportu).",
|
|
58
62
|
"error.revision_conflict": "W międzyczasie cios został zmieniony. Proszę załadować ponownie.",
|
|
59
63
|
"error.session_expired": "Twoja sesja wygasła. Zaloguj się ponownie.",
|
|
64
|
+
"error.last_administrator": "Ostatniego aktywnego administratora nie można dezaktywować ani pozbawić roli.",
|
|
60
65
|
"error.unknown_error": "Nieoczekiwany błąd.",
|
|
61
66
|
"error.user_inactive": "To konto jest dezaktywowane.",
|
|
62
67
|
"login.failed": "Logowanie nie powiodło się",
|
package/src-pwa/src/i18n/pt.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN",
|
|
34
34
|
"admin.user.pinHint": "4 a 8 dígitos para o terminal",
|
|
35
35
|
"admin.user.pinTitle": "PIN do crachá de {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Conta própria",
|
|
37
|
+
"admin.user.selfDeactivate": "A própria conta não pode ser desativada — a sessão em curso terminaria de imediato e ninguém poderia voltar a entrar. Pede a outro administrador.",
|
|
38
|
+
"admin.user.selfRoles": "Atenção: sem o papel «Administrador» perdes de imediato todos os direitos de administração.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Este é o último administrador ativo: o papel não lhe pode ser retirado.",
|
|
36
40
|
"admin.user.roles": "Funções",
|
|
37
41
|
"admin.users": "Funcionários",
|
|
38
42
|
"app.offline": "Off-line – marcações na fila",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Este relatório precisa de uma fonte Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "A marcação foi alterada nesse meio tempo, por favor recarregue.",
|
|
59
63
|
"error.session_expired": "Sua sessão expirou, faça login novamente.",
|
|
64
|
+
"error.last_administrator": "O último administrador ativo não pode ser desativado nem perder o papel.",
|
|
60
65
|
"error.unknown_error": "Erro inesperado.",
|
|
61
66
|
"error.user_inactive": "Esta conta está desativada.",
|
|
62
67
|
"login.failed": "Falha no login",
|
package/src-pwa/src/i18n/ru.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN-код",
|
|
34
34
|
"admin.user.pinHint": "От 4 до 8 цифр для терминала",
|
|
35
35
|
"admin.user.pinTitle": "PIN-код бейджа для {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Своя учётная запись",
|
|
37
|
+
"admin.user.selfDeactivate": "Свою учётную запись деактивировать нельзя: текущая сессия сразу завершится, и войти больше будет некому. Попросите другого администратора.",
|
|
38
|
+
"admin.user.selfRoles": "Внимание: без роли «Администратор» вы сразу теряете все права администрирования.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Это последний активный администратор: роль у него отнять нельзя.",
|
|
36
40
|
"admin.user.roles": "Роли",
|
|
37
41
|
"admin.users": "Сотрудники",
|
|
38
42
|
"app.offline": "Оффлайн – отметки в очереди",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Для этого отчета требуется шрифт Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "Тем временем отметка была изменена, пожалуйста, перезагрузите.",
|
|
59
63
|
"error.session_expired": "Срок действия вашей сессии истек, пожалуйста, войдите снова.",
|
|
64
|
+
"error.last_administrator": "Последнего активного администратора нельзя деактивировать или лишить роли.",
|
|
60
65
|
"error.unknown_error": "Неожиданная ошибка.",
|
|
61
66
|
"error.user_inactive": "Эта учетная запись деактивирована.",
|
|
62
67
|
"login.failed": "Войти не удалось",
|
package/src-pwa/src/i18n/uk.json
CHANGED
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN-код",
|
|
34
34
|
"admin.user.pinHint": "Від 4 до 8 цифр для терміналу",
|
|
35
35
|
"admin.user.pinTitle": "PIN-код перепустки для {{name}}",
|
|
36
|
+
"admin.user.selfTitle": "Власний обліковий запис",
|
|
37
|
+
"admin.user.selfDeactivate": "Власний обліковий запис деактивувати не можна: поточна сесія відразу завершиться, і ввійти більше не буде кому. Попросіть іншого адміністратора.",
|
|
38
|
+
"admin.user.selfRoles": "Увага: без ролі «Адміністратор» ви відразу втрачаєте всі права адміністрування.",
|
|
39
|
+
"admin.user.lastAdminRoles": "Це останній активний адміністратор: роль у нього відібрати не можна.",
|
|
36
40
|
"admin.user.roles": "Ролі",
|
|
37
41
|
"admin.users": "Співробітники",
|
|
38
42
|
"app.offline": "Offline – відмітки в черзі",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "Для цього звіту потрібен шрифт Unicode (report_font_path).",
|
|
58
62
|
"error.revision_conflict": "Перфорацію тим часом було змінено, перезавантажте.",
|
|
59
63
|
"error.session_expired": "Ваш сеанс закінчився, увійдіть знову.",
|
|
64
|
+
"error.last_administrator": "Останнього активного адміністратора не можна деактивувати або позбавити ролі.",
|
|
60
65
|
"error.unknown_error": "Несподівана помилка.",
|
|
61
66
|
"error.user_inactive": "Цей обліковий запис дезактивовано.",
|
|
62
67
|
"login.failed": "Помилка входу",
|
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"admin.user.pin": "PIN 码",
|
|
34
34
|
"admin.user.pinHint": "终端 4 至 8 位数字",
|
|
35
35
|
"admin.user.pinTitle": "{{name}} 的徽章 PIN 码",
|
|
36
|
+
"admin.user.selfTitle": "自己的账户",
|
|
37
|
+
"admin.user.selfDeactivate": "无法停用自己的账户:当前会话会立即结束,之后就没人能登录了。请让另一位管理员来做。",
|
|
38
|
+
"admin.user.selfRoles": "注意:没有「管理员」角色,你将立即失去所有管理权限。",
|
|
39
|
+
"admin.user.lastAdminRoles": "这是最后一位在职管理员:不能移除其角色。",
|
|
36
40
|
"admin.user.roles": "角色",
|
|
37
41
|
"admin.users": "雇员",
|
|
38
42
|
"app.offline": "离线 – 打孔已排队",
|
|
@@ -57,6 +61,7 @@
|
|
|
57
61
|
"error.report_font_missing": "该报告需要 Unicode 字体 (report_font_path)。",
|
|
58
62
|
"error.revision_conflict": "其间冲头已更换,请重新装弹。",
|
|
59
63
|
"error.session_expired": "您的会话已过期,请重新登录。",
|
|
64
|
+
"error.last_administrator": "不能停用最后一位在职管理员,也不能移除其角色。",
|
|
60
65
|
"error.unknown_error": "意外错误。",
|
|
61
66
|
"error.user_inactive": "该帐户已停用。",
|
|
62
67
|
"login.failed": "登录失败",
|