From cf389a249203ac82a97a8121824c15d7e98a387d Mon Sep 17 00:00:00 2001 From: erseco Date: Sat, 13 Jun 2026 17:32:37 +0100 Subject: [PATCH 01/14] feat(security): add secure (opaque-origin) content iframe mode The frontend shortcode and Gutenberg block embedded .elpx content with sandbox="allow-scripts allow-same-origin allow-popups", served same-origin. With allow-same-origin the arbitrary author HTML/JS can read the WordPress page's cookies/DOM and reach window.parent. Add an exelearning_iframe_sandbox_mode option (secure default | legacy): secure drops allow-same-origin so the content runs in an opaque origin and is isolated from the page; legacy restores the previous behaviour for environments that need it (e.g. WordPress Playground, whose service worker only serves same-origin documents). A single ExeLearning_Iframe_Sandbox helper owns the option and the per-mode sandbox tokens, consumed by both the shortcode and the block. Teacher mode used same-origin contentDocument access, which cannot run against an opaque iframe; in secure mode the desired state is carried on the iframe src (exe-teacher / exe-teacher-toggler) and the content proxy applies it server-side (hide-toggler style and mode-teacher class), so no parent-to-iframe DOM access is involved. The legacy contentDocument path is kept for legacy mode. No CSP change is needed: the proxy's existing default-src 'self' resolves to the serving origin and loads same-host subresources under the opaque origin (verified in a browser). An admin setting under Settings -> eXeLearning lets admins switch modes, and the Playground blueprint forces legacy. Adds unit tests for the helper, the shortcode and block sandbox tokens per mode, the secure teacher-mode src params, and the proxy's server-side teacher-mode injection. --- admin/class-admin-settings.php | 61 ++++++++++++++++++++ blueprint.json | 4 ++ exelearning.php | 1 + includes/class-content-proxy.php | 81 +++++++++++++++++++++++++++ includes/class-elp-upload-block.php | 20 +++++-- includes/class-iframe-sandbox.php | 86 +++++++++++++++++++++++++++++ public/class-shortcodes.php | 28 ++++++++-- tests/unit/ContentProxyTest.php | 60 ++++++++++++++++++++ tests/unit/ElpUploadBlockTest.php | 51 +++++++++++++++++ tests/unit/IframeSandboxTest.php | 45 +++++++++++++++ tests/unit/ShortcodesTest.php | 79 ++++++++++++++++++++++++-- 11 files changed, 503 insertions(+), 13 deletions(-) create mode 100644 includes/class-iframe-sandbox.php create mode 100644 tests/unit/IframeSandboxTest.php diff --git a/admin/class-admin-settings.php b/admin/class-admin-settings.php index 14c9580..5853168 100644 --- a/admin/class-admin-settings.php +++ b/admin/class-admin-settings.php @@ -64,12 +64,73 @@ public function display_settings_page() {

render_editor_status_section(); ?> + render_security_section(); ?> render_styles_section(); ?> render_help_section(); ?>

' + . esc_html__( 'Settings saved.', 'exelearning' ) . '

'; + } + } + + $current = ExeLearning_Iframe_Sandbox::mode(); + ?> +
+

+

+ +

