Локализация
Локализация
Пользователь может установить язык приложения. Начиная с API V7, плагины, логика которых зависит от языка терминала, имеют возможность отработать изменение языка.
Как это выглядит в iikoFront?
Изменение языка делается через экран настроек:

Через плагин сменить язык терминала нельзя.
Как узнать текущий язык
Текущий язык приложения можно узнать с помощью метода IOperationService.GetHostTerminalSettings():
var settings = PluginContext.Operations.GetHostTerminalSettings();
Метод возвращает объект, реализующий интерфейс IHostTerminalSettings.
Он содержит два свойства локализации:
CultureInfo Culture- язык, который выбран на терминале.CultureInfo UICulture- добавлено в API V7. Сейчас свойство содержит то же самое значение, что и свойствоCulture. Позже планируется поддержка различных культрур для данных и интерфейса пользователя.
Стартовые настройки плагина
Начиная с API V7, во время старта приложения плагин автоматически получает настройки локализации из терминала. До вызова кода плагина выставляются свойства:
CultureInfo.CurrentCultureCultureInfo.CurrentUICultureCultureInfo.DefaultThreadCurrentCultureCultureInfo.DefaultThreadCurrentUICulture
Они получают те же значения, что и на терминале.
На текущий момент, свойство CurrentUICulture будет иметь то же значение, что и CurrentCulture, а DefaultThreadCurrentUICulture - то же, что и DefaultThreadCurrentCulture.
Отслеживание изменения языка плагином
Пользователь может поменять язык приложения iikoFront в процессе его работы.
Это приведёт к тому, что свойства культуры, описанные выше, будут изменены.
Однако, автоматичесткое изменение значений этих свойств для кода плагина является рискованной операцией.
Например, в момент смены языка терминала плагин может выполнять операцию, результат которой зависит от культуры.
Поэтому, для случая изменения языка терминала в процессе его работы, было решено не выставлять эти свойства для плагинов автоматически.
В API V7 добавлено событие INotificationService.CurrentCultureChanged, позволяющее отследить смену языка терминала и выставить культуру плагина в удобный момент.
Это событие имеет 2 аргумента:
CultureInfo culture- новая культура.CultureInfo uiCulture- то же самое, что иculture.
Например, если код плагина допускает немедленное применение новых настроек, можно задать свойства сразу:
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;
}