古腾堡区块语言翻译不起作用

时间:2019-02-18 作者:Jaydip Nimavat

我已经为我的短代码创建了Gutenberg块,下面是一些代码:

要加载脚本的init hook中PHP文件中的代码:

wp_register_script(
    \'my-blocks-script\', $pluginurl . \'/custom-blocks.js\',
    array( \'wp-blocks\', \'wp-components\', \'wp-element\', \'wp-i18n\', \'wp-editor\' ),
    filemtime( $plugindir . \'/custom-blocks.js\' )
);

// Script contains translations
if( function_exists(\'wp_set_script_translations\') ) {
    wp_set_script_translations( \'my-blocks-script\', \'my-text-domain\' );
}

// Shortcode block
register_block_type( \'custom-block/my-shortcode\', array(
    \'editor_script\' => \'my-blocks-script\'
) );
JS代码:文件:自定义块。js公司

( function (blocks, editor, components, i18n, element ) {
    // Define common variables
    var el = wp.element.createElement;
    var registerBlockType = wp.blocks.registerBlockType;
    var InnerBlocks = wp.editor.InnerBlocks;
    var BlockControls = wp.editor.BlockControls;
    var Dashicon = wp.components.Dashicon;
    var __ = wp.i18n.__;

    // Shortcode
    registerBlockType( \'custom-block/my-shortcode\', {
        title: __( \'Shortcode Title\', \'my-text-domain\' ),
        description: \'\',
        icon: Dashicon.cogs,
        category: \'common\',
        attributes: {
            display: {
                type: \'boolean\',
                default: true
            }
        },
        edit: function() {
            return [
                el( components.CheckboxControl, {
                    label: __( \'Display it?\', \'my-text-domain\' ),
                    checked: props.attributes.myAttr,
                    onChange: function( val ) {
                        props.setAttributes({ myAttr: val })
                    }
                } ),
            ];
        },
        save: function(props) {
            return(
                el(\'div\', { className: props.className }, \'[my-shortcode display="\'+props.attributes.display+\'"]\' )
            );
        }
    } );

} ) (
    window.wp.blocks,
    window.wp.editor,
    window.wp.components,
    window.wp.i18n,
    window.wp.element
);
一切正常,也阻止显示结果。但现在我想翻译“显示它?”文本使用另一种语言(我使用Loco翻译插件),我检查了po文件中的翻译字符串,PHP文件中的翻译字符串也可以正常工作。

在这里,只有JS文件转换不起作用。

1 个回复
SO网友:Sally CJ

只有JS文件翻译不起作用

很可能是因为WordPress找不到您的翻译文件,该文件应为有效的JED 格式,如下所示:

{
  "domain": "my-text-domain",
  "locale_data": {
    "my-text-domain": {
      "": {
        "domain":       "my-text-domain",
        "plural-forms": "n != 1",
        "lang":         "en-us"
      },
      "Shortcode Title": [
        "Shortcode Title translated"
      ],
      "Display it?": [
        "Display it? translated"
      ],
      "Another text 1": [
        "Translated text - singular",
        "Translated text - plural"
      ],
      "Another text 2": [
        "Translated text"
        // No plural.
      ]
    }
  }
}
并使用以下格式的名称保存:${domain}-${locale}-${handle}.json. 例如,在您的情况下,它可能是my-text-domain-en_US-my-blocks-script.json 如果网站的语言为English (United States) (请参阅“常规设置”和“站点语言”)。

当你打电话的时候wp_set_script_translations(), 可以指定第三个参数($path) 它是指向包含JS/JSON转换文件的目录的完整绝对文件路径。E、 g.:

// $pluginurl was taken from your code
wp_set_script_translations( \'my-blocks-script\', \'my-text-domain\', $pluginurl . \'/languages\' );
此外,您可以使用po2json 转换采购订单/.po 将文件转换为与JED兼容的JavaScript对象或JSON字符串。

Notes:

<在上述JS/JSON翻译数据中,语言环境如下所示"lang": "{locale}" 应该是GlotPress区域设置,如上的表所示this page. 例如en-gb 对于English (UK).

在您的JS/JSON翻译文件名中,区域设置如下${domain}-${locale}-${handle}.json 应为WP语言环境,如上表所示this page. 例如en_GB对于English (UK).

相关推荐