Wicket国际化:多页的多个属性文件?

ana*_*uli 6 wicket internationalization

可用的wicket国际化示例具有以下文件结构

HomePage.java
HomePage.html
HomePage.properties
WicketApplication.java
HomePage_nl.properties
Run Code Online (Sandbox Code Playgroud)

现在在创建一个包含多个HTML页面的项目时,例如我有HomePage.html和Login.html,有没有办法可以将所有键值对保存在特定语言的单个属性中,或者我必须创建所有这些文件

HomePage.properties
HomePage_nl.properties
Login.properties
Login_nl.properties
Run Code Online (Sandbox Code Playgroud)

Xav*_*ica 8

Wicket将尝试使用以下规则查找消息资源:

  1. 检票将试图找到该消息从开始Page,然后向下钻取到具体Component通过组件层次Page.请注意,这是一个自上而下的搜索.

  2. 如果在组件层次结构中找不到消息,则将在Application类中查找该消息.

在每个类中查找资源的方式如下:

  1. 本地化搜索将语言环境附加到文件名(Login_nl.properties然后Login.properties),就像Java ResourceBundle一样.

  2. 自底向上穿过类层次结构.这意味着如果在类中找不到资源,它将一直在其超类中搜索,直到它命中java.lang.Object.

因此,在您的特定情况下,如果LoginPanel内部HomePage,您可以只定义资源HomePage(_nl).properties.此外,如果有特定的应用程序范围的消息,请记住您可以在其中定义它们WicketApplication(_nl).properties.

你可能会发现以下Wicket wiki页面:关于Wicket国际化的一切都很有用,它详细阐述了这个问题.

(......) .通过首先在组件层次结构(也称为页面层次结构)中查找每个父节点的消息(遵循上述算法)来促进这一点.每个组件都可以覆盖其子组件的消息,因此搜索从页面的属性开始,然后向下逐渐渗透到使用它的组件(是的,它自上而下).为了使特定于某个子组件的覆盖,您可以在消息键前添加子组件ID.有关更多详细信息,请参阅ComponentStringResourceLoader.

如果在页面层次结构中未找到任何消息,则会启动另一个搜索,该搜索将查看您的应用程序类及其超类.所以检票首先查看MyApplication.properties(提供所有MyApplication是应用程序的名称),然后向上的类层次结构,通过org.apache.wicket.Application,高达java.lang.Object继承.这就是Wicket提供许多默认i18n文本的方式.