tapestry5中的多语言概念

时间:2014-06-12 07:11:56

标签: tapestry

我正在使用Tapestry5开发Web应用程序。在我的应用程序中,我想整合多语言概念。我有两个属性文件是app_it.properties和app_fr.properties。但没有价值,只有关键。

app_it.properties

aboutus=
termsandcondns=
privacy=

app_fr.properties

aboutus=
termsandcondns=
privacy=

这里我想在运行时设置键值。根据国家/地区代码从我的数据库获取的关键值。是否可以设置。

请帮帮我。

2 个答案:

答案 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实现是如何工作的。