Skip to content

Commit

Permalink
fix for GRAILS-9554 "PageRenderer can't set Locale"
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed May 8, 2014
1 parent b7f22bd commit d1aee8e
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions grails-web-gsp/src/main/groovy/grails/gsp/PageRenderer.groovy
Expand Up @@ -47,6 +47,7 @@ class PageRenderer implements ApplicationContextAware, ServletContextAware {
GrailsConventionGroovyPageLocator groovyPageLocator
ApplicationContext applicationContext
ServletContext servletContext
Locale locale

PageRenderer(GroovyPagesTemplateEngine templateEngine) {
this.templateEngine = templateEngine
Expand Down Expand Up @@ -112,9 +113,10 @@ class PageRenderer implements ApplicationContextAware, ServletContextAware {
return
}

def oldRequestAttributes = RequestContextHolder.getRequestAttributes()
def oldRequestAttributes = GrailsWebRequest.lookup()
try {
def webRequest = new GrailsWebRequest(PageRenderRequestCreator.createInstance(source.URI),
def localeToUse = locale ?: (oldRequestAttributes?.locale ?: Locale.default)
def webRequest = new GrailsWebRequest(PageRenderRequestCreator.createInstance(source.URI, localeToUse),
PageRenderResponseCreator.createInstance(writer instanceof PrintWriter ? writer : new PrintWriter(writer)),
servletContext, applicationContext)
RequestContextHolder.setRequestAttributes(webRequest)
Expand All @@ -137,7 +139,7 @@ class PageRenderer implements ApplicationContextAware, ServletContextAware {
*/
static class PageRenderRequestCreator {

static HttpServletRequest createInstance(final String requestURI) {
static HttpServletRequest createInstance(final String requestURI, Locale localeToUse = Locale.getDefault()) {

def params = new ConcurrentHashMap()
def attributes = new ConcurrentHashMap()
Expand Down Expand Up @@ -270,10 +272,10 @@ class PageRenderer implements ApplicationContextAware, ServletContextAware {
}

if (methodName == 'getLocale') {
return Locale.getDefault()
return localeToUse
}
if (methodName == 'getLocales') {
def iterator = Locale.getAvailableLocales().iterator()
def iterator = [localeToUse].iterator()
PageRenderRequestCreator.iteratorAsEnumeration(iterator)
}

Expand Down

0 comments on commit d1aee8e

Please sign in to comment.