Explorar el Código

Make sure the "Plain text" label from the config is correctly translated.

Aleksander Nowodzinski hace 6 años
padre
commit
65890e7f7b

+ 33 - 0
packages/ckeditor5-code-block/src/utils.js

@@ -0,0 +1,33 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+/**
+ * @module code-block/utils
+ */
+
+/**
+ * Returns code block languages as defined in `config.codeBlock.languages` but processed to consider
+ * the editor localization, i.e. to display {@link module:code-block/codeblock~CodeBlockLanguageDefinition}
+ * in the correct language.
+ *
+ * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}
+ * when the user configuration is defined because the editor does not exist yet.
+ *
+ * @param {module:core/editor/editor~Editor} editor
+ * @returns {Array.<module:code-block/codeblock~CodeBlockLanguageDefinition>}.
+ */
+export function getLocalizedLanguageDefinitions( editor ) {
+	const t = editor.t;
+	const languagesDefs = editor.config.get( 'codeBlock.languages' );
+
+	for ( const def of languagesDefs ) {
+		if ( def.label === 'Plain text' ) {
+			def.label = t( 'Plain text' );
+			break;
+		}
+	}
+
+	return languagesDefs;
+}

+ 40 - 0
packages/ckeditor5-code-block/tests/codeblockediting.js

@@ -18,15 +18,26 @@ import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictest
 import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 
+import { add as addTranslations } from '@ckeditor/ckeditor5-utils/src/translation-service';
+
 describe( 'CodeBlockEditing', () => {
 	let editor, element, model, view;
 
+	addTranslations( 'en', {
+		'Plain text': 'Plain text'
+	} );
+
+	addTranslations( 'pl', {
+		'Plain text': 'Zwykły tekst'
+	} );
+
 	beforeEach( () => {
 		element = document.createElement( 'div' );
 		document.body.appendChild( element );
 
 		return ClassicTestEditor
 			.create( element, {
+				language: 'en',
 				plugins: [ CodeBlockEditing, AlignmentEditing, BoldEditing, Enter, Paragraph ]
 			} )
 			.then( newEditor => {
@@ -240,6 +251,35 @@ describe( 'CodeBlockEditing', () => {
 					'<code class="plaintext">[]<br></br><br></br>Foo<br></br><br></br></code>' +
 				'</pre>' );
 		} );
+
+		it( 'should use localized "Plain text" label', () => {
+			const element = document.createElement( 'div' );
+			document.body.appendChild( element );
+
+			return ClassicTestEditor
+				.create( element, {
+					language: 'pl',
+					plugins: [ CodeBlockEditing, AlignmentEditing, BoldEditing, Enter, Paragraph ]
+				} )
+				.then( newEditor => {
+					const editor = newEditor;
+					const model = editor.model;
+					const view = editor.editing.view;
+
+					setModelData( model,
+						'<codeBlock language="plaintext">foo</codeBlock>'
+					);
+
+					expect( getViewData( view ) ).to.equal(
+						'<pre data-language="Zwykły tekst">' +
+							'<code class="plaintext">{}foo</code>' +
+						'</pre>' );
+
+					element.remove();
+
+					return editor.destroy();
+				} );
+		} );
 	} );
 
 	describe( 'data pipeline m -> v conversion ', () => {