访问messages.properties在开发中工作,但在部署时不工作

时间:2014-09-30 12:46:54

标签: grails internationalization resourcebundle

以下代码在从控制器(使用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.htmlhttp://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

关于我还能尝试什么的任何建议?

1 个答案:

答案 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的插件部分使其工作。