【问题标题】:Grails setting locale does not change languageGrails 设置语言环境不会改变语言
【发布时间】:2013-05-20 15:36:24
【问题描述】:

我在我的项目中使用 Grails 2.0.3。我想对我的应用程序实施国际化。据我从this 文档中看到的,我了解Grails 对国际化有一个开箱即用的支持。但是我想覆盖浏览器Accept-Header 设置并想设置用户语言偏好。

首先,我创建了一个过滤器来捕获请求并检查语言首选项。但这没有帮助。在过滤器中,我可以获得本地化消息,但是当页面呈现时,我得到的是英文页面。这是我用于设置语言环境的代码。

def locale = new Locale("es", "ES")
java.util.Locale.setDefault(locale)

然后我创建了自定义LocaleResolver 并将其注入到弹簧配置中作为localeResolver。再次在过滤器中,我可以看到本地化消息,但是在页面中仍然没有运气?

有没有办法覆盖或绕过 Grails i18n 支持中的浏览器设置?

【问题讨论】:

    标签: grails internationalization locale grails-2.0


    【解决方案1】:

    Grails 默认的LocaleResolverSessionLocaleResolver。如果您想始终使用es_ES,可以将其更改为FixedLocaleResolver

    beans {
      localeResolver(FixedLocaleResolver) {
        locale = new Locale("es", "ES")
      }
    }
    

    如果您想限制为一组语言环境,那么您将需要一个过滤器,并使用SessionLocaleResolver#setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) 方法。

    【讨论】:

    • Michels 谢谢你的回答。我只是想知道为什么 lang=es 在我的应用程序中不起作用? i18n 仅在我更改浏览器设置时才有效。我的应用程序中是否存在配置问题?
    • lang=xxx 在您没有该视图的控制器时不起作用。我认为这有一张 JIRA 票。如果您使用索引操作创建控制器并更改语言,它应该可以工作。
    • 我所有的动作都通过一个控制器。所以我有控制器。这很奇怪,因为在我的过滤器中我可以阅读国际化消息但是当页面呈现时它仍然是英文。
    • 你能用你的过滤器更新你的问题吗?还有一个不显示正确区域信息的视图示例?
    • 嗨,塞尔吉奥,感谢您的帮助,非常感谢。问题是视图没有触及控制器,我解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2020-04-05
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多