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