我的部分UrlMappings看起来像这样:
"/$lang"(controller: "main", action: "front") {
constraints {
lang inList: ['hr', 'sl', 'si']
}
}
因为我想将lang
设置为'sl',如果它是'si',我创建了以下过滤器:
def filters = {
all(controller: '*', action: '*') {
before = {
if(params.lang == 'si') {
params.lang = 'sl'
}
}
}
}
问题:控制器内的params.lang
获取所需值('sl'),但在视图中,params.lang
被解析为原始值('si')。你有什么建议来解决这个问题?
谢谢!
答案 0 :(得分: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.如果不在列表中 - 404.
2.if lang = grailsApplication.config.defaultLocale show而不是 / en / about_us 只是 / about_us 。
3.如果没有提供lang param - 请求解决。