在Tapestry中,带有本地化消息的.properties
文件位于页面
、组件
和应用程序消息目录中。我的类不是来自 pages
和 components
包,我想在其中以通常的方式注入(inject)消息:
@Inject
private Messages messages;
稍后使用
获取本地化消息String msg = messages.get("message-key");
我尝试将 .properties
文件定位到相应的文件夹(即,对于类 src/main/java/nonPageOrComponentPackage/Foo.java
到 scr/main/resources/nonPageOrComponentPackage/Foo.properties
),就像对 page
和 component
类所做的那样,但它不起作用。
我是否需要在某处指定此 .properties
文件的路径?我尝试用方法来做到这一点
public void contributeValidationMessagesSource(@NotNull Configuration<String> configuration) {
configuration.add("/scr/main/resources/nonPageOrComponentPackage/Foo.properties");
}
在AppModule
中,但它也不起作用。
提前致谢!
最佳答案
消息检索机制设计为仅在页面/组件内部使用。您有应用程序消息目录,它可以被一些基本页面/组件目录覆盖,然后被结束页面/组件目录覆盖。所有这些仅适用于页面和组件。
如果您的类不是页面或组件,您可以使用 @Inject
注释仅注入(inject)应用程序消息目录。您还可以为 ComponentMessageSource
服务做出贡献,以将一些其他消息包添加到应用程序目录中。
@Contribute(ComponentMessagesSource.class)
public void contributeComponentMessagesSource(@Value("context:WEB-INF/mail") Resource mailMessages, OrderedConfiguration<Resource> configuration) {
configuration.add("mail", mailMessages);
}
但您应该了解,此消息包将可用于所有页面/组件和服务。
访问某些特定消息包的另一种方法是使用 MessageImpl。但这种方式很棘手。它使用 Tapestry 内部类。
messages = MessagesImpl.forClass(Foo.class);
关于java - 该类的消息文件夹不是来自 'pages' 和 'components' 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427346/