Hi Florian,
my Interceptor to get language from URL https://myURL/myApp/<de/en>/myAction.xxx package whatever.your.project; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ActionContext; import org.apache.struts2.ActionInvocation; import org.apache.struts2.interceptor.Interceptor; import org.apache.struts2.ServletActionContext; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import java.util.Locale; /** * Extract language (de or en) from request und set struts constant WW_TRANS_I18N_LOCALE. * @param ActionInvocation invocation * @return String invocation.invoke() */ public class LocaleInterceptor implements Interceptor { private Log log = LogFactory.getLog ( getClass () ); @Override public void init() {} @Override public void destroy() {} @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); //extract language from URL /en/... or /de/... and set Locale. Default englisch String uri = request.getRequestURI(); Locale myLocale = uri.contains("/de/") ? Locale.GERMANY : Locale.US; session.setAttribute("WW_TRANS_I18N_LOCALE", myLocale); // additionally for problems with a night batch job ActionContext.getContext().withLocale(myLocale); log.debug("Executing my LanguageGetterSetter: myLocale= " + myLocale.toString()); return invocation.invoke(); } } struts.xml: <constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> <package name="myApp" extends="struts-default"> ... <interceptors> <interceptor name="LocaleInterceptor" class="whatever.your.project.LocaleInterceptor" /> <interceptor-stack name="myStack"> <interceptor-ref name="LocaleInterceptor" /> <interceptor-ref name="defaultStack"> ... <action name="{lang}/MyAction" class="whatever.your.project.MyAction" method="execute"> ... MyAction.java: @Namespace("/{lang}") public final class MyAction extends ... That was enough to get the language specific resource properties. It was my first struts2/7 application, migrating from struts1, so there might be better solutions. It worked only with the namespace. In some jsp, I needed explicitly the language: <s:set var="sprache" value="#attr['locale'].language.toUpperCase()"/> //sprache=German for language And to add more complexity, I needed some language specific fields stored in database (e.g. descriptionDE or descriptionEN) instead of resource properties. <s:myproperty value="something.description" ... public class MypropertyTag extends PropertyTag { public void setValue(String value) { String sprache = ActionContext.getContext().getLocale().getLanguage().toUpperCase(); super.setValue(value + sprache); } } I copied struts-tags.tld into my project and added the tag myproperty (mostly as a copy of the tag property). Kind regards Ute (inconsistency may be caused by hiding my application names) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

