Tinymce模式方法和I18N字符串方法

时间:2014-07-22 作者:orionrush

我正在开发一个加载tinyMCE模式的插件。许多知道这一点的人通常需要打开静态html甚至php文件。我遇到的问题是,我想使用WP I18n函数翻译模态中的许多字符串。

对于通常是静态的内容,有哪些选项?

下面是一个typical example 注册一个新的tinymce插件的javascript,创建一个触发模态的新按钮。

(function() {
tinymce.create(\'tinymce.plugins.ExamplePlugin\', {
    init : function(ed, url) {
        ed.addCommand(\'tinyExample\', function() {
            ed.windowManager.open({
                file : url + \'/example.htm\', // THIS IS A TYPICAL PATH
                width : 450 + parseInt(ed.getLang(\'example.delta_width\', 0)),
                height : 450 + parseInt(ed.getLang(\'example.delta_height\', 0)),
                inline : 1
            }, {
                plugin_url : url
            });
        });
        ed.addButton(\'example\', {title : \'Example\', cmd : \'tinyExample\', image: url + \'/example.gif\' });
    },
    getInfo : function() {
        return {
            longname : \'Example\',
            author : \'Paul Robinson\',
            authorurl : \'http://return-true.com\',
            infourl : \'http://return-true.com\',
            version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    }
});
tinymce.PluginManager.add(\'example\', tinymce.plugins.ExamplePlugin);
})();
在这种情况下,文件url是一个静态html文件。一种选择是使用php文件,并需要wp核心,如下所示:

// Load up Wordpress
define(\'WP_USE_THEMES\', false);
require(\'../../../../../../wp-blog-header.php\');
如果我们这样做,然后将所有字符串包装在I18n函数中,这会不会为用户在模式中本地化字符串,这是最佳做法?

1 个回复
SO网友:orionrush

虽然我看不出我最初提议的方式有任何重大缺陷,尤其是在translation and localization, 在研究这个问题时,我意识到我在问一个ajax问题。基本上,初始化wordpress的I18n组件最有效的方法是什么。除了像上面那样定制ajax挂钩之外,我还可以利用ajax plugin api 这有很多好处:

  1. Possibly faster 因为它可能加载较少的WP核心,然后直接引导WP安全wp_ajax 提供一个结构,帮助我避免something stupidajaxurl 在管理中,实现如下所示:

    首先,我们设置一个函数来输出已处理的文件:

    function dynaminc_modal() {
       ob_start();
       header(\'Content-Type: text/html; charset=utf-8\');
       include plugin_dir_url( __FILE__ ) . \'/path/to/dynamic_modal.php\';
       $string = ob_get_clean();
       exit($string);
    }
    
    并添加ajax操作*:

    add_action(\'wp_ajax_dynamic_modal\', \'dynamic_modal\');

    我们可以这样调用文件(从上面截断):

        ed.windowManager.open({
            file : url + ajaxurl + "?action=dynaminc_modal", // ajaxurl is a global var in WP admin
            width : ... ,
            height : ...,
            inline : 1
            }, ....
    
    wp_ajax 在这种情况下,将加载wp core的简化版本。

结束