2 回答
TA贡献1772条经验 获得超8个赞
IMO 解决问题的正确方法是使用模块。messages.en
为应用程序中的所有消息创建一个基础并将其放置在项目的 conf 文件夹中。之后,为每个租户创建一个模块。并添加一个messages.en
仅包含您要为该租户覆盖的消息的文件。
将tenant_1 模块添加到dependencies.yml
文件中时,文件中的messages.en
键modules/tenant_1/conf/messages.en
将覆盖应用程序消息。您将看到专门为您的租户提供的文本。
TA贡献1818条经验 获得超3个赞
我已经找到了解决这个问题的有效方法。
(在conf中创建一个文件夹,比如conf/tenant_1/messages.en;conf/tenant_2/messages.en等)
创建一个类
TenantMessagePlugin.java
,它覆盖play.i18n.MessagesPlugin class
. 给出onApplicationStart()
方法的实现,加载N个租户的conf/tenant_N/messages.en文件。创建一个文件/或使用相同的类并
Map<tenant_id,properties file>
为每个特定租户创建一个保存 messages.en 文件的文件。在类
TenantMessagePlugin
,重写getMessage()
的方法play.PlayPlugin
的类(根插件父类),这将返回该消息从Map<>
在请求(2)中创建的租户,如果密钥被发现返回的值否则返回空。返回 null 将回退到原始消息。en [实际实现play.PlayPlugin
为所有其他类返回 null,但我们明确地钩住我们的方法以返回键的值 - 而播放插件有一个额外的类,例如play.i18n.Messages.java
to holdMap<locale, properties>
]在其中创建一个文件
conf/play.plugins
并添加这一行 {priority:package_name:class_name} 例如490:tenantcustomisation.TenantMessagePlugin
where 490 - 自定义插件的优先级(应该高于默认值,MessagesPlugin
以便框架首先检查租户的 messages.en 文件)
这肯定可以工作,并且&{'key'}
从 html 文件中返回getMessage()
方法所需的值
添加回答
举报