Локализовать интерфейс плагина
Локализовать интерфейс плагина без конфликтов с другими расширениями.
Добавим русский и английский текст кнопке и окну. Плагин регистрирует собственные
словари через editorAPI.registerTranslations() и читает строки глобальной функцией
gT(). Язык выбирает пользователь редактора.
До начала выберите уникальный namespace плагина. Скачать полный пример translations.js. После установки нажмите кнопку с иконкой языков на панели инструментов.
Выбрать пространство имён
Используем namespace my-plugin и простые ключи title и message.
При регистрации они превратятся в my-plugin.title и my-plugin.message.
Этот префикс отделяет строки плагина от редактора и других расширений.
Важная деталь: ключ, который уже содержит точку, принимается как полный.
Например, window.title останется window.title, а не станет
my-plugin.window.title. Чтобы сделать несколько групп, укажите полный ключ
my-plugin.window.title сами или используйте простые ключи вроде windowTitle.
Namespace словаря удобно делать таким же, как @namespace файла, но передаётся он
отдельным аргументом. Это не игровой тег модели и не идентификатор экспорта.
Зарегистрировать словари
const namespace = 'my-plugin';const result = window.editorAPI.registerTranslations(namespace, { 'ru-RU': { title: 'Моё окно', message: 'Плагин готов к работе.', }, 'en-US': { title: 'My window', message: 'The plugin is ready.', },});
console.log(result); // {ok: true, added: 4, conflicts: 0} для этих четырёх записей.Внешние ключи - языки; внутренние словари плоские и содержат строки. Не передавайте
вложенный объект window: {title: ...}. Для примера достаточно ru-RU и en-US;
редактор нормализует также поддерживаемые псевдонимы ru и en.
Регистрируйте переводы до создания интерфейса. Существующие строки ядра и строки
другого владельца защищены от перезаписи. Конфликтующие ключи пропускаются и увеличивают
conflicts. Повторная регистрация своих ключей тем же namespace обновляет значения.
added считает добавленные записи словарей по языкам, не только уникальные имена ключей.
ok: true означает, что вызов прошёл общую проверку, но не гарантирует принятие каждой
записи. Некорректные языки, словари или значения могут быть пропущены с предупреждением
в консоли. Следите за added, conflicts и содержимым своих словарей.
Подробности результата и нормализации: контракт registerTranslations.
Использовать gT
gT принимает полный ключ, резервную строку и необязательные параметры перевода:
const t = (key, fallback) => window.gT(`my-plugin.${key}`, fallback);
const button = window.editorAPI.addButtonTool('icon-languages', () => { const panel = window.editorAPI.createWindow( t('title', 'My window'), 'my-plugin.window', 'icon-languages', 520, 300, 320, 220 ); const message = document.createElement('p'); message.textContent = t('message', 'The plugin is ready.'); panel.container.append(message);});button.title = t('title', 'My window');button.setAttribute('aria-label', button.title);Если строка отсутствует в текущем языке, редактор сначала использует английский
словарь en-US. Если подходящего перевода нет, gT возвращает переданный fallback;
без него результатом будет сам ключ. Fallback не является автоматическим переводом.
Для текста внутри собственного DOM используйте textContent, как в примере.
Полный скачиваемый файл также не создаёт второе окно при повторном нажатии: он
фокусирует существующее. Для теста fallback в нём намеренно вызывается отсутствующий
ключ bde.docs.translations.missing с понятной английской резервной строкой.
Работа с кнопками и окнами: справочник интерфейса.
Проверить язык и отсутствующий перевод
- Установите пример и откройте его окно в русской локали. Заголовок и основное сообщение должны быть русскими, последняя строка показывает намеренный fallback.
- Переключите язык редактора на английский. Текущая реализация смены языка перезагружает редактор; после загрузки установленный плагин регистрирует словари заново.
- Откройте окно повторно и проверьте английские строки и подпись кнопки.
- Для проверки языкового fallback в собственной копии уберите только русское
значение
message, сохранив английское. В русской локали должна использоваться английская строка. Затем удалите этот ключ из обоих словарей и проверьте fallback аргументаgT. - Проверьте, что
conflictsравен нулю. При ненулевом значении исправьте полные ключи или выберите свой namespace, вместо попытки перезаписать чужой словарь.
Созданные DOM-узлы не связаны с ключами автоматически: gT() возвращает строку
в момент вызова. При изменении словарей уже вставленный textContent сам не обновится;
если нужен такой сценарий, плагин должен прочитать строку и назначить её повторно.
Публичного удаления зарегистрированного словаря сейчас нет. Полный пример убирает
свою кнопку и окно при повторном выполнении через собственную dispose(), но это
локальная договорённость примера, а не автоматический lifecycle редактора. Удаление
плагина и перезагрузка завершают его использование вместе с текущими словарями.
Формат словарей, порядок fallback и смена языка сверены с publicFunctions.js,
Locale.js и localeConfig.js. Переводы остальных языков автор плагина добавляет сам.