【问题标题】:Grails: Change contents of message.properties (i18n) in productionGrails:在生产中更改 message.properties (i18n) 的内容
【发布时间】:2014-07-12 17:12:53
【问题描述】:

可以在生产时修改 message.properties 中的文本而无需重新部署/重新启动。

【问题讨论】:

    标签: grails internationalization properties-file


    【解决方案1】:

    这很有可能,但是您需要将默认的 messageSource bean 替换为 ReloadableResourceBundleMessageSource。您可以通过在 grails-app/conf/spring/resources.groovy 中配置新的 messageSource bean 定义来做到这一点,如下所示:

    beans = {
          messageSource(org.springframework.context.support.ReloadableResourceBundleMessageSource) {
            basenames = ["classpath:grails-app/i18n/myApp", "file:grails-app/i18n/messages", "WEB-INF/grails-app/i18n/messages"]
        }
    }
    

    以上内容适用于开发和生产。您可能还想使用ReloadableResourceBundleMessageSource 研究其他可用的选项。

    【讨论】:

    • 这是否允许您将资源包放在 WAR 文件之外?
    • 当然。您可以将其包含在基本名称中。
    • 您认为这比数据库方法更可取吗?数据库方法的一个优点是您可以自动更新消息,但如果您将它们存储在文件中,我不知道如何可靠地执行此操作。
    • 我同意使用数据库是一种更常见的方法。尽管如此,使用文件系统上的文件确实有价值。在微服务的意义上,或者通过外部系统/进程维护和生成消息源的地方。我见过几次。通常情况下,这些是例外情况。大多数人只会将数据填充到数据库中并使用它。
    • 我还应该注意,位置可以是任何有效的 URI(甚至是通过 URL 的外部微服务)。
    【解决方案2】:

    如果您使用默认的messageSource bean,这是不可能的。如果您想这样做,一种选择是将消息存储在数据库中而不是属性文件中。这里有几个支持这个的插件(我自己从来没有使用过)

    或者,将默认的 messageSource bean 替换为支持重新加载的 bean,例如ReloadableResourceBundleMessageSource.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2016-12-08
      • 1970-01-01
      • 2013-04-30
      • 2023-03-27
      • 2013-09-08
      • 1970-01-01
      相关资源
      最近更新 更多