grails - 在 Grails 运行时覆盖 i18n .properties 文件

标签 grails internationalization runtime build-process compile-time

我试图在运行时覆盖主 messages.properties 文件。我当前的任务要求我根据产品品牌打包应用程序。例如,如果我传递“grails dev run-app -Dbrand=a”之类的参数,我应该能够根据品牌更改 .properties 文件中的消息。

另一个要求是我需要一个包含所有消息的主 .properties 文件,并且我想创建一个单独的文件夹来存储基于品牌的消息。
例如,我的主 .properties 文件将包含 A、B、C、D,而我的品牌 .properties 文件将是仅包含 A 的主文件的子集。(主文件中 A 的消息字符串肯定与消息字符串不同在品牌文件夹下的 .properties 文件中)。例如,master 的 .properties 文件中的 A.productName 可以是“hello”,.properties 文件中的 A.productName 可以是“world”。

当我以 brand=a 作为参数运行应用程序时,我需要能够从品牌文件夹下的 .properties 文件中加载 A.product 名称,而不会干扰主 .properties 文件的当前状态。(这是这样的更改确实出现在 git 中)。

我查看了一些方法,我发现唯一的好解决方案需要从数据库获取我不想做的消息。我想要一种使用一些 grails 配置或事件监听器来覆盖的方法。

我假设需要有一种方法可以在 grails 的运行时覆盖内存中的消息。

希望,我详细地问了我的问题。

请帮忙,我对grails真的很陌生。

最佳答案

我觉得你应该看看Localizations plugin处理这个。它实现

 org.springframework.context.support.AbstractMessageSource

如果在数据库表中找不到原始消息源,它会从属性中查找原始消息源。听起来您想归档一些相同的功能。

Grails 在其中自己使用
 org.codehaus.groovy.grails.context.support.ReloadableResourceBundleMessageSource 

或者
 org.codehaus.groovy.grails.context.support.PluginAwareResourceBundleMessageSource

我还没有研究过它们中的哪些被注入(inject)到应用程序中的人工制品中。

关于grails - 在 Grails 运行时覆盖 i18n .properties 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268074/

相关文章:

hibernate - Hibernate注释的Java POJO中的Grails应用程序

Grails,比较两个对象?

正则表达式约束验证-grails

grails - GVM不在Linux Mint上安装产品

ruby-on-rails - Rails i18n 前端、后端的不同语言环境

django modeltranslation - 默认字段?

string - 如何将 float 或货币转换为本地化字符串?

c# - 运行时的嵌套循环数

python - 运行时警告 : invalid value encountered in reduce

c++ - 使用 pthread 计算平均运行时间,结果很奇怪