it-swarm.com.de

Wie kann ich Übersetzungen für ein WordPress TinyMCE-Plugin bereitstellen?

Ich weiß, dass ich meine Übersetzungen in JavaScript ausführen kann:

    $MyTranslations = array(
        'translation1' => __("Some String 1", "MyTranslations"),
        'translation2' => __("Some String 2", "MyTranslations")
    );
    wp_localize_script( 'jquery', 'my_translations', $MyTranslations );

Bei einigen WordPress TinyMCE-Plugins werden jedoch Aufrufe wie folgt verwendet:

{
title : ed.getLang('advlink.link_desc'),
...
}

Wie bekommt WordPress seine Übersetzungen in getLang()? Soll ich das so machen oder verwende ich einfach mein erstes Stück Code und greife direkt auf die Variablen zu:

{
title : my_translations.translation1,
...
}
6
Brady

Verwenden Sie den Filter 'mce_external_languages'. Von wp-includes/class-wp-editor.php:

Der folgende Filter lädt externe Sprachdateien für TinyMCE-Plugins. Es wird ein assoziatives Array 'plugin_name' => 'path' verwendet, wobei path der Include-Pfad zur Datei ist. Die Sprachdatei sollte dasselbe Format wie /tinymce/langs/wp-langs.php haben und eine Variable $ strings definieren, die alle übersetzten Zeichenfolgen enthält. Wenn dieser Filter nicht verwendet wird, versucht die Funktion, {mce_locale}.js zu laden. Wenn das nicht gefunden wird, wird en.js als nächstes ausprobiert.

$mce_external_languages = apply_filters('mce_external_languages', array());

Ich würde einfach eine Kopie von wp-includes/js/tinymce/langs/wp-langs.php verwenden… und diese überflüssige mce_escape() zugunsten der ursprünglichen esc_js() fallen lassen.

Beispieldatei:

<?php # -*- coding: utf-8 -*-

$strings = 'tinyMCE.addI18n(
    {' . _WP_Editors::$mce_locale . '.extrastrings:
        {
            helloworld: "' . esc_js( __( 'Hello World', 'my_plugin_text_domain' ) ) . '",
            foobar: "' . esc_js( __( 'Foo Bar', 'my_plugin_text_domain' ) ) . '"
        }
    }
)';

In deinem Plugin benutzt du einfach:

add_filter( 'mce_external_languages', 'wpse_44785_add_tinymce_lang', 10, 1 );

function wpse_44785_add_tinymce_lang( $arr )
{
    $arr[] = 'full_path_to_lang_file.php';
    return $arr;
}

Um auf die neuen Zeichenfolgen in JavaScript zuzugreifen, verwenden Sie zum Beispiel:

title : ed.getLang('extrastrings.helloworld')
7
fuxia

Ihre Beispieldatei hat mir einen Fehler beschert (undefiniert vor extrastrings ). Also habe ich den Code geändert:

<?php # -*- coding: utf-8 -*-

$strings = 'tinyMCE.addI18n( "' . _WP_Editors::$mce_locale . '.extrastrings", {
    title: "' . esc_js( __( 'Shortcodes', 'm7' ) ) . '",
    popup_title: "' . esc_js( __( 'Шорткоды', 'm7' ) ) . '"
} )';
1
Maikal