hi sebastiaan,
i just snip the things out and comment (as far as necessary):
use this filter instead of the default wicket filter:
---8<---
object LocaleFilter
{
final val REQUEST_LOCALE_ATTRIBUTE = "_request_locale_"
}
class LocaleFilter extends WicketFilter
{
import de.footprint.utils.lang.LocaleUtils
import javax.servlet.http.HttpServletRequest
/**
* Extracts an optional locale attribute from the request path and sets the
* requests locale as an request attribute. The part of the request path
before
* the first '/' is checked against available java system locales.
*
* @param request
* incoming request
* @return relative request paths w/o locale attribute
*/
override def getRelativePath( request: HttpServletRequest ) =
{
val relPath = super.getRelativePath( request )
val len = relPath.length
val idx = if( len>2 ) relPath.indexOf( '/' ) else -1
if( idx >= 0 )
{
val lang = relPath.substring( 0, idx )
LocaleUtils.getLocale( lang ) match
{
case Some(locale) =>
request.setAttribute( LocaleFilter.REQUEST_LOCALE_ATTRIBUTE, locale )
if( len > lang.length ) relPath.substring( lang.length + 1 )
else ""
case _ => relPath
}
}
else relPath
}
}
---8<---
i think that's self explanatory.
second, you have to alter application, session + request a bit.
Application:
---8<---
abstract class LocaleApplication extends WebApplication
{
/**
* Evaluate the current Locale to use.
*
* Based on the Locale provided by the LocaleFilter, the current Locale is
selected as:
*
* - if none is set and no Locale is passed in, the Application default
Locale is returned
* - if none is set but a Locale is passed in, this is returned
* - if a Locale is set by the filter and this is supported by the
Application, its returned
* - if a Locale is set but unsupported, the default Locale is returned
*
* @param currentLocale
* current Locale in use or null
* @return Locale to use
*/
protected[application] def getLocale( currentLocale: Locale ) : Locale =
{
val request =
RequestCycle.get.getRequest.asInstanceOf[WebRequest].getHttpServletRequest.asInstanceOf[HttpServletRequest];
val requestLocale = request.getAttribute(
LocaleFilter.REQUEST_LOCALE_ATTRIBUTE ).asInstanceOf[Locale];
if( requestLocale == null )
{
if( currentLocale == null ) getDefaultLocale
else currentLocale
}
else
if( currentLocale == null || currentLocale != requestLocale )
{
getSupportedLocales.find( x => x == requestLocale || x.getLanguage ==
requestLocale.getLanguage ).getOrElse( getDefaultLocale )
}
else currentLocale
}
/**
* Sets the Locale to use in newly created sessions.
*
* @param session
* newly created session
*/
protected def sessionCreateListener( session: WebSession ) =
session.setLocale( getLocale( null ) )
/**
* Overridden to use the unified Locale selection
*
* @param servletRequest
* Current request to generate Request instance for.
* @return new LocaleRequest instance
*/
override protected def newWebRequest( servletRequest: HttpServletRequest ) =
new LocaleRequest( servletRequest )
}
---8<---
Request:
---8<---
class LocaleRequest( req: HttpServletRequest ) extends UploadWebRequest( req )
{
override def getLocale = LocaleApplication.get.getLocale( null )
}
---8<---
Session:
---8<---
class LocaleSession( req: Request ) extends WebSession( req )
{
override def getLocale =
{
val sessionLocale = super.getLocale
val requestLocale = LocaleApplication.get.getLocale( sessionLocale )
if( sessionLocale!=requestLocale )
setLocale( requestLocale )
requestLocale
}
}
---8<---
any questions? :D
best regards, --- jan.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]