web-dev-qa-db-fra.com

Comment fournir des traductions pour un plugin WordPress TinyMCE?

Je sais que je peux obtenir mes traductions en JavaScript en faisant:

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

Mais en regardant certains plugins WordPress TinyMCE, ils utilisent des appels comme celui-ci:

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

Comment WordPress intègre-t-il ses traductions dans getLang()? Suis-je censé le faire de cette façon ou dois-je simplement utiliser mon premier bit de code et accéder directement aux variables comme:

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

Utilisez le filtre 'mce_external_languages'. De wp-includes/class-wp-editor.php:

Le filtre suivant charge les fichiers de langue externes pour les plugins TinyMCE. Il faut un tableau associatif 'plugin_name' => 'chemin', où chemin est le chemin d’inclusion du fichier. Le fichier de langue doit suivre le même format que /tinymce/langs/wp-langs.php et définir une variable $ chaines contenant toutes les chaines traduites. Lorsque ce filtre n'est pas utilisé, la fonction essaiera de charger {mce_locale}.js. Si cela n'est pas trouvé, en.js sera essayé ensuite.

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

Je voudrais juste utiliser une copie de wp-includes/js/tinymce/langs/wp-langs.php… et laisser tomber cette mce_escape() superflue en faveur de la esc_js() originale.

Exemple de fichier:

<?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' ) ) . '"
        }
    }
)';

Dans votre plugin, vous utilisez simplement:

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;
}

Pour accéder aux nouvelles chaînes en JavaScript, utilisez par exemple:

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

Votre fichier exemple m’a gaved une erreur (undefined. Before extrastrings ). J'ai donc changé de code:

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

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