Przejdź do głównej zawartości

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ń:

changeLanguage

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ść co Culture. 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:

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 jak culture.

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;
}