【问题标题】:Administrating internationalized wicket applications管理国际化检票口应用程序
【发布时间】:2011-02-28 09:54:16
【问题描述】:

是否有维护/管理 Wicket 应用程序国际化的良好/正确方法?

目前有几个 *.properties 文件,其中包含翻译,就像您在 Wicket 中所做的一样。您能否在运行时访问这些并更改值,以便在不重新启动应用程序的情况下进行更改?

(另一种方法是将值存储在数据库中,但我暂时保留它。)

【问题讨论】:

  • 不确定您的问题是什么。但是,如果您想在运行时更改文本而不是 DB 是可行的方法。

标签: internationalization wicket administration


【解决方案1】:

您可以编写自己的IStringResourceLoader 实现并将其注册到您的应用程序中,如下所示:

getApplication().getResourceSettings().addStringResourceLoader(  
                                                     new CustomResourceLoader());

您的资源加载器应该从 WAR 文件之外的某个位置获取资源,以便管理员可以按照 Aaron Digulla 的建议对其进行修改。

要让 Wicket 在运行时获取修改,您必须像这样调整资源设置:

getApplication().getResourceSettings().setResourcePollFrequency( 
                                                           Duration.seconds(1));

【讨论】:

    【解决方案2】:

    我知道任何现有的解决方案,但以下是我们的一些想法:

    • 将翻译存储在应用程序外部的目录中。这样,它们就不会出现在 JAR 文件中,因此您可以在运行时更改它们。

    • 确保可以刷新资源包(例如,通过使用事件总线或在文本更改时可以调用的侦听器)

    • 为应用添加“翻译模式”。通过一点点 JavaScript 和对 HTML 的精心设计,应该可以通过单击资源包中的每个文本来使其“可编辑”。使用 AJAX 将更改事件发送回服务器并更新资源包。

      这样,翻译人员可以在实时系统中完成他们的工作,以便他们在线查看需要更改的内容(您可以根据文本是否已经或仍然需要更改被翻译)以及翻译的样子等等。

    [编辑]

    我的意思是在 WAR 文件之外。否则,每次翻译更改时,您都需要重新创建 WAR。

    或者,您可以将属性文件放入 WEB-INF/classes(与普通类文件一起)并使用小脚本替换 WAR 中的文件。

    在批处理/shell 脚本中,使用jar -u 替换现有文件。在ant中,通过zipfileset使用旧的WAR文件作为源,首先添加你的新文件并使用duplicate="preserve"

    这样,您不必再次压缩整个文件。

    【讨论】:

    • 谢谢,“翻译模式”听起来很复杂,超出了我目前的需求:) 关于将属性文件保存在应用程序之外……你的意思是在类目录之外?没有jar文件,只有我部署的war文件...
    • 避免将资源放入WEB-INF/lib/的JAR文件中。
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多