以下代码在从控制器(使用run-app)的dev环境中本地部署时可以正常工作。它用于创建一个包含当前语言的所有消息的JavaScript对象。
class LocaleController {
private Map<String, String> getMessages() {
// This is the line in question, the rest is just context
def bundle = ResourceBundle.getBundle("grails-app/i18n/messages");
def map = [:]
bundle.keys.each { msg ->
map[msg] = message(code: msg)
}
return map
}
def index() {
header("Cache-Control", "public, max-age=31536000")
render(view: "index", model: [messages: getMessages()], contentType: "text/javascript")
}
}
但是,当从部署的服务器运行时,我收到以下错误消息
errors.GrailsExceptionResolver - 处理请求时发生MissingResourceException:[GET] / compose / locale / index 找不到基础名称grails-app / i18n / messages,locale en_US的包。 Stacktrace如下: java.util.MissingResourceException:无法找到基本名称grails-app / i18n / messages,locale en_US的包 at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) 在java.util.ResourceBundle.getBundle(ResourceBundle.java:1028) 在com.accelrys.compose.app.LocaleController.getMessages(LocaleController.groovy:13) 在com.accelrys.compose.app.LocaleController.index(LocaleController.groovy ......
我宁愿不直接阅读该文件,因此我尝试了使用http://mrhaki.blogspot.com/2011/11/grails-goodness-internationalize.html的http://grails.org/plugin/jawr,但该网页在过去10天内一直处于离线状态。
我也尝试按照How can I create a map with all i18n-messages in Grails中的步骤操作,但它不会使用我的自定义消息源,我逐字复制了答案(clean / comile / run-app)但它仍在使用PluginAwareResourceBundleMessageSource
而不是ExtendedPluginAwareResourceBundleMessageSource
2014-09-29 17:15:33,447 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver - 处理请求时发生MissingMethodException:[GET] / compose / locale / index - 参数:jklgfdgdfg: 没有方法签名:org.codehaus.groovy.grails.context.support.PluginAwareResourceBundleMessageSource.getMessageCodes()适用于参数类型:()值:[]。 Stacktrace如下: 消息:没有方法签名:org.codehaus.groovy.grails.context.support.PluginAwareResourceBundleMessageSource.getMessageCodes()适用于参数类型:()值:[] 线|方法 - &GT;&GT; 15 | com.accelrys.compose.app.LocaleController中的getMessages $$ EOrHmJbB
关于我还能尝试什么的任何建议?
答案 0 :(得分:0)
事实证明How can I create a map with all i18n-messages in Grails确实可以正常工作。
我不确定为什么它不起作用,正如人们可以从问题中的错误消息中看到的那样。也许它与启动时的以下错误有关。
java.lang.RuntimeException:重新加载代理通过异常退出,请提出一个jira 错误|
at org.springsource.loaded.agent.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:104) 错误|
在任何情况下,如果您尝试这个并且它最初不起作用,请不要放弃。稍后再试。
<强>更新强>
事实证明插件不起作用的原因是因为grails install-plugin
已被弃用,将compile ":jawr:3.5.1"
添加到BuildConfig.groovy的插件部分使其工作。