如何检测浏览器的语言并根据该值自动显示我的grails网站的正确本地化版本。
我把它放入索引动作
Locale locale = new Locale(params.lang)
cookieLocaleResolver.setLocale(request, response, (Locale)
session.getAttribute('locale'))
{
render controller: "home", action: "index"
return
}
我得到了例外 -
Error 500: Executing action [index] of controller [socialworking.HomeController] caused exception: null
Servlet: grails
URI: /socialworking/grails/home.dispatch
Exception Message:
Caused by:
Class: Unknown
答案 0 :(得分:1)
首先,您应该将它放在grails-app / conf目录中的过滤器中。如果您还没有过滤器,请创建一个过滤器。
MyFilters.groovy
class MyFilters {
def filters = {
setLocale(controller:'*', action:'*') {
before = {
// Your logic here
}
}
}
}
你的逻辑可能有很多方面,但这是一个尝试:
String langToSet = 'en';
if ( params.lang && params.lang in validLanguages )
langToSet = params.lang;
else if ( session.lang ) {
langToSet = session.lang;
}
else if ( ... ) // Cookie lang is set ( User might have accessed the site before and you have stored their preferred lang )
// Get cookie lang
Locale locale = new Locale( langToUse)
org.springframework.web.servlet.support.RequestContextUtils.getLocaleResolver(request).setLocale(request, response, locale);
// Set the cookie lang
...
// We set the session lang
session.lang = langToSet
请注意,上述内容并非完整的实现,但几乎就是这样。 cookie stuff 和 validLanguages 你应该能够弄清楚他们做了什么。
我希望有所帮助!