在 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/