@things-factory/learning 10.1.261 → 10.1.263
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/dist-client/pages/learning-course-list.d.ts +0 -4
- package/dist-client/pages/learning-course-list.js +72 -16
- package/dist-client/pages/learning-course-list.js.map +1 -1
- package/dist-client/pages/learning-enrollment-status.d.ts +3 -0
- package/dist-client/pages/learning-enrollment-status.js +25 -11
- package/dist-client/pages/learning-enrollment-status.js.map +1 -1
- package/dist-client/pages/learning-view.d.ts +10 -0
- package/dist-client/pages/learning-view.js +59 -3
- package/dist-client/pages/learning-view.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/ai-reads.d.ts +1 -0
- package/dist-server/ai-reads.js +26 -2
- package/dist-server/ai-reads.js.map +1 -1
- package/dist-server/service/course/course-query.d.ts +1 -0
- package/dist-server/service/course/course-query.js +13 -0
- package/dist-server/service/course/course-query.js.map +1 -1
- package/dist-server/service/enrollment/enrollment-mutation.d.ts +3 -1
- package/dist-server/service/enrollment/enrollment-mutation.js +24 -6
- package/dist-server/service/enrollment/enrollment-mutation.js.map +1 -1
- package/dist-server/service/enrollment/enrollment-query.d.ts +6 -1
- package/dist-server/service/enrollment/enrollment-query.js +36 -1
- package/dist-server/service/enrollment/enrollment-query.js.map +1 -1
- package/dist-server/service/enrollment/enrollment-service.d.ts +8 -3
- package/dist-server/service/enrollment/enrollment-service.js +29 -15
- package/dist-server/service/enrollment/enrollment-service.js.map +1 -1
- package/dist-server/service/enrollment/enrollment-status.d.ts +11 -0
- package/dist-server/service/enrollment/enrollment-status.js +42 -0
- package/dist-server/service/enrollment/enrollment-status.js.map +1 -1
- package/dist-server/service/enrollment/enrollment-type.d.ts +7 -0
- package/dist-server/service/enrollment/enrollment-type.js +27 -1
- package/dist-server/service/enrollment/enrollment-type.js.map +1 -1
- package/dist-server/service/enrollment/index.d.ts +6 -4
- package/dist-server/service/enrollment/index.js +6 -4
- package/dist-server/service/enrollment/index.js.map +1 -1
- package/dist-server/service/enrollment/lesson-note-service.d.ts +15 -0
- package/dist-server/service/enrollment/lesson-note-service.js +86 -0
- package/dist-server/service/enrollment/lesson-note-service.js.map +1 -0
- package/dist-server/service/enrollment/lesson-note.d.ts +35 -0
- package/dist-server/service/enrollment/lesson-note.js +107 -0
- package/dist-server/service/enrollment/lesson-note.js.map +1 -0
- package/dist-server/service/enrollment/progress-rules.d.ts +4 -0
- package/dist-server/service/enrollment/progress-rules.js +7 -1
- package/dist-server/service/enrollment/progress-rules.js.map +1 -1
- package/dist-server/service/index.d.ts +4 -3
- package/dist-server/service/index.js +3 -2
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/translations/en.json +32 -16
- package/translations/es.json +19 -3
- package/translations/ja.json +19 -3
- package/translations/ko.json +33 -17
- package/translations/ms.json +19 -3
- package/translations/zh.json +19 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/learning",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.263",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "dist-client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -33,27 +33,27 @@
|
|
|
33
33
|
"@operato/i18n": "^10.0.0",
|
|
34
34
|
"@operato/input": "^10.29.52",
|
|
35
35
|
"@operato/layout": "^10.29.49",
|
|
36
|
-
"@operato/learning": "^10.29.
|
|
36
|
+
"@operato/learning": "^10.29.73",
|
|
37
37
|
"@operato/list-state": "^10.29.39",
|
|
38
38
|
"@operato/popup": "^10.29.39",
|
|
39
39
|
"@operato/shell": "^10.29.69",
|
|
40
40
|
"@operato/styles": "^10.29.1",
|
|
41
41
|
"@operato/utils": "^10.0.0",
|
|
42
|
-
"@things-factory/ai-assistant": "^10.1.
|
|
43
|
-
"@things-factory/ai-client-base": "^10.1.
|
|
44
|
-
"@things-factory/announcement": "^10.1.
|
|
45
|
-
"@things-factory/attachment-base": "^10.1.
|
|
46
|
-
"@things-factory/auth-base": "^10.1.
|
|
42
|
+
"@things-factory/ai-assistant": "^10.1.263",
|
|
43
|
+
"@things-factory/ai-client-base": "^10.1.263",
|
|
44
|
+
"@things-factory/announcement": "^10.1.263",
|
|
45
|
+
"@things-factory/attachment-base": "^10.1.263",
|
|
46
|
+
"@things-factory/auth-base": "^10.1.263",
|
|
47
47
|
"@things-factory/env": "^10.1.149",
|
|
48
|
-
"@things-factory/i18n-base": "^10.1.
|
|
49
|
-
"@things-factory/notification": "^10.1.
|
|
50
|
-
"@things-factory/organization": "^10.1.
|
|
51
|
-
"@things-factory/pdf": "^10.1.
|
|
52
|
-
"@things-factory/shell": "^10.1.
|
|
53
|
-
"@things-factory/worklist": "^10.1.
|
|
48
|
+
"@things-factory/i18n-base": "^10.1.263",
|
|
49
|
+
"@things-factory/notification": "^10.1.263",
|
|
50
|
+
"@things-factory/organization": "^10.1.263",
|
|
51
|
+
"@things-factory/pdf": "^10.1.263",
|
|
52
|
+
"@things-factory/shell": "^10.1.263",
|
|
53
|
+
"@things-factory/worklist": "^10.1.263",
|
|
54
54
|
"graphql-tag": "^2.12.6",
|
|
55
55
|
"graphql-upload": "^15.0.2",
|
|
56
56
|
"lit": "^3.1.2"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "f1ee39eb316c58c7eefa4c35651228d1d1ea4bcf"
|
|
59
59
|
}
|
package/translations/en.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target} is not of this domain.",
|
|
35
35
|
"error.learning-audience-required": "Select who takes the course.",
|
|
36
36
|
"error.learning-cancel-reason-required": "Enter the reason for cancelling.",
|
|
37
|
+
"error.learning-cancel-none": "Select the enrolments to cancel.",
|
|
37
38
|
"error.learning-content-what": "Specify an enrollment or course version.",
|
|
38
39
|
"error.learning-course-name-required": "Enter the course name.",
|
|
39
40
|
"error.learning-course-name-taken": "A course named “{name}” exists.",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"error.learning-not-a-department-head": "Only a department head can view where their people stand.",
|
|
53
54
|
"error.learning-not-completed": "A certificate is issued only for a completed course.",
|
|
54
55
|
"error.learning-not-found": "The record was not found. Reload and try again.",
|
|
55
|
-
"error.learning-page-ahead": "You can
|
|
56
|
+
"error.learning-page-ahead": "You can advance only to the page immediately after the last completed page (page {allowed}). View the pages in order.",
|
|
56
57
|
"error.learning-pass-score-invalid": "The pass score is a whole number from 1 to 100.",
|
|
57
58
|
"error.learning-position-ahead": "You cannot skip beyond the watched position ({allowed} seconds). Continue playing from that position.",
|
|
58
59
|
"error.learning-question-answer-required": "Mark at least one correct choice.",
|
|
@@ -76,7 +77,7 @@
|
|
|
76
77
|
"error.learning-unit-min-time-invalid": "Enter a whole-number minimum learning time of at least 1 second.",
|
|
77
78
|
"error.learning-unit-name-required": "Enter the unit name.",
|
|
78
79
|
"error.learning-unit-pages-invalid": "The PDF's page count is not valid.",
|
|
79
|
-
"error.learning-unit-pages-required": "
|
|
80
|
+
"error.learning-unit-pages-required": "The PDF page count could not be determined. Attach the file again.",
|
|
80
81
|
"error.learning-unit-url-invalid": "Enter a link starting with http:// or https://.",
|
|
81
82
|
"error.learning-units-required": "Add at least one unit before publishing.",
|
|
82
83
|
"error.learning-version-not-draft": "A published or closed version cannot be changed. Start a new version to change it.",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "Leave empty for no limit.",
|
|
137
138
|
"text.learning-attempts-left": "{count} attempts left.",
|
|
138
139
|
"text.learning-best-score": "Best score: {score}.",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "{count} enrolments were cancelled.",
|
|
140
141
|
"text.learning-category-job": "Job training",
|
|
141
142
|
"text.learning-category-mandatory": "Mandatory training",
|
|
142
143
|
"text.learning-category-onboarding": "Onboarding",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "Not published",
|
|
169
170
|
"text.learning-nothing-to-take": "No courses are assigned to you.",
|
|
170
171
|
"text.learning-pass-score-hint": "Out of 100. Leave empty for no quiz.",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "Select the enrolments to cancel.",
|
|
172
173
|
"text.learning-pick-open": "Select enrollments that have not been completed.",
|
|
173
174
|
"text.learning-question-count-hint": "Each attempt draws this many questions at random. Leave empty to draw them all.",
|
|
174
175
|
"text.learning-question-delete-confirm": "Delete this question?",
|
|
@@ -217,7 +218,7 @@
|
|
|
217
218
|
"text.learning-unit-min-seconds-hint": "Leave blank to use a minimum reading time of 60 seconds.",
|
|
218
219
|
"text.learning-unit-pages": "{pages} pages",
|
|
219
220
|
"text.learning-unit-pdf": "Document (PDF)",
|
|
220
|
-
"text.learning-unit-pdf-hint": "
|
|
221
|
+
"text.learning-unit-pdf-hint": "View all PDF pages in order and meet the minimum learning time to complete this unit. The page count is determined from the attached file.",
|
|
221
222
|
"text.learning-unit-video": "Video",
|
|
222
223
|
"text.learning-unit-video-hint": "Watch the video to the end and meet its required learning time to complete the unit. You cannot skip to an unwatched section.",
|
|
223
224
|
"text.learning-version-close-confirm": "Closing this version prevents new learners from starting it. Learners who have already started can continue.",
|
|
@@ -252,27 +253,42 @@
|
|
|
252
253
|
"title.learning-units": "Units",
|
|
253
254
|
"title.learning-version-settings": "Completion and source",
|
|
254
255
|
"title.learning-versions": "Versions",
|
|
255
|
-
"button.learning-ai-material": "
|
|
256
|
+
"button.learning-ai-material": "Create AI draft from material",
|
|
256
257
|
"button.learning-ai-generate": "Generate draft",
|
|
257
|
-
"button.learning-ai-apply": "
|
|
258
|
+
"button.learning-ai-apply": "Apply reviewed draft",
|
|
258
259
|
"button.learning-ai-revise": "Revise request",
|
|
259
260
|
"field.learning-ai-source": "Source material",
|
|
260
261
|
"field.learning-ai-captions": "Video captions or transcript",
|
|
261
262
|
"field.learning-ai-instruction": "Audience, learning goals and requests",
|
|
262
|
-
"title.learning-ai-material": "
|
|
263
|
+
"title.learning-ai-material": "Create a course draft from source material",
|
|
263
264
|
"title.learning-ai-preview": "Review AI draft",
|
|
264
265
|
"title.learning-ai-missing": "Items to verify or complete",
|
|
265
266
|
"text.learning-ai-upload-first": "First add a PDF or video unit and upload its file.",
|
|
266
|
-
"text.learning-ai-material-help": "
|
|
267
|
-
"text.learning-ai-captions-help": "
|
|
268
|
-
"text.learning-ai-working": "
|
|
269
|
-
"text.learning-ai-apply-help": "
|
|
267
|
+
"text.learning-ai-material-help": "Generate a draft course introduction, learning objectives, supporting units, quiz questions and explanations from the source material. The original is retained. Generating a draft does not save or publish the course.",
|
|
268
|
+
"text.learning-ai-captions-help": "Attach captions or a transcript to use that text. If neither is provided, the video's audio is transcribed automatically. Transcription sends audio to an external AI service and may incur charges separate from draft generation. Video visuals are not analyzed. Review and edit the generated transcript before applying the draft.",
|
|
269
|
+
"text.learning-ai-working": "Analyzing the source material and generating a draft.",
|
|
270
|
+
"text.learning-ai-apply-help": "Applying the draft appends the introduction and supporting units to the existing units and saves quiz questions as AI drafts. Review the sources, content, learning times and questions, then save the reviewed questions before publishing.",
|
|
270
271
|
"error.learning-ai-material-invalid": "The complete source could not be read. Check the file, pages, captions and limits.",
|
|
271
272
|
"error.learning-ai-draft-invalid": "The AI draft has incomplete content, answers or references. The course was not changed. Revise the request and retry.",
|
|
272
273
|
"error.learning-ai-draft-stale": "The course or source changed. Review it and generate a fresh draft.",
|
|
273
|
-
"error.learning-ai-source-limit": "
|
|
274
|
+
"error.learning-ai-source-limit": "The source exceeds the supported limits: PDF files up to 50 MB and 80 pages, including up to 12 scanned pages; text up to 120,000 characters. Split the material into smaller files. Requests exceeding these limits are rejected in full.",
|
|
274
275
|
"error.learning-ai-source-read": "Could not read the source. Check access and the file, then retry.",
|
|
275
|
-
"error.learning-ai-video-limit": "Automatic transcription supports MP4/WebM up to 60 minutes
|
|
276
|
-
"error.learning-ai-transcription-unavailable": "The
|
|
277
|
-
"error.learning-ai-audio-unreadable": "
|
|
276
|
+
"error.learning-ai-video-limit": "Automatic transcription supports MP4/WebM videos up to 60 minutes and 250 MB. Transcripts must not exceed 120,000 characters. Split material that exceeds these limits.",
|
|
277
|
+
"error.learning-ai-transcription-unavailable": "The default AI agent does not support transcription. Set an OpenAI agent as the default or attach captions or a transcript.",
|
|
278
|
+
"error.learning-ai-audio-unreadable": "The video audio could not be extracted or transcribed. Check that the file is MP4/WebM with an audio track, or attach captions or a transcript. Contact your administrator if the problem persists.",
|
|
279
|
+
"title.learning-cancel-enrollments": "Cancel {count} enrolments",
|
|
280
|
+
"field.learning-format": "Format",
|
|
281
|
+
"field.learning-unit-count": "Units",
|
|
282
|
+
"field.learning-expected-time": "Estimated learning time",
|
|
283
|
+
"field.learning-enrolled": "Enrolled",
|
|
284
|
+
"field.learning-completion-rate": "Completion rate",
|
|
285
|
+
"text.learning-minutes-value": "{minutes} min",
|
|
286
|
+
"text.learning-score-value": "{score} points",
|
|
287
|
+
"text.learning-quiz-none": "No quiz",
|
|
288
|
+
"text.learning-course-standing": "{enrolled} enrolled · {completed} completed ({rate})",
|
|
289
|
+
"error.learning-note-invalid": "The annotations could not be saved. Reload the page and recreate them.",
|
|
290
|
+
"error.learning-note-too-large": "The page exceeds the annotation limit ({strokes} strokes, {points} points). Erase some annotations before adding more.",
|
|
291
|
+
"error.learning-note-not-started": "Start the course before adding annotations.",
|
|
292
|
+
"error.learning-note-pdf-only": "Annotations are available only in PDF units.",
|
|
293
|
+
"error.learning-note-page": "The requested page is not in this document. The document contains {pages} pages."
|
|
278
294
|
}
|
package/translations/es.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target} no pertenece a este dominio.",
|
|
35
35
|
"error.learning-audience-required": "Seleccione los destinatarios.",
|
|
36
36
|
"error.learning-cancel-reason-required": "Indique el motivo de la cancelación.",
|
|
37
|
+
"error.learning-cancel-none": "Seleccione las inscripciones que desea cancelar.",
|
|
37
38
|
"error.learning-content-what": "Indique la inscripción o la versión.",
|
|
38
39
|
"error.learning-course-name-required": "Indique el nombre del curso.",
|
|
39
40
|
"error.learning-course-name-taken": "Ya existe un curso llamado «{name}».",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "Déjelo vacío para no limitar.",
|
|
137
138
|
"text.learning-attempts-left": "Quedan {count} intentos.",
|
|
138
139
|
"text.learning-best-score": "Mejor puntuación: {score}.",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "Se cancelaron {count} inscripciones.",
|
|
140
141
|
"text.learning-category-job": "Formación del puesto",
|
|
141
142
|
"text.learning-category-mandatory": "Formación obligatoria",
|
|
142
143
|
"text.learning-category-onboarding": "Incorporación",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "Sin publicar",
|
|
169
170
|
"text.learning-nothing-to-take": "No tiene cursos asignados.",
|
|
170
171
|
"text.learning-pass-score-hint": "Sobre 100. Déjelo vacío para no evaluar.",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "Seleccione las inscripciones que desea cancelar.",
|
|
172
173
|
"text.learning-pick-open": "Seleccione inscripciones no finalizadas.",
|
|
173
174
|
"text.learning-question-count-hint": "Cada intento elige al azar este número de preguntas. Déjelo vacío para usarlas todas.",
|
|
174
175
|
"text.learning-question-delete-confirm": "¿Eliminar esta pregunta?",
|
|
@@ -274,5 +275,20 @@
|
|
|
274
275
|
"error.learning-ai-source-read": "No se pudo leer la fuente. Revise acceso y archivo e inténtelo de nuevo.",
|
|
275
276
|
"error.learning-ai-video-limit": "Transcripción: MP4/WebM de hasta 60 minutos/250 MB y texto de 120.000 caracteres. Divida el material.",
|
|
276
277
|
"error.learning-ai-transcription-unavailable": "El agente actual no transcribe audio. Configure OpenAI como predeterminado o aporte subtítulos.",
|
|
277
|
-
"error.learning-ai-audio-unreadable": "No se pudo leer el audio. Revise ffmpeg, formato MP4/WebM y pista de audio, o aporte subtítulos."
|
|
278
|
+
"error.learning-ai-audio-unreadable": "No se pudo leer el audio. Revise ffmpeg, formato MP4/WebM y pista de audio, o aporte subtítulos.",
|
|
279
|
+
"title.learning-cancel-enrollments": "Cancelar {count} inscripciones",
|
|
280
|
+
"field.learning-format": "Formato",
|
|
281
|
+
"field.learning-unit-count": "Unidades",
|
|
282
|
+
"field.learning-expected-time": "Tiempo necesario",
|
|
283
|
+
"field.learning-enrolled": "Inscritos",
|
|
284
|
+
"field.learning-completion-rate": "Tasa de finalización",
|
|
285
|
+
"text.learning-minutes-value": "{minutes} min",
|
|
286
|
+
"text.learning-score-value": "{score} puntos",
|
|
287
|
+
"text.learning-quiz-none": "Sin evaluación",
|
|
288
|
+
"text.learning-course-standing": "{enrolled} inscritos · {completed} completados ({rate})",
|
|
289
|
+
"error.learning-note-invalid": "No se pudo guardar la nota. Vuelva a cargar la página y escríbala de nuevo.",
|
|
290
|
+
"error.learning-note-too-large": "La página no admite más notas ({strokes} trazos, {points} puntos). Borre algunas y vuelva a escribir.",
|
|
291
|
+
"error.learning-note-not-started": "Inicie el curso antes de escribir notas.",
|
|
292
|
+
"error.learning-note-pdf-only": "Las notas solo se escriben sobre las páginas de una unidad PDF.",
|
|
293
|
+
"error.learning-note-page": "El documento no tiene esa página ({pages} páginas)."
|
|
278
294
|
}
|
package/translations/ja.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target}はこの事業所の対象ではありません。",
|
|
35
35
|
"error.learning-audience-required": "受講対象を選択してください。",
|
|
36
36
|
"error.learning-cancel-reason-required": "取消理由を入力してください。",
|
|
37
|
+
"error.learning-cancel-none": "取り消す受講を選択してください。",
|
|
37
38
|
"error.learning-content-what": "受講または改訂版を指定してください。",
|
|
38
39
|
"error.learning-course-name-required": "コース名を入力してください。",
|
|
39
40
|
"error.learning-course-name-taken": "「{name}」コースはすでにあります。",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "空欄の場合、受験回数を制限しません。",
|
|
137
138
|
"text.learning-attempts-left": "残りの受験回数は{count}回です。",
|
|
138
139
|
"text.learning-best-score": "最高点は{score}点です。",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "受講{count}件を取り消しました。",
|
|
140
141
|
"text.learning-category-job": "職務教育",
|
|
141
142
|
"text.learning-category-mandatory": "法定義務教育",
|
|
142
143
|
"text.learning-category-onboarding": "入社教育",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "公開中の改訂版なし",
|
|
169
170
|
"text.learning-nothing-to-take": "割り当てられたコースはありません。",
|
|
170
171
|
"text.learning-pass-score-hint": "100点満点です。空欄の場合、評価なしで修了できます。",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "取り消す受講を選択してください。",
|
|
172
173
|
"text.learning-pick-open": "進行中または未着手の受講を選択してください。",
|
|
173
174
|
"text.learning-question-count-hint": "受験ごとに登録問題からこの数だけ無作為に出題します。空欄の場合はすべて出題します。",
|
|
174
175
|
"text.learning-question-delete-confirm": "この問題を削除しますか?",
|
|
@@ -274,5 +275,20 @@
|
|
|
274
275
|
"error.learning-ai-source-read": "元の資料を読めません。アクセス権とファイルを確認して再試行してください。",
|
|
275
276
|
"error.learning-ai-video-limit": "自動文字起こしは60分・250MB以下のMP4/WebM、12万文字以内の台本に対応します。資料を分割してください。",
|
|
276
277
|
"error.learning-ai-transcription-unavailable": "現在のAIは音声文字起こしに対応していません。OpenAIを既定にするか字幕・台本を提供してください。",
|
|
277
|
-
"error.learning-ai-audio-unreadable": "音声を読めません。ffmpeg・MP4/WebM形式・音声トラックを確認するか字幕を提供してください。"
|
|
278
|
+
"error.learning-ai-audio-unreadable": "音声を読めません。ffmpeg・MP4/WebM形式・音声トラックを確認するか字幕を提供してください。",
|
|
279
|
+
"title.learning-cancel-enrollments": "受講{count}件の取消",
|
|
280
|
+
"field.learning-format": "教育形式",
|
|
281
|
+
"field.learning-unit-count": "単元数",
|
|
282
|
+
"field.learning-expected-time": "所要時間",
|
|
283
|
+
"field.learning-enrolled": "受講対象",
|
|
284
|
+
"field.learning-completion-rate": "修了率",
|
|
285
|
+
"text.learning-minutes-value": "{minutes}分",
|
|
286
|
+
"text.learning-score-value": "{score}点",
|
|
287
|
+
"text.learning-quiz-none": "評価なし",
|
|
288
|
+
"text.learning-course-standing": "受講 {enrolled}名・修了 {completed}名({rate})",
|
|
289
|
+
"error.learning-note-invalid": "ノートを保存できません。ページを再読み込みしてからもう一度書いてください。",
|
|
290
|
+
"error.learning-note-too-large": "1ページに書けるノートの上限を超えました(ストローク{strokes}本・点{points}個)。消しゴムで一部を消してから書いてください。",
|
|
291
|
+
"error.learning-note-not-started": "学習を開始してからノートを書けます。",
|
|
292
|
+
"error.learning-note-pdf-only": "ノートはPDF単元のページにのみ書けます。",
|
|
293
|
+
"error.learning-note-page": "文書にないページです(全{pages}ページ)。"
|
|
278
294
|
}
|
package/translations/ko.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target}은(는) 이 사업장의 대상이 아닙니다.",
|
|
35
35
|
"error.learning-audience-required": "수강 대상을 선택하세요.",
|
|
36
36
|
"error.learning-cancel-reason-required": "취소 사유를 입력하세요.",
|
|
37
|
+
"error.learning-cancel-none": "취소할 수강을 선택하세요.",
|
|
37
38
|
"error.learning-content-what": "수강 또는 개정본을 지정하세요.",
|
|
38
39
|
"error.learning-course-name-required": "과정 이름을 입력하세요.",
|
|
39
40
|
"error.learning-course-name-taken": "「{name}」 과정이 이미 있습니다.",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"error.learning-not-a-department-head": "부서장만 소속 직원의 수강 현황을 열람할 수 있습니다.",
|
|
53
54
|
"error.learning-not-completed": "수료증은 이수한 과정에만 발급할 수 있습니다.",
|
|
54
55
|
"error.learning-not-found": "기록을 찾을 수 없습니다. 화면을 새로 고친 뒤 다시 시도하세요.",
|
|
55
|
-
"error.learning-page-ahead": "
|
|
56
|
+
"error.learning-page-ahead": "열람을 완료한 페이지의 다음 페이지({allowed}쪽)까지만 이동할 수 있습니다. 페이지를 순서대로 열람하세요.",
|
|
56
57
|
"error.learning-pass-score-invalid": "합격 점수는 1부터 100 사이의 정수로 입력하세요.",
|
|
57
58
|
"error.learning-position-ahead": "시청한 구간({allowed}초)보다 앞으로 이동할 수 없습니다. 해당 위치부터 영상을 재생하세요.",
|
|
58
59
|
"error.learning-question-answer-required": "정답을 하나 이상 지정하세요.",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "비워 두면 응시 횟수를 제한하지 않습니다.",
|
|
137
138
|
"text.learning-attempts-left": "남은 응시 횟수는 {count}회입니다.",
|
|
138
139
|
"text.learning-best-score": "최고 점수는 {score}점입니다.",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "수강 {count}건을 취소했습니다.",
|
|
140
141
|
"text.learning-category-job": "직무 교육",
|
|
141
142
|
"text.learning-category-mandatory": "법정 의무교육",
|
|
142
143
|
"text.learning-category-onboarding": "입사 교육",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "공개된 개정본 없음",
|
|
169
170
|
"text.learning-nothing-to-take": "배정된 과정이 없습니다.",
|
|
170
171
|
"text.learning-pass-score-hint": "100점 만점 기준입니다. 비워 두면 평가 없이 이수할 수 있습니다.",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "취소할 수강을 선택하세요.",
|
|
172
173
|
"text.learning-pick-open": "미이수 상태의 수강 내역을 선택하세요.",
|
|
173
174
|
"text.learning-question-count-hint": "응시할 때마다 등록된 문항 중 이 수만큼 무작위로 출제합니다. 비워 두면 모든 문항을 출제합니다.",
|
|
174
175
|
"text.learning-question-delete-confirm": "이 문항을 삭제하시겠습니까?",
|
|
@@ -217,7 +218,7 @@
|
|
|
217
218
|
"text.learning-unit-min-seconds-hint": "입력하지 않으면 최소 열람 시간은 60초입니다.",
|
|
218
219
|
"text.learning-unit-pages": "{pages}쪽",
|
|
219
220
|
"text.learning-unit-pdf": "문서(PDF)",
|
|
220
|
-
"text.learning-unit-pdf-hint": "PDF의 모든 페이지를
|
|
221
|
+
"text.learning-unit-pdf-hint": "PDF의 모든 페이지를 순서대로 열람하고 최소 학습 시간을 충족하면 단원이 완료됩니다. 페이지 수는 첨부한 파일에서 자동으로 확인합니다.",
|
|
221
222
|
"text.learning-unit-video": "동영상",
|
|
222
223
|
"text.learning-unit-video-hint": "동영상을 끝까지 시청하고, 재생 시간에 해당하는 학습 시간을 충족하면 단원이 완료됩니다. 아직 시청하지 않은 구간으로는 이동할 수 없습니다.",
|
|
223
224
|
"text.learning-version-close-confirm": "개정본을 종료하면 새 수강자는 이 개정본으로 학습을 시작할 수 없습니다. 이미 시작한 수강자는 계속 학습할 수 있습니다.",
|
|
@@ -252,27 +253,42 @@
|
|
|
252
253
|
"title.learning-units": "단원",
|
|
253
254
|
"title.learning-version-settings": "이수 조건과 출처",
|
|
254
255
|
"title.learning-versions": "개정본",
|
|
255
|
-
"button.learning-ai-material": "
|
|
256
|
+
"button.learning-ai-material": "자료 기반 AI 초안 작성",
|
|
256
257
|
"button.learning-ai-generate": "초안 생성",
|
|
257
|
-
"button.learning-ai-apply": "검토한 초안
|
|
258
|
+
"button.learning-ai-apply": "검토한 초안 반영",
|
|
258
259
|
"button.learning-ai-revise": "요청 수정 후 다시 생성",
|
|
259
|
-
"field.learning-ai-source": "교육
|
|
260
|
+
"field.learning-ai-source": "원본 교육 자료",
|
|
260
261
|
"field.learning-ai-captions": "동영상 자막·대본 파일",
|
|
261
262
|
"field.learning-ai-instruction": "대상·학습 목표·추가 요청",
|
|
262
|
-
"title.learning-ai-material": "
|
|
263
|
+
"title.learning-ai-material": "자료 기반 교육 초안 작성",
|
|
263
264
|
"title.learning-ai-preview": "AI 초안 검토",
|
|
264
265
|
"title.learning-ai-missing": "추가 확인·보완 사항",
|
|
265
|
-
"text.learning-ai-upload-first": "먼저 PDF 또는 동영상 단원을 추가하고 파일을
|
|
266
|
-
"text.learning-ai-material-help": "자료를 바탕으로 소개·학습 목표·보충
|
|
267
|
-
"text.learning-ai-captions-help": "자막·대본을
|
|
268
|
-
"text.learning-ai-working": "자료를
|
|
269
|
-
"text.learning-ai-apply-help": "
|
|
266
|
+
"text.learning-ai-upload-first": "먼저 PDF 또는 동영상 단원을 추가하고 원본 파일을 첨부하세요.",
|
|
267
|
+
"text.learning-ai-material-help": "원본 자료를 바탕으로 과정 소개·학습 목표·보충 단원·평가 문항과 해설의 초안을 생성합니다. 원본 자료는 유지되며, 초안을 생성하는 것만으로 과정이 저장되거나 공개되지는 않습니다.",
|
|
268
|
+
"text.learning-ai-captions-help": "자막·대본을 첨부하면 해당 내용을 사용하고, 첨부하지 않으면 동영상 음성을 텍스트로 자동 변환합니다. 자동 변환 시 음성을 외부 AI 서비스로 전송하며, 초안 생성 비용과 별도의 이용 비용이 발생할 수 있습니다. 영상 화면은 분석하지 않습니다. 생성 후 변환된 대본을 확인하고 수정할 수 있습니다.",
|
|
269
|
+
"text.learning-ai-working": "자료를 분석하여 초안을 생성하고 있습니다.",
|
|
270
|
+
"text.learning-ai-apply-help": "초안을 반영하면 과정 소개와 보충 단원이 기존 단원 뒤에 추가되고, 평가 문항은 AI 초안으로 저장됩니다. 출처·내용·학습 시간을 검토하고 평가 문항을 확인하여 저장한 후 공개하세요.",
|
|
270
271
|
"error.learning-ai-material-invalid": "자료 전체를 읽지 못했습니다. 파일·페이지 수·자막과 허용 범위를 확인하세요.",
|
|
271
272
|
"error.learning-ai-draft-invalid": "AI 응답의 내용·정답·출처가 불완전합니다. 과정은 변경되지 않았습니다. 요청을 조정해 다시 생성하세요.",
|
|
272
273
|
"error.learning-ai-draft-stale": "과정이나 원본 자료가 변경됐습니다. 최신 내용을 확인하고 초안을 다시 생성하세요.",
|
|
273
|
-
"error.learning-ai-source-limit": "
|
|
274
|
+
"error.learning-ai-source-limit": "자료가 허용 범위를 초과했습니다. PDF는 50MB·80쪽 이하이며, 스캔 페이지는 12쪽까지 지원합니다. 텍스트는 12만 자 이내로 나누어 주세요. 한도를 초과하면 일부만 처리하지 않고 요청 전체를 중단합니다.",
|
|
274
275
|
"error.learning-ai-source-read": "원본 자료를 읽지 못했습니다. 접근 권한과 파일 상태를 확인하고 다시 시도하세요.",
|
|
275
|
-
"error.learning-ai-video-limit": "자동
|
|
276
|
-
"error.learning-ai-transcription-unavailable": "현재 AI
|
|
277
|
-
"error.learning-ai-audio-unreadable": "음성을
|
|
276
|
+
"error.learning-ai-video-limit": "자동 음성 변환은 60분·250MB 이하의 MP4/WebM 동영상을 지원합니다. 대본은 12만 자 이내여야 합니다. 한도를 초과한 자료는 나누어 주세요.",
|
|
277
|
+
"error.learning-ai-transcription-unavailable": "현재 기본 AI 에이전트는 음성 변환을 지원하지 않습니다. OpenAI 에이전트를 기본 AI로 설정하거나 자막·대본을 첨부하세요.",
|
|
278
|
+
"error.learning-ai-audio-unreadable": "동영상의 음성을 추출하거나 변환하지 못했습니다. 음성이 포함된 MP4/WebM 파일인지 확인하거나 자막·대본을 첨부하세요. 문제가 계속되면 관리자에게 문의하세요.",
|
|
279
|
+
"title.learning-cancel-enrollments": "수강 {count}건 취소",
|
|
280
|
+
"field.learning-format": "교육 형태",
|
|
281
|
+
"field.learning-unit-count": "단원 수",
|
|
282
|
+
"field.learning-expected-time": "예상 학습 시간",
|
|
283
|
+
"field.learning-enrolled": "수강 대상",
|
|
284
|
+
"field.learning-completion-rate": "이수율",
|
|
285
|
+
"text.learning-minutes-value": "{minutes}분",
|
|
286
|
+
"text.learning-score-value": "{score}점",
|
|
287
|
+
"text.learning-quiz-none": "평가 없음",
|
|
288
|
+
"text.learning-course-standing": "수강 {enrolled}명 · 이수 {completed}명({rate})",
|
|
289
|
+
"error.learning-note-invalid": "필기 데이터를 저장할 수 없습니다. 페이지를 새로 고친 후 다시 작성하세요.",
|
|
290
|
+
"error.learning-note-too-large": "페이지당 필기 한도(획 {strokes}개·점 {points}개)를 초과했습니다. 일부 필기를 지운 후 다시 작성하세요.",
|
|
291
|
+
"error.learning-note-not-started": "학습을 시작한 후 필기를 작성할 수 있습니다.",
|
|
292
|
+
"error.learning-note-pdf-only": "필기는 PDF 단원에서만 작성할 수 있습니다.",
|
|
293
|
+
"error.learning-note-page": "지정한 페이지가 문서에 없습니다. 전체 페이지 수는 {pages}쪽입니다."
|
|
278
294
|
}
|
package/translations/ms.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target} bukan dari domain ini.",
|
|
35
35
|
"error.learning-audience-required": "Pilih peserta.",
|
|
36
36
|
"error.learning-cancel-reason-required": "Masukkan sebab pembatalan.",
|
|
37
|
+
"error.learning-cancel-none": "Pilih pendaftaran yang hendak dibatalkan.",
|
|
37
38
|
"error.learning-content-what": "Nyatakan pendaftaran atau versi.",
|
|
38
39
|
"error.learning-course-name-required": "Masukkan nama kursus.",
|
|
39
40
|
"error.learning-course-name-taken": "Kursus bernama “{name}” sudah wujud.",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "Biarkan kosong untuk tiada had.",
|
|
137
138
|
"text.learning-attempts-left": "Baki cubaan: {count}.",
|
|
138
139
|
"text.learning-best-score": "Markah terbaik: {score}.",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "{count} pendaftaran telah dibatalkan.",
|
|
140
141
|
"text.learning-category-job": "Latihan tugas",
|
|
141
142
|
"text.learning-category-mandatory": "Latihan wajib",
|
|
142
143
|
"text.learning-category-onboarding": "Orientasi",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "Belum diterbitkan",
|
|
169
170
|
"text.learning-nothing-to-take": "Tiada kursus ditugaskan kepada anda.",
|
|
170
171
|
"text.learning-pass-score-hint": "Daripada 100. Biarkan kosong untuk tiada kuiz.",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "Pilih pendaftaran yang hendak dibatalkan.",
|
|
172
173
|
"text.learning-pick-open": "Pilih pendaftaran yang belum tamat.",
|
|
173
174
|
"text.learning-question-count-hint": "Setiap cubaan memilih sebanyak ini soalan secara rawak. Biarkan kosong untuk semua.",
|
|
174
175
|
"text.learning-question-delete-confirm": "Padam soalan ini?",
|
|
@@ -274,5 +275,20 @@
|
|
|
274
275
|
"error.learning-ai-source-read": "Sumber tidak dapat dibaca. Semak akses dan fail, kemudian cuba lagi.",
|
|
275
276
|
"error.learning-ai-video-limit": "Transkripsi menyokong MP4/WebM sehingga 60 minit/250 MB dan 120,000 aksara. Bahagikan bahan.",
|
|
276
277
|
"error.learning-ai-transcription-unavailable": "Ejen semasa tidak menyokong transkripsi. Tetapkan OpenAI sebagai lalai atau berikan sari kata.",
|
|
277
|
-
"error.learning-ai-audio-unreadable": "Audio tidak dapat dibaca. Semak ffmpeg, format MP4/WebM dan trek audio, atau berikan sari kata."
|
|
278
|
+
"error.learning-ai-audio-unreadable": "Audio tidak dapat dibaca. Semak ffmpeg, format MP4/WebM dan trek audio, atau berikan sari kata.",
|
|
279
|
+
"title.learning-cancel-enrollments": "Batalkan {count} pendaftaran",
|
|
280
|
+
"field.learning-format": "Format",
|
|
281
|
+
"field.learning-unit-count": "Unit",
|
|
282
|
+
"field.learning-expected-time": "Masa diperlukan",
|
|
283
|
+
"field.learning-enrolled": "Peserta",
|
|
284
|
+
"field.learning-completion-rate": "Kadar tamat",
|
|
285
|
+
"text.learning-minutes-value": "{minutes} min",
|
|
286
|
+
"text.learning-score-value": "{score} mata",
|
|
287
|
+
"text.learning-quiz-none": "Tiada kuiz",
|
|
288
|
+
"text.learning-course-standing": "{enrolled} didaftar · {completed} selesai ({rate})",
|
|
289
|
+
"error.learning-note-invalid": "Nota tidak dapat disimpan. Muat semula halaman dan tulis semula.",
|
|
290
|
+
"error.learning-note-too-large": "Halaman ini tidak dapat menyimpan nota lagi ({strokes} lakaran, {points} titik). Padam sebahagian dan tulis semula.",
|
|
291
|
+
"error.learning-note-not-started": "Mulakan kursus sebelum menulis nota.",
|
|
292
|
+
"error.learning-note-pdf-only": "Nota hanya boleh ditulis pada halaman unit PDF.",
|
|
293
|
+
"error.learning-note-page": "Tiada halaman sedemikian dalam dokumen ({pages} halaman)."
|
|
278
294
|
}
|
package/translations/zh.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"error.learning-audience-invalid": "{target} 不属于本单位。",
|
|
35
35
|
"error.learning-audience-required": "请选择学习对象。",
|
|
36
36
|
"error.learning-cancel-reason-required": "请输入取消原因。",
|
|
37
|
+
"error.learning-cancel-none": "请选择要取消的选课。",
|
|
37
38
|
"error.learning-content-what": "请指定选课或版本。",
|
|
38
39
|
"error.learning-course-name-required": "请输入课程名称。",
|
|
39
40
|
"error.learning-course-name-taken": "已存在名为“{name}”的课程。",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"text.learning-attempt-limit-hint": "留空则不限次数。",
|
|
137
138
|
"text.learning-attempts-left": "剩余作答次数 {count} 次。",
|
|
138
139
|
"text.learning-best-score": "最高分为 {score} 分。",
|
|
139
|
-
"text.learning-cancelled": "
|
|
140
|
+
"text.learning-cancelled": "已取消 {count} 项选课。",
|
|
140
141
|
"text.learning-category-job": "岗位培训",
|
|
141
142
|
"text.learning-category-mandatory": "法定必修培训",
|
|
142
143
|
"text.learning-category-onboarding": "入职培训",
|
|
@@ -168,7 +169,7 @@
|
|
|
168
169
|
"text.learning-not-published": "未发布",
|
|
169
170
|
"text.learning-nothing-to-take": "暂无分配给您的课程。",
|
|
170
171
|
"text.learning-pass-score-hint": "满分 100 分。留空则无需测验即可结业。",
|
|
171
|
-
"text.learning-pick-
|
|
172
|
+
"text.learning-pick-cancellable": "请选择要取消的选课。",
|
|
172
173
|
"text.learning-pick-open": "请选择进行中或未开始的选课。",
|
|
173
174
|
"text.learning-question-count-hint": "每次作答从题库随机抽取该数量的题目。留空则全部出题。",
|
|
174
175
|
"text.learning-question-delete-confirm": "确定删除该题目吗?",
|
|
@@ -274,5 +275,20 @@
|
|
|
274
275
|
"error.learning-ai-source-read": "无法读取原始资料,请检查权限和文件后重试。",
|
|
275
276
|
"error.learning-ai-video-limit": "自动转录支持60分钟、250MB以内的MP4/WebM及12万字符以内文稿,请拆分资料。",
|
|
276
277
|
"error.learning-ai-transcription-unavailable": "当前AI不支持语音转录,请设置OpenAI默认代理或提供字幕文稿。",
|
|
277
|
-
"error.learning-ai-audio-unreadable": "无法读取语音,请检查服务器ffmpeg、MP4/WebM格式和音轨,或提供字幕文稿。"
|
|
278
|
+
"error.learning-ai-audio-unreadable": "无法读取语音,请检查服务器ffmpeg、MP4/WebM格式和音轨,或提供字幕文稿。",
|
|
279
|
+
"title.learning-cancel-enrollments": "取消 {count} 项选课",
|
|
280
|
+
"field.learning-format": "培训形式",
|
|
281
|
+
"field.learning-unit-count": "单元数",
|
|
282
|
+
"field.learning-expected-time": "所需时间",
|
|
283
|
+
"field.learning-enrolled": "学员人数",
|
|
284
|
+
"field.learning-completion-rate": "完成率",
|
|
285
|
+
"text.learning-minutes-value": "{minutes} 分钟",
|
|
286
|
+
"text.learning-score-value": "{score} 分",
|
|
287
|
+
"text.learning-quiz-none": "无测验",
|
|
288
|
+
"text.learning-course-standing": "学员 {enrolled} 人 · 完成 {completed} 人({rate})",
|
|
289
|
+
"error.learning-note-invalid": "无法保存笔记。请刷新页面后重新书写。",
|
|
290
|
+
"error.learning-note-too-large": "已超过单页笔记上限({strokes}笔 · {points}点)。请用橡皮擦擦除部分后再写。",
|
|
291
|
+
"error.learning-note-not-started": "开始学习后才能写笔记。",
|
|
292
|
+
"error.learning-note-pdf-only": "笔记只能写在PDF单元的页面上。",
|
|
293
|
+
"error.learning-note-page": "文档中没有该页(共{pages}页)。"
|
|
278
294
|
}
|