我正在使用Tapestry5开发Web应用程序。在我的应用程序中,我想整合多语言概念。我有两个属性文件是app_it.properties和app_fr.properties。但没有价值,只有关键。
app_it.properties
aboutus=
termsandcondns=
privacy=
app_fr.properties
aboutus=
termsandcondns=
privacy=
这里我想在运行时设置键值。根据国家/地区代码从我的数据库获取的关键值。是否可以设置。
请帮帮我。
答案 0 :(得分:1)
在挂毯中,所有服务都可以通过tapestry IOC
覆盖在这种情况下,您将提供基于数据库的自定义ComponentMessagesSource
实现如果要完全删除基于属性文件的功能,您将override ComponentMessagesSource。如果没有,您可能decorate现有服务并使用属性文件和数据库值的组合。
答案 1 :(得分:0)
您可以贡献自己的org.apache.tapestry5.ioc.Resource
实现,这可能会阻止使用Tapestry的内部API。
@Contribute(ComponentMessagesSource.class)
public static void provideMessages(OrderedConfiguration<Resource> configuration) {
configuration.add("DBMessages", new Resource() {
// implement interface methods
});
}
当然,您可以从一个单独的服务中构造该Resource实例,该服务为Resource提供数据库连接或者您希望从中获取消息的任何内容。棘手的一点可能是如何在处理更动态的东西时实现明确为文件/目录结构设计的方法。
/**
* Returns a Resource based on a relative path, relative to the folder containing the resource. Understands the "."
* (current folder) and ".." (parent folder) conventions, and treats multiple sequential slashes as a single slash.
* <p/>
* Virtual resources (resources fabricated at runtime) return themselves.
*/
Resource forFile(String relativePath);
或
/**
* Returns the portion of the path up to the last forward slash; this is the directory or folder portion of the
* Resource.
*/
String getFolder();
好吧,我想你必须看看Tapestry的源代码,看看现有的Resource实现是如何工作的。