java - 在 Grails 中,如何获取语言环境的 messages.properties ConfigObject?

标签 java grails internationalization groovy

在 Grails 中,我想要一个 ConfigObject对当前区域设置的加载消息属性文件的引用。或者以某种方式轻松完整地读取消息属性(对于当前语言环境)。我想将其转换为 JSON 并将其发送回客户端以用于通过 javascript 查找字符串。

本质上我想做这样的事情:

def props = new java.util.Properties()
props.load(... the right message bundle ...);
def messages = new ConfigSlurper().parse(props)
render messages as JSON

我假设有一种更优雅的方式来做到这一点。 messageSource 接口(interface)只允许您获取特定键的消息。我想要整个资源包,以便将其转换为 JSON。

最佳答案

我找到了一个可行的解决方案,即根据当前语言环境直接从适当的消息属性包中加载属性。

看起来我可以只使用相对于应用程序根目录的路径加载文件。这适用于使用嵌入式 tomcat 在本地运行和作为 war ('grails run-app' 和 'grails run-war')但我没有测试部署到容器以了解路径是否会被正确解析。

这是我的测试 Controller :

import grails.converters.*
import org.springframework.context.i18n.LocaleContextHolder as LCH 

class I18nController {

    def index = {
        def locale = LCH.getLocale().toString();
        def langSuffix = ( locale == "en" ) ? "" : "_${locale}" 
        def props = new java.util.Properties()
        props.load( new FileInputStream( "grails-app/i18n/messages${langSuffix}.properties" ) )
        render ( new ConfigSlurper().parse(props) ) as JSON
    }

}

可以这样访问:

http://localhost:8080/myapp/i18n
http://localhost:8080/myapp/i18n?lang=es
http://localhost:8080/myapp/i18n?lang=en

关于java - 在 Grails 中,如何获取语言环境的 messages.properties ConfigObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527080/

相关文章:

java - 从 .wsdl for java 生成 Web 服务客户端安全策略

java - 在 JPA-SQL 查询中加入集合

ruby-on-rails - Rails i18n 配置文件管理最佳实践

java - Java 求一个数的各位数字之和

java - 如何在 pom.xml 上运行 maven-jdeps-plugin?

grails - 使用Grails Controller 进行模板导航

grails - grails 3.1异常-org.grails.datastore.mapping.core.ConnectionNotFoundException

grails - 为什么应将应用程序资源js文件不包括在所有文件中

java - 为 JSF/ICEfaces 设置浮点格式化语言环境?

正确复数的 Java 国际化 (i18n)