Плагины TinyMCE 4: не удается заставить работать tinymce.Editor.getLang()

В настоящее время я переключаю плагин с 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

Я вижу, что обе переменные button и title доступны.

ЭТА ПРОБЛЕМА:

При вызове 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 и сумел заставить работать интернационализацию?


person Remluben    schedule 19.05.2014    source источник
comment
по крайней мере, вы можете видеть доступные переменные, на моем объектные данные пусты :( какое-либо решение по этому вопросу на данный момент? У меня та же проблема. Использование Tiny 4.1.10.   -  person msqar    schedule 11.06.2015


Ответы (3)


Спасибо всем, кто пытался помочь мне в этом. К сожалению, я не смог заставить свой плагин работать с переведенными метками во всплывающем окне, но наконец нашел решение.

Все, что ниже, прекрасно работает в TinyMCE версии 4.2.6.

Вот шаги, чтобы заставить все работать с плагином с именем example:

  • Создайте каталог плагинов по адресу plugins/example.
  • Создайте необходимый JS-файл плагина plugins/example/plugin.min.js (взгляните на пример http://pastebin.com/jEARrtWN ) — по рекомендации @msqar я добавил вызов requireLangPack прямо перед функцией моего плагина.
  • Теперь создайте файлы перевода (пожалуйста, замените de_AT кодом вашего языка) в langs/de_AT.js и plugins/example/langs/de_AT.js.

tinymce.addI18n('de_AT', {
  'Title': 'Titel',
  'Example plugin': 'Beispielplugin'
});

  • Все (в моем примере) английские метки автоматически переводятся в de_AT при настройке TinyMCE следующим образом:

<!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.

person Remluben    schedule 27.10.2015

Вы можете использовать следующее для прямого доступа к нужным строкам:

tinymce.EditorManager.i18n.data[ed.getParam('language') + '.myplugin_name']['my_key'];
person Thariama    schedule 24.03.2015
comment
@msqar: в чем твоя проблема? - person Thariama; 12.06.2015

Я наконец заставил это работать, может быть, это может помочь, хотя этому 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");

Надеюсь, это сработает для других людей в тех же обстоятельствах.

person msqar    schedule 11.06.2015
comment
У меня все еще не работает, более того, хотя мой язык zh_TW, он загружает langs/en.js... В документации отсутствуют примеры - person Jérôme MEVEL; 10.11.2016