# Управляемый текст

Функция управляемого текста позволяет управлять (с помощью замены) различными текстовыми элементами, используемыми в Naninovel, такими как UI в игре и именами персонажей, используя локализуемые документы.

Для создания управляемого текстового документа, используйте инструмент для управляемого текста, доступный через контекстное меню Naninovel -> Tools -> Managed Text.

Инструмент для управляемого текста

Используя кнопку "Select", выберите путь для хранения управляемых текстовых документов (по умолчанию это Resources/Naninovel/Text) и нажмите кнопку "Generate" для создания документов.

Вы также можете создать пользовательский управляемый текстовый документ с помощью контекстного меню ассета Create -> Naninovel -> Managed Text.

Каждая строка в управляемом текстовом документе представляет собой выражение в следующем формате: Path: Value, где Path – путь к текстовой переменной, а Value – значение этой переменной. Например, вот изначальное содержимое документа "DefaultUI", который содержит записи для встроенного UI:

Управляемый текстовый документ

Вы можете изменить значения, и эти изменения будут применены при следующем запуске.

Включение свойства Delete Unused приведет к удалению записей в управляемых текстовых документах, на которые нет прямых ссылок ни через компоненты ManagedTextProvider, ни через атрибуты ManagedText в исходном коде (подробнее об этом ниже).

# Провайдер управляемого текста

Возможна привязка произвольного игрового объекта Unity к управляемой текстовой записи без каких-либо скриптов с помощью компонента ManagedTextProvider; добавьте компонент к игровому объекту, укажите категорию (имя документа, который будет содержать запись), ключ (имя записи внутри документа), затем используйте событие OnValueChanged для привязки значения к свойству игрового объекта.

Ниже приведен пример привязки управляемой текстовой записи, хранящейся в документе "MyCustomDocument", с ключом "MyCustomText" к компоненту Unity "Text".

Если компонент ManagedTextProvider используется в пользовательском UI, текстовом принтере или обработчике выбора, соответствующие записи будут автоматически сгенерированы при использовании инструмента для управляемого текста (учитывая, что ресурсы назначены в меню конфигурации); в других случаях вам придется добавлять записи вручную.

# Переменные управляемого текста

Также возможно связать управляемые текстовые записи с переменными в исходном коде. Для этого необходимо добавить атрибут ManagedText для статичного строкового поля в скрипте на C#. Его значение будет перезаписано значением, указанным в управляемом текстовом документе при инициализации движка.

Ниже приведен пример использования управляемой текстовой переменной для локализации текстовой метки в скрипте C#.

using Naninovel;
using UnityEngine.UI;

// Наследуем наш класс от текстового компонента Unity, так что мы можем использовать его таким же образом.
public class CustomLabel : Text
{
    // Значение управляемой текстовой записи "CustomLabel.LabelText" будет присвоено 
    // приведенной ниже переменной при инициализации движка и обновлении при изменении локали.
    [ManagedText("MyCustomUI")] // "MyCustomUI" – имя управляемого текстового документа, в котором будет храниться запись.
    public static string LabelText = "Default Value"; // "Default Value" – исходное значение записи.

    protected override void Awake ()
    {
        base.Awake();

        text = LabelText; // Присвоить метке текущее значение управляемой текстовой записи.

        // Обновить метку, когда пользователь меняет локаль в процессе выполнения.
        Engine.GetService<ILocalizationManager>().OnLocaleChanged += _ => text = LabelText;
    }
}

# Текст сценариев

Можно получать управляемые текстовые значения непосредственно из сценариев Naninovel. Это может быть удобно, когда требуется использовать некоторый текст в выражениях скриптов, и текст должен быть локализуемым.

Создайте управляемый текстовый документ с именем "Script" и добавьте записи, используя ключи с префиксом T_ или t_. Теперь можно ссылаться на значения в выражениях скрипта; например, учитывая следующие записи в управляемом текстовом документе "Script":

T_Greeting1: Hey!
T_Greeting2: Hello!
T_Greeting3: Hi!

— вы можете сослаться на данные значения следующим образом:

@print {Random(T_Greeting1,T_Greeting2,T_Greeting3)}

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

# Локализация

Процесс локализации управляемого текста похож на процесс локализации сценариев Naninovel:

  1. Сгенерируйте (создайте, отредактируйте) необходимые управляемые текстовые документы в папке Resources/Naninovel/Text.
  2. Запустите программу локализации в папке локали (Resources/Naninovel/Localization/{Locale}, где {Locale} – тег целевой локали).
  3. Документы локализации для исходных управляемых текстовых документов появятся в соответствующей папке локали. Используйте их для добавления или редактирования перевода.

Чтобы обновить управляемые текстовые документы и их соответствующие аналоги в локалях, сначала запустите утилиту создания управляемого текста в папке Resources/Naninovel/Text, а затем утилиту локализации в папке Resources/Naninovel/Localization/{Locale}. Обе утилиты по умолчанию будут пытаться сохранить все существующие модификации (управляемые текстовые записи и их переводы), так что вам не придется переписывать все с нуля при каждом обновлении.

См. локализацию для дополнительной информации о том, как использовать утилиту локализации.

ПРИМЕР

Пример настройки локализации (включая управляемый текст) вы можете найти в демо-проекте. Вы можете использовать его в качестве референса в случае возникновения проблем с настройкой локализации в вашем собственном проекте.

Обновлено: 29 сентября 2020 г.