Overslaan naar hoofdinhoud

Locatiebeheer 25.10

Openen in ChatGPT

webforJ biedt ingebouwde ondersteuning voor het beheren van de app-locatie. De locatie bepaalt welke taal en regionale opmaak in de app worden gebruikt. Componenten kunnen reageren op wijzigingen in de locatie via de LocaleObserver-interface, waardoor de gebruikersinterface onmiddellijk wordt bijgewerkt wanneer de gebruiker van taal wisselt.

De standaardlocatie instellen

De app-locatie kan worden geconfigureerd met de webforj.locale-eigenschap. Dit stelt de locatie in die de app vanaf de start gebruikt, wat invloed heeft op alle locatiegevoelige opmaak en tekst. Wanneer webforj.locale niet is geconfigureerd, valt de app terug op de standaardlocatie van de server-JVM. Je kunt de huidige locatie op elk moment lezen met App.getLocale().

Zie de Configuratie sectie om te leren hoe je eigenschappen voor verschillende omgevingen instelt.

De locatie wijzigen

Om de locatie tijdens runtime te wijzigen, roep je App.setLocale() aan. Dit werkt de locatie voor de hele app bij en meldt alle componenten die LocaleObserver implementeren, waardoor de gebruikersinterface kan worden bijgewerkt zonder een pagina opnieuw te laden.

App.setLocale(Locale.GERMAN);
App.setLocale(Locale.forLanguageTag("fr"));

Browser-locatie-detectie 25.12

Wanneer autodetectie is ingeschakeld, leest webforJ de voorkeurs talen van de browser bij de start en stelt de app-locatie in op de beste overeenkomst van de geconfigureerde ondersteunde locaties. Als er geen overeenkomst wordt gevonden, wordt de eerste ondersteunde locatie als standaard gebruikt.

Schakel autodetectie in door webforj.i18n.auto-detect op true in te stellen en webforj.i18n.supported-locales te configureren met de locaties die je app ondersteunt. Zie de Configuratie sectie om te leren hoe je eigenschappen voor verschillende omgevingen instelt.

Vereist ondersteunde locaties

Autodetectie vereist dat supported-locales is geconfigureerd. Als de lijst leeg is, heeft autodetectie geen effect en gebruikt de app de standaardlocatie van webforj.locale.

De LocaleObserver-interface

Componenten die hun inhoud moeten bijwerken wanneer de locatie verandert, moeten de LocaleObserver-interface implementeren. webforJ registreert automatisch waarnemers wanneer componenten worden gemaakt en verwijderd.

LocaleObserver.java
@FunctionalInterface
public interface LocaleObserver {
void onLocaleChange(LocaleEvent event);
}

Wanneer de locatie verandert, wordt onLocaleChange aangeroepen met de nieuwe locatie. Binnen deze methode moeten alle locatiegevoelige teksten of opmaak worden bijgewerkt:

MainLayout.java
@Route
public class MainLayout extends Composite<AppLayout>
implements HasTranslation, LocaleObserver {

private final AppLayout self = getBoundComponent();
private AppNavItem inboxItem;
private AppNavItem outboxItem;

public MainLayout() {
inboxItem = new AppNavItem(t("menu.inbox"), InboxView.class, TablerIcon.create("inbox"));
outboxItem = new AppNavItem(t("menu.outbox"), OutboxView.class, TablerIcon.create("send-2"));

AppNav appNav = new AppNav();
appNav.addItem(inboxItem);
appNav.addItem(outboxItem);

self.addToDrawer(appNav);
}

@Override
public void onLocaleChange(LocaleEvent event) {
inboxItem.setText(t("menu.inbox"));
outboxItem.setText(t("menu.outbox"));
}
}
Ingebouwde vertalingsondersteuning

Vanaf versie 25.12 biedt webforJ een ingebouwd vertalingssysteem dat ondersteuning biedt voor resourcebundels, aangepaste resolvers, automatische browser-locatie-detectie en locatiebewuste databinding.

LocaleEvent

De LocaleEvent die naar onLocaleChange() wordt gestuurd, biedt de nieuwe locatie en de component die het evenement heeft ontvangen:

MethodeRetourneertBeschrijving
getLocale()LocaleDe nieuwe locatie die is ingesteld
getSource()ObjectDe component die het evenement heeft ontvangen

Handmatige locatie-updates

Niet alles reageert automatisch op wijzigingen in de locatie. Sommige componenten, zoals Masked Fields, lezen App.getLocale() eenmaal tijdens de creatie om locatiegevoelige opmaak te configureren, maar implementeren geen LocaleObserver. Wanneer de locatie tijdens runtime verandert, moeten deze expliciet worden bijgewerkt binnen je onLocaleChange() handler:

public class OrderForm extends Composite<FlexLayout> implements LocaleObserver {
private MaskedDateField dateField = new MaskedDateField("Datum");
private MaskedTimeField timeField = new MaskedTimeField("Tijd");

@Override
public void onLocaleChange(LocaleEvent event) {
Locale newLocale = event.getLocale();
dateField.setLocale(newLocale);
timeField.setLocale(newLocale);
}
}
Gegevensbinding

BindingContext ondersteunt locatiebewuste validatie en transformatieberichten. Zie dynamische validatieberichten en locatiebewuste Jakarta-validatie.