WordPress:在Gutenberg插件迁移到lock.json后,在JavaScript中使用多语言的本地化/翻译不再有效

时间:2022-02-08 作者:Marc

我做了a plugin with existing localization on WordPress.org 免费。我迁移到block。并通过将其与npx @wordpress/create-block todo-list. 我通读了一遍the Block Editor guide on internationalization 但在todo列表示例中,它的工作方式似乎有一些不同。

结果是我所有的__ php函数工作并转换所有字符串。但是我的__ JavaScript函数不会在翻译时翻译任何翻译。wordpress。组织机构

我尝试和检查的内容:

阻止。json包含"textdomain": "simpletoc"import { __ } from \'@wordpress/i18n\';Text Domain: simpletoc我没有更改它,但我使用了如下\\uuuu函数:

<ToggleControl
                label={__("Remove heading", "simpletoc")}
可悲的是,它以前在4.8版中没有阻塞。json,但我想避免回到那个位置。令人惊讶的是,在块中的描述。json确实会被翻译,但不会__ 代码中的函数。在这样做之前,我试着使用一些东西:

在我尝试使用的init hook中

function register_simpletoc_block()
{

  wp_set_script_translations( \'simpletoc-js\', \'simpletoc\' );

  register_block_type( __DIR__ . \'/build\' , [
    \'render_callback\' => __NAMESPACE__ . \'\\\\render_callback\'
  ]);
}
add_action( \'init\', \'register_simpletoc_block\' );
我试过这个,但也不起作用:

wp_set_script_translations( \'simpletoc\', \'simpletoc\' );

wp_set_script_translations( \'simpletoc-toc-editor-script-js\', \'simpletoc\' ); 
因为这是古腾堡编辑页面上的脚本

但由于我没有设置;simpletoc js“;我不知道这是否有必要。如果有人能解释或者至少帮我调试一下,那就太好了。

始终为空:

<script id=\'simpletoc-toc-editor-script-js-translations\'>
( function( domain, translations ) {
    var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
    localeData[""].domain = domain;
    wp.i18n.setLocaleData( localeData, domain );
} )( "simpletoc", { "locale_data": { "messages": { "": {} } } } );
</script>
如果我安装旧的4.8插件,这部分包含来自translate的数据。wordpress。像往常一样组织。

此标签适用于:https://github.com/mtoensing/simpletoc/archive/refs/tags/4.8.ziphttps://github.com/mtoensing/simpletoc/archive/refs/tags/5.0.1.zip

1 个回复
SO网友:Marc

这把它固定在块中。json:

"editorScript": "file:index.js"
这是我以前使用的:

"editorScript": "file:./index.js",

相关推荐

WordPress Translation Issue

我尝试使用以下代码更改文本function ctxtlearn_gettext( $ctxttranslation, $ctxttext ) { $ctxttrans = array_values(changeTxt_setting(\'trans\',true)); $ctxtdirty = false; $ctxtstrings_map = array(); $ctxttext_words = explode( \' \', $ctxttext