WordPress

edytor bloków – Używanie wp_set_script_translations bez ręcznej rejestracji skryptu

  • 4 lipca, 2022
  • 3 min read
edytor bloków – Używanie wp_set_script_translations bez ręcznej rejestracji skryptu


Podczas używania @wordpress/create-block aby stworzyć wtyczkę dla bloku, wygenerowany pakiet jest automatycznie rejestrowany za pośrednictwem block.json metadane:

{
  ...
  "name": "my-block",
  "textdomain": "my-block",
  "editorScript": "file:./index.js",
  ...
}

Nie ma potrzeby dzwonić wp_register_script ja. Jest to świetne rozwiązanie, ponieważ automatycznie obsługuje zależności za pośrednictwem pliku index.asset.php plik wygenerowany w folderze kompilacji.

Postępując zgodnie z procedurą opisaną w dokumencie, następnie tworzę plik tłumaczenia JET. Oto procedura:

  1. Tworzenie pliku POT za pomocą wp i18n make-pot . languages/my-block.pot
  2. Tworzenie pliku PO za pomocą cp languages/test.pot languages/my-block-FR_BE.po
  3. Wypełnianie ciągów msgstr my-block-FR_BE.po
  4. Dodawanie linii "Language: fr_BE\n" Do my-block-FR_BE.po
  5. Tworzenie pliku JSON za pomocą wp i18n make-json languages/my-block-FR_BE.po --no-purge

Do wygenerowanego JSON dołączony jest skrót md5: mój-blok-fr_BE-cae574befd871d4f740fd8b719bac1db.json.

Teraz muszę zadzwonić wp_set_script_translations w mojej metodzie inicjującej:

function my_block_init() {
   register_block_type( __DIR__ . '/build' );
   wp_set_script_translations( 'my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/' );
}

To nie działa.

Aby to zadziałało, muszę zarejestrować skrypt i umieścić go w kolejce, tracąc możliwość automatycznego wstrzykiwania zależności:

function my_block_init() {
    wp_register_script(
        'my-block-script',
        plugins_url('/build/index.js', __FILE__),
        array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-react-refresh-runtime')
    );
    wp_enqueue_script('my-block-script');
    register_block_type( __DIR__ . '/build' );

    wp_set_script_translations('my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/');
}

Muszę także zmienić nazwę mojego pliku JSON, aby zawierał uchwyt skryptu zamiast automatycznie wygenerowanego skrótu md5. Sekcja „Wczytaj plik tłumaczenia” w dokumencie sprawia wrażenie, że nie powinno to być konieczne w przypadku zachowywania wygenerowanej nazwy, chociaż nie jestem pewien, co mam tutaj zrobić:

WordPress sprawdzi, czy w tej ścieżce znajduje się plik w formacie ${domain}-${locale}-${handle}.json jako źródło tłumaczeń. Alternatywnie zamiast zarejestrowanego uchwytu możesz użyć skrótu md5 ścieżki względnej pliku, ${domain}-${locale} w postaci ${domain}-${locale}-${md5}.json .

Czy istnieje sposób zarejestrowania tłumaczeń JET dla skryptu, który jest automatycznie rejestrowany za pomocą metadanych bloku? I jak mogę użyć wygenerowanej nazwy pliku JSON podczas rejestracji mojego tłumaczenia?

Warto przeczytać!  Jak dodać niestandardowe pola do obrazów dla tekstu źródła obrazu i adresu URL

Edytować

Oto struktura folderów:

app/plugins/my-block/
├── build
│   ├── block.json
│   └── index.asset.php
│   └── index.css
│   └── index.js
│   └── style-index.css
├── languages
│   ├── my-block.pot
│   └── my-block-fr_BE.po
│   └── my-block-fr_BE-my-block-script.json
├── src
│   ├── block.json
│   └── index.js
│   └── ...
└── my-block.php

A oto treść my-block.php plik (katalog wtyczki):

<?php
/**
 * Plugin Name:       My Block
 * Requires at least: 5.9
 * Requires PHP:      7.0
 * Version:           0.1.0
 * Author:            The WordPress Contributors
 * License:           GPL-2.0-or-later
 * License URI:       
 * Text Domain:       my-block
 */

function my_block_init() {
    register_block_type( __DIR__ . '/build' );

    wp_set_script_translations( 'my-block-script', 'my-block', plugin_dir_path( __FILE__ ) . 'languages/' );
}
add_action( 'init', 'my_block_init' );


Źródło