@windward/integrations 0.21.0 → 0.23.0
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/CHANGELOG.md +12 -0
- package/components/Content/Blocks/ActionPanel/TransformActivity.vue +386 -0
- package/components/Content/Blocks/ActionPanel/TransformBlock.vue +402 -59
- package/components/Content/Blocks/ExternalIntegration/LtiConsumer.vue +22 -2
- package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumer.vue +8 -2
- package/components/ExternalIntegration/Driver/Lti1p1/ManageProvider.vue +4 -0
- package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumer.vue +2 -2
- package/components/Integration/JobTable.vue +35 -3
- package/components/Integration/TranslateCourse.vue +574 -0
- package/components/Settings/ExternalIntegration/LtiConsumerSettings.vue +27 -0
- package/i18n/ar-SA/components/ai_agent/chat.ts +20 -0
- package/i18n/ar-SA/components/ai_agent/index.ts +5 -0
- package/i18n/ar-SA/components/content/blocks/action_panel/index.ts +5 -0
- package/i18n/ar-SA/components/content/blocks/action_panel/transform_block.ts +9 -0
- package/i18n/ar-SA/components/content/blocks/external_integration/index.ts +5 -0
- package/i18n/ar-SA/components/content/blocks/external_integration/lti_consumer.ts +17 -0
- package/i18n/ar-SA/components/content/blocks/index.ts +7 -0
- package/i18n/ar-SA/components/content/index.ts +5 -0
- package/i18n/ar-SA/components/external_integration/driver/lti1p1.ts +17 -0
- package/i18n/ar-SA/components/external_integration/driver/lti1p3.ts +25 -0
- package/i18n/ar-SA/components/external_integration/driver/scorm.ts +14 -0
- package/i18n/ar-SA/components/external_integration/index.ts +36 -0
- package/i18n/ar-SA/components/external_integration/provider_target.ts +9 -0
- package/i18n/ar-SA/components/file_import/index.ts +5 -0
- package/i18n/ar-SA/components/file_import/resourcespace.ts +4 -0
- package/i18n/ar-SA/components/index.ts +19 -0
- package/i18n/ar-SA/components/integration/driver.ts +67 -0
- package/i18n/ar-SA/components/integration/index.ts +9 -0
- package/i18n/ar-SA/components/integration/job.ts +25 -0
- package/i18n/ar-SA/components/integration/job_log.ts +24 -0
- package/i18n/ar-SA/components/llm/blooms.ts +15 -0
- package/i18n/ar-SA/components/llm/content_selector.ts +3 -0
- package/i18n/ar-SA/components/llm/generate_content/fake_text_stream.ts +62 -0
- package/i18n/ar-SA/components/llm/generate_content/generate_questions.ts +92 -0
- package/i18n/ar-SA/components/llm/generate_content/index.ts +8 -0
- package/i18n/ar-SA/components/llm/index.ts +10 -0
- package/i18n/ar-SA/components/navigation/index.ts +5 -0
- package/i18n/ar-SA/components/navigation/integrations.ts +9 -0
- package/i18n/ar-SA/components/settings/external_integration/index.ts +5 -0
- package/i18n/ar-SA/components/settings/external_integration/lti_consumer.ts +10 -0
- package/i18n/ar-SA/components/settings/index.ts +5 -0
- package/i18n/ar-SA/index.ts +16 -0
- package/i18n/ar-SA/modules/index.ts +5 -0
- package/i18n/ar-SA/pages/admin/index.ts +5 -0
- package/i18n/ar-SA/pages/admin/translateCourse.ts +68 -0
- package/i18n/ar-SA/pages/course/external_integration/index.ts +6 -0
- package/i18n/ar-SA/pages/course/index.ts +5 -0
- package/i18n/ar-SA/pages/importContent.ts +3 -0
- package/i18n/ar-SA/pages/importCourse.ts +13 -0
- package/i18n/ar-SA/pages/index.ts +15 -0
- package/i18n/ar-SA/pages/login/index.ts +9 -0
- package/i18n/ar-SA/pages/login/lti.ts +23 -0
- package/i18n/ar-SA/pages/login/saml.ts +7 -0
- package/i18n/ar-SA/pages/login/scorm.ts +28 -0
- package/i18n/ar-SA/pages/vendor.ts +11 -0
- package/i18n/ar-SA/shared/content_blocks.ts +9 -0
- package/i18n/ar-SA/shared/error.ts +9 -0
- package/i18n/ar-SA/shared/file.ts +5 -0
- package/i18n/ar-SA/shared/index.ts +17 -0
- package/i18n/ar-SA/shared/menu.ts +3 -0
- package/i18n/ar-SA/shared/notification.ts +14 -0
- package/i18n/ar-SA/shared/permission.ts +52 -0
- package/i18n/ar-SA/shared/settings.ts +9 -0
- package/i18n/en-US/components/content/blocks/action_panel/index.ts +2 -0
- package/i18n/en-US/components/content/blocks/action_panel/transform_activity.ts +8 -0
- package/i18n/en-US/components/content/blocks/action_panel/transform_block.ts +1 -1
- package/i18n/en-US/components/content/blocks/external_integration/lti_consumer.ts +1 -0
- package/i18n/en-US/components/integration/job.ts +2 -0
- package/i18n/en-US/components/navigation/integrations.ts +1 -0
- package/i18n/en-US/components/settings/external_integration/lti_consumer.ts +2 -0
- package/i18n/en-US/pages/admin/index.ts +5 -0
- package/i18n/en-US/pages/admin/translateCourse.ts +68 -0
- package/i18n/en-US/pages/index.ts +2 -0
- package/i18n/es-ES/components/content/blocks/action_panel/index.ts +2 -0
- package/i18n/es-ES/components/content/blocks/action_panel/transform_activity.ts +8 -0
- package/i18n/es-ES/components/content/blocks/action_panel/transform_block.ts +1 -1
- package/i18n/es-ES/components/content/blocks/external_integration/lti_consumer.ts +8 -7
- package/i18n/es-ES/components/integration/job.ts +2 -0
- package/i18n/es-ES/components/navigation/integrations.ts +1 -0
- package/i18n/es-ES/components/settings/external_integration/lti_consumer.ts +3 -0
- package/i18n/es-ES/pages/admin/index.ts +5 -0
- package/i18n/es-ES/pages/admin/translateCourse.ts +68 -0
- package/i18n/es-ES/pages/index.ts +2 -0
- package/i18n/fr-FR/components/ai_agent/chat.ts +20 -0
- package/i18n/fr-FR/components/ai_agent/index.ts +5 -0
- package/i18n/fr-FR/components/content/blocks/action_panel/index.ts +5 -0
- package/i18n/fr-FR/components/content/blocks/action_panel/transform_block.ts +9 -0
- package/i18n/fr-FR/components/content/blocks/external_integration/index.ts +5 -0
- package/i18n/fr-FR/components/content/blocks/external_integration/lti_consumer.ts +17 -0
- package/i18n/fr-FR/components/content/blocks/index.ts +7 -0
- package/i18n/fr-FR/components/content/index.ts +5 -0
- package/i18n/fr-FR/components/external_integration/driver/lti1p1.ts +17 -0
- package/i18n/fr-FR/components/external_integration/driver/lti1p3.ts +25 -0
- package/i18n/fr-FR/components/external_integration/driver/scorm.ts +14 -0
- package/i18n/fr-FR/components/external_integration/index.ts +36 -0
- package/i18n/fr-FR/components/external_integration/provider_target.ts +9 -0
- package/i18n/fr-FR/components/file_import/index.ts +5 -0
- package/i18n/fr-FR/components/file_import/resourcespace.ts +4 -0
- package/i18n/fr-FR/components/index.ts +19 -0
- package/i18n/fr-FR/components/integration/driver.ts +67 -0
- package/i18n/fr-FR/components/integration/index.ts +9 -0
- package/i18n/fr-FR/components/integration/job.ts +25 -0
- package/i18n/fr-FR/components/integration/job_log.ts +24 -0
- package/i18n/fr-FR/components/llm/blooms.ts +15 -0
- package/i18n/fr-FR/components/llm/content_selector.ts +3 -0
- package/i18n/fr-FR/components/llm/generate_content/fake_text_stream.ts +62 -0
- package/i18n/fr-FR/components/llm/generate_content/generate_questions.ts +92 -0
- package/i18n/fr-FR/components/llm/generate_content/index.ts +8 -0
- package/i18n/fr-FR/components/llm/index.ts +10 -0
- package/i18n/fr-FR/components/navigation/index.ts +5 -0
- package/i18n/fr-FR/components/navigation/integrations.ts +9 -0
- package/i18n/fr-FR/components/settings/external_integration/index.ts +5 -0
- package/i18n/fr-FR/components/settings/external_integration/lti_consumer.ts +10 -0
- package/i18n/fr-FR/components/settings/index.ts +5 -0
- package/i18n/fr-FR/index.ts +16 -0
- package/i18n/fr-FR/modules/index.ts +5 -0
- package/i18n/fr-FR/pages/admin/index.ts +5 -0
- package/i18n/fr-FR/pages/admin/translateCourse.ts +68 -0
- package/i18n/fr-FR/pages/course/external_integration/index.ts +6 -0
- package/i18n/fr-FR/pages/course/index.ts +5 -0
- package/i18n/fr-FR/pages/importContent.ts +3 -0
- package/i18n/fr-FR/pages/importCourse.ts +13 -0
- package/i18n/fr-FR/pages/index.ts +15 -0
- package/i18n/fr-FR/pages/login/index.ts +9 -0
- package/i18n/fr-FR/pages/login/lti.ts +23 -0
- package/i18n/fr-FR/pages/login/saml.ts +7 -0
- package/i18n/fr-FR/pages/login/scorm.ts +28 -0
- package/i18n/fr-FR/pages/vendor.ts +11 -0
- package/i18n/fr-FR/shared/content_blocks.ts +9 -0
- package/i18n/fr-FR/shared/error.ts +9 -0
- package/i18n/fr-FR/shared/file.ts +5 -0
- package/i18n/fr-FR/shared/index.ts +17 -0
- package/i18n/fr-FR/shared/menu.ts +3 -0
- package/i18n/fr-FR/shared/notification.ts +14 -0
- package/i18n/fr-FR/shared/permission.ts +52 -0
- package/i18n/fr-FR/shared/settings.ts +9 -0
- package/i18n/index.ts +4 -0
- package/i18n/sv-SE/components/content/blocks/action_panel/index.ts +2 -0
- package/i18n/sv-SE/components/content/blocks/action_panel/transform_activity.ts +8 -0
- package/i18n/sv-SE/components/content/blocks/action_panel/transform_block.ts +1 -1
- package/i18n/sv-SE/components/content/blocks/external_integration/lti_consumer.ts +9 -8
- package/i18n/sv-SE/components/integration/job.ts +6 -4
- package/i18n/sv-SE/components/navigation/integrations.ts +1 -0
- package/i18n/sv-SE/components/settings/external_integration/lti_consumer.ts +3 -0
- package/i18n/sv-SE/pages/admin/index.ts +5 -0
- package/i18n/sv-SE/pages/admin/translateCourse.ts +68 -0
- package/i18n/sv-SE/pages/index.ts +2 -0
- package/package.json +1 -1
- package/pages/admin/translateCourse.vue +81 -0
- package/plugin.js +32 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
title: 'Import Course',
|
|
3
|
+
recent_import_title: 'Recent Imports',
|
|
4
|
+
select_vendor: 'Select a vendor',
|
|
5
|
+
select_remote_organization: 'Select a remote organization',
|
|
6
|
+
select_remote_course: 'Select a remote course',
|
|
7
|
+
select_remote_content: 'Select individual content pages',
|
|
8
|
+
start_import: 'Start Import',
|
|
9
|
+
import_started: 'Import Started',
|
|
10
|
+
notify: 'Notify me when completed',
|
|
11
|
+
no_vendors:
|
|
12
|
+
'There are no configured vendors. Please go back and configure an integration vendor',
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import vendor from './vendor'
|
|
2
|
+
import importCourse from './importCourse'
|
|
3
|
+
import importContent from './importContent'
|
|
4
|
+
import login from './login'
|
|
5
|
+
import admin from './admin'
|
|
6
|
+
import course from './course'
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
vendor,
|
|
10
|
+
import_course: importCourse,
|
|
11
|
+
import_content: importContent,
|
|
12
|
+
login,
|
|
13
|
+
course,
|
|
14
|
+
admin,
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
lti_error: 'LTI Errors',
|
|
3
|
+
launch_error: 'LTI link failed to launch',
|
|
4
|
+
missing_title: 'The below fields are missing:',
|
|
5
|
+
error_title: 'The below errors occurred:',
|
|
6
|
+
error: {
|
|
7
|
+
invalid_launch_request: 'The launch request was invalid',
|
|
8
|
+
tool_disabled: 'This LTI package is disabled',
|
|
9
|
+
unknown: 'An unknown communication error occurred',
|
|
10
|
+
organization: 'Invalid organization',
|
|
11
|
+
tool: 'Invalid tool id',
|
|
12
|
+
tool_organization: 'This tool does not belong to this organization',
|
|
13
|
+
oauth: 'Invalid OAuth. Check your key and secret.',
|
|
14
|
+
},
|
|
15
|
+
missing: {
|
|
16
|
+
context_label:
|
|
17
|
+
'The context label field `context_label` is missing or invalid.',
|
|
18
|
+
resource_link_title:
|
|
19
|
+
'The resource link title `resource_link_title` is missing or invalid.',
|
|
20
|
+
lis_person_contact_email_primary:
|
|
21
|
+
'The users email is missing and an anonymous email could not be generated.',
|
|
22
|
+
},
|
|
23
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
scorm_error: 'SCORM Errors',
|
|
3
|
+
email_required: 'Email required to continue',
|
|
4
|
+
launch_error: 'SCORM package failed to launch',
|
|
5
|
+
missing_title: 'The below fields are missing:',
|
|
6
|
+
error_title: 'The below errors occurred:',
|
|
7
|
+
enter_email:
|
|
8
|
+
'Please enter your email address below to complete your account setup. Your email address will only be used to facilitate course-related communication, such as course content questions and technical support.',
|
|
9
|
+
privacy_policy: 'For more information, please see our privacy policy.',
|
|
10
|
+
error: {
|
|
11
|
+
missing_data:
|
|
12
|
+
'Could not load due to missing data. Missing student id and/or student name.',
|
|
13
|
+
missing_api: 'Could not access the LMS SCORM API.',
|
|
14
|
+
invalid_launch_request: 'The launch request was invalid',
|
|
15
|
+
tool_disabled: 'This SCORM package is disabled',
|
|
16
|
+
unknown: 'An unknown communication error occurred',
|
|
17
|
+
organization: 'Invalid organization',
|
|
18
|
+
tool: 'Invalid tool id',
|
|
19
|
+
tool_organization: 'This tool does not belong to this organization',
|
|
20
|
+
oauth: 'Invalid OAuth. Check your key and secret.',
|
|
21
|
+
},
|
|
22
|
+
missing: {
|
|
23
|
+
course_id: 'The course id is missing or invalid.',
|
|
24
|
+
course_name: 'The course name is missing.',
|
|
25
|
+
callback: 'The SCORM callback is missing.',
|
|
26
|
+
state: 'The SCORM verification state is missing.',
|
|
27
|
+
},
|
|
28
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
title: 'Integrations',
|
|
3
|
+
vendor_disabled: 'This vendor is not available for integrations',
|
|
4
|
+
vendor_not_configured: 'This integration vendor is not configured',
|
|
5
|
+
organization_integration_disabled:
|
|
6
|
+
'This organization integration is disabled',
|
|
7
|
+
vendor_name: 'Vendor Name',
|
|
8
|
+
configured: 'Integration Configured',
|
|
9
|
+
enabled: 'Integration Enabled',
|
|
10
|
+
manage: 'Manage Integration',
|
|
11
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
save_failed: 'Could not save this configuration',
|
|
3
|
+
load_remote_organization_failed: 'Could not load remote organizations',
|
|
4
|
+
load_remote_course_failed: 'Could not load remote courses',
|
|
5
|
+
load_remote_content_failed: 'Could not load remote content',
|
|
6
|
+
connect_success: 'Successfully connected',
|
|
7
|
+
connect_fail: 'Failed to connect',
|
|
8
|
+
unknown: 'An unknown error occurred when trying to connect',
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import contentBlocks from './content_blocks'
|
|
2
|
+
import settings from './settings'
|
|
3
|
+
import menu from './menu'
|
|
4
|
+
import notification from './notification'
|
|
5
|
+
import permission from './permission'
|
|
6
|
+
import file from './file'
|
|
7
|
+
import error from './error'
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
content_blocks: contentBlocks,
|
|
11
|
+
settings,
|
|
12
|
+
menu,
|
|
13
|
+
notification,
|
|
14
|
+
permission,
|
|
15
|
+
file,
|
|
16
|
+
error,
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
event: {
|
|
3
|
+
type_title: {
|
|
4
|
+
'windward-integrations-import-complete':
|
|
5
|
+
'3rd Party Import Complete',
|
|
6
|
+
'windward-integrations-import-fail': '3rd Party Import Failed',
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
type_description: {
|
|
10
|
+
'windward-core-ask-the-expert': '3rd Party Import Complete',
|
|
11
|
+
'windward-core-contact-support': '3rd Party Import Failed',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
type_title: {
|
|
3
|
+
'plugin->windward->integrations->vendor': 'Integration Vendors',
|
|
4
|
+
'plugin->windward->integrations->jobs': 'Integration Jobs',
|
|
5
|
+
'plugin->windward->integrations->organization->jobs':
|
|
6
|
+
'Organization Integration Jobs',
|
|
7
|
+
'plugin->windward->integrations->organization->integration':
|
|
8
|
+
'Organization Integrations (Read Access Required to use enabled integrations)',
|
|
9
|
+
'plugin->windward->integrations->organization':
|
|
10
|
+
'Remote Organization Access',
|
|
11
|
+
'plugin->windward->integrations->course': 'Remote Course Access',
|
|
12
|
+
'plugin->windward->integrations->content': 'Remote Content Access',
|
|
13
|
+
'plugin->windward->integrations->file':
|
|
14
|
+
'File Integrations View / Manage Remote Files',
|
|
15
|
+
'plugin->windward->integrations->course->file':
|
|
16
|
+
'File Integrations Import to Course (Write Access Required to import)',
|
|
17
|
+
'plugin->windward->integrations->course->externalIntegration':
|
|
18
|
+
'External Integrations (LTI / SCORM / etc)',
|
|
19
|
+
'plugin->windward->integrations->ai':
|
|
20
|
+
'Global Generative AI permissions ',
|
|
21
|
+
'plugin->windward->integrations->ai->integration':
|
|
22
|
+
'AI Prompt changing permissions',
|
|
23
|
+
'plugin->windward->integrations->organization->ai':
|
|
24
|
+
'Generative AI Permissions in only the users current org',
|
|
25
|
+
'plugin->windward->integrations->organization->aiAgentChat':
|
|
26
|
+
'Allow Access To AI Agent',
|
|
27
|
+
'plugin->windward->integrations->organization->course->ai':
|
|
28
|
+
'Generative AI Permissions in only the users current org and course for content generation',
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
type_description: {
|
|
32
|
+
'plugin->windward->integrations->vendor':
|
|
33
|
+
'Access all integration vendors across the whole system',
|
|
34
|
+
'plugin->windward->integrations->jobs': 'Access integration jobs',
|
|
35
|
+
'plugin->windward->integrations->organization->jobs':
|
|
36
|
+
'Access integration jobs in the current organization',
|
|
37
|
+
'plugin->windward->integrations->organization->integration':
|
|
38
|
+
'Access and manage integrations in the current organization',
|
|
39
|
+
'plugin->windward->integrations->organization':
|
|
40
|
+
'Access and manage remote organizations for imports',
|
|
41
|
+
'plugin->windward->integrations->course':
|
|
42
|
+
'Access and manage course imports',
|
|
43
|
+
'plugin->windward->integrations->content':
|
|
44
|
+
'Access and manage content imports',
|
|
45
|
+
'plugin->windward->integrations->file':
|
|
46
|
+
'Access and manage remote files via their integration. This permission lets you see the available files on remote services like Google Drive, Dropbox, ResourceSpace, etc.',
|
|
47
|
+
'plugin->windward->integrations->course->file':
|
|
48
|
+
'Import files from a remote file integration into a specific course',
|
|
49
|
+
'plugin->windward->integrations->course->externalIntegration':
|
|
50
|
+
'Access and manage external integrations such as LTI and SCORM',
|
|
51
|
+
},
|
|
52
|
+
}
|
package/i18n/index.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import arSA from './ar-SA'
|
|
1
2
|
import enUS from './en-US'
|
|
2
3
|
import esES from './es-ES'
|
|
4
|
+
import frFR from './fr-FR'
|
|
3
5
|
import svSE from './sv-SE'
|
|
4
6
|
|
|
5
7
|
export default {
|
|
6
8
|
messages: {
|
|
9
|
+
'ar-SA': arSA,
|
|
7
10
|
'en-US': enUS,
|
|
8
11
|
'es-ES': esES,
|
|
12
|
+
'fr-FR': frFR,
|
|
9
13
|
'sv-SE': svSE,
|
|
10
14
|
},
|
|
11
15
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
change_block_type: 'Ändra blocktyp',
|
|
3
|
+
change_block_type_insufficient_items:
|
|
4
|
+
'Ändra blocktyp är tillgängligt när aktiviteten har minst två objekt.',
|
|
5
|
+
change_block_type_error:
|
|
6
|
+
'Kunde inte byta blocktyp. Försök igen eller ändra manuellt.',
|
|
7
|
+
}
|
|
8
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
change_block_type: 'Ändra blocktyp',
|
|
3
3
|
change_block_type_insufficient_paragraphs:
|
|
4
|
-
'Ändra blocktyp är tillgängligt när texten har minst
|
|
4
|
+
'Ändra blocktyp är tillgängligt när texten har minst fyra meningar.',
|
|
5
5
|
change_block_type_insufficient_items:
|
|
6
6
|
'Ändra blocktyp är tillgängligt när blocket har minst två objekt.',
|
|
7
7
|
change_block_type_error:
|
|
@@ -3,15 +3,16 @@ export default {
|
|
|
3
3
|
instructions:
|
|
4
4
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam fringilla ipsum eget ante tempus blandit. Maecenas vel massa\n' +
|
|
5
5
|
'nec tellus vestibulum porttitor non a enim.',
|
|
6
|
-
launch: '
|
|
7
|
-
goodbye: '
|
|
8
|
-
launch_in_new_window: '
|
|
9
|
-
launch_in_modal: '
|
|
6
|
+
launch: 'Lansera',
|
|
7
|
+
goodbye: 'hej då',
|
|
8
|
+
launch_in_new_window: 'starta {0} i ny flik',
|
|
9
|
+
launch_in_modal: 'starta {0} i modal',
|
|
10
10
|
configure_warning:
|
|
11
11
|
'Välj en tillgänglig LTI-länk för att komma igång. Konfigurera sedan önskad starttyp.',
|
|
12
12
|
no_access:
|
|
13
|
-
'
|
|
14
|
-
missing_tool: '
|
|
15
|
-
unknown_error: '
|
|
16
|
-
link_disabled: '
|
|
13
|
+
'Du har inte behörighet att öppna den här länken. Kontakta din systemadministratör.',
|
|
14
|
+
missing_tool: 'Verktygs-ID {0} saknas',
|
|
15
|
+
unknown_error: 'Något gick fel! Det gick inte att öppna den här länken!',
|
|
16
|
+
link_disabled: 'Länk inaktiverad',
|
|
17
|
+
try_again: 'Försök igen',
|
|
17
18
|
}
|
|
@@ -3,7 +3,8 @@ export default {
|
|
|
3
3
|
job_completed: 'Jobb slutfört',
|
|
4
4
|
no_recent_jobs: 'Inga nya jobb',
|
|
5
5
|
job_id: 'Jobb-ID',
|
|
6
|
-
vendor_name: '
|
|
6
|
+
vendor_name: 'Leverantörsnamn',
|
|
7
|
+
vendor_name_translation: 'Översättning',
|
|
7
8
|
status: 'Status',
|
|
8
9
|
progress: 'Framsteg',
|
|
9
10
|
created: 'Skapat',
|
|
@@ -12,12 +13,13 @@ export default {
|
|
|
12
13
|
job_details: {
|
|
13
14
|
none: 'Inga detaljer tillgängliga',
|
|
14
15
|
import_course: "Importerar kurs-ID {0} '{1}'",
|
|
16
|
+
translate_course: 'Översätter kurs {0} till språk {1}',
|
|
15
17
|
},
|
|
16
18
|
job_status: {
|
|
17
19
|
not_started: 'Inte startat',
|
|
18
|
-
started: '
|
|
20
|
+
started: 'Startad',
|
|
19
21
|
in_progress: 'Pågår',
|
|
20
|
-
failed: '
|
|
21
|
-
completed: '
|
|
22
|
+
failed: 'Misslyckades',
|
|
23
|
+
completed: 'Slutförd',
|
|
22
24
|
},
|
|
23
25
|
}
|
|
@@ -2,6 +2,7 @@ export default {
|
|
|
2
2
|
title: 'Integrationer',
|
|
3
3
|
manage_integrations: 'Manage Integration Vendors',
|
|
4
4
|
import_course: 'Importera kurser',
|
|
5
|
+
translate_course: 'Översätt kurs',
|
|
5
6
|
import_content: 'Importera innehåll och filer',
|
|
6
7
|
manage_lti: 'Hantera LTI-anslutningar',
|
|
7
8
|
manage_lti_links: 'Hantera LTI-länkar',
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
tab_title: 'Translate Course',
|
|
3
|
+
recent_jobs_tab_title: 'Recent Translation Jobs',
|
|
4
|
+
title: 'Translate Course',
|
|
5
|
+
subtitle: 'Select a source language, course, and target language to create a translated version',
|
|
6
|
+
source_language: 'Source Language',
|
|
7
|
+
course: 'Course',
|
|
8
|
+
target_language: 'Target Language',
|
|
9
|
+
send_email_notification: 'Send email notification on completion',
|
|
10
|
+
summary_title: 'Translation Summary',
|
|
11
|
+
source_course: 'Source Course:',
|
|
12
|
+
source_language_label: 'Source Language:',
|
|
13
|
+
target_language_label: 'Target Language:',
|
|
14
|
+
reset_button: 'Reset',
|
|
15
|
+
start_translation_button: 'Start Translation',
|
|
16
|
+
no_courses_found: 'No courses found in {0}',
|
|
17
|
+
no_owner: 'No owner',
|
|
18
|
+
|
|
19
|
+
// Success/Error messages
|
|
20
|
+
translation_queued: 'Translation job queued! Check Recent Translations for progress.',
|
|
21
|
+
translation_failed: 'Failed to start translation. Please try again.',
|
|
22
|
+
locale_load_failed: 'Failed to load available languages',
|
|
23
|
+
courses_load_failed: 'Failed to load courses for selected language',
|
|
24
|
+
|
|
25
|
+
// Retranslation Mode Dialog
|
|
26
|
+
retranslation_dialog: {
|
|
27
|
+
title: 'Translation Already Exists',
|
|
28
|
+
existing_translation_info: 'A translation for <strong>{0}</strong> already exists.',
|
|
29
|
+
choose_how_to_proceed: 'Choose how to proceed:',
|
|
30
|
+
|
|
31
|
+
// Incremental mode
|
|
32
|
+
incremental_title: '✓ Update Changed Blocks Only',
|
|
33
|
+
incremental_subtitle: '(Recommended)',
|
|
34
|
+
incremental_description: 'Only retranslate blocks that have been modified since the last translation.',
|
|
35
|
+
incremental_safe_note: 'Safe: Preserves existing course and translations.',
|
|
36
|
+
|
|
37
|
+
// Full mode
|
|
38
|
+
full_title: '⚠️ Delete & Retranslate Everything',
|
|
39
|
+
full_warning: 'Warning:',
|
|
40
|
+
full_description: 'This will permanently delete the existing translated course. Use only if you have made major restructuring changes.',
|
|
41
|
+
|
|
42
|
+
cancel_button: 'Cancel',
|
|
43
|
+
continue_button: 'Continue',
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
// Delete Confirmation Dialog
|
|
47
|
+
delete_confirm_dialog: {
|
|
48
|
+
title: 'Confirm Course Deletion',
|
|
49
|
+
cannot_undo: 'This action cannot be undone!',
|
|
50
|
+
about_to_delete: 'You are about to permanently delete the following course:',
|
|
51
|
+
course_id: 'Course ID:',
|
|
52
|
+
will_delete_title: 'This will delete:',
|
|
53
|
+
will_delete_content: 'All course content and blocks',
|
|
54
|
+
will_delete_assessments: 'All assessments and questions',
|
|
55
|
+
will_delete_files: 'File assets and media',
|
|
56
|
+
will_delete_progress: 'User progress and state data',
|
|
57
|
+
are_you_sure: 'Are you absolutely sure you want to proceed?',
|
|
58
|
+
type_delete_to_confirm: "Type 'DELETE' to confirm",
|
|
59
|
+
type_exactly_delete: 'Type exactly: DELETE',
|
|
60
|
+
cancel_button: 'Cancel',
|
|
61
|
+
confirm_button: 'Yes, Delete & Retranslate',
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
// Success messages for retranslation
|
|
65
|
+
full_retranslation_queued: 'Full retranslation queued! Existing translation will be deleted and recreated. Check Recent Translations for progress.',
|
|
66
|
+
incremental_retranslation_queued: 'Incremental retranslation queued! Only changed blocks will be updated. Check Recent Translations for progress.',
|
|
67
|
+
retranslation_failed: 'Failed to start retranslation. Please try again.',
|
|
68
|
+
}
|
|
@@ -2,6 +2,7 @@ import vendor from './vendor'
|
|
|
2
2
|
import importCourse from './importCourse'
|
|
3
3
|
import importContent from './importContent'
|
|
4
4
|
import login from './login'
|
|
5
|
+
import admin from './admin'
|
|
5
6
|
import course from './course'
|
|
6
7
|
|
|
7
8
|
export default {
|
|
@@ -10,4 +11,5 @@ export default {
|
|
|
10
11
|
import_content: importContent,
|
|
11
12
|
login,
|
|
12
13
|
course,
|
|
14
|
+
admin,
|
|
13
15
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<v-tabs v-model="tab" class="mb-5">
|
|
4
|
+
<v-tabs-slider></v-tabs-slider>
|
|
5
|
+
|
|
6
|
+
<v-tab>
|
|
7
|
+
{{ $t('windward.integrations.pages.admin.translateCourse.tab_title') }}
|
|
8
|
+
</v-tab>
|
|
9
|
+
|
|
10
|
+
<v-tab>
|
|
11
|
+
{{ $t('windward.integrations.pages.admin.translateCourse.recent_jobs_tab_title') }}
|
|
12
|
+
</v-tab>
|
|
13
|
+
</v-tabs>
|
|
14
|
+
<v-tabs-items v-model="tab">
|
|
15
|
+
<v-tab-item>
|
|
16
|
+
<TranslateCourse @translation-started="onTranslationStarted" />
|
|
17
|
+
</v-tab-item>
|
|
18
|
+
<v-tab-item>
|
|
19
|
+
<h2 tabindex="0">
|
|
20
|
+
{{ $t('windward.integrations.pages.admin.translateCourse.recent_jobs_tab_title') }}
|
|
21
|
+
</h2>
|
|
22
|
+
<IntegrationJobTable
|
|
23
|
+
ref="integrationJobTable"
|
|
24
|
+
:channel="'integrations.organizations.' + organization.id"
|
|
25
|
+
:event="'.Windward\\Integrations\\App\\Events\\CourseTranslationProgressEvent'"
|
|
26
|
+
job-type="translation"
|
|
27
|
+
></IntegrationJobTable>
|
|
28
|
+
</v-tab-item>
|
|
29
|
+
</v-tabs-items>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<script>
|
|
34
|
+
import { mapGetters } from 'vuex'
|
|
35
|
+
import TranslateCourse from '../../components/Integration/TranslateCourse.vue'
|
|
36
|
+
import IntegrationJobTable from '../../components/Integration/JobTable.vue'
|
|
37
|
+
|
|
38
|
+
export default {
|
|
39
|
+
name: 'PluginIntegrationsAdminTranslateCoursePage',
|
|
40
|
+
components: {
|
|
41
|
+
TranslateCourse,
|
|
42
|
+
IntegrationJobTable,
|
|
43
|
+
},
|
|
44
|
+
layout: 'authenticated',
|
|
45
|
+
meta: {
|
|
46
|
+
privilege: {
|
|
47
|
+
'plugin.windward.integrations.course': {
|
|
48
|
+
writable: true,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
data() {
|
|
53
|
+
return {
|
|
54
|
+
tab: 0,
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
computed: {
|
|
58
|
+
...mapGetters({
|
|
59
|
+
organization: 'organization/get',
|
|
60
|
+
}),
|
|
61
|
+
},
|
|
62
|
+
watch: {
|
|
63
|
+
// Refresh jobs list when "Recent Translation Jobs" tab is selected
|
|
64
|
+
tab(newTab) {
|
|
65
|
+
if (newTab === 1 && this.$refs.integrationJobTable) {
|
|
66
|
+
this.$refs.integrationJobTable.loadJobs()
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
methods: {
|
|
71
|
+
onTranslationStarted() {
|
|
72
|
+
// Reload the jobs table when a new translation is started
|
|
73
|
+
if (this.$refs.integrationJobTable) {
|
|
74
|
+
this.$refs.integrationJobTable.loadJobs()
|
|
75
|
+
}
|
|
76
|
+
// Switch to the jobs tab to show the new job
|
|
77
|
+
this.tab = 1
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
</script>
|
package/plugin.js
CHANGED
|
@@ -3,6 +3,7 @@ import locales from './i18n'
|
|
|
3
3
|
|
|
4
4
|
import AdminVendorsPage from './pages/admin/vendors.vue'
|
|
5
5
|
import AdminImportCoursePage from './pages/admin/importCourse.vue'
|
|
6
|
+
import AdminTranslateCoursePage from './pages/admin/translateCourse.vue'
|
|
6
7
|
import ExternalIntegrationIndexPage from './pages/course/externalIntegration/index.vue'
|
|
7
8
|
import LoginLtiErrorPage from './pages/login/lti/error.vue'
|
|
8
9
|
import LoginScormErrorPage from './pages/login/scorm/error.vue'
|
|
@@ -18,6 +19,7 @@ import LtiConsumerBlockSettings from './components/Settings/ExternalIntegration/
|
|
|
18
19
|
import ScormConsumerBlockSettings from './components/Settings/ExternalIntegration/ScormConsumerSettings'
|
|
19
20
|
|
|
20
21
|
import ActionPanelTransformBlock from './components/Content/Blocks/ActionPanel/TransformBlock.vue'
|
|
22
|
+
import ActionPanelTransformActivity from './components/Content/Blocks/ActionPanel/TransformActivity.vue'
|
|
21
23
|
|
|
22
24
|
import ManageCourseIntegrationSettings from './components/Settings/ExternalIntegration/ManageCourseIntegrationSettings'
|
|
23
25
|
|
|
@@ -124,6 +126,13 @@ export default {
|
|
|
124
126
|
name: 'PluginIntegrationsAdminImportCoursePage',
|
|
125
127
|
template: AdminImportCoursePage,
|
|
126
128
|
},
|
|
129
|
+
{
|
|
130
|
+
page: 'admin-integrations',
|
|
131
|
+
path: '/admin/integrations/translate-course',
|
|
132
|
+
i18n: 'windward.integrations.components.navigation.integrations.translate_course',
|
|
133
|
+
name: 'PluginIntegrationsAdminTranslateCoursePage',
|
|
134
|
+
template: AdminTranslateCoursePage,
|
|
135
|
+
},
|
|
127
136
|
{
|
|
128
137
|
page: 'admin-integrations',
|
|
129
138
|
path: '/course/:course/integrations/external',
|
|
@@ -194,6 +203,16 @@ export default {
|
|
|
194
203
|
},
|
|
195
204
|
},
|
|
196
205
|
},
|
|
206
|
+
{
|
|
207
|
+
i18n: 'windward.integrations.components.navigation.integrations.translate_course',
|
|
208
|
+
path: '/admin/integrations/translate-course',
|
|
209
|
+
context: ['home'],
|
|
210
|
+
permissions: {
|
|
211
|
+
'plugin.windward.integrations.course': {
|
|
212
|
+
writable: true,
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
},
|
|
197
216
|
{
|
|
198
217
|
i18n: 'windward.integrations.pages.course.external_integration.title',
|
|
199
218
|
path: '/course/{course.id}/integrations/external',
|
|
@@ -325,6 +344,19 @@ export default {
|
|
|
325
344
|
'block.core-clickable-icons',
|
|
326
345
|
],
|
|
327
346
|
},
|
|
347
|
+
{
|
|
348
|
+
tag: 'windward-integrations-action-panel-transform-activity',
|
|
349
|
+
template: ActionPanelTransformActivity,
|
|
350
|
+
context: [
|
|
351
|
+
'block.games-flash-card',
|
|
352
|
+
'block.games-matching-game',
|
|
353
|
+
'block.games-bucket',
|
|
354
|
+
'block.games-seven-strikes-game',
|
|
355
|
+
'block.games-wordjumble-game',
|
|
356
|
+
'block.games-crossword-puzzle-game',
|
|
357
|
+
'block.games-multiple-choice',
|
|
358
|
+
],
|
|
359
|
+
},
|
|
328
360
|
],
|
|
329
361
|
courseSetting: [
|
|
330
362
|
{
|