Btw: do you have a change locale link? How do you make sure it plays nice with bookmarkable urls? I was thinking of using a redirect if the page is bookmarkable, but haven't worked it out yet...
Thanks again, Sebastiaan Jan Kriesten wrote:
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]
smime.p7s
Description: S/MIME Cryptographic Signature
