1

在 Tapestry 中,.properties带有本地化消息的文件位于pagecomponent应用程序消息目录中。我有类不是来自pagescomponents包,我想以通常的方式在其中注入消息:

@Inject
private Messages messages;

稍后获得本地化消息

String msg = messages.get("message-key");

我试图将.properties文件定位到相应的文件夹(即,对于 class src/main/java/nonPageOrComponentPackage/Foo.javato scr/main/resources/nonPageOrComponentPackage/Foo.properties),因为它是为pageand componentclasses 完成的,但它不起作用。

我需要在某处指定此.properties文件的路径吗?我试着用方法来做

public void contributeValidationMessagesSource(@NotNull Configuration<String> configuration) {
  configuration.add("/scr/main/resources/nonPageOrComponentPackage/Foo.properties");
}

AppModule,但它也没有工作。

提前致谢!

4

1 回答 1

0

消息检索机制设计为仅在页面/组件内部使用。您有应用程序消息目录,它可以被一些基本页面/组件目录覆盖,然后被最终页面/组件目录覆盖。所有这些仅适用于页面和组件。

如果您的类不是页面或组件,您只能使用@Inject注释注入应用程序消息目录。您还可以为ComponentMessageSource服务添加一些额外的消息包到应用程序目录。

@Contribute(ComponentMessagesSource.class)
public void contributeComponentMessagesSource(@Value("context:WEB-INF/mail") Resource mailMessages, OrderedConfiguration<Resource> configuration) {
  configuration.add("mail", mailMessages);
}

但是您应该了解,此消息包将可用于所有页面/组件和服务。

访问某些特定消息包的另一种方法是使用 MessageImpl。但这种方式很棘手。它使用挂毯内部类。

messages = MessagesImpl.forClass(Foo.class);
于 2013-03-15T11:08:25.163 回答