ブロックの日本語化に関する補足事項

はじめに

現在、自作ブロックの日本語化を、「ブロックエディターハンドブック/開発ガイド/国際化」に準じて行っていますが、現在の、block.json でスクリプトをロードする方法には適していないので、ここに捕捉事項として記す事にします。

ハンドル名の指定

上記でのハンドル名の指定方法は、以下の様になっています。この方法では、wp_register_script で、ハンドル名 myguten-script を指定し、register_block_type の、editor_script で、myguten-script を再度指定しています。

<?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
    wp_register_script(
        'myguten-script',
        plugins_url( 'block.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element', 'wp-i18n', 'wp-block-editor' )
    );
 
    register_block_type( 'myguten/simple-block', array(
        'api_version' => 2,
        'editor_script' => 'myguten-script',
    ) );
}
add_action( 'init', 'myguten_simple_block_init' );

その後に、php で、wp_set_script_translations の第一引数に registrer_block_type で登録したハンドル名 myguten-script を指定する方式です。

<?php
function myguten_set_script_translations() {
    wp_set_script_translations( 'myguten-script', 'myguten' );
}
add_action( 'init', 'myguten_set_script_translations' );

上記のやり方を、現在の block.json で読み込む方式に置き換えると以下の様になります。

<?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
	register_block_type(
		__DIR__ . '/block/build',
	);
}
add_action( 'init', 'myguten_simple_block_init' );

block.json を置いたディレクトリを検索してそれを読み込むという形です。ここでは、ハンドル名は指定していません。block.json の方を見てみると、editorScript の項目がそれらしいのですが、スクリプトのハンドルという言葉はあるのですが、ファイルへのパスを指定するのが通常の様です。

register_block_type では、ハンドル名を渡さずに、WordPress の php の関数 generate_block_asset_handle で第1引数にブロック名、第2引数に editorScript を渡したらハンドル名を取得し国際化が上手くいきましたので、以下に示します。

function myguten_set_script_translations() {
  $script_handle = generate_block_asset_handle( 'myguten/simple-block', 'editorScript' );
  wp_set_script_translations( $script_handle, 'myguten' );
}
add_action( 'init', 'myguten_set_script_translations' );

block.json の日本語化

ついでにわかりにくい、block.json の日本語化について以下に記します。上記の、register_block_type に、配列で翻訳対象を列記します。keywords は複数あるので更なる配列にします。

<?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
	register_block_type(
		__DIR__ . '/block/build',
		array(
			'title' => _x( 'Simple Block', 'block title', 'myguten' ),
			'description' => _x( 'Example static block scaffolded with Create Block tool.', 'block description', 'myguten' ),
			'keywords' => array(
				_x( 'simple', 'block keyword', 'myguten' ),
				_x( 'static', 'block keyword', 'myguten' ),
				_x( 'tool', 'block keyword', 'myguten' ),
			),
		)
	);
}
add_action( 'init', 'myguten_simple_block_init' );