Lokalizacja
Użytkownik może ustawić język aplikacji. Począwszy od API V7, wtyczki, których logika zależy od języka terminala, mają możliwość obsługi zmiany języka.
Jak to wygląda w Syrve POS?
Język zmienia się na ekranie ustawień:

Przez wtyczkę zmiana języka terminala jest niemożliwa.
Jak poznać aktualny język
Aktualny język aplikacji można odczytać za pomocą IOperationService.GetHostTerminalSettings():
var settings = PluginContext.Operations.GetHostTerminalSettings();
Metoda zwraca obiekt implementujący interfejs IHostTerminalSettings. Zawiera on dwie właściwości lokalizacyjne:
CultureInfo Culture- język wybrany na terminalu.CultureInfo UICulture- dodane w API V7. Właściwość ta zawiera obecnie tę samą wartość coCulture. W przyszłości planowane jest wsparcie różnych kultur dla danych i interfejsu użytkownika.
Ustawienia uruchamiania wtyczki
Począwszy od API V7, wtyczka automatycznie pobiera ustawienia lokalizacji z terminala podczas uruchamiania aplikacji. Przed wywołaniem kodu wtyczki ustawiane są właściwości:
CultureInfo.CurrentCultureCultureInfo.CurrentUICultureCultureInfo.DefaultThreadCurrentCultureCultureInfo.DefaultThreadCurrentUICulture
Otrzymują one te same wartości co terminal. Obecnie właściwość CurrentUICulture ma tę samą wartość co CurrentCulture, a DefaultThreadCurrentUICulture ma tę samą wartość co DefaultThreadCurrentCulture.
Śledzenie zmian języka przez wtyczkę
Użytkownik może zmienić język Syrve POS podczas jego działania. Spowoduje to zmianę opisanych powyżej właściwości kultury. Jednak automatyczna zmiana wartości tych właściwości w kodzie wtyczki jest operacją ryzykowną. Na przykład, gdy zmienia się język terminala, wtyczka może wykonywać operację, której wynik zależy od kultury. Dlatego w sytuacji zmiany języka terminala podczas jego działania zdecydowano się nie ustawiać tych właściwości automatycznie dla wtyczek. W API V7 dodano zdarzenie INotificationService.CurrentCultureChanged, które pozwala śledzić zmianę języka terminala i ustawić kulturę wtyczki w dogodnym momencie. To zdarzenie ma 2 argumenty:
CultureInfo culture- nowa kultura.CultureInfo uiCulture- taka sama jakculture.
Na przykład, jeśli kod wtyczki pozwala na natychmiastowe zastosowanie nowych ustawień, właściwości można ustawić od razu:
PluginContext.Notifications.CurrentCultureChanged.Subscribe(x =>
{
CultureInfo.CurrentCulture = x.culture;
CultureInfo.CurrentUICulture = x.uiCulture; //Obecnie takie samo jak x.culture
CultureInfo.DefaultThreadCurrentCulture = x.culture;
CultureInfo.DefaultThreadCurrentUICulture = x.uiCulture; //Obecnie takie samo jak x.culture
});
Powrót do stanu początkowego
Jeśli wtyczka nie powinna zmieniać kultury podczas uruchamiania terminala, w jej konstruktorze można napisać kod, który przywróci kulturę do pierwotnego stanu:
public MyPlugin()
{
//Ustawia kulturę na podstawie ustawień systemu operacyjnego
CultureInfo.CurrentCulture = CultureInfo.InstalledUICulture;
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InstalledUICulture;
CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InstalledUICulture;
}