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

Internationalization Wicket国际化:多页的多属性文件?,internationalization,wicket,Internationalization,Wicket,可用的wicket国际化示例具有以下文件结构 HomePage.java HomePage.html HomePage.properties WicketApplication.java HomePage_nl.properties 现在,当创建一个包含多个HTML页面的项目时,例如 HomePage.html和Login.html,是否有一种方法可以将特定语言的所有键值对保存在单个属性中 或 我将不得不创建所有这些文件 HomePage.properties HomePage_nl.prop

可用的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

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

  • Wicket将尝试从
    页面
    开始查找消息,并通过
    页面
    的组件层次结构深入到特定的
    组件
    。请注意,这是一个自上而下的搜索

  • 当在组件层次结构中找不到消息时,将在
    应用程序
    类中查找该消息

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

  • 本地化搜索将区域设置附加到文件名(
    Login\u nl.properties
    ,然后是
    Login.properties
    ),就像Java一样

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

  • 因此,在您的特定情况下,如果
    登录
    主页
    中的
    面板
    ,您可以在
    主页(_nl).properties中定义资源。此外,如果存在特定的应用程序范围的消息,请记住您可以在
    WicketApplication(_nl).properties
    中定义它们

    您可能会发现以下Wicket wiki页面:非常有用,它详细阐述了这一问题

    (……)。这通过首先查找消息来实现 (按照上面的算法)为组件中的每个父级 层次结构(又名页面层次结构)。每个组件都可以覆盖 它的子组件的消息,因此搜索从页面的 属性,然后向下流到使用它的组件(是, 它是自上而下的)。为了使覆盖特定于某个子级 组件,您可以在消息键前面加上 小孩有关更多详细信息,请参阅ComponentStringResourceLoader

    如果在页面层次结构中未找到任何消息,则会启动另一个搜索 这将查看您的应用程序类及其超类。所以 Wicket首先查看MyApplication.properties(由MyApplication提供) 是应用程序的名称),然后向上移动类层次结构, 传递org.apache.wicket.Application,直到java.lang.Object。这是 Wicket如何提供其许多默认i18n文本


    谢谢你的回答。我还有一个问题。是希望为不同的面板编写不同的属性文件,还是应该在WicketApplication(_nl).properties中包含所有键值。哪个更合适?这取决于您计划如何(重新)使用组件。我通常建议不要在application.properties中定义所有资源,这会使覆盖整个应用程序中重用组件中的消息变得更加困难。很高兴这有帮助:)实际上,忽略我的最后一条评论。这不会使它变得更加困难。您始终可以在组件层次结构中定义资源覆盖。