我们有一个将用于两个不同客户的网站。在第一次请求期间,将要求用户选择客户端。根据该文本,应显示标签和网站内容。
是否可以在Play框架中拥有两个消息文件,并且在会话启动期间将决定消息文件
在我的研究中,我们可以为每个Locale提供多个文件,消息将根据请求中的区域设置获取。
答案 0 :(得分:4)
不,目前不支持。 您可以在插件(Look at MessagesPlugin)中轻松执行此操作,甚至可以使用带有@onApplicationStartup注释的bootstrap job
// From MessagesPlugin.java
//default languange messages
VirtualFile appDM = Play.getVirtualFile("conf/messages");
if(appDM != null && appDM.exists()) {
Messages.defaults.putAll(read(appDM));
}
static Properties read(VirtualFile vf) {
if (vf != null) {
return IO.readUtf8Properties(vf.inputstream());
}
return null;
}
答案 1 :(得分:1)
您可以自己编写PlayPlugin并处理工具play.PlayPlugin.getMessage(String, Object, Object...)
。然后你可以选择正确的文件。课程play.i18n.Messages
可以作为实现该方法的灵感。
答案 2 :(得分:1)
通过以下解决方案解决了这个问题,
MessagesPlugIn
play.i18n.MessagesPlugin
Messages
play.i18n.Messages
messaagesByClientID
Messages.java
onApplicationStart()
MessagesPlugIn
messaagesByClientID
中加载locales
加载play.i18n.MessagesPlugin
get()
中有方法Messages.java
,在会话中从基于messaagesByClientID
的ClientId检索属性。如果该房产无法使用,请致电get()
play.i18n.Messages
醇>
7.修复了自定义标记il8nTag
及其在HTML模板中使用的标记。 il8nTag
将调用Messages.get()
中的方法。
答案 3 :(得分:0)
根据play.api.i18n.I18nModule
创建您自己的Module
,但绑定到您自己的MessagesApi
实现,基于Play的DefaultMessagesApi(here是定义的部分要加载的文件)
然后在application.conf
,disable Play's play.api.i18n.I18nModule
中启用您自己的模块。