grails - 浏览器自动检测语言

标签 grails internationalization

如何检测浏览器的语言并根据该值自动显示grails网站的正确本地化版本。

我将其放入索引 Action

Locale locale = new Locale(params.lang)
cookieLocaleResolver.setLocale(request, response, (Locale)
session.getAttribute('locale'))
{  
    render controller: "home", action: "index"
    return             
}

我有异常(exception)-
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

最佳答案

首先,您应该将其放在grails-app / conf目录中的过滤器中。如果您还没有过滤器,请创建一个过滤器。

MyFilters.groovy

class MyFilters {
    def filters = {
           setLocale(controller:'*', action:'*') {
                 before = {
                       // Your logic here
                 }
           }
    }
}

您的逻辑可以从多种 Angular 看待,但是可以尝试一下:
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的东西和validLanguages您应该能够弄清楚它们的作用。

希望对您有所帮助!

关于grails - 浏览器自动检测语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252887/

相关文章:

grails - Grails中的独立应用程序

forms - 在Grails工作流程中选择字段

rest - 如何在 Grails 中使用 spring security rest 插件进行身份验证

php - 如何保存变量不显式的 PHP 字符串?

java - 国际化 Java 应用程序(资源包)的优点和缺点

java - Eclipse 插件的国际化

java - Groovy 中的 GroupBy

namespaces - i18next 将默认翻译命名空间附加到我的命名空间

Java 默认语言环境回退

json - 连接 JSONArray 会向 groovy 中的字符串添加双引号