Редактор ресурсов — инструмент управления локализацией для Optimizely C.

Если вы какое-то время работали с Optimizely CMS, вы знаете, что управление локализацией с помощью XML-файлов может быть утомительным. Имена типов контента, заголовки свойств, названия вкладок, подсказки редактора — все это нуждается в переводе, а организовывать эти XML-файлы на нескольких языках — занятие неинтересное.

Я твердо верю, что переводы должны принадлежать партнеру и управляться системой контроля версий. Тем не менее, я полностью понимаю необходимость быстрого исправления локализации в среде DXP без необходимости развертывания кода. Редактор ресурсов был создан для обработки обоих сценариев: редактирование и сохранение файлов XML во время разработки, а также применение переопределений во время выполнения через DDS (динамическое хранилище данных), когда вам нужно быстрое исправление в рабочей среде.

Этот инструмент начинался как небольшая идея, но он значительно разросся по мере того, как я продолжал добавлять функции. Он построен на основе Blazor Server и MudBlazor, упакованных в виде библиотеки классов Razor, на которую вы можете ссылаться в своем проекте Optimizely.

TL;DR: Редактор ресурсов — это инструмент администрирования на базе Blazor для Optimizely CMS, который заменяет ручное редактирование XML для локализации. Он предоставляет визуальные редакторы названий типов контента, свойств, вкладок, каналов отображения, подсказок редактора и переводов интерфейса — и все это с поддержкой нескольких языков. Функции включают в себя панель мониторинга полноты, переопределение времени выполнения через DDS (развертывание не требуется), автоматический перевод на базе DeepL на уровне поля/элемента/массового уровня, импорт/экспорт CSV и управляемый переход из устаревших форматов XML.

Начиная

Редактор ресурсов распространяется как библиотека классов Razor. Добавьте ссылку на проект и зарегистрируйте службы в файле Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddServerSideBlazor();
    services.AddMudServices();

    // Optional: Add DeepL translation (must be registered before AddResourceEditor)
    services.AddDeepLTranslation(_configuration);

    // Register Resource Editor services
    services.AddResourceEditor(_configuration);
}

Конфигурация выполняется через appsettings.json:

{
  "ResourceEditor": {
    "TranslationFolder": "Resources/Translations",
    "EnableFileSaving": true,
    "EnableOverrides": true,
    "ShowOverridesUI": true,
    "EnableAutomatedTranslation": true,
    "DeepL": {
      "ApiKey": "your-api-key",
      "UseFreeApi": true
    }
  }
}

В зависимости от того, как вы хотите визуализировать инструмент, вам также понадобится страница CSHTML для размещения компонента Blazor. Инструмент работает как полностраничное приложение Blazor без стандартного макета Optimizely:

@using Nergard.ResourceEditor.Components
@using Microsoft.AspNetCore.Components.Web
@model PageViewModel

@{ Layout = null; }




    
    
    
    Resource Editor
    
    
    


    @Html.AntiForgeryToken()

    

    

Здесь же находится кнопка массового перевода — переводите все незаполненные поля на язык в один клик.

Примечание! Автоматические переводы предназначены только для неосновных языков. Поэтому, приложив усилия для создания хороших текстов локализации для основного языка, вы сможете получить выгоду и для других языков.

Переопределения

Именно эта функция позволяет редактору ресурсов хорошо работать в средах DXP. Переопределения хранятся в хранилище динамических данных и имеют приоритет над преобразованиями XML во время выполнения — развертывание не требуется.

Система переопределения работает через специальный «LocalizationProvider», который автоматически регистрируется в позиции 0 в цепочке поставщиков. Когда Optimizely разрешает ключ локализации, поставщик переопределения сначала проверяет DDS. Если переопределения не существует, оно передается стандартным поставщикам на основе XML.

**Известная проблема.** В настоящее время существует известная проблема, из-за которой Optimizely может неправильно распознавать переопределенные заголовки типов контента (имена), в то время как переопределения справочного текста работают должным образом. У меня есть постоянный запрос в службу поддержки Optimizely для расследования.

Встроенные переопределения

Когда ShowOverridesUI включен, каждое текстовое поле в редакторах получает небольшую кнопку переопределения. Нажмите на нее, и вы сможете создать переопределение для этого конкретного поля и языка. Изменение сохраняется в DDS и вступает в силу немедленно.

Переопределить менеджер

- Просмотр всех активных переопределений с указанием языка и значения.

- Фильтрация по языку и поиск по названию свойства.

- Добавлять, редактировать и удалять отдельные переопределения.

- **Экспорт в CSV** для документации или резервного копирования.

- **Импорт из CSV** для массовых операций.

- **Сохранить в XML**, чтобы перенести переопределение в постоянный файл перевода.

- Очистить все переопределения

Автоматические переводы с DeepL

Если вы включите автоматический перевод и зарегистрируете службу DeepL, Редактор ресурсов предоставит вам помощь в переводе на трех уровнях:

Read more:  5 стратегий для преподавателей, чтобы помочь построить понимание задач

1. **Уровень поля** — каждое текстовое поле имеет кнопку перевода, которая переводит с языка по умолчанию.

2. **Уровень элемента**. Кнопка «Перевести отсутствующее» в заголовке каждого редактора переводит все пустые поля для текущего элемента.

3. **Массовый уровень** – в обзоре языка переведите все незаполненные поля для всего языка.

Переводы заполняют поля, но не сохраняются автоматически — вы просматриваете и сохраняете их, когда будете довольны результатами.

Чтобы включить его, зарегистрируйтесь на бесплатном уровне DeepL, а затем зарегистрируйте сервис DeepL перед редактором ресурсов:

services.AddDeepLTranslation(_configuration);
services.AddResourceEditor(_configuration);

Служба перевода является подключаемой. Если вы хотите использовать поставщика, отличного от DeepL, реализуйте ITranslationService и зарегистрируйте его перед вызовом AddResourceEditor().

XML-миграция

Если у вас есть сайт с переводами в классический формат Alloy XML (отдельные файлы, такие как «ContentTypeNames.xml», «PropertyNames.xml», «GroupNames.xml»), редактор ресурсов обнаруживает это автоматически и предлагает управляемый переход на собственный формат. Миграция выполняется шаг за шагом с отслеживанием хода выполнения и отчетами об ошибках.

Варианты конфигурации

Вот краткий обзор всех вариантов конфигурации:

| Option | Default | Description |
|--------|---------|-------------|
| `TranslationFolder` | `Resources/Translations` | Path to translation XML files |
| `EnableFileSaving` | `true` | Allow saving to XML files. Set to `false` on DXP |
| `EnableOverrides` | `true` | Enable DDS-based runtime overrides |
| `ShowOverridesUI` | `true` | Show inline override buttons in editors |
| `EnableAutomatedTranslation` | `false` | Enable automated translation features |
| `ViewFilePattern` | `views_*.xml` | Glob pattern for view translation files |

Типичная конфигурация DXP будет выглядеть так:

{
  "ResourceEditor": {
    "EnableFileSaving": false,
    "EnableOverrides": true,
    "ShowOverridesUI": true
  }
}

Исходный код и лицензия

Этот инструмент развивался естественным образом, и хотя я тестировал его с использованием демонстрационного шаблона Alloy, я все же рекомендую использовать его с некоторой осторожностью, особенно при операциях сохранения. Создайте резервную копию XML-файлов перед внесением крупных изменений. Я рад получать отзывы, отчеты об ошибках и запросы на включение.

23 февраля 2026 г.

Читайте также

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.