我认为您应该发明自己的方式来实现这一目标。在我当前的项目中,我们像这样注册了自己的 IStringResourceLoader:
IStringResourceLoader stringResourceLoader = new OurOwnResourceLoaderImpl();
Application.get().getResourceSettings().getStringResourceLoaders().add(stringResourceLoader);
然后例如在 IChoiceRenderer 中我们只需调用 Application.get().getLocalizer().getString("key", null)。
在我们的 IStringResourceLoader 中,我们正在根据我们自己的约定寻找带有某种字符串模式的包(属性文件)。
或者您可以通过 org.apache.wicket.resource.loader.BundleStringResourceLoader 在 Application#init 中注册分布在您库的 jar 中的本地化包(即属性文件)。
Afaik 没有标准的方法来做到这一点,所以这取决于你选择什么路径。
更新:
我找到了另一种解决方案,您的库/扩展可以自己注册自己的本地化,因此您无需触摸 Application#init 或创建自己的 IStringResourceLoaders。
有预注册的字符串资源加载器 org.apache.wicket.resource.loader.InitializerStringResourceLoader(参见 wicket 默认 IResourceSetting 实现,即 ResourceSetting 及其构造函数),它使用 wicket 的 Initializer 机制 - 参见 IInitializer javadoc - 基本上你添加 wicket.properties 文件在你的 jar 类根目录中(即它在 default/none 包中)和里面的文件有:
initializer=i.am.robot.MyInitilizer
然后是 i.am.robot.MyInitilizer:
public class MyInitializer implements IInitializer {
/**
* @param application
* The application loading the component
*/
void init(Application application) {
// do whatever want
}
/**
* @param application
* The application loading the component
*/
void destroy(Application application) {
}
}
现在您在与 IInitializer 实现(在我们的示例中为 MyInitializer)相同的包和名称中创建本地化包