iikoFront API SDK

Локализация

Локализация

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

Как это выглядит в iikoFront?

Изменение языка делается через экран настроек:

changeLanguage

Через плагин сменить язык терминала нельзя.

Как узнать текущий язык

Текущий язык приложения можно узнать с помощью метода IOperationService.GetHostTerminalSettings():

var settings = PluginContext.Operations.GetHostTerminalSettings();

Метод возвращает объект, реализующий интерфейс IHostTerminalSettings. Он содержит два свойства локализации:

Стартовые настройки плагина

Начиная с API V7, во время старта приложения плагин автоматически получает настройки локализации из терминала. До вызова кода плагина выставляются свойства:

Они получают те же значения, что и на терминале. На текущий момент, свойство CurrentUICulture будет иметь то же значение, что и CurrentCulture, а DefaultThreadCurrentUICulture - то же, что и DefaultThreadCurrentCulture.

Отслеживание изменения языка плагином

Пользователь может поменять язык приложения iikoFront в процессе его работы. Это приведёт к тому, что свойства культуры, описанные выше, будут изменены. Однако, автоматичесткое изменение значений этих свойств для кода плагина является рискованной операцией. Например, в момент смены языка терминала плагин может выполнять операцию, результат которой зависит от культуры. Поэтому, для случая изменения языка терминала в процессе его работы, было решено не выставлять эти свойства для плагинов автоматически. В API V7 добавлено событие INotificationService.CurrentCultureChanged, позволяющее отследить смену языка терминала и выставить культуру плагина в удобный момент. Это событие имеет 2 аргумента:

Например, если код плагина допускает немедленное применение новых настроек, можно задать свойства сразу:

PluginContext.Notifications.CurrentCultureChanged.Subscribe(x =>
{
    CultureInfo.CurrentCulture = x.culture;
    CultureInfo.CurrentUICulture = x.uiCulture; //Пока то же самое, что и x.culture
    CultureInfo.DefaultThreadCurrentCulture = x.culture;
    CultureInfo.DefaultThreadCurrentUICulture = x.uiCulture; //Пока то же самое, что и x.culture
});

Возвращение старого поведения

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

public MyPlugin()
{
    //Задаём культуру из настроек операционной системы
    CultureInfo.CurrentCulture = CultureInfo.InstalledUICulture;
    CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InstalledUICulture;
    CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture;
    CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InstalledUICulture;
}