web-dev-qa-db-ja.com

WordPress TinyMCEプラグインの翻訳方法は?

私は自分の翻訳をJavaScriptに変換できることを知っています。

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

しかし、WordPress TinyMCEプラグインのいくつかを見ると、彼らはこのような呼び出しを使用しています。

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

WordPressはどのようにして翻訳をgetLang()に変換しますか?私はこのようにすることになっているのでしょうか、それとも私は最初のコードを使って直接変数にアクセスするのでしょうか。

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

フィルタ'mce_external_languages'を使用してください。 wp-includes/class-wp-editor.phpから:

次のフィルタはTinyMCEプラグイン用の外部言語ファイルをロードします。連想配列 'plugin_name' => 'path'を取ります。ここで、pathはファイルへのインクルードパスです。言語ファイルは/tinymce/langs/wp-langs.phpと同じフォーマットに従い、翻訳されたすべての文字列を保持する変数$ stringsを定義する必要があります。このフィルタが使用されていない場合、関数は{mce_locale}.jsをロードしようとします。それが見つからない場合は、次にen.jsが試されます。

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

私はただwp-includes/js/tinymce/langs/wp-langs.php…のコピーを使用して、その余分なmce_escape()を元のesc_js()のために落とします。

サンプルファイル

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

あなたのプラグインでは、あなただけを使用します。

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

JavaScriptで新しい文字列にアクセスするには、例えば次のようにします。

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

あなたのサンプルファイルは私にエラーを起こしました( extrastrings の前に未定義)。だから私はコードを変更しました:

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

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