🤔
【WordPress】多言語でラベルの文字列をJSで取り扱う
多言語サイトを作っていて、ハンバーガーメニューのaria-label
をつけたときに、「あれ、そういえば閉じるときは文字列が「メニューを閉じる」になるけど、これって翻訳できるのか?」とふと思って調べました。
さすがはWordPress。wp_localize_script
という関数を使えば可能です。
functions.php
function hamworks_scripts(): void {
...
$asset_file = include __DIR__ . '/build/scripts/theme.asset.php';
wp_enqueue_script(
'hamworks-theme-script',
get_parent_theme_file_uri( 'build/scripts/theme.js' ),
$asset_file['dependencies'],
$asset_file['version'],
true
);
wp_localize_script(
'hamworks-theme-script',
'hamworksLocalizeTexts',
array(
'menuOpen' => __( 'Menu Open', 'hamworks' ),
'menuClose' => __( 'Menu Close', 'hamworks' ),
)
);
}
add_action( 'wp_enqueue_scripts', 'hamworks_scripts' );
これで準備はOK。あとはハンドルで指定してあるhamworks-theme-script
、つまりtheme.js
内で以下のように書けばテキストが入ります。
theme.js
hamburgerButton.setAttribute(
'aria-label',
expanded
? hamworksLocalizeTexts.menuOpen
: hamworksLocalizeTexts.menuClose
);
別のJSファイルで使いたいときは、別途wp_localize_script
を書いて、handle
の部分(先述のコードで言うところのhamworks-theme-script
)を変更します。
また、JSファイル内ではhamworksLocalizeTexts
を定義していないため、ESLintの環境によってはno-undef
のエラーが出ますので、該当箇所のみ無効化するなりする必要があります。
theme.js
hamburgerButton.setAttribute(
'aria-label',
expanded
? hamworksLocalizeTexts.menuOpen // eslint-disable-line no-undef
: hamworksLocalizeTexts.menuClose // eslint-disable-line no-undef
);
Discussion