Sprache des aktuellen Tabs auslesen
Author: lquitsch
Publication Date: 1/20/2020 11:05
Hi,
ich hatte das Problem, dass ich zur Vorfilterung in einem DAP die Sprache des aktuellen Tabs brauchte. Nach ein wenig suchen habe ich die Lösung gefunden und möchte sie euch nicht vorenthalten.
Zur Lösung benötigt man eine eigenes registriertes Permanent Plugin.
Der folgenden Code sorgt dafür, dass man über context.requireSpecialist(ServicesBroker.TYPE).getService(LanguageService.class).getCurrentLang() auf die Sprache des aktuellen Tabs zugreifen kann.
LanguagePermanentPlugin.java
public class LanguagePermanentPlugin implements JavaClientPermanentPlugin {
@Override
public void setUp(BaseContext context) {ClientServiceRegistryAgent clientServiceRegistryAgent = context.requestSpecialist(ClientServiceRegistryAgent.TYPE);
LanguageService languageService = new LanguageServiceImpl();
clientServiceRegistryAgent.registerClientService(LanguageService.class, languageService);
ModelService modelService = context.requireSpecialist(ServicesBroker.TYPE).getService(ModelService.class);
modelService.addModelListener(EditorialLanguageModel.EDITORIAL_LANGUAGE, new LanguageModelModelListener(languageService));
}@Override
public void tearDown() {}
}
LanguageModelModelListener.java
public class LanguageModelModelListener implements ModelListener<EditorialLanguageModel> {
private final LanguageService languageService;
public LanguageModelModelListener(LanguageService languageService) {this.languageService = languageService;
}@Override
public void modelChanged(EditorialLanguageModel editorialLanguageModel) {languageService.setCurrentLang(editorialLanguageModel.getLanguage());
}
}
LanguageService.java
public interface LanguageService {
void setCurrentLang(Language language);
Language getCurrentLang();
}
LanguageServiceImpl.java
public class LanguageServiceImpl implements LanguageService {
private Language language = null;
@Override
public void setCurrentLang(Language language) {this.language = language;
}@Override
public Language getCurrentLang() {return language;
}
Dann nur noch in der module.xml als PermanentPlugin registrieren.
<components>
<public>
<name>LanguagePermanentPlugin</name>
<displayname>LanguagePermanentPlugin</displayname>
<class>PATH TO LanguagePermanentPlugin</class>
<hidden>false</hidden>
</public>
</components>
Ich hoffe ich konnte jemandem damit helfen.
-
Author: Hendrik - 1/20/2020 13:04
Hi Lars,
da sollte nicht unerwähnt bleiben das de.espirit.firstspirit.client.gui.model.ModelService weder Teil der Access- noch Developer-API ist :smileywink:
Gruß, Hendrik
0 -
Author: mbergmann - 1/20/2020 19:37
Hallo Hendrik,
doch, der ist Teil der DEV-API: ModelService (FirstSpirit Developer-API)
Viele Grüße
Michael
0 -
Author: Hendrik - 1/21/2020 7:39
Hallo mbergmann,
stimmt - trotz doppelter Prüfung hatte ich die Klasse nicht gefunden :smileyconfused:
Danke für die Korrektur :smileyhappy:
Gruß, Hendrik
0 -
Hallo,
ich hoffe jemand sieht noch mein Kommentar hier :)
Ich habe die Lösung von oben implementiert, welches im SiteArchitect sehr gut funktioniert hat.
Leider kriege ich es grade nicht im ContentCreator zum laufen. Gibt es dazu auch eine Lösung?
VG Valeh.
0 -
Hi,
wenn es drum geht die Sprache der aktuellen Vorschau-Seite auzulesen könntest du mit WebeditUiAgent.
getPreviewLanguage()arbeiten.Sollte es den geöffneten Tab ensprechen, würde ich mein Glück mit den Sprach-Property in den Regeln ausprobieren.
Gruß,
Christopher
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
5 commentaires