Blocks: Add i18n support to register_block_type_from_metadata

Related Gutenberg issue: https://github.com/WordPress/gutenberg/issues/23636.
Related WP-CLI PR: https://github.com/wp-cli/i18n-command/pull/210.
Related documentation proposal: https://github.com/WordPress/gutenberg/blob/master/docs/designers-developers/developers/block-api/block-metadata.md#internationalization-not-implemented

Adds programatic i18n support to `register_block_type_from_metadata` function for block settings registered from `block.json` file that provides `textdomain` field.


Props swissspidy, ocean90.
Fixes #52301.



git-svn-id: https://develop.svn.wordpress.org/trunk@49981 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Greg Ziółkowski
2021-01-19 11:04:03 +00:00
parent 2651809673
commit edd77c0791
8 changed files with 154 additions and 24 deletions
@@ -1,13 +1,13 @@
{
"apiVersion": 2,
"name": "my-plugin/notice",
"name": "tests/notice",
"title": "Notice",
"category": "common",
"parent": [
"core/group"
],
"providesContext": {
"my-plugin/message": "message"
"tests/message": "message"
},
"usesContext": [
"groupId"
@@ -18,7 +18,7 @@
"alert",
"message"
],
"textDomain": "my-plugin",
"textdomain": "notice",
"attributes": {
"message": {
"type": "string",
@@ -46,8 +46,8 @@
"message": "This is a notice!"
}
},
"editorScript": "my-plugin-notice-editor-script",
"script": "my-plugin-notice-script",
"editorStyle": "my-plugin-notice-editor-style",
"style": "my-plugin-notice-style"
"editorScript": "tests-notice-editor-script",
"script": "tests-notice-script",
"editorStyle": "tests-notice-editor-style",
"style": "tests-notice-style"
}
Binary file not shown.
@@ -0,0 +1,43 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2015-12-31 16:31+0100\n"
"PO-Revision-Date: 2021-01-14 18:26+0100\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.2\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
"esc_html_x:1,2c\n"
"X-Textdomain-Support: yes\n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Poedit-SearchPath-0: .\n"
msgctxt "block title"
msgid "Notice"
msgstr "Powiadomienie"
msgctxt "block description"
msgid "Shows warning, error or success notices…"
msgstr "Wyświetla ostrzeżenie, błąd lub powiadomienie o sukcesie…"
msgctxt "block keyword"
msgid "alert"
msgstr "ostrzeżenie"
msgctxt "block keyword"
msgid "message"
msgstr "wiadomość"
msgctxt "block style label"
msgid "Default"
msgstr "Domyślny"
msgctxt "block style label"
msgid "Other"
msgstr "Inny"
+53 -15
View File
@@ -62,7 +62,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
$registry = WP_Block_Type_Registry::get_instance();
foreach ( array( 'core/test-static', 'core/test-dynamic', 'my-plugin/notice' ) as $block_name ) {
foreach ( array( 'core/test-static', 'core/test-dynamic', 'tests/notice' ) as $block_name ) {
if ( $registry->is_registered( $block_name ) ) {
$registry->unregister( $block_name );
}
@@ -193,7 +193,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
$metadata = array(
'file' => __FILE__,
'name' => 'unit-tests/test-block',
'script' => 'file:./fixtures/missing-asset.js',
'script' => 'file:./blocks/notice/missing-asset.js',
);
$result = register_block_script_handle( $metadata, 'script' );
@@ -217,9 +217,9 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
*/
function test_success_register_block_script_handle() {
$metadata = array(
'file' => __FILE__,
'file' => DIR_TESTDATA . '/blocks/notice/block.json',
'name' => 'unit-tests/test-block',
'script' => 'file:./fixtures/block.js',
'script' => 'file:./block.js',
);
$result = register_block_script_handle( $metadata, 'script' );
@@ -262,9 +262,9 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
*/
function test_success_register_block_style_handle() {
$metadata = array(
'file' => __FILE__,
'file' => DIR_TESTDATA . '/blocks/notice/block.json',
'name' => 'unit-tests/test-block',
'style' => 'file:./fixtures/block.css',
'style' => 'file:./block.css',
);
$result = register_block_style_handle( $metadata, 'style' );
@@ -303,12 +303,12 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
*/
function test_block_registers_with_metadata_fixture() {
$result = register_block_type_from_metadata(
__DIR__ . '/fixtures'
DIR_TESTDATA . '/blocks/notice'
);
$this->assertInstanceOf( 'WP_Block_Type', $result );
$this->assertSame( 2, $result->api_version );
$this->assertSame( 'my-plugin/notice', $result->name );
$this->assertSame( 'tests/notice', $result->name );
$this->assertSame( 'Notice', $result->title );
$this->assertSame( 'common', $result->category );
$this->assertSameSets( array( 'core/group' ), $result->parent );
@@ -327,7 +327,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
);
$this->assertSame(
array(
'my-plugin/message' => 'message',
'tests/message' => 'message',
),
$result->provides_context
);
@@ -361,10 +361,48 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
),
$result->example
);
$this->assertSame( 'my-plugin-notice-editor-script', $result->editor_script );
$this->assertSame( 'my-plugin-notice-script', $result->script );
$this->assertSame( 'my-plugin-notice-editor-style', $result->editor_style );
$this->assertSame( 'my-plugin-notice-style', $result->style );
$this->assertSame( 'tests-notice-editor-script', $result->editor_script );
$this->assertSame( 'tests-notice-script', $result->script );
$this->assertSame( 'tests-notice-editor-style', $result->editor_style );
$this->assertSame( 'tests-notice-style', $result->style );
}
/**
* @ticket 52301
*/
function test_block_registers_with_metadata_i18n_support() {
function filter_set_locale_to_polish() {
return 'pl_PL';
}
add_filter( 'locale', 'filter_set_locale_to_polish' );
load_textdomain( 'notice', WP_LANG_DIR . '/plugins/notice-pl_PL.mo' );
$result = register_block_type_from_metadata(
DIR_TESTDATA . '/blocks/notice'
);
unload_textdomain( 'notice' );
remove_filter( 'locale', 'filter_set_locale_to_polish' );
$this->assertInstanceOf( 'WP_Block_Type', $result );
$this->assertSame( 'tests/notice', $result->name );
$this->assertSame( 'Powiadomienie', $result->title );
$this->assertSame( 'Wyświetla ostrzeżenie, błąd lub powiadomienie o sukcesie…', $result->description );
$this->assertSameSets( array( 'ostrzeżenie', 'wiadomość' ), $result->keywords );
$this->assertSame(
array(
array(
'name' => 'default',
'label' => 'Domyślny',
'isDefault' => true,
),
array(
'name' => 'other',
'label' => 'Inny',
),
),
$result->styles
);
}
/**
@@ -433,7 +471,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
add_filter( 'block_type_metadata', $filter_metadata_registration, 10, 2 );
$result = register_block_type_from_metadata(
__DIR__ . '/fixtures'
DIR_TESTDATA . '/blocks/notice'
);
remove_filter( 'block_type_metadata', $filter_metadata_registration );
@@ -451,7 +489,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
add_filter( 'block_type_metadata_settings', $filter_metadata_registration, 10, 2 );
$result = register_block_type_from_metadata(
__DIR__ . '/fixtures'
DIR_TESTDATA . '/blocks/notice'
);
remove_filter( 'block_type_metadata_settings', $filter_metadata_registration );