1

我的部分 UrlMappings 如下所示:

"/$lang"(controller: "main", action: "front") {
        constraints {
            lang inList: ['hr', 'sl', 'si']
        }
    }

因为如果它是“si”我想设置lang为“sl”,我创建了以下过滤器:

def filters = {
    all(controller: '*', action: '*') {
        before = {
            if(params.lang == 'si') {
                params.lang = 'sl'
            }
        }
    }
}

问题:params.lang内部控制器获得想要的值('sl'),但在视图中,params.lang被解析为原始值('si')。你会建议什么来解决这个问题?

谢谢!

4

1 回答 1

0

尝试使用重定向。我是这样做的:

def filters = {
        pages(controller: 'pages', action: 'home|services|projects|project_details|contact_us|career|about_us|downloadCaseStudy') {
            before = {
                if (params.lang) {
                    if (!(params.lang in grailsApplication.config.i18nFields.locales)) {
                        session."$SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME" = null
                        params.remove('lang')
                        response.sendError(404)
                        return
                    }
                    if (params.lang == grailsApplication.config.defaultLocale) {
                        RCU.getLocaleResolver(request).setLocale(request, response, new Locale(params.lang))
                        params.remove('lang')
                        chain(controller: "pages", action: params.action, model:chainModel?:[:],params: params)
                        return false
                    }
                } else {
                    String langCode = RCU.getLocale(request).getLanguage()
                    if (!(langCode in grailsApplication.config.i18nFields.locales)) {
                        params.lang = grailsApplication.config.defaultLocale
                        return
                    } else if (langCode != grailsApplication.config.defaultLocale) {
                        params.lang = langCode
                        chain(controller: params.controller, action: params.action, model:chainModel?:[:], params: params)
                    }
                    return true
                }
            }
            after = { Map model ->

            }
            afterView = { Exception e ->

            }
        }

一点解释:我建立像/ru/about_us这样的网址。
1.如果 lang 不在列表中 - 404。
2.if lang = grailsApplication.config.defaultLocale 显示而不是/en/about_us只是/about_us
3. 如果没有提供语言参数 - 从请求中解决。

于 2013-05-06T11:18:40.907 回答