Play Framework 1.3.2 中的多租户特定国际化

我有一个用 Play Framework(版本 - 1.3.2)编写的应用程序。


我已将其实现为基于多租户的应用程序。我关心的是保留特定于每个租户的 messages.en 文件,以便密钥保持不变,但文本会根据租户而变化,我将其用作:


play/conf/tenant-folder/tenant_1/messages.en

play/conf/tenant-folder/tenant_2/messages.en

play/conf/messages.en(默认回退)


我对扩展 MessagePlugin.java 类的实现有一些想法,但是我如何拦截 &{...} 以从 Messages.java 类的扩展实现中检索值。有什么帮助吗?


莫回无
浏览 136回答 2
2回答

料青山看我应如是

IMO 解决问题的正确方法是使用模块。messages.en为应用程序中的所有消息创建一个基础并将其放置在项目的 conf 文件夹中。之后,为每个租户创建一个模块。并添加一个messages.en仅包含您要为该租户覆盖的消息的文件。将tenant_1 模块添加到dependencies.yml文件中时,文件中的messages.en键modules/tenant_1/conf/messages.en将覆盖应用程序消息。您将看到专门为您的租户提供的文本。

泛舟湖上清波郎朗

我已经找到了解决这个问题的有效方法。(在conf中创建一个文件夹,比如conf/tenant_1/messages.en;conf/tenant_2/messages.en等)创建一个类TenantMessagePlugin.java,它覆盖play.i18n.MessagesPlugin class.&nbsp;给出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.javato hold&nbsp;Map<locale, properties>]在其中创建一个文件conf/play.plugins并添加这一行 {priority:package_name:class_name} 例如490:tenantcustomisation.TenantMessagePlugin&nbsp;where 490 - 自定义插件的优先级(应该高于默认值,MessagesPlugin以便框架首先检查租户的 messages.en 文件)这肯定可以工作,并且&{'key'}从 html 文件中返回getMessage()方法所需的值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java