Ankerlink an den Anfang der Seite
z01 4201
Generic filters
Filter by Kategorien

WordPress kopiert Sprachdateien nur dann automatisch nach wp-content/languages/plugins, wenn die Übersetzungen aus wordpress.org stammen (also über die normale Update-Mechanik kommen). Bei einem Plugin, das du manuell installierst oder aus einer anderen Quelle lädst, bleiben die Sprachdateien im Pluginverzeichnis (wp-content/plugins/plugin-name/languages).

So lange es sich um .po-Files handelt (Übersetzungen von PHP-Strings) ist das kein Problem, .po/.mo‑Dateien funktionieren im Pluginverzeichnis meist ohne Zusatzaufwand, weil load_plugin_textdomain() sie beim Aktivieren bzw. beim ersten plugins_loaded automatisch findet und lädt.

Da ich mehrfach verwendete Plugins zwar übers Dashboard aktualisieren, die jedoch nicht in WordPress Repository hochladen möchte, werden Einstellungen für Blöcke im Block-Editor nicht automatisch übersetzt, da die zuständige Übersetzungsdatei im Plugin bleibt.

Bei Block-Skripten werden die Übersetzungen clientseitig aus JSON nachgeladen, und WordPress muss wissen, welches Skript zu welcher JSON gehört. Deshalb braucht es das wp_set_script_translations().

Damit Übersetzungen generell direkt aus dem languages-Ordner des Plugins geladen geladen werden, braucht es:

  • passende *.json/*.mo im Pluginordner
  • load_plugin_textdomain()
  • für Blockskripte zusätzlich wp_set_script_translations()
  • md5hashtag vom relativen pfad zur index.js des blocks (editor-script)
/**
 * Set script translations for block editor scripts
 */
public function set_block_script_translations()
{
    if (!function_exists('wp_set_script_translations')) {
        return;
    }

    $registry = \WP_Block_Type_Registry::get_instance();
    $block_type = $registry->get_registered('namespace/block-name');

    if (!$block_type) {
        return;
    }

    $languages_path = plugin_dir_path(__FILE__) . 'languages';

    if (!empty($block_type->editor_script_handles)) {
        foreach ($block_type->editor_script_handles as $handle) {
            wp_set_script_translations($handle, 'plugin-name', $languages_path);
        }
        return;
    }

    $block_name_slug = str_replace('/', '-', 'namespace/block-name');
    wp_set_script_translations(
        $block_name_slug . '-editor-script',
        'plugin-name',
        $languages_path
    );
}

add_action('init', 'set_block_script_translations', 20);

Die Json-datei bekommen einen namen wie plugin-name-de_DE-{hash}.json. Der Hash wird in diesem Fall aus dem relativen Pfad zur index.js gebildet (z.b. blocks/block-name/index.js, oder wie die Editor-Skript-Datei heißt). Das kann über ein Skript erfolgen, oder zum Beispiel über einen md5hashgenerator.

Unser Beispielhash sähe dann so aus

Bei mehreren Blöcken braucht es entsprechend auch mehrere jsons, da sich die hashes unterscheiden (müssen).

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.