如何为WordPress TinyMCE插件提供翻译?

时间:2012-03-07 作者:Scott

我知道我可以通过以下方式将我的翻译转换为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,
...
}

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

使用过滤器\'mce_external_languages\'. 从…起wp-includes/class-wp-editor.php:

下面的过滤器为TinyMCE插件加载外部语言文件。它采用关联数组“plugin\\u 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\')

SO网友:Maikal

您的示例文件给了我一个错误(未定义。之前extrastrings).所以我更改了代码:

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

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

结束

相关推荐

某些POST类型上的TinyMCE按钮

我正在创建一个插件,允许用户动态创建自定义帖子类型。在新的帖子类型中,我想在TinyMCE中显示一个customButton。每个帖子类型都有一个唯一的描述,因此我想根据帖子类型描述添加按钮。类似于: if ($post_type->description == \'Custom Description\') { // Add TinyMCE Button Here } 为了获取帖子类型描述,我找到了另一篇帖子,建议:get_post_type_ob