2011-02-28 69 views
3

维护/管理Wicket应用程序国际化的方法是否正确?管理国际化的检票口应用程序

目前有几个* .properties文件,其中的翻译就像在Wicket中一样。你可以在运行时访问它们并更改值,以便在不重新启动应用程序的情况下进行更改。

(另一种方法是将值存储在数据库中,但我只是留到现在。)

+0

不知道你的问题是什么。但是,如果您想在运行时更改文本,则需要使用数据库。 – bert 2011-02-28 09:57:06

回答

4

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

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

你的资源加载器应该WAR文件之外的一些地方获取资源,所以它可以由管理员修改正如Aaron Digulla所建议的那样。

为了让检票拿起在运行时,你必须这样调整您的资源设置的修改:

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

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

  • 将翻译存储在应用程序之外的目录中。这样,它们不会以JAR文件结尾,因此您可以在运行时更改它们。
  • 确保可以刷新资源包(例如,通过使用事件总线或文本更改时可以调用的侦听程序)
  • 向应用程序添加“翻译模式”。通过一点点的JavaScript和HTML的精心设计,应该可以通过点击一个资源包来“编辑”每个文本。使用AJAX将更改事件发送回服务器并更新资源包。

    这样,译者可以做他们的工作在直播系统,使他们看到在线什么需要改变(你可以给文本取决于他们是否是一个CSS类或仍需要翻译)和翻译是什么样子,等

[编辑]

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

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

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

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

+0

谢谢你,“翻译模式”听起来非常复杂,并超越了我目前的需求:)关于将属性文件保存在应用程序之外......你的意思是在课程目录之外?没有jar文件,只有我部署的war文件... – rotsch 2011-02-28 10:09:56

+0

避免将资源放入'WEB-INF/lib /'中的JAR文件中。 – 2011-02-28 11:11:30