2012-03-29 52 views
9

是否有任何工具可以将Java .properties文件编译为可在Java EE(tomcat)应用程序中使用的类?类似android的eclipse插件产生一个静态R.strings类。Java:静态字符串本地化

我发现这篇文章:

http://www.techhui.com/profiles/blogs/localization-in-gwt-using

但它是依赖于GWT。任何帮助赞赏。

+0

你能解释一下吗?你的意思是一个包含常量的类(比如枚举)还是属性的持有者? – questzen 2012-03-29 12:10:33

+0

这篇文章看起来很像您所问:http://stackoverflow.com/questions/1578026/java-properties-files-as-strongly-typed-classes – 2014-10-18 17:31:49

回答

4

我从来没有听说过这样的工具。 GWT有一个很好的延迟绑定技术,但它不是你正在寻找的东西。不过,我认为可以为这些任务实现一个基本的代码生成器。

但你的问题的答案是:据我所知没有。

+0

使用小型Java应用程序生成代码+1你可以自动从一个ant任务中调用,你可以在eclipse中添加一个自动调用的构建器。 – jabal 2014-09-01 17:50:21

0

ResourceBundle呢?

// refers to "src/config.properties" 
ResourceBundle config = ResourceBundle.getBundle("config"); 
String property1 = config.getString("property1"); 
+1

与最近对这个问题的其他答案一样,这并没有回答这个问题。你所描述的是它通常是如何完成的。但在android中,您会在编译时使用所有资源生成一个生成的类(R.id)。如果property1没有被定义,你会在这里得到runtimeexception。如果它没有在Android中定义,你会得到一个编译时错误。 – jontro 2014-10-17 11:59:40

0

我觉得一个可以写使用ANTLR在自定义Maven插件(或Ant任务),只是生成编译步骤之前的Java源文件的属性非常简单的语法。

0

如何将您的属性存储在JSON文件中。存储在文件中的JSON对象应映射到Java类,使用Jackson映射器进行反序列化。对于Jackson,您可以强制所有字段在反序列化中必须为非空值。 您也可以使用GSON并编写一个自定义的反序列化器,按照您的要求执行严格的检查。示例 - 您可以对字符串执行非空和非空操作。

0

Compiler Assisted Localization (CAL10N)不完全是你问的,但可能会有所帮助。

虽然它不会从.properties生成Java类,但使用枚举作为消息键仍然比字符串更好,因为您可以从编译器获得一些帮助。

声明一个枚举,将其绑定到带有注释的.properties,并在消息查找中使用枚举值。虽然我还没有尝试过。请参阅manual

1

为了国际化应用程序,我实现了一个Message Compiler,它创建了资源包文件和常量定义,作为来自单个源文件的键的Java枚举或静态最终字符串。所以常量可以用在Java源代码中,这比使用普通字符串更安全。在这种情况下,当使用不存在的键常量时,也会出现编译时错误。消息编译器不仅可以用于Java。它还为Objective-C或Swift创建资源文件和常量,并可以为其他编程环境进行扩展。