+
+ + + + + + + + +
+
+ set_permalink_structure('/%postname%/'); $wp_rewrite->flush_rules(true); ?>" }, + { + "step": "runPHP", + "code": "" + }, { "step": "writeFile", "path": "/tmp/test-content.elpx", diff --git a/exelearning.php b/exelearning.php index 6b21d5d..2cb3de5 100644 --- a/exelearning.php +++ b/exelearning.php @@ -42,6 +42,7 @@ require_once EXELEARNING_PLUGIN_DIR . 'includes/class-filters.php'; require_once EXELEARNING_PLUGIN_DIR . 'includes/class-post-types.php'; require_once EXELEARNING_PLUGIN_DIR . 'includes/class-mime-types.php'; +require_once EXELEARNING_PLUGIN_DIR . 'includes/class-iframe-sandbox.php'; require_once EXELEARNING_PLUGIN_DIR . 'includes/class-elp-list-table.php'; // Load the eXeLearning file upload handler. diff --git a/includes/class-content-proxy.php b/includes/class-content-proxy.php index 7dfaee5..8780ab2 100644 --- a/includes/class-content-proxy.php +++ b/includes/class-content-proxy.php @@ -64,6 +64,23 @@ class ExeLearning_Content_Proxy { */ private $base_path; + /** + * Whether to hide the teacher-mode toggler server-side (secure mode, when the + * iframe carries ?exe-teacher-toggler=0). Replaces the same-origin contentDocument + * injection that cannot run against an opaque-origin iframe. + * + * @var bool + */ + private $teacher_hide_toggler = false; + + /** + * Whether to activate teacher mode server-side (secure mode, when the iframe + * carries ?exe-teacher=1). + * + * @var bool + */ + private $teacher_activate = false; + /** * Constructor. */ @@ -82,6 +99,12 @@ public function serve_content( $request ) { $hash = $request->get_param( 'hash' ); $file = $request->get_param( 'file' ); + // Secure-mode teacher-mode signals, carried on the iframe src query so the + // proxy can apply them server-side (an opaque-origin iframe cannot be reached + // from the parent page's JavaScript). Absent params leave the HTML untouched. + $this->teacher_hide_toggler = '0' === (string) $request->get_param( 'exe-teacher-toggler' ); + $this->teacher_activate = '1' === (string) $request->get_param( 'exe-teacher' ); + // Validate hash. $hash_error = $this->validate_hash( $hash ); if ( is_wp_error( $hash_error ) ) { @@ -233,6 +256,9 @@ private function serve_html_with_base_tag( $full_path, $hash, $mime_type, $file_ // in all environments (e.g. WordPress Playground with Service Workers). $html = $this->rewrite_relative_urls( $html, $hash, $file_path ); + // Apply teacher-mode server-side (secure mode). No-op when no params are set. + $html = $this->inject_teacher_mode( $html ); + // Send headers with the new content length. $this->send_headers( $mime_type, strlen( $html ) ); @@ -240,6 +266,61 @@ private function serve_html_with_base_tag( $full_path, $hash, $mime_type, $file_ echo $html; } + /** + * Apply teacher-mode to the served document server-side. + * + * In secure mode the content runs in an opaque-origin iframe, so the parent page + * cannot reach into it to toggle teacher mode. Instead the iframe src carries the + * desired state and the proxy bakes it into the HTML here: + * - hide toggler: inject a stylesheet that hides #teacher-mode-toggler-wrapper; + * - activate: add the `mode-teacher` class to and a small same-document + * script that checks the toggler and stores the flag (localStorage may be + * unavailable under an opaque origin, hence the try/catch). + * It is a no-op when neither flag is set, keeping legacy output byte-identical. + * + * @param string $html The served HTML. + * @return string Possibly modified HTML. + */ + private function inject_teacher_mode( $html ) { + if ( ! $this->teacher_hide_toggler && ! $this->teacher_activate ) { + return $html; + } + + if ( $this->teacher_hide_toggler ) { + $style = ''; + if ( false !== stripos( $html, '' ) ) { + $html = preg_replace( '/<\/head>/i', $style . '', $html, 1 ); + } else { + $html = $style . $html; + } + } + + if ( $this->teacher_activate ) { + // Add the mode-teacher class to the opening tag. + if ( preg_match( '/]*>/i', $html, $matches ) ) { + $open_tag = $matches[0]; + if ( preg_match( '/\sclass\s*=\s*"/i', $open_tag ) ) { + $new_tag = preg_replace( '/(\sclass\s*=\s*")/i', '$1mode-teacher ', $open_tag, 1 ); + } else { + $new_tag = preg_replace( '/' ) ) { + $html = preg_replace( '/<\/body>/i', $script . '', $html, 1 ); + } else { + $html .= $script; + } + } + + return $html; + } + /** * Serve CSS content with url() references rewritten to absolute proxy URLs. * This is needed when pretty permalinks are disabled. diff --git a/includes/class-elp-upload-block.php b/includes/class-elp-upload-block.php index a5daa56..6a9a2f9 100644 --- a/includes/class-elp-upload-block.php +++ b/includes/class-elp-upload-block.php @@ -220,7 +220,16 @@ private function maybe_render_download_button( $data ) { * @return string Escaped preview URL. */ private function build_preview_url( $data ) { - return esc_url( ExeLearning_Content_Proxy::get_proxy_url( $data['extracted_dir'] ) ); + $url = ExeLearning_Content_Proxy::get_proxy_url( $data['extracted_dir'] ); + + // In secure mode the iframe is opaque, so the teacher-mode toggler cannot be + // hidden from this page's JavaScript. Carry the request on the src; the content + // proxy hides it server-side. + if ( ExeLearning_Iframe_Sandbox::is_secure() && empty( $data['teacher_mode_visible'] ) ) { + $url = add_query_arg( 'exe-teacher-toggler', '0', $url ); + } + + return esc_url( $url ); } /** @@ -279,15 +288,18 @@ private function render_block_preview( $data, $download_html ) { style="width: 100%%; height: %dpx; border: 1px solid #ddd; border-radius: 4px;" title="%s" loading="lazy" - sandbox="allow-scripts allow-same-origin allow-popups" + sandbox="%s" referrerpolicy="no-referrer" >', $this->build_preview_url( $data ), $data['height'], - esc_attr( get_the_title( $data['attachment_id'] ) ) + esc_attr( get_the_title( $data['attachment_id'] ) ), + esc_attr( ExeLearning_Iframe_Sandbox::sandbox_tokens() ) ); - if ( ! $data['teacher_mode_visible'] ) { + // Same-origin DOM injection only works in legacy mode; in secure mode the proxy + // hides the toggler server-side (see build_preview_url). + if ( ! $data['teacher_mode_visible'] && ! ExeLearning_Iframe_Sandbox::is_secure() ) { $html .= $this->teacher_mode_hide_script( $data['container_id'] ); } diff --git a/includes/class-iframe-sandbox.php b/includes/class-iframe-sandbox.php new file mode 100644 index 0000000..70645ca --- /dev/null +++ b/includes/class-iframe-sandbox.php @@ -0,0 +1,86 @@ + @@ -350,13 +366,14 @@ class="exelearning-iframe" title="%s" loading="lazy" allow="fullscreen" - sandbox="allow-scripts allow-same-origin allow-popups" + sandbox="%s" referrerpolicy="no-referrer" >', $iframe_src_attr, $height, $is_poster ? ' display: none;' : '', - esc_attr( $title ) + esc_attr( $title ), + esc_attr( ExeLearning_Iframe_Sandbox::sandbox_tokens() ) ); return sprintf( @@ -414,7 +431,10 @@ private function render_preview_script( $unique_id, $teacher_mode_visible, $teac }'; } - if ( ! $teacher_mode_visible ) { + // Same-origin DOM injection only works in legacy mode. In secure mode the + // iframe is opaque and the content proxy applies teacher mode server-side + // (via the exe-teacher* query params added to the iframe src). + if ( ! $teacher_mode_visible && ! ExeLearning_Iframe_Sandbox::is_secure() ) { $body .= ' if (iframe) { var hideCss = "#teacher-mode-toggler-wrapper { visibility: hidden !important; }"; @@ -434,7 +454,7 @@ private function render_preview_script( $unique_id, $teacher_mode_visible, $teac }'; } - if ( $teacher_mode ) { + if ( $teacher_mode && ! ExeLearning_Iframe_Sandbox::is_secure() ) { $body .= ' if (iframe) { var activate = function() { diff --git a/tests/unit/ContentProxyTest.php b/tests/unit/ContentProxyTest.php index 04d11e3..6b1d7a2 100644 --- a/tests/unit/ContentProxyTest.php +++ b/tests/unit/ContentProxyTest.php @@ -1040,4 +1040,64 @@ public function test_content_origin_rejects_non_bare_origin() { remove_filter( 'exelearning_content_origin', $cb ); } + + /** + * Invoke the private inject_teacher_mode() with the given teacher-mode flags. + * + * @param string $html Input HTML. + * @param bool $hide Whether to hide the toggler. + * @param bool $activate Whether to activate teacher mode. + * @return string Transformed HTML. + */ + private function invoke_inject_teacher_mode( $html, $hide, $activate ) { + $hide_prop = new ReflectionProperty( ExeLearning_Content_Proxy::class, 'teacher_hide_toggler' ); + $hide_prop->setAccessible( true ); + $hide_prop->setValue( $this->proxy, $hide ); + + $activate_prop = new ReflectionProperty( ExeLearning_Content_Proxy::class, 'teacher_activate' ); + $activate_prop->setAccessible( true ); + $activate_prop->setValue( $this->proxy, $activate ); + + $method = new ReflectionMethod( ExeLearning_Content_Proxy::class, 'inject_teacher_mode' ); + $method->setAccessible( true ); + + return $method->invoke( $this->proxy, $html ); + } + + /** + * With no flags, inject_teacher_mode() is a no-op (legacy output stays identical). + */ + public function test_inject_teacher_mode_noop_when_no_flags() { + $html = '

x

'; + $result = $this->invoke_inject_teacher_mode( $html, false, false ); + + $this->assertSame( $html, $result ); + } + + /** + * Hiding the toggler injects a server-side stylesheet (no contentDocument needed). + */ + public function test_inject_teacher_mode_hides_toggler() { + $html = ''; + $result = $this->invoke_inject_teacher_mode( $html, true, false ); + + $this->assertStringContainsString( 'exelearning-teacher-mode-style', $result ); + $this->assertStringContainsString( '#teacher-mode-toggler-wrapper', $result ); + $this->assertStringContainsString( 'visibility:hidden', $result ); + } + + /** + * Activating teacher mode adds the mode-teacher class and a self-contained script. + */ + public function test_inject_teacher_mode_activates() { + $html = ''; + $result = $this->invoke_inject_teacher_mode( $html, false, true ); + + $this->assertStringContainsString( 'mode-teacher', $result ); + $this->assertStringContainsString( 'teacher-mode-toggler', $result ); + $this->assertStringContainsString( 'exeTeacherMode', $result ); + // It must run inside the document itself, never poke a parent/other frame. + $this->assertStringNotContainsString( 'contentDocument', $result ); + $this->assertStringNotContainsString( 'window.parent', $result ); + } } diff --git a/tests/unit/ElpUploadBlockTest.php b/tests/unit/ElpUploadBlockTest.php index 9368017..d854529 100644 --- a/tests/unit/ElpUploadBlockTest.php +++ b/tests/unit/ElpUploadBlockTest.php @@ -118,6 +118,57 @@ public function test_iframe_has_sandbox() { $this->assertStringContainsString( 'allow-scripts', $result ); } + /** + * By default (secure mode) the block iframe is opaque-origin (no allow-same-origin). + */ + public function test_block_sandbox_secure_default() { + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'e', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->block->render_block( array( 'attachmentId' => $attachment_id ) ); + + $this->assertStringNotContainsString( 'allow-same-origin', $result ); + } + + /** + * Legacy mode keeps the same-origin sandbox token on the block iframe. + */ + public function test_block_sandbox_legacy_mode() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, ExeLearning_Iframe_Sandbox::MODE_LEGACY ); + + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'f', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->block->render_block( array( 'attachmentId' => $attachment_id ) ); + + $this->assertStringContainsString( 'allow-same-origin', $result ); + } + + /** + * In secure mode, hiding the toggler is carried on the src for the proxy, not via + * a same-origin contentDocument script. + */ + public function test_block_secure_hides_toggler_via_query() { + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'a', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->block->render_block( + array( + 'attachmentId' => $attachment_id, + 'teacherModeVisible' => false, + ) + ); + + $this->assertStringContainsString( 'exe-teacher-toggler=0', $result ); + $this->assertStringNotContainsString( 'contentDocument', $result ); + } + /** * Test iframe has referrerpolicy. */ diff --git a/tests/unit/IframeSandboxTest.php b/tests/unit/IframeSandboxTest.php new file mode 100644 index 0000000..cf49771 --- /dev/null +++ b/tests/unit/IframeSandboxTest.php @@ -0,0 +1,45 @@ +assertSame( 'secure', ExeLearning_Iframe_Sandbox::mode() ); + $this->assertTrue( ExeLearning_Iframe_Sandbox::is_secure() ); + $this->assertSame( 'allow-scripts allow-popups', ExeLearning_Iframe_Sandbox::sandbox_tokens() ); + $this->assertStringNotContainsString( 'allow-same-origin', ExeLearning_Iframe_Sandbox::sandbox_tokens() ); + } + + /** + * Legacy mode restores the same-origin token. + */ + public function test_legacy_mode() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, 'legacy' ); + + $this->assertSame( 'legacy', ExeLearning_Iframe_Sandbox::mode() ); + $this->assertFalse( ExeLearning_Iframe_Sandbox::is_secure() ); + $this->assertStringContainsString( 'allow-same-origin', ExeLearning_Iframe_Sandbox::sandbox_tokens() ); + } + + /** + * Any value other than "legacy" fails safe to secure. + */ + public function test_invalid_mode_falls_back_to_secure() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, 'garbage' ); + + $this->assertSame( 'secure', ExeLearning_Iframe_Sandbox::mode() ); + $this->assertTrue( ExeLearning_Iframe_Sandbox::is_secure() ); + } +} diff --git a/tests/unit/ShortcodesTest.php b/tests/unit/ShortcodesTest.php index aae0647..c9ece4e 100644 --- a/tests/unit/ShortcodesTest.php +++ b/tests/unit/ShortcodesTest.php @@ -101,7 +101,7 @@ public function test_display_exelearning_renders_iframe() { } /** - * Test iframe has sandbox attribute for security. + * Test the iframe is sandboxed and, by default (secure mode), opaque-origin. */ public function test_iframe_has_sandbox_attribute() { $attachment_id = $this->factory->attachment->create(); @@ -113,14 +113,77 @@ public function test_iframe_has_sandbox_attribute() { $this->assertStringContainsString( 'sandbox=', $result ); $this->assertStringContainsString( 'allow-scripts', $result ); - // allow-same-origin is required for the eXeLearning viewer (a same-origin - // app) to render inside the iframe. - $this->assertStringContainsString( 'allow-same-origin', $result ); + // Secure is the default: no allow-same-origin, so the content runs in an + // opaque origin and cannot reach this page. + $this->assertStringNotContainsString( 'allow-same-origin', $result ); // allow-modals is intentionally NOT granted so the preview cannot raise // "Leave site?" dialogs. $this->assertStringNotContainsString( 'allow-modals', $result ); } + /** + * Legacy mode keeps the same-origin sandbox token. + */ + public function test_iframe_sandbox_legacy_mode_keeps_same_origin() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, ExeLearning_Iframe_Sandbox::MODE_LEGACY ); + + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'c', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->shortcodes->display_exelearning( array( 'id' => $attachment_id ) ); + + $this->assertStringContainsString( 'allow-same-origin', $result ); + } + + /** + * In secure mode teacher state is carried on the iframe src (applied server-side + * by the proxy), with no same-origin contentDocument injection. + */ + public function test_secure_mode_carries_teacher_params_without_contentdocument() { + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'd', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->shortcodes->display_exelearning( + array( + 'id' => $attachment_id, + 'teacher_mode' => '1', + 'teacher_mode_visible' => '0', + ) + ); + + $this->assertStringContainsString( 'exe-teacher=1', $result ); + $this->assertStringContainsString( 'exe-teacher-toggler=0', $result ); + $this->assertStringNotContainsString( 'contentDocument', $result ); + } + + /** + * In legacy mode teacher state is applied via the same-origin contentDocument + * script, not via src query params. + */ + public function test_legacy_mode_uses_contentdocument_for_teacher() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, ExeLearning_Iframe_Sandbox::MODE_LEGACY ); + + $attachment_id = $this->factory->attachment->create(); + $hash = str_repeat( 'e', 40 ); + update_post_meta( $attachment_id, '_exelearning_extracted', $hash ); + update_post_meta( $attachment_id, '_exelearning_has_preview', '1' ); + + $result = $this->shortcodes->display_exelearning( + array( + 'id' => $attachment_id, + 'teacher_mode' => '1', + 'teacher_mode_visible' => '0', + ) + ); + + $this->assertStringContainsString( 'contentDocument', $result ); + $this->assertStringNotContainsString( 'exe-teacher=1', $result ); + } + /** * Test iframe has referrerpolicy attribute for security. */ @@ -336,9 +399,15 @@ public function test_teacher_mode_off_by_default() { } /** - * Test teacher_mode="1" injects the teacher-mode activation script. + * Test teacher_mode="1" injects the teacher-mode activation script in legacy mode. + * + * In secure mode activation is carried on the iframe src and applied server-side + * by the proxy (covered by test_secure_mode_carries_teacher_params_*); the + * same-origin activation script only exists in legacy mode. */ public function test_teacher_mode_activation() { + update_option( ExeLearning_Iframe_Sandbox::OPTION, ExeLearning_Iframe_Sandbox::MODE_LEGACY ); + $attachment_id = $this->create_previewable_attachment( str_repeat( '2', 40 ) ); $result = $this->shortcodes->display_exelearning( From 9eb07ff20d63ff99336faef989ca490117ac63b8 Mon Sep 17 00:00:00 2001 From: erseco Date: Sat, 13 Jun 2026 17:44:38 +0100 Subject: [PATCH 02/14] i18n: translate the secure-iframe admin strings; trim the settings copy Adds the new "Security" settings card strings to the POT and translates them in all maintained locales (ca, ca_valencia, de_DE, eo, es_ES, eu, gl_ES, it_IT, pt_PT, ro_RO) so the untranslated-strings check passes. Also drops the redundant card subtitle and shortens the field help text. --- admin/class-admin-settings.php | 7 +- languages/exelearning-ca.mo | Bin 21202 -> 21930 bytes languages/exelearning-ca.po | 218 +++++++++++++++------------ languages/exelearning-ca_valencia.mo | Bin 21250 -> 21978 bytes languages/exelearning-ca_valencia.po | 218 +++++++++++++++------------ languages/exelearning-de_DE.mo | Bin 21668 -> 22448 bytes languages/exelearning-de_DE.po | 218 +++++++++++++++------------ languages/exelearning-eo.mo | Bin 20793 -> 21525 bytes languages/exelearning-eo.po | 218 +++++++++++++++------------ languages/exelearning-es_ES.mo | Bin 21399 -> 22125 bytes languages/exelearning-es_ES.po | 218 +++++++++++++++------------ languages/exelearning-eu.mo | Bin 21205 -> 21961 bytes languages/exelearning-eu.po | 218 +++++++++++++++------------ languages/exelearning-gl_ES.mo | Bin 21232 -> 21945 bytes languages/exelearning-gl_ES.po | 218 +++++++++++++++------------ languages/exelearning-it_IT.mo | Bin 21194 -> 21942 bytes languages/exelearning-it_IT.po | 218 +++++++++++++++------------ languages/exelearning-pt_PT.mo | Bin 21452 -> 22180 bytes languages/exelearning-pt_PT.po | 218 +++++++++++++++------------ languages/exelearning-ro_RO.mo | Bin 21734 -> 22494 bytes languages/exelearning-ro_RO.po | 218 +++++++++++++++------------ languages/exelearning.pot | 218 +++++++++++++++------------ 22 files changed, 1355 insertions(+), 1050 deletions(-) diff --git a/admin/class-admin-settings.php b/admin/class-admin-settings.php index 5853168..1e73587 100644 --- a/admin/class-admin-settings.php +++ b/admin/class-admin-settings.php @@ -100,9 +100,6 @@ private function render_security_section() { ?>

-

- -

@@ -120,12 +117,12 @@ private function render_security_section() {

- +

- +
<@tWb^b$$!^o!4JAV>S%^pH&o}qF#-Ma1Gu-y;3>M z7!=8C;!GSy?*LZg6inb)JdBF$B9`JEEXTZ2UdF1ign9^za5tv%D0ER!L_Mf8@MmOi zOnR=jpkmZ}0i1}7k>E_+Z{LZtsQ&=9byraf`Xegh3_7bl6B*i!LWIReSI$Jcm=Ukdv|k>rg4}#BKOCR$}!y_778d0#BkAY;#xD ze;3Zcv$z!R`0aDY8#9@D6klL|v!B9795=z3&A1(vfxD;y!(3WjmzPkff8DPiLhbFF zsEFS|ot<9Pmi-NNM*1*FBaTG9*NTteHcV-cPf^ewy@m8Ky=dVVI14Sp*Pb<^-VdV= zTN3-@b{v4aQ15kMIvz$%_#;#%&fpxpiG$Pls7)mQO4YP-Zws1Hsd)vJ+Vg(>6I4fw z4b{NwP+p~tsO$JKYMk*iz4ubf zC}hykfr?}=YK3p07IYld@uL4cos*-C3`4SO%5fPs;dMNM7VhHUXuM;nt@#O#z(3${ z{1o$b|1)PBQ$@o#R0NxF2uA(-*HIHbhdKCt+>1X(rL?xfyA^9u{e#H4H4%IaUqLPO zDiVW9C-16PU_kfZp-@i4tH_Tz&wp&2xrh4nmUGz^!IPMe&!HyRkLuTh1$YOuao}99 zUWgiJHmY9>^64(DFpxRd;XUsHU5jJ5iwqp$U zU?F~vO8sc|O&KcjosFZYFZSJtsqr+lQQ+fc4xl1=3w6kThswY$)R`Fds5fCTYJyof z2CGmDZAJ^X;4`?-Z@-6Qsb?+l`cFqKY{>%huT-p~K?5B|rK-oTf8hHW4yC%L} z*np2?J1R3j#Z3GaDy6-sh;IAOKgVL~!#II@FMt+S;LmWa-=3SQ_CC2|@fjY}qJ>?k z6<$K^=`~b}KSkZ&!K_A+%)l3LIdbz%FZRVDd<6Po4r*ZqsB1S7b!O&cKTI|F4>q7q zc?^}2efTh5#x?kN4B``uy-#x&ZlL}?PR2RxV-to^XXZTa#9OG$#%qZlPvJ?m;{@IR z&Lv*TFQ7W!#kE+x)a$SX`DmGwxCd{bi%GsZU&B9P64%#xx9Hc{kNRh*>zJ|JtB*pB zUxcHv28(t7LlpF7+JQ>ZUTnl;etY@~?*o;GLug-*N__-1;PW^RPoO?9@8M7!u+keZ z7j;G^qR!MJ9Duc`zdy}t3h5X{b=-`zFog^83|6KY^AFV4OkeF~%t3A0tEh#X^Xq>> zr8=kH`?N2^a_XzF2)~K?-WbM~%RAxmIv8bJN5|-22?1X5tf-yJgxJfJGTDEIFI9BBT+5*-x zZz*4KoXrU)`0skG=9Ny1-5!a>Ct0rJXtd1}7Pr?Zk zTGCFc5-stT*?p<n2jDb!xVFhg#mFOs6G&fbRVXRWS z=R`D0P$VH#;=Qjt1k23h(fixs&F5#*cI{-D<@K?g=>7b$&^Bc-7;j5xRgP=5xt6!A z2geLpUyj-0M7))@+HSJvsD^rA$;xPuEZOmh<;GfjjZhsW#YLt3zFb&e!qFjV2`!Rj*w1Rg_xC5zT~u{C>p$YJdoTb1 delta 3648 zcmYM$c~DkW7{~GR!Yd#kg2?iU;A@Hti|nx%7uhBr0k-jWwoL#I#c1-`qQsgM7|8_ug~Q^PK10;c$)PO0~n& z+ReGs@b4D?d-C7utDZ3ry8Q1bnm^GWgM)*N$;Y+GkGa4vJ#rmW@Gefk@UF&$;au#D zYtbJ)7=mwL54xs`20!K#eoetIFaRThjp>Aaa5N6YWPAyG;d`hTp25D@j_DZ1>`t74 zT37-4;6l`bU&Mj99s_v4`H+Sd@G-iu5!0{*Ph(g&Yy28&f`|A7{)0-AJJcB7Z3ba? z%*GtdM+LAGb>Cjp!VaM_a}+~)zd1*v6u&_&q<~qp@};N=)}SI>k14nx2jMkLLT_g4 zjmfCUrsDwgU_2f~W$YUE$2N?{p5fdRNh6JhBASM(fnsEDOc`oHM^X2k#yD(7)@r;W ztnqM6rJsb_y2YpktwKdyZjbLq9yQgdz)nSwe=i!JF`yKk$7y&K3C{HAtty@j)b(+; z`KYa$kD71;MqwE$fMdw+m`kWFyNwF)A!@!59`?g17x`z*^kqN~WTN_0aXKzRz4%k4 z9L!}Td*(K3;@?oU;v`*qE*o{ie{!dL1uP*q=uOlcNjI&MNO{1hq^o{KazVH0ZQ4^YL@ zVc!r#rRe$q%*1R|L?x&c?nEu@T_hRiI4bgsxEk-EiZMUNT2Kk9xHlsU@tCbNbbR*O z)}mJ4VBKKOVFLZDI0&^mnS_(D5Vcjcs0?_yjd>1-;9%T=Q}7HbQz4{h1Eyn|&i_do zPcrZ;9>Z8FMJsMXP0)eKnAFFZTwH(}KZc2T2e)7lXS5J2a0RxbGVnsIHQxoOw$!`*VjmnG< zm8{IBp!$nZ&y}O*{VI<9YcH=bK)o3UpDXQA4C5rmVAb8$Y_U{?$xTxBc< z6;VH&hVxJp*W1@Gqh8pA3ZNC)E%OToqsv2nX48m64ZMmfl3h3st1u70Lq(E0#5#s^ zP!sJ&-Pedt^ksh(NFZu~k*Ec^F%w7F*Vmyk;why;ux39#jhFBqx>Bs-=|D}`i%Qeh z#G_I?9lK!>>fD#$D6BvQ(1NP1J9hse>V<6>iosN5rOtm}8cJyccE-!737V0*GPiIv z`V6xcIuTiuS!efaQG0zIgO|3Pe^9vp`HR4%{} z+-UcApeCw87v4lZ38ozMAgDl)K;#+UbqSMH-b4p z!;L3!9yX)Khf^{7Fipk?T!C897F6VwsEO{PGULdy`cby&sPD!cR4o*t?t2-v(08)P zzfyaI0c}Amu0sE8YoZcVs`sHDXhcnP11Wg(1M*{f=2$gQfQs}@bYmHg#d_4~`V&=S z0VAzUhK=-C7ZMnV;X)?rh63!5i*X)qM>jq~Eg+auSB7Fx$1nx8z&W@Di*YFai>ig8 zRIm@GqcS)Ob$aqVG?dy!_6;TWh0UmHtw2S326g`1FdtoGC{$dAd>YIZEI=pWCgSrr z6W>DBzJJNjU3u63#sQ2i`qevcVTBZ`3)s4duv`oPqnQq+hu@Txr?&sU19 znjF+tl%i7qHZq~9#Xi`K`cC|XD#F2&togE0rzj77b^e#o@MB;lsyf%BH3YrDioa%e+SqE$cnzWL^81`r!Wn DF9DTW diff --git a/languages/exelearning-ca.po b/languages/exelearning-ca.po index d663129..492299c 100644 --- a/languages/exelearning-ca.po +++ b/languages/exelearning-ca.po @@ -24,13 +24,13 @@ msgstr "Configuració" msgid "Date" msgstr "Data" -#: admin/class-admin-settings.php:249 +#: admin/class-admin-settings.php:307 #: includes/class-elp-list-table.php:109 msgid "Delete" msgstr "Elimina" -#: admin/class-admin-settings.php:224 -#: admin/class-admin-settings.php:267 +#: admin/class-admin-settings.php:282 +#: admin/class-admin-settings.php:325 #: includes/class-elp-list-table.php:49 msgid "Title" msgstr "Títol" @@ -39,7 +39,7 @@ msgstr "Títol" #: exelearning.php #: admin/class-admin-settings.php:51 #: includes/class-mime-types.php:73 -#: includes/integrations/class-media-library.php:382 +#: includes/integrations/class-media-library.php:381 msgid "eXeLearning" msgstr "eXeLearning" @@ -71,7 +71,7 @@ msgstr "Estat" msgid "Edit" msgstr "Edita" -#: includes/class-elp-upload-block.php:154 +#: includes/class-elp-upload-block.php:159 msgid "Error: eXeLearning content not found" msgstr "Error: contingut d'eXeLearning no trobat" @@ -92,19 +92,19 @@ msgid "Open in new tab" msgstr "Obre en una pestanya nova" #: includes/integrations/class-media-library.php:189 -#: includes/integrations/class-media-library.php:369 -#: includes/integrations/class-media-library.php:408 +#: includes/integrations/class-media-library.php:368 +#: includes/integrations/class-media-library.php:407 msgid "License:" msgstr "Llicència:" #: includes/integrations/class-media-library.php:190 -#: includes/integrations/class-media-library.php:370 -#: includes/integrations/class-media-library.php:412 +#: includes/integrations/class-media-library.php:369 +#: includes/integrations/class-media-library.php:411 msgid "Language:" msgstr "Idioma:" -#: includes/integrations/class-media-library.php:371 -#: includes/integrations/class-media-library.php:416 +#: includes/integrations/class-media-library.php:370 +#: includes/integrations/class-media-library.php:415 msgid "Resource Type:" msgstr "Tipus de recurs:" @@ -158,28 +158,28 @@ msgstr "Carregant projecte..." msgid "Error" msgstr "Error" -#: includes/class-content-proxy.php:112 +#: includes/class-content-proxy.php:135 msgid "Invalid content identifier." msgstr "Identificador de contingut no vàlid." -#: includes/class-content-proxy.php:137 +#: includes/class-content-proxy.php:160 msgid "Invalid file path." msgstr "Ruta de fitxer no vàlida." -#: includes/class-content-proxy.php:149 +#: includes/class-content-proxy.php:172 msgid "File not found." msgstr "Fitxer no trobat." -#: includes/class-content-proxy.php:164 -#: includes/class-content-proxy.php:172 +#: includes/class-content-proxy.php:187 +#: includes/class-content-proxy.php:195 msgid "Access denied." msgstr "Accés denegat." -#: includes/class-elp-upload-block.php:247 +#: includes/class-elp-upload-block.php:261 msgid "This eXeLearning content is a source file and cannot be previewed directly." msgstr "Aquest contingut d'eXeLearning és un fitxer font i no es pot previsualitzar directament." -#: includes/class-elp-upload-block.php:234 +#: includes/class-elp-upload-block.php:248 #: public/class-shortcodes.php:190 msgid "Download file" msgstr "Descarrega el fitxer" @@ -215,7 +215,7 @@ msgstr "No tens permís per editar aquest fitxer." #: includes/class-exelearning-editor.php:175 #: includes/class-exelearning-editor.php:208 #: includes/integrations/class-media-library.php:195 -#: includes/integrations/class-media-library.php:350 +#: includes/integrations/class-media-library.php:349 #: assets/js/elp-upload.js:423 #: assets/js/elp-upload.js:463 msgid "Edit in eXeLearning" @@ -312,11 +312,11 @@ msgid "This is a source file that cannot be previewed directly. Download it to o msgstr "Aquest és un fitxer font que no es pot previsualitzar directament. Descarrega'l per obrir-lo amb eXeLearning." #: public/class-shortcodes.php:277 -#: public/class-shortcodes.php:321 +#: public/class-shortcodes.php:337 msgid "Download source file" msgstr "Descarrega el fitxer font" -#: public/class-shortcodes.php:379 +#: public/class-shortcodes.php:396 msgid "View fullscreen" msgstr "Veure a pantalla completa" @@ -324,7 +324,7 @@ msgstr "Veure a pantalla completa" msgid "eXeLearning Info" msgstr "Informació d'eXeLearning" -#: admin/class-admin-settings.php:461 +#: admin/class-admin-settings.php:519 #: includes/integrations/class-media-library.php:186 msgid "Version:" msgstr "Versió:" @@ -405,75 +405,75 @@ msgstr "Si us plau, espereu mentre es desa l'arxiu." msgid "You have unsaved changes. Are you sure you want to close?" msgstr "Teniu canvis sense desar. Esteu segurs que voleu tancar?" -#: admin/class-admin-settings.php:442 +#: admin/class-admin-settings.php:500 msgid "Embedded Editor" msgstr "Editor integrat" -#: admin/class-admin-settings.php:447 +#: admin/class-admin-settings.php:505 msgid "The embedded editor is required to edit eXeLearning files." msgstr "L'editor integrat és necessari per editar fitxers eXeLearning." -#: admin/class-admin-settings.php:448 +#: admin/class-admin-settings.php:506 msgid "Please install it using the button below." msgstr "Si us plau, instal·leu-lo amb el botó de sota." -#: admin/class-admin-settings.php:456 -#: admin/class-admin-settings.php:479 +#: admin/class-admin-settings.php:514 +#: admin/class-admin-settings.php:537 msgid "Status:" msgstr "Estat:" -#: admin/class-admin-settings.php:227 -#: admin/class-admin-settings.php:457 +#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:515 msgid "Installed" msgstr "Instal·lat" -#: admin/class-admin-settings.php:465 +#: admin/class-admin-settings.php:523 msgid "Installed on:" msgstr "Instal·lat el:" -#: admin/class-admin-settings.php:473 +#: admin/class-admin-settings.php:531 msgid "Update to Latest Version" msgstr "Actualitza a l'última versió" -#: admin/class-admin-settings.php:480 +#: admin/class-admin-settings.php:538 msgid "Not installed" msgstr "No instal·lat" -#: admin/class-admin-settings.php:482 +#: admin/class-admin-settings.php:540 msgid "The embedded eXeLearning editor is not installed. You can download and install the latest version automatically from GitHub." msgstr "L'editor integrat d'eXeLearning no està instal·lat. Podeu descarregar i instal·lar l'última versió automàticament des de GitHub." -#: admin/class-admin-settings.php:487 +#: admin/class-admin-settings.php:545 msgid "Download & Install Editor" msgstr "Descarrega i instal·la l'editor" #. translators: %s: make build-editor command -#: admin/class-admin-settings.php:502 +#: admin/class-admin-settings.php:560 #, php-format msgid "Developers can also build the editor from source using %s." msgstr "Els desenvolupadors també poden compilar l'editor des del codi font amb %s." -#: admin/class-admin-settings.php:525 +#: admin/class-admin-settings.php:583 msgid "Try Again" msgstr "Torna-ho a provar" -#: admin/class-admin-settings.php:535 +#: admin/class-admin-settings.php:593 msgid "Installing..." msgstr "Instal·lant..." -#: admin/class-admin-settings.php:538 +#: admin/class-admin-settings.php:596 msgid "Downloading and installing the editor. This may take a minute..." msgstr "Descarregant i instal·lant l'editor. Això pot trigar un minut..." -#: admin/class-admin-settings.php:555 +#: admin/class-admin-settings.php:613 msgid "Open Editor" msgstr "Obre l'editor" -#: admin/class-admin-settings.php:559 +#: admin/class-admin-settings.php:617 msgid "Installation failed." msgstr "La instal·lació ha fallat." -#: admin/class-admin-settings.php:563 +#: admin/class-admin-settings.php:621 msgid "Network error. Please check your connection and try again." msgstr "Error de xarxa. Si us plau, comproveu la connexió i torneu-ho a provar." @@ -614,191 +614,191 @@ msgstr "Aquest fitxer no s'ha pogut processar com a eXeLearning." msgid "https://exelearning.net/" msgstr "https://exelearning.net/" -#: admin/class-admin-settings.php:86 +#: admin/class-admin-settings.php:144 msgid "Help" msgstr "Ajuda" -#: admin/class-admin-settings.php:88 +#: admin/class-admin-settings.php:146 msgid "Embed an uploaded .elpx package anywhere with the [exelearning] shortcode, referencing the file by its Media Library attachment ID." msgstr "Incrusta un paquet .elpx penjat a qualsevol lloc amb el codi curt [exelearning], referenciant el fitxer pel seu ID d'adjunt a la Biblioteca multimèdia." -#: admin/class-admin-settings.php:91 +#: admin/class-admin-settings.php:149 msgid "Shortcode examples" msgstr "Exemples de codi curt" -#: admin/class-admin-settings.php:95 +#: admin/class-admin-settings.php:153 msgid "Attributes" msgstr "Atributs" -#: admin/class-admin-settings.php:99 +#: admin/class-admin-settings.php:157 msgid "Attribute" msgstr "Atribut" -#: admin/class-admin-settings.php:100 +#: admin/class-admin-settings.php:158 msgid "Default" msgstr "Per defecte" -#: admin/class-admin-settings.php:101 +#: admin/class-admin-settings.php:159 msgid "Description" msgstr "Descripció" -#: admin/class-admin-settings.php:108 +#: admin/class-admin-settings.php:166 msgid "Required. Media Library attachment ID of the .elpx package." msgstr "Obligatori. ID d'adjunt del paquet .elpx a la Biblioteca multimèdia." -#: admin/class-admin-settings.php:113 +#: admin/class-admin-settings.php:171 msgid "Height of the preview, in pixels." msgstr "Alçada de la previsualització, en píxels." -#: admin/class-admin-settings.php:118 +#: admin/class-admin-settings.php:176 msgid "When enabled, the content loads with teacher mode active." msgstr "Quan s'activa, el contingut es carrega amb el mode docent actiu." -#: admin/class-admin-settings.php:123 +#: admin/class-admin-settings.php:181 msgid "Whether the teacher-mode toggle button is shown." msgstr "Si es mostra el botó per commutar el mode docent." -#: admin/class-admin-settings.php:128 +#: admin/class-admin-settings.php:186 msgid "When enabled, shows a multi-format download button." msgstr "Quan s'activa, mostra un botó de baixada multiformat." -#: admin/class-admin-settings.php:132 +#: admin/class-admin-settings.php:190 msgid "all" msgstr "tots" -#: admin/class-admin-settings.php:133 +#: admin/class-admin-settings.php:191 msgid "Comma-separated formats to offer: elpx, html5, scorm12, ims, epub3." msgstr "Formats separats per comes a oferir: elpx, html5, scorm12, ims, epub3." -#: admin/class-admin-settings.php:138 +#: admin/class-admin-settings.php:196 msgid "Show the package screenshot: no, poster (click to load), or only (image only). Requires eXeLearning 4.0.1 or newer." msgstr "Mostra la captura de pantalla del paquet: no, poster (clic per carregar) o only (només imatge). Requereix eXeLearning 4.0.1 o superior." -#: admin/class-admin-settings.php:143 +#: admin/class-admin-settings.php:201 msgid "Developer hooks" msgstr "Hooks per a desenvolupadors" -#: admin/class-admin-settings.php:145 +#: admin/class-admin-settings.php:203 msgid "The shortcode output can be customized with the exelearning_shortcode_atts, exelearning_preview_url, and exelearning_shortcode_output filters, among other actions and filters." msgstr "La sortida del codi curt es pot personalitzar amb els filtres exelearning_shortcode_atts, exelearning_preview_url i exelearning_shortcode_output, entre altres accions i filtres." -#: admin/class-admin-settings.php:150 +#: admin/class-admin-settings.php:208 msgid "Full shortcode reference" msgstr "Referència completa del codi curt" -#: admin/class-admin-settings.php:154 +#: admin/class-admin-settings.php:212 msgid "Developer hooks reference" msgstr "Referència dels hooks per a desenvolupadors" -#: admin/class-admin-settings.php:180 +#: admin/class-admin-settings.php:238 msgid "Styles" msgstr "Estils" -#: admin/class-admin-settings.php:182 +#: admin/class-admin-settings.php:240 msgid "Upload eXeLearning style packages and control which styles the embedded editor exposes." msgstr "Penja paquets d'estils d'eXeLearning i controla quins estils mostra l'editor incrustat." -#: admin/class-admin-settings.php:185 +#: admin/class-admin-settings.php:243 msgid "Import policy" msgstr "Política d'importació" -#: admin/class-admin-settings.php:189 +#: admin/class-admin-settings.php:247 msgid "Block user-imported styles" msgstr "Bloca els estils importats per usuaris" -#: admin/class-admin-settings.php:193 +#: admin/class-admin-settings.php:251 msgid "When enabled, the embedded editor hides the \"User styles\" tab and silently refuses to install a style bundled inside an imported .elpx project. Users may only choose from the admin-approved list below. This mirrors the eXeLearning ONLINE_THEMES_INSTALL=false behavior." msgstr "Quan s'activa, l'editor incrustat amaga la pestanya «Estils d'usuari» i es nega silenciosament a instal·lar un estil inclòs en un projecte .elpx importat. Els usuaris només poden triar de la llista aprovada per l'administrador de sota. Això reprodueix el comportament eXeLearning ONLINE_THEMES_INSTALL=false." -#: admin/class-admin-settings.php:196 +#: admin/class-admin-settings.php:254 msgid "Upload a new style" msgstr "Penja un estil nou" -#: admin/class-admin-settings.php:201 +#: admin/class-admin-settings.php:259 msgid "Upload style" msgstr "Penja l'estil" #. translators: %s: human-readable max file size. -#: admin/class-admin-settings.php:208 +#: admin/class-admin-settings.php:266 #, php-format msgid "Maximum file size: %s. Only .zip packages containing a valid config.xml are accepted." msgstr "Mida màxima del fitxer: %s. Només s'accepten paquets .zip que continguin un config.xml vàlid." -#: admin/class-admin-settings.php:217 +#: admin/class-admin-settings.php:275 msgid "Uploaded styles" msgstr "Estils penjats" -#: admin/class-admin-settings.php:219 +#: admin/class-admin-settings.php:277 msgid "No uploaded styles yet." msgstr "Encara no hi ha estils penjats." -#: admin/class-admin-settings.php:225 -#: admin/class-admin-settings.php:268 +#: admin/class-admin-settings.php:283 +#: admin/class-admin-settings.php:326 msgid "Id" msgstr "Id" -#: admin/class-admin-settings.php:226 -#: admin/class-admin-settings.php:269 +#: admin/class-admin-settings.php:284 +#: admin/class-admin-settings.php:327 msgid "Version" msgstr "Versió" -#: admin/class-admin-settings.php:228 -#: admin/class-admin-settings.php:244 -#: admin/class-admin-settings.php:270 -#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:286 +#: admin/class-admin-settings.php:302 +#: admin/class-admin-settings.php:328 +#: admin/class-admin-settings.php:343 msgid "Enabled" msgstr "Habilitat" -#: admin/class-admin-settings.php:229 +#: admin/class-admin-settings.php:287 msgid "Actions" msgstr "Accions" -#: admin/class-admin-settings.php:258 +#: admin/class-admin-settings.php:316 msgid "Built-in styles" msgstr "Estils integrats" -#: admin/class-admin-settings.php:261 +#: admin/class-admin-settings.php:319 msgid "Built-in styles are not available because the embedded editor is not installed." msgstr "Els estils integrats no estan disponibles perquè l'editor incrustat no està instal·lat." -#: admin/class-admin-settings.php:295 +#: admin/class-admin-settings.php:353 msgid "Disabled built-in styles are hidden from the editor. Uploaded styles can be disabled or deleted at any time. Existing projects that reference a missing style fall back to the editor default." msgstr "Els estils integrats desactivats s'amaguen de l'editor. Els estils penjats es poden desactivar o eliminar en qualsevol moment. Els projectes existents que referencien un estil que falta utilitzen l'estil per defecte de l'editor." -#: admin/class-admin-settings.php:341 +#: admin/class-admin-settings.php:399 msgid "Uploading…" msgstr "S'està penjant…" -#: admin/class-admin-settings.php:344 +#: admin/class-admin-settings.php:402 #: admin/class-admin-styles.php:71 msgid "Style installed." msgstr "Estil instal·lat." -#: admin/class-admin-settings.php:347 +#: admin/class-admin-settings.php:405 msgid "Upload failed." msgstr "La pujada ha fallat." -#: admin/class-admin-settings.php:350 -#: admin/class-admin-settings.php:372 -#: admin/class-admin-settings.php:393 -#: admin/class-admin-settings.php:418 +#: admin/class-admin-settings.php:408 +#: admin/class-admin-settings.php:430 +#: admin/class-admin-settings.php:451 +#: admin/class-admin-settings.php:476 msgid "Network error." msgstr "Error de xarxa." -#: admin/class-admin-settings.php:368 -#: admin/class-admin-settings.php:389 +#: admin/class-admin-settings.php:426 +#: admin/class-admin-settings.php:447 msgid "Update failed." msgstr "L'actualització ha fallat." -#: admin/class-admin-settings.php:404 +#: admin/class-admin-settings.php:462 msgid "Delete this style? This cannot be undone." msgstr "Voleu eliminar aquest estil? Aquesta acció no es pot desfer." -#: admin/class-admin-settings.php:413 +#: admin/class-admin-settings.php:471 msgid "Style deleted." msgstr "Estil eliminat." -#: admin/class-admin-settings.php:415 +#: admin/class-admin-settings.php:473 msgid "Delete failed." msgstr "L'eliminació ha fallat." @@ -977,7 +977,7 @@ msgstr "No s'ha pogut crear el directori de l'estil." msgid "The uploaded style does not contain any stylesheet." msgstr "L'estil penjat no conté cap full d'estil." -#: public/class-shortcodes.php:341 +#: public/class-shortcodes.php:357 msgid "Load interactive content" msgstr "Carrega el contingut interactiu" @@ -1008,3 +1008,31 @@ msgstr "Mostra el botó de baixada" #: assets/js/elp-upload.js:435 msgid "Available formats" msgstr "Formats disponibles" + +#: admin/class-admin-settings.php:95 +msgid "Settings saved." +msgstr "S'han desat els ajustaments." + +#: admin/class-admin-settings.php:102 +msgid "Security" +msgstr "Seguretat" + +#: admin/class-admin-settings.php:108 +msgid "Iframe security mode" +msgstr "Mode de seguretat de l'iframe" + +#: admin/class-admin-settings.php:113 +msgid "Secure (opaque-origin sandbox)" +msgstr "Segur (aïllament d'origen opac)" + +#: admin/class-admin-settings.php:116 +msgid "Legacy (same-origin)" +msgstr "Heretat (mateix origen)" + +#: admin/class-admin-settings.php:120 +msgid "Secure (recommended) isolates embedded content in an opaque-origin iframe. Legacy keeps same-origin behavior, needed only in some environments such as WordPress Playground." +msgstr "El mode segur (recomanat) aïlla el contingut incrustat en un iframe d'origen opac. El mode heretat manté el mateix origen, necessari només en alguns entorns com ara WordPress Playground." + +#: admin/class-admin-settings.php:125 +msgid "Save changes" +msgstr "Desa els canvis" diff --git a/languages/exelearning-ca_valencia.mo b/languages/exelearning-ca_valencia.mo index 8cc9f733c70a4f633a9d97879e4d571c98605b7e..f029919fbb8abb967777e92423b9df45fe64c30d 100644 GIT binary patch delta 4372 zcmZ|ReQ*`k8OQMx62eP(NeD475Lk?ugg_t=AOsW=f`&jK7%|ZzxZJy5Zn@cu_a#D2 zy(3NoMW~bvR_gH5L9tj`#E8?DigXZZN7R|tirD%xmbBA2BaS$ZFw>#mAG@~0A7u!i zbI$I0d7g95lFf(GKKMmi>Z4H^yA6LX@-vp7d4p6lX4Q!QSx@nP>J4}R@5VmVE43qy zQJ2M7jVrJbyD<;n!6Dd(L-7*k;8iR#CS`_Y8$;QY;&PmgS-1rUVh=9FJvakD#POKJ zD4MVeZ@~v~EXpdtajF$zXLP#T25( zsY+2$YUZQ%ehI4McTjtoK&5;i2Jw%m2`dRt3v56|-i8{`MfK}KosC1Nt#}W03%)_t zVy@v_OcikwwDNmUDREE(MsXN+qax@*UAyN{@14PM_zoVy&runChDP;&7H`87sEDti zp64)#0xd!UNSR3#$ga5!m7+F`V+3`IKS8a0h~?diY}A4aP}i>1w+8jzV$|~%oQ!L* z61V%Fz-H?GxKj7OhWsd1Kf?R*Bu>MzoRsC*j7sTV?838Hiw!00AExjq9z!kI=B}#$ zHk^Sca0y=W+viR+W(xHPZe@P+QwpoGS(c{ z8u&ico~}j?ve|)*X0k*Czy*h49dkZOHmnFhuQeZ6!Nb_x19$0Gt|JZAlqg7 zP#uTTs0eRGrFbgx$TXrR?8J%zWCHJ`{wtzdf?wlWtS1^}<~dZxj$;kJnxfE3;cL{u zP1C&>0;mbsqasKk$H8nxt^6q7ho>+H$B^GloPu{?HQt4fpaOXtbsaCG#;L0I-b=Mp z$e>|ADw1bW6TgUB&~H#3|KvZ<=Hw_NW0CBd8eE1BUc{Ht!aW=ujrUvB*1Umv_yvx_ z%-R0`|AiFlX{bh>@`rIaejgRl6R17jg&N=}K8d~ScI8#y{(vl zTJQ|iI4xL+k0GB9^9<^YoWv2j|C#f=73HBKs7L*()QF0>)o%|YXUs&g7-N`^J28qs z$FW$zekt`cQ5mZ9U4b`Iw|zHaY9b9!QsCodj-w*EfI4Jfp)xS=cJEM5LrqwNnxF;8 z<0{lbyHFpbUHAaL?6>F5_u4B^{hLt>bLNx(#T1e>jK|kdsruNjU-2zm;C)Eupw31k zYN7Y|K7>=LZ%6Iz?=Xq~LXEqo&I>Sw>UR(|&dItIzkE0Wuc%R&5Xw%S%>i9lt zg;!B49?a}YaS4{<98|lFTd@mg;y^C{K%9%ZJ$0y5H=?dxJ8BEoV~9?&KyIM<6p!JUrt2S~ zlzEGSQvMaHW62Wl+r13c;Sg%Vk8ua)EM;48KW@Yk&E8&bLG}MPW@6bg@5?zARbPmD z-h^W?iQ{zte@sECeG!$SH?R#ap!TwAx%Yv(1BX-pAu9DhK@Ip4mf(k2jcG03VV#8< zZxL$zb{vE*4#rN@@1G_`AszSN2;7T&CCw3BfPcr@G`3@fw>4|-^8c4aZP_W*sqgpe z`K{hBD0P@Ydly#VV_1y8M7{qerm`q}LqQQ|u+duSDpZFUj>dhcYuSrBJa3^=*oV_G zZKd~qHEMzfP!T?g1-J#L-~rTpZ=;zQw48RQ_ww*R56OKnW_LJN+zBLO;lw7ZBN}vi zU(at(%XLC_V3SoA=kb(iEF22E<-J9P=hFuT*4b{ziT8Xqwm#)pWzh}xL&-K_^&lh2znPop9oo)3MeG(qsjqZo+XBR@k*{*Sc}6@b$G- zT1&m9taqFZaVGfhdaSiA&N{m@9F0x3T*uLHQ8%(lW5uHc<+z>USkz_m1pShMb(S5s z+M=;wOU#MKt(J(rDHMw)-C(7+TH^1yy*QsAdxVongx!#)>vV#Zy?cun7Z*2^8;iej zCq!roJE2OX)LUk6U+v+v{6@!nP}V`1;fzuH+)DGKCoIb3fZdkKY8X!$}ENr>aj?;(PH1;SGO1df~qA_G^Ejwoa n-=z9^>e*R$qNuf$b7O^)b}XnRk_!8~EH@gj>}{(5b@qP%nxT8M delta 3648 zcmYM$d2miw7{~FGcqNjMRW^|b5weE}DvKcY5UE6ircshIq0~^?$-KYf{u`jk`I)*X34GU2l zD?&FcMQwNi#$q{ovA)?$LmT)4L-7=*VGEwXK!0nz2{l10_QB_&RY>Yp^vQ zghS{jqmFJaYC}s<5m!3LKSdrj)u_PggUP=ujc*xHiq2p@UPXd4{aIDTlYzQE)@cFi zsOF$1T!CR&feN4wIUREeb!2x@0k)#%^W)(z7#2$Y88dwu&;yyMejZN4GStE+k#aEK zA=xu`Q4_bJYQ;vn^jsF|zUim{<|DBfJ8GUSs0>x3GJ9AT^k5_E>{?JMwh>M#CZiUt zL~ZbMRKyLa37b&QJwVk$SHf57Gf-7uj7(`>!*pDQ+IT%G6ZVTVG+{Gp=Z{du(&4-z zf=bc#7|g^hR75LLDXcAp8?l=WH1zsxcUp_u zd4qL>IgJVQuVNBvcQP3#V=?NeYEc<*jWp&JOu+%T8K+<)DpP)>X9cEXn%@6!XbfcF zDb`^$m7*OtqbBIUL6{t6Ob(Wy#_KQ<@8MeX<{d4@Ew~ulQ5l#QZOwNJRrR)hR_Z;m zGwYk~G+5j8K%GqnswQ$!M^cJP@p3H0b*TI9<6!&)yJA0HZXL}a)O()8k4RjKL$DHk z@FME|TWD7iJ*44|?Wi;DK;7t08aiPxYQZp6CgN}y7GqZzW459)QcZr7@fs>KZd9@| zn~LhsMLk!En)h-X`PW%qVSsuwE_|+ZMiHpjWIQV30t~=fq|nVNR7P&2FFr;UoeD(; zqUMc5PQlDTJ@*cF!ELAv?@1v4+F3mVUid4#*rvk^yO4XVn2L)F%wsDS=K9kCmg7>H50Rqy{W8cOLE^uPzG2_7MJWu9O* zh7GkgIt$sG+2HIqqRzS%<1w7`P?1eQvTWW%%FBF(3g9j(au05b(fc1wLl5SnA}L2d ztU~R0KWd`W7>aGkC&BonSv8V^-t@~+nOuho;0StRJu2dJ&ha})iJ2cUSnvNYG~U1t z)PjrBt(31vWoC=h{TM|5sME_BP5)=)8)UpPtN@Zx#WfKX`OBzcU4uHxkFXbRL;WAY z9H*fV(D(Q%K0%G=Q!yGZ!(d#G+Rz@HfDY6|&rz8PA8z%BIxR$H<}Fk$tic{w>9lS* z`A=rx0s~6j-?$9>XIT^NL`BwsdhkAKqGw3K8_yB^Lc&Z`4Xi{}eJw`f*Ej~Rp)%5Q zq*Y^ys7wwWX}3NYxeWAXpahko_mPjF`50&8G3b}{i4X(qrxEBXw zB9*IJC_%jiWvC1;M!h|&>@<|x3g-<6ofp1DRqGj4q>oYWf1lCTf4|3J3H=?&r{TXa ziy(z?6LAwx#|Bgl1o4qrgCmhx%z5NRFm}&z{LZG4js36EofaTqSbbNDt6nP?qh9ctm|94qoX44_}=>@PsB+szUhVO-dW5qJ!h+8d}8wW2oQ zGRZos8Ax``BGgeFMy38FYQYwa!p@Ve??fzm(=SHNw-7b|DsKhq0OBtwuWa^9Ee!ri0?Hn+_5>M#>J60{H(1aCOfktcl2>b J)R?2b{{oB`m;V3& diff --git a/languages/exelearning-ca_valencia.po b/languages/exelearning-ca_valencia.po index 328bc5c..7c1c69c 100644 --- a/languages/exelearning-ca_valencia.po +++ b/languages/exelearning-ca_valencia.po @@ -24,13 +24,13 @@ msgstr "Configuració" msgid "Date" msgstr "Data" -#: admin/class-admin-settings.php:249 +#: admin/class-admin-settings.php:307 #: includes/class-elp-list-table.php:109 msgid "Delete" msgstr "Eliminar" -#: admin/class-admin-settings.php:224 -#: admin/class-admin-settings.php:267 +#: admin/class-admin-settings.php:282 +#: admin/class-admin-settings.php:325 #: includes/class-elp-list-table.php:49 msgid "Title" msgstr "Títol" @@ -39,7 +39,7 @@ msgstr "Títol" #: exelearning.php #: admin/class-admin-settings.php:51 #: includes/class-mime-types.php:73 -#: includes/integrations/class-media-library.php:382 +#: includes/integrations/class-media-library.php:381 msgid "eXeLearning" msgstr "eXeLearning" @@ -71,7 +71,7 @@ msgstr "Estat" msgid "Edit" msgstr "Editar" -#: includes/class-elp-upload-block.php:154 +#: includes/class-elp-upload-block.php:159 msgid "Error: eXeLearning content not found" msgstr "Error: contingut d'eXeLearning no trobat" @@ -92,19 +92,19 @@ msgid "Open in new tab" msgstr "Obrir en una pestanya nova" #: includes/integrations/class-media-library.php:189 -#: includes/integrations/class-media-library.php:369 -#: includes/integrations/class-media-library.php:408 +#: includes/integrations/class-media-library.php:368 +#: includes/integrations/class-media-library.php:407 msgid "License:" msgstr "Llicència:" #: includes/integrations/class-media-library.php:190 -#: includes/integrations/class-media-library.php:370 -#: includes/integrations/class-media-library.php:412 +#: includes/integrations/class-media-library.php:369 +#: includes/integrations/class-media-library.php:411 msgid "Language:" msgstr "Idioma:" -#: includes/integrations/class-media-library.php:371 -#: includes/integrations/class-media-library.php:416 +#: includes/integrations/class-media-library.php:370 +#: includes/integrations/class-media-library.php:415 msgid "Resource Type:" msgstr "Tipus de recurs:" @@ -158,28 +158,28 @@ msgstr "Carregant projecte..." msgid "Error" msgstr "Error" -#: includes/class-content-proxy.php:112 +#: includes/class-content-proxy.php:135 msgid "Invalid content identifier." msgstr "Identificador de contingut no vàlid." -#: includes/class-content-proxy.php:137 +#: includes/class-content-proxy.php:160 msgid "Invalid file path." msgstr "Ruta de fitxer no vàlida." -#: includes/class-content-proxy.php:149 +#: includes/class-content-proxy.php:172 msgid "File not found." msgstr "Fitxer no trobat." -#: includes/class-content-proxy.php:164 -#: includes/class-content-proxy.php:172 +#: includes/class-content-proxy.php:187 +#: includes/class-content-proxy.php:195 msgid "Access denied." msgstr "Accés denegat." -#: includes/class-elp-upload-block.php:247 +#: includes/class-elp-upload-block.php:261 msgid "This eXeLearning content is a source file and cannot be previewed directly." msgstr "Este contingut d'eXeLearning és un fitxer font i no es pot previsualitzar directament." -#: includes/class-elp-upload-block.php:234 +#: includes/class-elp-upload-block.php:248 #: public/class-shortcodes.php:190 msgid "Download file" msgstr "Descarregar el fitxer" @@ -215,7 +215,7 @@ msgstr "No tens permís per a editar este fitxer." #: includes/class-exelearning-editor.php:175 #: includes/class-exelearning-editor.php:208 #: includes/integrations/class-media-library.php:195 -#: includes/integrations/class-media-library.php:350 +#: includes/integrations/class-media-library.php:349 #: assets/js/elp-upload.js:423 #: assets/js/elp-upload.js:463 msgid "Edit in eXeLearning" @@ -312,11 +312,11 @@ msgid "This is a source file that cannot be previewed directly. Download it to o msgstr "Este és un fitxer font que no es pot previsualitzar directament. Descarrega'l per a obrir-lo amb eXeLearning." #: public/class-shortcodes.php:277 -#: public/class-shortcodes.php:321 +#: public/class-shortcodes.php:337 msgid "Download source file" msgstr "Descarregar el fitxer font" -#: public/class-shortcodes.php:379 +#: public/class-shortcodes.php:396 msgid "View fullscreen" msgstr "Veure a pantalla completa" @@ -324,7 +324,7 @@ msgstr "Veure a pantalla completa" msgid "eXeLearning Info" msgstr "Informació d'eXeLearning" -#: admin/class-admin-settings.php:461 +#: admin/class-admin-settings.php:519 #: includes/integrations/class-media-library.php:186 msgid "Version:" msgstr "Versió:" @@ -405,75 +405,75 @@ msgstr "Per favor, espereu mentre es guarda l'arxiu." msgid "You have unsaved changes. Are you sure you want to close?" msgstr "Teniu canvis sense guardar. Esteu segurs que voleu tancar?" -#: admin/class-admin-settings.php:442 +#: admin/class-admin-settings.php:500 msgid "Embedded Editor" msgstr "Editor integrat" -#: admin/class-admin-settings.php:447 +#: admin/class-admin-settings.php:505 msgid "The embedded editor is required to edit eXeLearning files." msgstr "L'editor integrat és necessari per a editar fitxers eXeLearning." -#: admin/class-admin-settings.php:448 +#: admin/class-admin-settings.php:506 msgid "Please install it using the button below." msgstr "Per favor, instal·leu-lo amb el botó de baix." -#: admin/class-admin-settings.php:456 -#: admin/class-admin-settings.php:479 +#: admin/class-admin-settings.php:514 +#: admin/class-admin-settings.php:537 msgid "Status:" msgstr "Estat:" -#: admin/class-admin-settings.php:227 -#: admin/class-admin-settings.php:457 +#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:515 msgid "Installed" msgstr "Instal·lat" -#: admin/class-admin-settings.php:465 +#: admin/class-admin-settings.php:523 msgid "Installed on:" msgstr "Instal·lat el:" -#: admin/class-admin-settings.php:473 +#: admin/class-admin-settings.php:531 msgid "Update to Latest Version" msgstr "Actualitza a l'última versió" -#: admin/class-admin-settings.php:480 +#: admin/class-admin-settings.php:538 msgid "Not installed" msgstr "No instal·lat" -#: admin/class-admin-settings.php:482 +#: admin/class-admin-settings.php:540 msgid "The embedded eXeLearning editor is not installed. You can download and install the latest version automatically from GitHub." msgstr "L'editor integrat d'eXeLearning no està instal·lat. Podeu descarregar i instal·lar l'última versió automàticament des de GitHub." -#: admin/class-admin-settings.php:487 +#: admin/class-admin-settings.php:545 msgid "Download & Install Editor" msgstr "Descarrega i instal·la l'editor" #. translators: %s: make build-editor command -#: admin/class-admin-settings.php:502 +#: admin/class-admin-settings.php:560 #, php-format msgid "Developers can also build the editor from source using %s." msgstr "Els desenvolupadors també poden compilar l'editor des del codi font usant %s." -#: admin/class-admin-settings.php:525 +#: admin/class-admin-settings.php:583 msgid "Try Again" msgstr "Torna a intentar-ho" -#: admin/class-admin-settings.php:535 +#: admin/class-admin-settings.php:593 msgid "Installing..." msgstr "Instal·lant..." -#: admin/class-admin-settings.php:538 +#: admin/class-admin-settings.php:596 msgid "Downloading and installing the editor. This may take a minute..." msgstr "Descarregant i instal·lant l'editor. Açò pot tardar un minut..." -#: admin/class-admin-settings.php:555 +#: admin/class-admin-settings.php:613 msgid "Open Editor" msgstr "Obri l'editor" -#: admin/class-admin-settings.php:559 +#: admin/class-admin-settings.php:617 msgid "Installation failed." msgstr "La instal·lació ha fallat." -#: admin/class-admin-settings.php:563 +#: admin/class-admin-settings.php:621 msgid "Network error. Please check your connection and try again." msgstr "Error de xarxa. Per favor, comproveu la connexió i torneu a intentar-ho." @@ -614,191 +614,191 @@ msgstr "Aquest fitxer no s'ha pogut processar com a eXeLearning." msgid "https://exelearning.net/" msgstr "https://exelearning.net/" -#: admin/class-admin-settings.php:86 +#: admin/class-admin-settings.php:144 msgid "Help" msgstr "Ajuda" -#: admin/class-admin-settings.php:88 +#: admin/class-admin-settings.php:146 msgid "Embed an uploaded .elpx package anywhere with the [exelearning] shortcode, referencing the file by its Media Library attachment ID." msgstr "Incrusta un paquet .elpx penjat a qualsevol lloc amb el codi curt [exelearning], referenciant el fitxer pel seu ID d'adjunt a la Biblioteca multimèdia." -#: admin/class-admin-settings.php:91 +#: admin/class-admin-settings.php:149 msgid "Shortcode examples" msgstr "Exemples de codi curt" -#: admin/class-admin-settings.php:95 +#: admin/class-admin-settings.php:153 msgid "Attributes" msgstr "Atributs" -#: admin/class-admin-settings.php:99 +#: admin/class-admin-settings.php:157 msgid "Attribute" msgstr "Atribut" -#: admin/class-admin-settings.php:100 +#: admin/class-admin-settings.php:158 msgid "Default" msgstr "Per defecte" -#: admin/class-admin-settings.php:101 +#: admin/class-admin-settings.php:159 msgid "Description" msgstr "Descripció" -#: admin/class-admin-settings.php:108 +#: admin/class-admin-settings.php:166 msgid "Required. Media Library attachment ID of the .elpx package." msgstr "Obligatori. ID d'adjunt del paquet .elpx a la Biblioteca multimèdia." -#: admin/class-admin-settings.php:113 +#: admin/class-admin-settings.php:171 msgid "Height of the preview, in pixels." msgstr "Alçada de la previsualització, en píxels." -#: admin/class-admin-settings.php:118 +#: admin/class-admin-settings.php:176 msgid "When enabled, the content loads with teacher mode active." msgstr "Quan s'activa, el contingut es carrega amb el mode docent actiu." -#: admin/class-admin-settings.php:123 +#: admin/class-admin-settings.php:181 msgid "Whether the teacher-mode toggle button is shown." msgstr "Si es mostra el botó per commutar el mode docent." -#: admin/class-admin-settings.php:128 +#: admin/class-admin-settings.php:186 msgid "When enabled, shows a multi-format download button." msgstr "Quan s'activa, mostra un botó de baixada multiformat." -#: admin/class-admin-settings.php:132 +#: admin/class-admin-settings.php:190 msgid "all" msgstr "tots" -#: admin/class-admin-settings.php:133 +#: admin/class-admin-settings.php:191 msgid "Comma-separated formats to offer: elpx, html5, scorm12, ims, epub3." msgstr "Formats separats per comes a oferir: elpx, html5, scorm12, ims, epub3." -#: admin/class-admin-settings.php:138 +#: admin/class-admin-settings.php:196 msgid "Show the package screenshot: no, poster (click to load), or only (image only). Requires eXeLearning 4.0.1 or newer." msgstr "Mostra la captura de pantalla del paquet: no, poster (clic per carregar) o only (només imatge). Requereix eXeLearning 4.0.1 o superior." -#: admin/class-admin-settings.php:143 +#: admin/class-admin-settings.php:201 msgid "Developer hooks" msgstr "Hooks per a desenvolupadors" -#: admin/class-admin-settings.php:145 +#: admin/class-admin-settings.php:203 msgid "The shortcode output can be customized with the exelearning_shortcode_atts, exelearning_preview_url, and exelearning_shortcode_output filters, among other actions and filters." msgstr "La sortida del codi curt es pot personalitzar amb els filtres exelearning_shortcode_atts, exelearning_preview_url i exelearning_shortcode_output, entre altres accions i filtres." -#: admin/class-admin-settings.php:150 +#: admin/class-admin-settings.php:208 msgid "Full shortcode reference" msgstr "Referència completa del codi curt" -#: admin/class-admin-settings.php:154 +#: admin/class-admin-settings.php:212 msgid "Developer hooks reference" msgstr "Referència dels hooks per a desenvolupadors" -#: admin/class-admin-settings.php:180 +#: admin/class-admin-settings.php:238 msgid "Styles" msgstr "Estils" -#: admin/class-admin-settings.php:182 +#: admin/class-admin-settings.php:240 msgid "Upload eXeLearning style packages and control which styles the embedded editor exposes." msgstr "Penja paquets d'estils d'eXeLearning i controla quins estils mostra l'editor incrustat." -#: admin/class-admin-settings.php:185 +#: admin/class-admin-settings.php:243 msgid "Import policy" msgstr "Política d'importació" -#: admin/class-admin-settings.php:189 +#: admin/class-admin-settings.php:247 msgid "Block user-imported styles" msgstr "Bloca els estils importats per usuaris" -#: admin/class-admin-settings.php:193 +#: admin/class-admin-settings.php:251 msgid "When enabled, the embedded editor hides the \"User styles\" tab and silently refuses to install a style bundled inside an imported .elpx project. Users may only choose from the admin-approved list below. This mirrors the eXeLearning ONLINE_THEMES_INSTALL=false behavior." msgstr "Quan s'activa, l'editor incrustat amaga la pestanya «Estils d'usuari» i es nega silenciosament a instal·lar un estil inclòs en un projecte .elpx importat. Els usuaris només poden triar de la llista aprovada per l'administrador de sota. Això reprodueix el comportament eXeLearning ONLINE_THEMES_INSTALL=false." -#: admin/class-admin-settings.php:196 +#: admin/class-admin-settings.php:254 msgid "Upload a new style" msgstr "Penja un estil nou" -#: admin/class-admin-settings.php:201 +#: admin/class-admin-settings.php:259 msgid "Upload style" msgstr "Penja l'estil" #. translators: %s: human-readable max file size. -#: admin/class-admin-settings.php:208 +#: admin/class-admin-settings.php:266 #, php-format msgid "Maximum file size: %s. Only .zip packages containing a valid config.xml are accepted." msgstr "Mida màxima del fitxer: %s. Només s'accepten paquets .zip que continguin un config.xml vàlid." -#: admin/class-admin-settings.php:217 +#: admin/class-admin-settings.php:275 msgid "Uploaded styles" msgstr "Estils penjats" -#: admin/class-admin-settings.php:219 +#: admin/class-admin-settings.php:277 msgid "No uploaded styles yet." msgstr "Encara no hi ha estils penjats." -#: admin/class-admin-settings.php:225 -#: admin/class-admin-settings.php:268 +#: admin/class-admin-settings.php:283 +#: admin/class-admin-settings.php:326 msgid "Id" msgstr "Id" -#: admin/class-admin-settings.php:226 -#: admin/class-admin-settings.php:269 +#: admin/class-admin-settings.php:284 +#: admin/class-admin-settings.php:327 msgid "Version" msgstr "Versió" -#: admin/class-admin-settings.php:228 -#: admin/class-admin-settings.php:244 -#: admin/class-admin-settings.php:270 -#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:286 +#: admin/class-admin-settings.php:302 +#: admin/class-admin-settings.php:328 +#: admin/class-admin-settings.php:343 msgid "Enabled" msgstr "Habilitat" -#: admin/class-admin-settings.php:229 +#: admin/class-admin-settings.php:287 msgid "Actions" msgstr "Accions" -#: admin/class-admin-settings.php:258 +#: admin/class-admin-settings.php:316 msgid "Built-in styles" msgstr "Estils integrats" -#: admin/class-admin-settings.php:261 +#: admin/class-admin-settings.php:319 msgid "Built-in styles are not available because the embedded editor is not installed." msgstr "Els estils integrats no estan disponibles perquè l'editor incrustat no està instal·lat." -#: admin/class-admin-settings.php:295 +#: admin/class-admin-settings.php:353 msgid "Disabled built-in styles are hidden from the editor. Uploaded styles can be disabled or deleted at any time. Existing projects that reference a missing style fall back to the editor default." msgstr "Els estils integrats desactivats s'amaguen de l'editor. Els estils penjats es poden desactivar o eliminar en qualsevol moment. Els projectes existents que referencien un estil que falta utilitzen l'estil per defecte de l'editor." -#: admin/class-admin-settings.php:341 +#: admin/class-admin-settings.php:399 msgid "Uploading…" msgstr "S'està penjant…" -#: admin/class-admin-settings.php:344 +#: admin/class-admin-settings.php:402 #: admin/class-admin-styles.php:71 msgid "Style installed." msgstr "Estil instal·lat." -#: admin/class-admin-settings.php:347 +#: admin/class-admin-settings.php:405 msgid "Upload failed." msgstr "La pujada ha fallat." -#: admin/class-admin-settings.php:350 -#: admin/class-admin-settings.php:372 -#: admin/class-admin-settings.php:393 -#: admin/class-admin-settings.php:418 +#: admin/class-admin-settings.php:408 +#: admin/class-admin-settings.php:430 +#: admin/class-admin-settings.php:451 +#: admin/class-admin-settings.php:476 msgid "Network error." msgstr "Error de xarxa." -#: admin/class-admin-settings.php:368 -#: admin/class-admin-settings.php:389 +#: admin/class-admin-settings.php:426 +#: admin/class-admin-settings.php:447 msgid "Update failed." msgstr "L'actualització ha fallat." -#: admin/class-admin-settings.php:404 +#: admin/class-admin-settings.php:462 msgid "Delete this style? This cannot be undone." msgstr "Voleu eliminar aquest estil? Aquesta acció no es pot desfer." -#: admin/class-admin-settings.php:413 +#: admin/class-admin-settings.php:471 msgid "Style deleted." msgstr "Estil eliminat." -#: admin/class-admin-settings.php:415 +#: admin/class-admin-settings.php:473 msgid "Delete failed." msgstr "L'eliminació ha fallat." @@ -977,7 +977,7 @@ msgstr "No s'ha pogut crear el directori de l'estil." msgid "The uploaded style does not contain any stylesheet." msgstr "L'estil penjat no conté cap full d'estil." -#: public/class-shortcodes.php:341 +#: public/class-shortcodes.php:357 msgid "Load interactive content" msgstr "Carrega el contingut interactiu" @@ -1008,3 +1008,31 @@ msgstr "Mostra el botó de baixada" #: assets/js/elp-upload.js:435 msgid "Available formats" msgstr "Formats disponibles" + +#: admin/class-admin-settings.php:95 +msgid "Settings saved." +msgstr "S'han guardat els ajustos." + +#: admin/class-admin-settings.php:102 +msgid "Security" +msgstr "Seguretat" + +#: admin/class-admin-settings.php:108 +msgid "Iframe security mode" +msgstr "Mode de seguretat de l'iframe" + +#: admin/class-admin-settings.php:113 +msgid "Secure (opaque-origin sandbox)" +msgstr "Segur (aïllament d'origen opac)" + +#: admin/class-admin-settings.php:116 +msgid "Legacy (same-origin)" +msgstr "Heretat (mateix origen)" + +#: admin/class-admin-settings.php:120 +msgid "Secure (recommended) isolates embedded content in an opaque-origin iframe. Legacy keeps same-origin behavior, needed only in some environments such as WordPress Playground." +msgstr "El mode segur (recomanat) aïlla el contingut incrustat en un iframe d'origen opac. El mode heretat manté el mateix origen, necessari només en alguns entorns com ara WordPress Playground." + +#: admin/class-admin-settings.php:125 +msgid "Save changes" +msgstr "Guarda els canvis" diff --git a/languages/exelearning-de_DE.mo b/languages/exelearning-de_DE.mo index 0f24b42ef5b14931ab584f44050101b9c5fdf216..252dac5595cef0207455b8790eea5bb793688b88 100644 GIT binary patch delta 4423 zcmZwJ3vg7`9mnw#2t?kG5J)0~3&cbAr(spEZ7p9hJon}%1r6^$GvJhqhtJ>bN1eI z{{R0u=Z?GgXZ-q5M*43(Gq)Q4xy)Z*{w8OsXUr2_zi|f5<@8H&Cq9Z-P>)RPW{h5$ zgJW9m~Twlbnb2pZ8H=X;yCPt&tf}lz?t}S9E}&SKlWf2 zEjSAA!<9G*H(@58LfZ+i9g0&p;oAMVGAI2VuNdVjn$+nZno z4rDxrU2qE$li7j2@DNVJKGI@gtm#s>CT&r)p^TbPXW%nrZ%o@h zUO)w?=ZbMSK8z%168`uG983RI)YhFt1@tK@<4j)Gcn4%^lY>fZWG?k@L*oGkNX|Tn zD%D)9z@`59LDV67$N&8U-;YsS_7Bv=8FcQ&TvQ@sklizjPb*6nv#}So73Wa5;1&{# zxr381ozF>7!>r*hDjLwoc#@{Van2k+ombVy%&R*8B(ggR^~ z%)+&J4{k&~*MMzt7iz(Ms7f5h3D|<2Gx(?tr~WF{s1e>4RG~`q0;;sf{QeEpiw+yA ziI<`FbOmyd&5w~e%>nF$AE7e7h}k%vNx3*?KB^*N?2g|nqW(H`n;DS5KuvrY*)DSh z^GG@*nW7 z&1%#G&tnJNhI;XrsPDjG?17hX8Q#P$xPbb0#3yh%hJ5#QI3+p)z_Ol~FTlk3Ypcyo1{?Z@jl{I@E8k6GFeRvoLZ~yc6?5=)iJ!$dw&%3 z@Lg0u7f}n`!Y8peM_h^2q4xX-n2Rr<0()&L^{=3DgaIwwZJPJM5Y)s|u|GbBnxGz) z$tF}~wxbq2gzTa@jhr)+#TED=K7^{sG1S&vzTq_Ok@hki#L3W$<;YjpJd29_ zS2zHFi)_C+j|w1XruX}OsKAR+3(WHSkE6aH3Dm9m8S-f`yYUj9MIG)p)1}@w{uov> za1|AC*(~oCJcTOxYE;AxsEPNXDsu`~;peDB8sskO7Hmar(aWe(??zSdH>k?Ji|sJ| z2@Pd*2{plWvfpxf!RSNMo zDzm{0z1uMYGwDypK{y=?(Bc5y|8+F9cY9H#c?%W58Pp*hSMGf}7ojTk5;}MQN8<;m zirhhBHWL>hjHwq-k0qeQ~(E10bNFR$>c8fGXE~>a9gD0=4C9ww=vy`Mk|dKa9CYkb+jz6f*$&w& z6M>j@lD4`w5lPiMv3Srn9`Ca>Bin`o)%DJ>BtI9$6OmBFEo{usYi^rW9S*o5n{2q& zcShPe!{Rl8XKKHC#7PF+U{!o|p{dY}{G71W@mS2dK^rV|BFT6(kg`d~#;RWqmrG`%i<~CtE~<@fuvIzPXx;oHkowFqk;NRB3|nTi@j*czu}>NefSG>wW(CZ4QaVL z8!T>orQhj(z3+xoR1v8T+eFw#Qb~$cn`{hE+Ln>$S1S~?cYk&kCz3UZS~pbK_@Bwo zW#%-kqX6n#Vyp3s3o>w1-q*hI>)gl($`-=?fH#|;OfNJSWDIcI9 zZrUA9IYH|tZM2FkzDm%kvJr*ttcoOpj$51X7bAKeiV=&K^{R;dw%YdzGJ)H4m~2yQ i!`HQK_|x>?<eZ^!zVJ;;1tK delta 3648 zcmYM$4Xl?{9S87p;R=GttAL1?dqMH#Dxd0(bROU9Eyu#)r$Ijd+rwd-~Z>F^M9W6{Lb(E&NH@d zseAPCy4vsi*56b7d(Ypo{_4A?SIWL4|L-}PpXyKJX+2A6<#qHaulmX@Z*vSk3 zV6)eAArshQcHwd+;H!8tZ{!i4Umn#+09!eTFK|5H;q&a@w;JEgOz;_p@!w36n);RE z*<~b;;uN0ER%QYBFxNf61ok+SnJ3uK^UI4G-{f0NAdAhC$iK`?@Kt7oH*yRg;z;i1 zD0Vj6P>yC+HlHW4##8thld;`Ak$+_aj~(Eeqcz5BWJU9s8dyVnQ`(q-o?xzfp3VFn z#acQIti}iMO#M;J)~#d$x|Uh-hK}+3=+?4{S=hFL^502gr-7vCCC=lUw77Djr>1x& zGQXeKVJov$Ut%V_iG$h3EMN=mPI-;lviF$vtoQ;e-cs(@~0ihC^uQY&|9 zrcy5B89a^aIfpx#O!bkTn>c~v zbN-*vINiVjZsBm1l8E;(6CC1bjykTC7A|APw{QeM;O*?`j4t85{0a{;8CW&Enr|;t z_4OxIsqfCiJii>J;o0RFW^X1kHPOOs$#N#eYq*eiFxP#^vHYApc!I;7tr^Xn^A=xC zT+K7NfxWnkxqdHeDWX4Vbmc*2PY*E{c9n+C9LPLyFq4U9p2a2XQCG@FCL^2VcNBli zWTuNsPG-k2{gupp8<=^2)hz$n%ikDKZ>7%bDtk19IVLlh6}Pe_Gjj8rd=qPGWXrW!+AfG;YUuD|3tRUz!Cg}!#c?XFVr7oIoZ=yypk_7ft+r+ znP@tva5htP-)2tBzK-8JTYfkF9?X3MXsxB0eK^0Su}EVTkK|5v=dU@Hdpm46quSG@ zyukQ6`jj_(UCes>lHyv(1a?`6E18vE!*h5$dvF(fv-XyTBU=8<^VoHaEO0gzY&lDX z_2W{GLV;y0HdRbjz528zrsmpt2|jI{J+&&#sh<*u-yeT+aU^8o6;V zQzYHSSFhaR^v)?0m_QaWD_F}WKFm4X$*i!i_iHlQz+_+ov!JQW0$V!9FQ*bKE7?2e z{|b$(cq8+GKQhJGd17@8dojnak$J#K4&W>v!)0vZEgjyS``#F^V zpxr5hr&a+hV18f01b)rbTGhDCKwcEzXO72Cp2XL=jDKeWTC5U}zMlen+F+{k3+v6@Cw@+?y{uQRFI!%Xlo$FTpjsz_&Ynf~>>n(s0h zoH<<`aV=%He8#*NMmW>Mcq{MbBb?2#=U2zMwpQaI1KXGj7tg33SYwXWPq~60Q{9xA z7gT|*;}7+p;a$9ZrvKCPQ?B9lE!C;n&%^Ww&8l8FjjY!{jmPEukJT7r;8G6FjqK0+ znapfu0(glju2U|o-hk7YOnrwlkf2&?&H~f63}?wq!lr~Rb8ZF)oB{{p~7n4bUu diff --git a/languages/exelearning-de_DE.po b/languages/exelearning-de_DE.po index 405c4dc..957f152 100644 --- a/languages/exelearning-de_DE.po +++ b/languages/exelearning-de_DE.po @@ -24,13 +24,13 @@ msgstr "Einstellungen" msgid "Date" msgstr "Datum" -#: admin/class-admin-settings.php:249 +#: admin/class-admin-settings.php:307 #: includes/class-elp-list-table.php:109 msgid "Delete" msgstr "Löschen" -#: admin/class-admin-settings.php:224 -#: admin/class-admin-settings.php:267 +#: admin/class-admin-settings.php:282 +#: admin/class-admin-settings.php:325 #: includes/class-elp-list-table.php:49 msgid "Title" msgstr "Titel" @@ -39,7 +39,7 @@ msgstr "Titel" #: exelearning.php #: admin/class-admin-settings.php:51 #: includes/class-mime-types.php:73 -#: includes/integrations/class-media-library.php:382 +#: includes/integrations/class-media-library.php:381 msgid "eXeLearning" msgstr "eXeLearning" @@ -71,7 +71,7 @@ msgstr "Status" msgid "Edit" msgstr "Bearbeiten" -#: includes/class-elp-upload-block.php:154 +#: includes/class-elp-upload-block.php:159 msgid "Error: eXeLearning content not found" msgstr "Fehler: eXeLearning-Inhalt nicht gefunden" @@ -92,19 +92,19 @@ msgid "Open in new tab" msgstr "In neuem Tab öffnen" #: includes/integrations/class-media-library.php:189 -#: includes/integrations/class-media-library.php:369 -#: includes/integrations/class-media-library.php:408 +#: includes/integrations/class-media-library.php:368 +#: includes/integrations/class-media-library.php:407 msgid "License:" msgstr "Lizenz:" #: includes/integrations/class-media-library.php:190 -#: includes/integrations/class-media-library.php:370 -#: includes/integrations/class-media-library.php:412 +#: includes/integrations/class-media-library.php:369 +#: includes/integrations/class-media-library.php:411 msgid "Language:" msgstr "Sprache:" -#: includes/integrations/class-media-library.php:371 -#: includes/integrations/class-media-library.php:416 +#: includes/integrations/class-media-library.php:370 +#: includes/integrations/class-media-library.php:415 msgid "Resource Type:" msgstr "Ressourcentyp:" @@ -158,28 +158,28 @@ msgstr "Projekt wird geladen..." msgid "Error" msgstr "Fehler" -#: includes/class-content-proxy.php:112 +#: includes/class-content-proxy.php:135 msgid "Invalid content identifier." msgstr "Ungültige Inhaltskennung." -#: includes/class-content-proxy.php:137 +#: includes/class-content-proxy.php:160 msgid "Invalid file path." msgstr "Ungültiger Dateipfad." -#: includes/class-content-proxy.php:149 +#: includes/class-content-proxy.php:172 msgid "File not found." msgstr "Datei nicht gefunden." -#: includes/class-content-proxy.php:164 -#: includes/class-content-proxy.php:172 +#: includes/class-content-proxy.php:187 +#: includes/class-content-proxy.php:195 msgid "Access denied." msgstr "Zugriff verweigert." -#: includes/class-elp-upload-block.php:247 +#: includes/class-elp-upload-block.php:261 msgid "This eXeLearning content is a source file and cannot be previewed directly." msgstr "Dieser eXeLearning-Inhalt ist eine Quelldatei und kann nicht direkt in der Vorschau angezeigt werden." -#: includes/class-elp-upload-block.php:234 +#: includes/class-elp-upload-block.php:248 #: public/class-shortcodes.php:190 msgid "Download file" msgstr "Datei herunterladen" @@ -215,7 +215,7 @@ msgstr "Sie haben keine Berechtigung, diese Datei zu bearbeiten." #: includes/class-exelearning-editor.php:175 #: includes/class-exelearning-editor.php:208 #: includes/integrations/class-media-library.php:195 -#: includes/integrations/class-media-library.php:350 +#: includes/integrations/class-media-library.php:349 #: assets/js/elp-upload.js:423 #: assets/js/elp-upload.js:463 msgid "Edit in eXeLearning" @@ -312,11 +312,11 @@ msgid "This is a source file that cannot be previewed directly. Download it to o msgstr "Dies ist eine Quelldatei, die nicht direkt in der Vorschau angezeigt werden kann. Laden Sie sie herunter, um sie mit eXeLearning zu öffnen." #: public/class-shortcodes.php:277 -#: public/class-shortcodes.php:321 +#: public/class-shortcodes.php:337 msgid "Download source file" msgstr "Quelldatei herunterladen" -#: public/class-shortcodes.php:379 +#: public/class-shortcodes.php:396 msgid "View fullscreen" msgstr "Vollbild anzeigen" @@ -324,7 +324,7 @@ msgstr "Vollbild anzeigen" msgid "eXeLearning Info" msgstr "eXeLearning-Info" -#: admin/class-admin-settings.php:461 +#: admin/class-admin-settings.php:519 #: includes/integrations/class-media-library.php:186 msgid "Version:" msgstr "Version:" @@ -405,75 +405,75 @@ msgstr "Bitte warten Sie, während die Datei gespeichert wird." msgid "You have unsaved changes. Are you sure you want to close?" msgstr "Sie haben ungespeicherte Änderungen. Möchten Sie wirklich schließen?" -#: admin/class-admin-settings.php:442 +#: admin/class-admin-settings.php:500 msgid "Embedded Editor" msgstr "Eingebetteter Editor" -#: admin/class-admin-settings.php:447 +#: admin/class-admin-settings.php:505 msgid "The embedded editor is required to edit eXeLearning files." msgstr "Der eingebettete Editor wird zum Bearbeiten von eXeLearning-Dateien benötigt." -#: admin/class-admin-settings.php:448 +#: admin/class-admin-settings.php:506 msgid "Please install it using the button below." msgstr "Bitte installieren Sie ihn über die Schaltfläche unten." -#: admin/class-admin-settings.php:456 -#: admin/class-admin-settings.php:479 +#: admin/class-admin-settings.php:514 +#: admin/class-admin-settings.php:537 msgid "Status:" msgstr "Status:" -#: admin/class-admin-settings.php:227 -#: admin/class-admin-settings.php:457 +#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:515 msgid "Installed" msgstr "Installiert" -#: admin/class-admin-settings.php:465 +#: admin/class-admin-settings.php:523 msgid "Installed on:" msgstr "Installiert am:" -#: admin/class-admin-settings.php:473 +#: admin/class-admin-settings.php:531 msgid "Update to Latest Version" msgstr "Auf neueste Version aktualisieren" -#: admin/class-admin-settings.php:480 +#: admin/class-admin-settings.php:538 msgid "Not installed" msgstr "Nicht installiert" -#: admin/class-admin-settings.php:482 +#: admin/class-admin-settings.php:540 msgid "The embedded eXeLearning editor is not installed. You can download and install the latest version automatically from GitHub." msgstr "Der eingebettete eXeLearning-Editor ist nicht installiert. Sie können die neueste Version automatisch von GitHub herunterladen und installieren." -#: admin/class-admin-settings.php:487 +#: admin/class-admin-settings.php:545 msgid "Download & Install Editor" msgstr "Editor herunterladen und installieren" #. translators: %s: make build-editor command -#: admin/class-admin-settings.php:502 +#: admin/class-admin-settings.php:560 #, php-format msgid "Developers can also build the editor from source using %s." msgstr "Entwickler können den Editor auch aus dem Quellcode mit %s erstellen." -#: admin/class-admin-settings.php:525 +#: admin/class-admin-settings.php:583 msgid "Try Again" msgstr "Erneut versuchen" -#: admin/class-admin-settings.php:535 +#: admin/class-admin-settings.php:593 msgid "Installing..." msgstr "Installiere..." -#: admin/class-admin-settings.php:538 +#: admin/class-admin-settings.php:596 msgid "Downloading and installing the editor. This may take a minute..." msgstr "Editor wird heruntergeladen und installiert. Dies kann eine Minute dauern..." -#: admin/class-admin-settings.php:555 +#: admin/class-admin-settings.php:613 msgid "Open Editor" msgstr "Editor öffnen" -#: admin/class-admin-settings.php:559 +#: admin/class-admin-settings.php:617 msgid "Installation failed." msgstr "Installation fehlgeschlagen." -#: admin/class-admin-settings.php:563 +#: admin/class-admin-settings.php:621 msgid "Network error. Please check your connection and try again." msgstr "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." @@ -614,191 +614,191 @@ msgstr "Diese Datei konnte nicht als eXeLearning verarbeitet werden." msgid "https://exelearning.net/" msgstr "https://exelearning.net/" -#: admin/class-admin-settings.php:86 +#: admin/class-admin-settings.php:144 msgid "Help" msgstr "Hilfe" -#: admin/class-admin-settings.php:88 +#: admin/class-admin-settings.php:146 msgid "Embed an uploaded .elpx package anywhere with the [exelearning] shortcode, referencing the file by its Media Library attachment ID." msgstr "Betten Sie ein hochgeladenes .elpx-Paket überall mit dem Shortcode [exelearning] ein und verweisen Sie über die Anhang-ID der Mediathek auf die Datei." -#: admin/class-admin-settings.php:91 +#: admin/class-admin-settings.php:149 msgid "Shortcode examples" msgstr "Shortcode-Beispiele" -#: admin/class-admin-settings.php:95 +#: admin/class-admin-settings.php:153 msgid "Attributes" msgstr "Attribute" -#: admin/class-admin-settings.php:99 +#: admin/class-admin-settings.php:157 msgid "Attribute" msgstr "Attribut" -#: admin/class-admin-settings.php:100 +#: admin/class-admin-settings.php:158 msgid "Default" msgstr "Standard" -#: admin/class-admin-settings.php:101 +#: admin/class-admin-settings.php:159 msgid "Description" msgstr "Beschreibung" -#: admin/class-admin-settings.php:108 +#: admin/class-admin-settings.php:166 msgid "Required. Media Library attachment ID of the .elpx package." msgstr "Erforderlich. Anhang-ID des .elpx-Pakets in der Mediathek." -#: admin/class-admin-settings.php:113 +#: admin/class-admin-settings.php:171 msgid "Height of the preview, in pixels." msgstr "Höhe der Vorschau in Pixeln." -#: admin/class-admin-settings.php:118 +#: admin/class-admin-settings.php:176 msgid "When enabled, the content loads with teacher mode active." msgstr "Wenn aktiviert, wird der Inhalt mit aktivem Lehrermodus geladen." -#: admin/class-admin-settings.php:123 +#: admin/class-admin-settings.php:181 msgid "Whether the teacher-mode toggle button is shown." msgstr "Legt fest, ob die Umschaltfläche für den Lehrermodus angezeigt wird." -#: admin/class-admin-settings.php:128 +#: admin/class-admin-settings.php:186 msgid "When enabled, shows a multi-format download button." msgstr "Wenn aktiviert, wird eine Download-Schaltfläche mit mehreren Formaten angezeigt." -#: admin/class-admin-settings.php:132 +#: admin/class-admin-settings.php:190 msgid "all" msgstr "alle" -#: admin/class-admin-settings.php:133 +#: admin/class-admin-settings.php:191 msgid "Comma-separated formats to offer: elpx, html5, scorm12, ims, epub3." msgstr "Durch Kommas getrennte Formate: elpx, html5, scorm12, ims, epub3." -#: admin/class-admin-settings.php:138 +#: admin/class-admin-settings.php:196 msgid "Show the package screenshot: no, poster (click to load), or only (image only). Requires eXeLearning 4.0.1 or newer." msgstr "Paket-Screenshot anzeigen: no, poster (zum Laden klicken) oder only (nur Bild). Erfordert eXeLearning 4.0.1 oder neuer." -#: admin/class-admin-settings.php:143 +#: admin/class-admin-settings.php:201 msgid "Developer hooks" msgstr "Entwickler-Hooks" -#: admin/class-admin-settings.php:145 +#: admin/class-admin-settings.php:203 msgid "The shortcode output can be customized with the exelearning_shortcode_atts, exelearning_preview_url, and exelearning_shortcode_output filters, among other actions and filters." msgstr "Die Shortcode-Ausgabe kann unter anderem mit den Filtern exelearning_shortcode_atts, exelearning_preview_url und exelearning_shortcode_output angepasst werden." -#: admin/class-admin-settings.php:150 +#: admin/class-admin-settings.php:208 msgid "Full shortcode reference" msgstr "Vollständige Shortcode-Referenz" -#: admin/class-admin-settings.php:154 +#: admin/class-admin-settings.php:212 msgid "Developer hooks reference" msgstr "Referenz der Entwickler-Hooks" -#: admin/class-admin-settings.php:180 +#: admin/class-admin-settings.php:238 msgid "Styles" msgstr "Stile" -#: admin/class-admin-settings.php:182 +#: admin/class-admin-settings.php:240 msgid "Upload eXeLearning style packages and control which styles the embedded editor exposes." msgstr "Laden Sie eXeLearning-Stilpakete hoch und steuern Sie, welche Stile der eingebettete Editor anbietet." -#: admin/class-admin-settings.php:185 +#: admin/class-admin-settings.php:243 msgid "Import policy" msgstr "Importrichtlinie" -#: admin/class-admin-settings.php:189 +#: admin/class-admin-settings.php:247 msgid "Block user-imported styles" msgstr "Von Benutzern importierte Stile blockieren" -#: admin/class-admin-settings.php:193 +#: admin/class-admin-settings.php:251 msgid "When enabled, the embedded editor hides the \"User styles\" tab and silently refuses to install a style bundled inside an imported .elpx project. Users may only choose from the admin-approved list below. This mirrors the eXeLearning ONLINE_THEMES_INSTALL=false behavior." msgstr "Wenn aktiviert, blendet der eingebettete Editor den Tab „Benutzerstile“ aus und weigert sich stillschweigend, einen in ein importiertes .elpx-Projekt eingebetteten Stil zu installieren. Benutzer können nur aus der unten stehenden, vom Administrator genehmigten Liste wählen. Dies entspricht dem Verhalten von eXeLearning ONLINE_THEMES_INSTALL=false." -#: admin/class-admin-settings.php:196 +#: admin/class-admin-settings.php:254 msgid "Upload a new style" msgstr "Neuen Stil hochladen" -#: admin/class-admin-settings.php:201 +#: admin/class-admin-settings.php:259 msgid "Upload style" msgstr "Stil hochladen" #. translators: %s: human-readable max file size. -#: admin/class-admin-settings.php:208 +#: admin/class-admin-settings.php:266 #, php-format msgid "Maximum file size: %s. Only .zip packages containing a valid config.xml are accepted." msgstr "Maximale Dateigröße: %s. Es werden nur .zip-Pakete mit einer gültigen config.xml akzeptiert." -#: admin/class-admin-settings.php:217 +#: admin/class-admin-settings.php:275 msgid "Uploaded styles" msgstr "Hochgeladene Stile" -#: admin/class-admin-settings.php:219 +#: admin/class-admin-settings.php:277 msgid "No uploaded styles yet." msgstr "Noch keine hochgeladenen Stile." -#: admin/class-admin-settings.php:225 -#: admin/class-admin-settings.php:268 +#: admin/class-admin-settings.php:283 +#: admin/class-admin-settings.php:326 msgid "Id" msgstr "ID" -#: admin/class-admin-settings.php:226 -#: admin/class-admin-settings.php:269 +#: admin/class-admin-settings.php:284 +#: admin/class-admin-settings.php:327 msgid "Version" msgstr "Version" -#: admin/class-admin-settings.php:228 -#: admin/class-admin-settings.php:244 -#: admin/class-admin-settings.php:270 -#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:286 +#: admin/class-admin-settings.php:302 +#: admin/class-admin-settings.php:328 +#: admin/class-admin-settings.php:343 msgid "Enabled" msgstr "Aktiviert" -#: admin/class-admin-settings.php:229 +#: admin/class-admin-settings.php:287 msgid "Actions" msgstr "Aktionen" -#: admin/class-admin-settings.php:258 +#: admin/class-admin-settings.php:316 msgid "Built-in styles" msgstr "Integrierte Stile" -#: admin/class-admin-settings.php:261 +#: admin/class-admin-settings.php:319 msgid "Built-in styles are not available because the embedded editor is not installed." msgstr "Integrierte Stile sind nicht verfügbar, da der eingebettete Editor nicht installiert ist." -#: admin/class-admin-settings.php:295 +#: admin/class-admin-settings.php:353 msgid "Disabled built-in styles are hidden from the editor. Uploaded styles can be disabled or deleted at any time. Existing projects that reference a missing style fall back to the editor default." msgstr "Deaktivierte integrierte Stile werden im Editor ausgeblendet. Hochgeladene Stile können jederzeit deaktiviert oder gelöscht werden. Bestehende Projekte, die auf einen fehlenden Stil verweisen, verwenden den Standardstil des Editors." -#: admin/class-admin-settings.php:341 +#: admin/class-admin-settings.php:399 msgid "Uploading…" msgstr "Wird hochgeladen…" -#: admin/class-admin-settings.php:344 +#: admin/class-admin-settings.php:402 #: admin/class-admin-styles.php:71 msgid "Style installed." msgstr "Stil installiert." -#: admin/class-admin-settings.php:347 +#: admin/class-admin-settings.php:405 msgid "Upload failed." msgstr "Hochladen fehlgeschlagen." -#: admin/class-admin-settings.php:350 -#: admin/class-admin-settings.php:372 -#: admin/class-admin-settings.php:393 -#: admin/class-admin-settings.php:418 +#: admin/class-admin-settings.php:408 +#: admin/class-admin-settings.php:430 +#: admin/class-admin-settings.php:451 +#: admin/class-admin-settings.php:476 msgid "Network error." msgstr "Netzwerkfehler." -#: admin/class-admin-settings.php:368 -#: admin/class-admin-settings.php:389 +#: admin/class-admin-settings.php:426 +#: admin/class-admin-settings.php:447 msgid "Update failed." msgstr "Aktualisierung fehlgeschlagen." -#: admin/class-admin-settings.php:404 +#: admin/class-admin-settings.php:462 msgid "Delete this style? This cannot be undone." msgstr "Diesen Stil löschen? Dies kann nicht rückgängig gemacht werden." -#: admin/class-admin-settings.php:413 +#: admin/class-admin-settings.php:471 msgid "Style deleted." msgstr "Stil gelöscht." -#: admin/class-admin-settings.php:415 +#: admin/class-admin-settings.php:473 msgid "Delete failed." msgstr "Löschen fehlgeschlagen." @@ -977,7 +977,7 @@ msgstr "Stilverzeichnis konnte nicht erstellt werden." msgid "The uploaded style does not contain any stylesheet." msgstr "Der hochgeladene Stil enthält kein Stylesheet." -#: public/class-shortcodes.php:341 +#: public/class-shortcodes.php:357 msgid "Load interactive content" msgstr "Interaktive Inhalte laden" @@ -1008,3 +1008,31 @@ msgstr "Download-Schaltfläche anzeigen" #: assets/js/elp-upload.js:435 msgid "Available formats" msgstr "Verfügbare Formate" + +#: admin/class-admin-settings.php:95 +msgid "Settings saved." +msgstr "Einstellungen gespeichert." + +#: admin/class-admin-settings.php:102 +msgid "Security" +msgstr "Sicherheit" + +#: admin/class-admin-settings.php:108 +msgid "Iframe security mode" +msgstr "Iframe-Sicherheitsmodus" + +#: admin/class-admin-settings.php:113 +msgid "Secure (opaque-origin sandbox)" +msgstr "Sicher (Sandbox mit undurchsichtigem Ursprung)" + +#: admin/class-admin-settings.php:116 +msgid "Legacy (same-origin)" +msgstr "Legacy (gleicher Ursprung)" + +#: admin/class-admin-settings.php:120 +msgid "Secure (recommended) isolates embedded content in an opaque-origin iframe. Legacy keeps same-origin behavior, needed only in some environments such as WordPress Playground." +msgstr "Der sichere Modus (empfohlen) isoliert eingebettete Inhalte in einem iframe mit undurchsichtigem Ursprung. Der Legacy-Modus behält denselben Ursprung bei und wird nur in einigen Umgebungen wie WordPress Playground benötigt." + +#: admin/class-admin-settings.php:125 +msgid "Save changes" +msgstr "Änderungen speichern" diff --git a/languages/exelearning-eo.mo b/languages/exelearning-eo.mo index 40c36279fe3b190074e587fe8f77921ad3c4c590..da8221a0f19dc83e818447b30c1934c853d0cfe5 100644 GIT binary patch delta 4381 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 I@3KDhKdsQ4WB>pF diff --git a/languages/exelearning-eo.po b/languages/exelearning-eo.po index 2b9f677..401d486 100644 --- a/languages/exelearning-eo.po +++ b/languages/exelearning-eo.po @@ -24,13 +24,13 @@ msgstr "Agordoj" msgid "Date" msgstr "Dato" -#: admin/class-admin-settings.php:249 +#: admin/class-admin-settings.php:307 #: includes/class-elp-list-table.php:109 msgid "Delete" msgstr "Forigi" -#: admin/class-admin-settings.php:224 -#: admin/class-admin-settings.php:267 +#: admin/class-admin-settings.php:282 +#: admin/class-admin-settings.php:325 #: includes/class-elp-list-table.php:49 msgid "Title" msgstr "Titolo" @@ -39,7 +39,7 @@ msgstr "Titolo" #: exelearning.php #: admin/class-admin-settings.php:51 #: includes/class-mime-types.php:73 -#: includes/integrations/class-media-library.php:382 +#: includes/integrations/class-media-library.php:381 msgid "eXeLearning" msgstr "eXeLearning" @@ -71,7 +71,7 @@ msgstr "Stato" msgid "Edit" msgstr "Redakti" -#: includes/class-elp-upload-block.php:154 +#: includes/class-elp-upload-block.php:159 msgid "Error: eXeLearning content not found" msgstr "Eraro: eXeLearning-enhavo ne trovita" @@ -92,19 +92,19 @@ msgid "Open in new tab" msgstr "Malfermi en nova langeto" #: includes/integrations/class-media-library.php:189 -#: includes/integrations/class-media-library.php:369 -#: includes/integrations/class-media-library.php:408 +#: includes/integrations/class-media-library.php:368 +#: includes/integrations/class-media-library.php:407 msgid "License:" msgstr "Licenco:" #: includes/integrations/class-media-library.php:190 -#: includes/integrations/class-media-library.php:370 -#: includes/integrations/class-media-library.php:412 +#: includes/integrations/class-media-library.php:369 +#: includes/integrations/class-media-library.php:411 msgid "Language:" msgstr "Lingvo:" -#: includes/integrations/class-media-library.php:371 -#: includes/integrations/class-media-library.php:416 +#: includes/integrations/class-media-library.php:370 +#: includes/integrations/class-media-library.php:415 msgid "Resource Type:" msgstr "Rimeda tipo:" @@ -158,28 +158,28 @@ msgstr "Ŝargante projekton..." msgid "Error" msgstr "Eraro" -#: includes/class-content-proxy.php:112 +#: includes/class-content-proxy.php:135 msgid "Invalid content identifier." msgstr "Nevalida enhava identigilo." -#: includes/class-content-proxy.php:137 +#: includes/class-content-proxy.php:160 msgid "Invalid file path." msgstr "Nevalida dosiera vojo." -#: includes/class-content-proxy.php:149 +#: includes/class-content-proxy.php:172 msgid "File not found." msgstr "Dosiero ne trovita." -#: includes/class-content-proxy.php:164 -#: includes/class-content-proxy.php:172 +#: includes/class-content-proxy.php:187 +#: includes/class-content-proxy.php:195 msgid "Access denied." msgstr "Aliro rifuzita." -#: includes/class-elp-upload-block.php:247 +#: includes/class-elp-upload-block.php:261 msgid "This eXeLearning content is a source file and cannot be previewed directly." msgstr "Ĉi tiu eXeLearning-enhavo estas fontdosiero kaj ne povas esti antaŭrigardata rekte." -#: includes/class-elp-upload-block.php:234 +#: includes/class-elp-upload-block.php:248 #: public/class-shortcodes.php:190 msgid "Download file" msgstr "Elŝuti dosieron" @@ -215,7 +215,7 @@ msgstr "Vi ne havas permeson redakti ĉi tiun dosieron." #: includes/class-exelearning-editor.php:175 #: includes/class-exelearning-editor.php:208 #: includes/integrations/class-media-library.php:195 -#: includes/integrations/class-media-library.php:350 +#: includes/integrations/class-media-library.php:349 #: assets/js/elp-upload.js:423 #: assets/js/elp-upload.js:463 msgid "Edit in eXeLearning" @@ -312,11 +312,11 @@ msgid "This is a source file that cannot be previewed directly. Download it to o msgstr "Ĉi tio estas fontdosiero kiu ne povas esti antaŭrigardata rekte. Elŝutu ĝin por malfermi per eXeLearning." #: public/class-shortcodes.php:277 -#: public/class-shortcodes.php:321 +#: public/class-shortcodes.php:337 msgid "Download source file" msgstr "Elŝuti fontdosieron" -#: public/class-shortcodes.php:379 +#: public/class-shortcodes.php:396 msgid "View fullscreen" msgstr "Vidi tutekrane" @@ -324,7 +324,7 @@ msgstr "Vidi tutekrane" msgid "eXeLearning Info" msgstr "Informoj pri eXeLearning" -#: admin/class-admin-settings.php:461 +#: admin/class-admin-settings.php:519 #: includes/integrations/class-media-library.php:186 msgid "Version:" msgstr "Versio:" @@ -405,75 +405,75 @@ msgstr "Bonvolu atendi dum la dosiero estas konservata." msgid "You have unsaved changes. Are you sure you want to close?" msgstr "Vi havas nekonservitajn ŝanĝojn. Ĉu vi certas, ke vi volas fermi?" -#: admin/class-admin-settings.php:442 +#: admin/class-admin-settings.php:500 msgid "Embedded Editor" msgstr "Integra redaktilo" -#: admin/class-admin-settings.php:447 +#: admin/class-admin-settings.php:505 msgid "The embedded editor is required to edit eXeLearning files." msgstr "La integra redaktilo estas bezonata por redakti eXeLearning-dosierojn." -#: admin/class-admin-settings.php:448 +#: admin/class-admin-settings.php:506 msgid "Please install it using the button below." msgstr "Bonvolu instali ĝin per la suba butono." -#: admin/class-admin-settings.php:456 -#: admin/class-admin-settings.php:479 +#: admin/class-admin-settings.php:514 +#: admin/class-admin-settings.php:537 msgid "Status:" msgstr "Stato:" -#: admin/class-admin-settings.php:227 -#: admin/class-admin-settings.php:457 +#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:515 msgid "Installed" msgstr "Instalita" -#: admin/class-admin-settings.php:465 +#: admin/class-admin-settings.php:523 msgid "Installed on:" msgstr "Instalita je:" -#: admin/class-admin-settings.php:473 +#: admin/class-admin-settings.php:531 msgid "Update to Latest Version" msgstr "Ĝisdatigi al la plej nova versio" -#: admin/class-admin-settings.php:480 +#: admin/class-admin-settings.php:538 msgid "Not installed" msgstr "Ne instalita" -#: admin/class-admin-settings.php:482 +#: admin/class-admin-settings.php:540 msgid "The embedded eXeLearning editor is not installed. You can download and install the latest version automatically from GitHub." msgstr "La integra eXeLearning-redaktilo ne estas instalita. Vi povas aŭtomate elŝuti kaj instali la plej novan version de GitHub." -#: admin/class-admin-settings.php:487 +#: admin/class-admin-settings.php:545 msgid "Download & Install Editor" msgstr "Elŝuti kaj instali redaktilon" #. translators: %s: make build-editor command -#: admin/class-admin-settings.php:502 +#: admin/class-admin-settings.php:560 #, php-format msgid "Developers can also build the editor from source using %s." msgstr "Programistoj ankaŭ povas kompili la redaktilon el la fontkodo per %s." -#: admin/class-admin-settings.php:525 +#: admin/class-admin-settings.php:583 msgid "Try Again" msgstr "Reprovi" -#: admin/class-admin-settings.php:535 +#: admin/class-admin-settings.php:593 msgid "Installing..." msgstr "Instalado..." -#: admin/class-admin-settings.php:538 +#: admin/class-admin-settings.php:596 msgid "Downloading and installing the editor. This may take a minute..." msgstr "Elŝutado kaj instalado de la redaktilo. Tio povas daŭri minuton..." -#: admin/class-admin-settings.php:555 +#: admin/class-admin-settings.php:613 msgid "Open Editor" msgstr "Malfermi redaktilon" -#: admin/class-admin-settings.php:559 +#: admin/class-admin-settings.php:617 msgid "Installation failed." msgstr "Instalado malsukcesis." -#: admin/class-admin-settings.php:563 +#: admin/class-admin-settings.php:621 msgid "Network error. Please check your connection and try again." msgstr "Reta eraro. Bonvolu kontroli vian konekton kaj reprovi." @@ -614,191 +614,191 @@ msgstr "Ĉi tiu dosiero ne povis esti prilaborita kiel eXeLearning." msgid "https://exelearning.net/" msgstr "https://exelearning.net/" -#: admin/class-admin-settings.php:86 +#: admin/class-admin-settings.php:144 msgid "Help" msgstr "Helpo" -#: admin/class-admin-settings.php:88 +#: admin/class-admin-settings.php:146 msgid "Embed an uploaded .elpx package anywhere with the [exelearning] shortcode, referencing the file by its Media Library attachment ID." msgstr "Enkorpigu alŝutitan .elpx-pakaĵon ie ajn per la kodo [exelearning], referencante la dosieron per ĝia aldonaĵo-ID en la Aŭdvida Biblioteko." -#: admin/class-admin-settings.php:91 +#: admin/class-admin-settings.php:149 msgid "Shortcode examples" msgstr "Ekzemploj de kodo" -#: admin/class-admin-settings.php:95 +#: admin/class-admin-settings.php:153 msgid "Attributes" msgstr "Atributoj" -#: admin/class-admin-settings.php:99 +#: admin/class-admin-settings.php:157 msgid "Attribute" msgstr "Atributo" -#: admin/class-admin-settings.php:100 +#: admin/class-admin-settings.php:158 msgid "Default" msgstr "Defaŭlta" -#: admin/class-admin-settings.php:101 +#: admin/class-admin-settings.php:159 msgid "Description" msgstr "Priskribo" -#: admin/class-admin-settings.php:108 +#: admin/class-admin-settings.php:166 msgid "Required. Media Library attachment ID of the .elpx package." msgstr "Deviga. Aldonaĵo-ID de la .elpx-pakaĵo en la Aŭdvida Biblioteko." -#: admin/class-admin-settings.php:113 +#: admin/class-admin-settings.php:171 msgid "Height of the preview, in pixels." msgstr "Alteco de la antaŭrigardo, en bilderoj." -#: admin/class-admin-settings.php:118 +#: admin/class-admin-settings.php:176 msgid "When enabled, the content loads with teacher mode active." msgstr "Kiam ŝaltita, la enhavo ŝargiĝas kun la instruista reĝimo aktiva." -#: admin/class-admin-settings.php:123 +#: admin/class-admin-settings.php:181 msgid "Whether the teacher-mode toggle button is shown." msgstr "Ĉu la ŝaltbutono de la instruista reĝimo estas montrata." -#: admin/class-admin-settings.php:128 +#: admin/class-admin-settings.php:186 msgid "When enabled, shows a multi-format download button." msgstr "Kiam ŝaltita, montras elŝutbutonon kun pluraj formatoj." -#: admin/class-admin-settings.php:132 +#: admin/class-admin-settings.php:190 msgid "all" msgstr "ĉiuj" -#: admin/class-admin-settings.php:133 +#: admin/class-admin-settings.php:191 msgid "Comma-separated formats to offer: elpx, html5, scorm12, ims, epub3." msgstr "Komseparitaj formatoj proponotaj: elpx, html5, scorm12, ims, epub3." -#: admin/class-admin-settings.php:138 +#: admin/class-admin-settings.php:196 msgid "Show the package screenshot: no, poster (click to load), or only (image only). Requires eXeLearning 4.0.1 or newer." msgstr "Montri la ekrankopion de la pakaĵo: no, poster (klaku por ŝargi) aŭ only (nur bildo). Bezonas eXeLearning 4.0.1 aŭ pli novan." -#: admin/class-admin-settings.php:143 +#: admin/class-admin-settings.php:201 msgid "Developer hooks" msgstr "Hokoj por programistoj" -#: admin/class-admin-settings.php:145 +#: admin/class-admin-settings.php:203 msgid "The shortcode output can be customized with the exelearning_shortcode_atts, exelearning_preview_url, and exelearning_shortcode_output filters, among other actions and filters." msgstr "La eligo de la kodo agordeblas per la filtriloj exelearning_shortcode_atts, exelearning_preview_url kaj exelearning_shortcode_output, inter aliaj agoj kaj filtriloj." -#: admin/class-admin-settings.php:150 +#: admin/class-admin-settings.php:208 msgid "Full shortcode reference" msgstr "Kompleta referenco de la kodo" -#: admin/class-admin-settings.php:154 +#: admin/class-admin-settings.php:212 msgid "Developer hooks reference" msgstr "Referenco de la programistaj hokoj" -#: admin/class-admin-settings.php:180 +#: admin/class-admin-settings.php:238 msgid "Styles" msgstr "Stiloj" -#: admin/class-admin-settings.php:182 +#: admin/class-admin-settings.php:240 msgid "Upload eXeLearning style packages and control which styles the embedded editor exposes." msgstr "Alŝutu eXeLearning-stilpakaĵojn kaj regu kiujn stilojn la enkorpigita redaktilo montras." -#: admin/class-admin-settings.php:185 +#: admin/class-admin-settings.php:243 msgid "Import policy" msgstr "Importa politiko" -#: admin/class-admin-settings.php:189 +#: admin/class-admin-settings.php:247 msgid "Block user-imported styles" msgstr "Bloki uzant-importitajn stilojn" -#: admin/class-admin-settings.php:193 +#: admin/class-admin-settings.php:251 msgid "When enabled, the embedded editor hides the \"User styles\" tab and silently refuses to install a style bundled inside an imported .elpx project. Users may only choose from the admin-approved list below. This mirrors the eXeLearning ONLINE_THEMES_INSTALL=false behavior." msgstr "Kiam ŝaltita, la enkorpigita redaktilo kaŝas la langeton «Uzantaj stiloj» kaj silente rifuzas instali stilon inkluzivitan en importita .elpx-projekto. Uzantoj povas elekti nur el la malsupra listo aprobita de la administranto. Tio spegulas la konduton eXeLearning ONLINE_THEMES_INSTALL=false." -#: admin/class-admin-settings.php:196 +#: admin/class-admin-settings.php:254 msgid "Upload a new style" msgstr "Alŝuti novan stilon" -#: admin/class-admin-settings.php:201 +#: admin/class-admin-settings.php:259 msgid "Upload style" msgstr "Alŝuti stilon" #. translators: %s: human-readable max file size. -#: admin/class-admin-settings.php:208 +#: admin/class-admin-settings.php:266 #, php-format msgid "Maximum file size: %s. Only .zip packages containing a valid config.xml are accepted." msgstr "Maksimuma dosiergrandeco: %s. Akceptiĝas nur .zip-pakaĵoj kun valida config.xml." -#: admin/class-admin-settings.php:217 +#: admin/class-admin-settings.php:275 msgid "Uploaded styles" msgstr "Alŝutitaj stiloj" -#: admin/class-admin-settings.php:219 +#: admin/class-admin-settings.php:277 msgid "No uploaded styles yet." msgstr "Ankoraŭ neniuj alŝutitaj stiloj." -#: admin/class-admin-settings.php:225 -#: admin/class-admin-settings.php:268 +#: admin/class-admin-settings.php:283 +#: admin/class-admin-settings.php:326 msgid "Id" msgstr "Id" -#: admin/class-admin-settings.php:226 -#: admin/class-admin-settings.php:269 +#: admin/class-admin-settings.php:284 +#: admin/class-admin-settings.php:327 msgid "Version" msgstr "Versio" -#: admin/class-admin-settings.php:228 -#: admin/class-admin-settings.php:244 -#: admin/class-admin-settings.php:270 -#: admin/class-admin-settings.php:285 +#: admin/class-admin-settings.php:286 +#: admin/class-admin-settings.php:302 +#: admin/class-admin-settings.php:328 +#: admin/class-admin-settings.php:343 msgid "Enabled" msgstr "Ŝaltita" -#: admin/class-admin-settings.php:229 +#: admin/class-admin-settings.php:287 msgid "Actions" msgstr "Agoj" -#: admin/class-admin-settings.php:258 +#: admin/class-admin-settings.php:316 msgid "Built-in styles" msgstr "Enkonstruitaj stiloj" -#: admin/class-admin-settings.php:261 +#: admin/class-admin-settings.php:319 msgid "Built-in styles are not available because the embedded editor is not installed." msgstr "Enkonstruitaj stiloj ne disponeblas ĉar la enkorpigita redaktilo ne estas instalita." -#: admin/class-admin-settings.php:295 +#: admin/class-admin-settings.php:353 msgid "Disabled built-in styles are hidden from the editor. Uploaded styles can be disabled or deleted at any time. Existing projects that reference a missing style fall back to the editor default." msgstr "Malŝaltitaj enkonstruitaj stiloj estas kaŝitaj de la redaktilo. Alŝutitaj stiloj povas esti malŝaltitaj aŭ forigitaj iam ajn. Ekzistantaj projektoj kiuj referencas mankantan stilon uzas la defaŭltan stilon de la redaktilo." -#: admin/class-admin-settings.php:341 +#: admin/class-admin-settings.php:399 msgid "Uploading…" msgstr "Alŝutante…" -#: admin/class-admin-settings.php:344 +#: admin/class-admin-settings.php:402 #: admin/class-admin-styles.php:71 msgid "Style installed." msgstr "Stilo instalita." -#: admin/class-admin-settings.php:347 +#: admin/class-admin-settings.php:405 msgid "Upload failed." msgstr "Alŝuto malsukcesis." -#: admin/class-admin-settings.php:350 -#: admin/class-admin-settings.php:372 -#: admin/class-admin-settings.php:393 -#: admin/class-admin-settings.php:418 +#: admin/class-admin-settings.php:408 +#: admin/class-admin-settings.php:430 +#: admin/class-admin-settings.php:451 +#: admin/class-admin-settings.php:476 msgid "Network error." msgstr "Reta eraro." -#: admin/class-admin-settings.php:368 -#: admin/class-admin-settings.php:389 +#: admin/class-admin-settings.php:426 +#: admin/class-admin-settings.php:447 msgid "Update failed." msgstr "Ĝisdatigo malsukcesis." -#: admin/class-admin-settings.php:404 +#: admin/class-admin-settings.php:462 msgid "Delete this style? This cannot be undone." msgstr "Ĉu forigi ĉi tiun stilon? Tio ne povas esti malfarita." -#: admin/class-admin-settings.php:413 +#: admin/class-admin-settings.php:471 msgid "Style deleted." msgstr "Stilo forigita." -#: admin/class-admin-settings.php:415 +#: admin/class-admin-settings.php:473 msgid "Delete failed." msgstr "Forigo malsukcesis." @@ -977,7 +977,7 @@ msgstr "Ne eblis krei la stilan dosierujon." msgid "The uploaded style does not contain any stylesheet." msgstr "La alŝutita stilo ne enhavas iun stilfolion." -#: public/class-shortcodes.php:341 +#: public/class-shortcodes.php:357 msgid "Load interactive content" msgstr "Ŝargi interagan enhavon" @@ -1008,3 +1008,31 @@ msgstr "Montri elŝutbutonon" #: assets/js/elp-upload.js:435 msgid "Available formats" msgstr "Disponeblaj formatoj" + +#: admin/class-admin-settings.php:95 +msgid "Settings saved." +msgstr "Agordoj konservitaj." + +#: admin/class-admin-settings.php:102 +msgid "Security" +msgstr "Sekureco" + +#: admin/class-admin-settings.php:108 +msgid "Iframe security mode" +msgstr "Sekureca reĝimo de iframe" + +#: admin/class-admin-settings.php:113 +msgid "Secure (opaque-origin sandbox)" +msgstr "Sekura (sablujo kun maldiafana origino)" + +#: admin/class-admin-settings.php:116 +msgid "Legacy (same-origin)" +msgstr "Hereda (sama origino)" + +#: admin/class-admin-settings.php:120 +msgid "Secure (recommended) isolates embedded content in an opaque-origin iframe. Legacy keeps same-origin behavior, needed only in some environments such as WordPress Playground." +msgstr "La sekura reĝimo (rekomendita) izolas enkorpigitan enhavon en iframe kun maldiafana origino. La hereda reĝimo konservas la saman originon, bezonata nur en kelkaj medioj kiel WordPress Playground." + +#: admin/class-admin-settings.php:125 +msgid "Save changes" +msgstr "Konservi ŝanĝojn" diff --git a/languages/exelearning-es_ES.mo b/languages/exelearning-es_ES.mo index bc6343d35614c370f8be62a25e4aee4424de3151..12db1ff91e6f6e141eeb18eeb5dd052223fcce0f 100644 GIT binary patch delta 4381 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