6

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

HomePage.java
HomePage.html
HomePage.properties
WicketApplication.java
HomePage_nl.properties

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

HomePage.properties
HomePage_nl.properties
Login.properties
Login_nl.properties
4

1 回答 1

8

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

  1. Wicket将尝试查找从 开始的消息,PageComponent通过. 请注意,这是自上而下的搜索。Page

  2. 当在组件层次结构中找不到消息时,将在Application类中查找它。

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

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

  2. 自下而上通过类层次结构。这意味着如果在类中找不到资源,则会在其超类中一直搜索它,直到找到java.lang.Object.

因此,在您的特定情况下,如果LoginPanelinside HomePage,您只需在HomePage(_nl).properties. 此外,如果有特定的应用程序范围的消息,请记住您可以在WicketApplication(_nl).properties.

您可能会发现以下 Wicket wiki 页面:关于 Wicket 国际化的一切有用的信息,它详细说明了这个问题。

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

如果在页面层次结构中未找到消息,则会开始另一个搜索,该搜索将查看您的应用程序类及其超类。因此,Wicket 首先查看 MyApplication.properties(假设 MyApplication 是您的应用程序的名称),然后查看类层次结构,将 org.apache.wicket.Application 传递到 java.lang.Object。这就是 Wicket 提供许多默认 i18n 文本的方式。

于 2012-09-21T08:06:46.597 回答