Description
At the moment it seems not to be possible to change the engine locale and redirect to the current page so the locale settings take effect immediatly. As you can see I tried doing the redirect manually (via .forward()), but that didn't change a thing.
WORK AROUND -------------------------
Work-around (this seems to work in Beta 2):
@InjectObject("infrastructure:cookieSource")
public abstract CookieSource getCookieSource();
then in the listener do:
// note that Locale.toString() returns the programmatic code of the locale (for example "de_DE" or "en_US")
getCookieSource().writeCookieValue("org.apache.tapestry.locale", Locale.GERMANY.toString());
throw new RedirectException([myurl]);
TEST CODE -------------------------
template:
<a jwcid="@ActionLink" stateful="false" listener="ognl:listeners.changeToGerman">de</a>
listener:
public void changeToGerman(IRequestCycle cycle)
{ cycle.getEngine().setLocale(Locale.GERMANY); // this also does not send the cookie // cycle.getInfrastructure().getRequest().forward(getEngineService().getLink(cycle, cycle.getPage().getPageName()).getAbsoluteURL()); throw new RedirectException(getEngineService().getLink(cycle, cycle.getPage().getPageName()).getURL()); } @InjectObject("engine-service:page")
public abstract IEngineService getEngineService();
Header dump:
actual response:
HTTP/1.x 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://localhost:81/cip/Home.cip
Content-Length: 0
Date: Thu, 14 Jul 2005 14:04:57 GMT
expected response:
HTTP/1.x 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://localhost:81/cip/Home.cip
Content-Length: 0
Date: Thu, 14 Jul 2005 14:04:57 GMT
Set-Cookie: org.apache.tapestry.locale=de_DE; Path=/cip