【问题标题】:TinyMCE 4 Plugins: Can't get tinymce.Editor.getLang() workingTinyMCE 4 插件:无法让 tinymce.Editor.getLang() 工作
【发布时间】:2014-05-19 12:48:09
【问题描述】:

我目前正在将插件从 TinyMCE 3.x 切换到新版本 TinyMCE 4.0.26。我在尝试国际化我的插件标签时遇到了严重的问题。

在我的 plugin.js 中,我通过调用

来加载语言包
tinymce.PluginManager.requireLangPack('myplugin');

我的 i18n 文件 langs/de.js 看起来像这样:

tinyMCE.addI18n('de', {
  myplugin: {
    button : 'Link einf\u00FCgen/bearbeiten',
    title : 'Link einf\u00FCgen/bearbeiten'
  }
});

当我访问静态上下文时

tinymce.i18n.data.myplugin

我可以看到 buttontitle 两个变量都可用。

问题:

当调用 editor.getLang('myplugin.button') 我得到 {#myplugin.button} 而不是适当的变量值。

我稍微研究了一下源代码,发现它期望语言代码存在于tinyMCE.i18n.data.....中,这是不可用的

getLang: function(name, defaultVal) {
            return (
                this.editorManager.i18n[(this.settings.language || 'en') + '.' + name] ||
                (defaultVal !== undefined ? defaultVal : '{#' + name + '}')
            );
        },

@见https://github.com/tinymce/tinymce/blob/4.0.26/js/tinymce/classes/Editor.js#L1105

我做错了什么吗?有没有人为新的 TinyMCE 版本创建插件并设法让国际化工作?

【问题讨论】:

  • 至少你可以看到可用的变量,在我的身上,对象数据是空的:(到目前为止有什么解决方案吗?我遇到了同样的问题。使用 Tiny 4.1.10。

标签: javascript jquery tinymce tinymce-4


【解决方案1】:

感谢所有试图帮助我解决此问题的人。不幸的是,我无法让我的插件在弹出窗口中使用已翻译的标签,但最终找到了解决方案。

在 TinyMCE 4.2.6 版中,以下所有内容都可以正常运行。

这里是使用名为 example 的插件使一切正常工作的步骤:

  • plugins/example 创建您的插件目录
  • 创建所需的插件 JS 文件 plugins/example/plugin.min.js(查看示例 http://pastebin.com/jEARrtWN) - 正如 @msqar 建议的那样,我添加了 requireLangPack em> 在我的插件函数之前调用。
  • 现在在 langs/de_AT.jsplugins/example/langs/de_AT.js 创建您的翻译文件(请用您的语言代码替换 de_AT)

tinymce.addI18n('de_AT', {
  'Title': 'Titel',
  'Example plugin': 'Beispielplugin'
});
  • 在像这样设置 TinyMCE 时,所有(在我的示例中)英文标签都会自动翻译为 de_AT:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title></title>
    <link rel="stylesheet" href="">
</head>
<body>
    <textarea name="test"></textarea>
    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
    <script src="tinymce/tinymce.min.js"></script>
    <script>
    jQuery(document).ready(function ($) {
        $('textarea').tinymce({
            theme: "modern",
            plugins: 'example',
            toolbar: 'example',
            language:'de_AT'
        });
    })
    </script>
</body>
</html>

结果

当使用工具栏内的按钮打开对话框时,窗口标题Example plugin会自动翻译成Beispielplugin

无需特殊调用 editor.getLang。

我希望本指南也适用于附近的其他开发人员。如果有任何正面或负面的反馈,我将不胜感激。

非常感谢@stackoverflow 的所有开发人员。

【讨论】:

    【解决方案2】:

    您可以使用以下方法直接访问正确的字符串:

    tinymce.EditorManager.i18n.data[ed.getParam('language') + '.myplugin_name']['my_key'];
    

    【讨论】:

    • @msqar:你有什么问题?
    【解决方案3】:

    我终于成功了,也许它可以帮助,虽然这是 1 岁,但可以帮助其他人。 由于创建插件的整个方式从 3.X 更改为 4.X,我添加到插件中的 requireLangPack 位置不正确。

    我在做:

    tinymce.PluginManager.add('myplugin', function(editor, url) {
         tinymce.PluginManager.requireLangPack('myplugin');
         ...
    });
    

    什么时候应该:

    tinymce.PluginManager.requireLangPack('myplugin');
    tinymce.PluginManager.add('myplugin', function(editor, url) {
    
             ...
    });
    

    另外,我访问这些变量的方式是:

    editor.getLang("myplugin").title;
    

    代替

    editor.getLang("myplugin.title");
    

    希望它适用于相同情况下的其他人。

    【讨论】:

    • 仍然不适合我,而且即使我的语言是 zh_TW 它加载 langs/en.js... The documentation 缺乏示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2015-04-22
    相关资源
    最近更新 更多