【问题标题】:Automatically build resource class based of XML in JavaJava中基于XML自动构建资源类
【发布时间】:2012-02-02 23:21:02
【问题描述】:

在 Android 应用程序中,资源在 xml 文档中指定,这些文档自动构建到 R 类中,可以在源代码中作为强类型轻松访问。

我有什么方法可以对常规 Java 桌面应用程序使用类似的方法吗?

我想要完成的是从代码中删除字符串(作为“层”的分离,或多或少),并通过简单地告诉程序来轻松添加对本地化的支持选择与所需语言对应的xml文件。

我搜索了一下,但我正在寻找的东西似乎淹没在解析或输出 xml 的结果中,而不是利用 xml 生成代码的工具。

【问题讨论】:

    标签: java xml code-generation


    【解决方案1】:

    Eclipse 的消息包实现(例如由插件使用)与 Externalize Strings 功能集成,并为您的字符串生成静态类和资源属性文件:

    http://www.eclipse.org/eclipse/platform-core/documents/3.1/message_bundles.html

    要让这个集成工作,Eclipse 需要在类路径上看到 org.eclipse.osgi.util.NLS。从内存中,它可用的库的依赖关系对于我使用这种方法的项目来说有点棘手,所以我刚刚获得了源代码并将它作为我的核心模块中的一个独立类(有关更多信息,请参见 cmets在那)。

    它提供了您正在寻找的类型安全性,并且 IDE 功能可以节省大量时间。到目前为止,我没有发现这种方法的缺点。

    编辑:这实际上是 cmets 中提到的 ghostbust555,但在那篇文章中并不清楚这不仅限于 Eclipse 插件,而且您通过消息类的静态成员引用您的资源。

    我没有看到其他人在他们自己的应用程序中使用这种方法,但对我来说,考虑到 IDE 集成和类型安全性,这完全有意义。

    【讨论】:

    • 这看起来很有希望。我正在运行 Eclipse 3.7.1,当我在菜单中单击“Externalize strings...”时,我似乎仍然拥有旧版本。如何让新版本正常工作?
    • 您需要项目类路径中的 NLS 类。就我而言,我没有弄乱依赖项的库,而是得到了代码,将其添加到我的项目中(必须保留包!)并用我正在使用的框架替换了次要的日志记录依赖项。课程在这里:grepcode.com/file/repository.grepcode.com/java/eclipse.org/3.5/…
    • 好的,我搞定了 =) 但是,我不知道如何使用这种方法进行本地化(即为 UI 指定不同的语言)。
    • 太棒了!这是该框架的另一个优点:它通过 file_language_COUNTRY.propeties 到 file_language.properties 回退到属性文件,最后使用 Locale.getDefault() 确定当前系统区域设置的 file.properties。您可以使用系统属性和 setDefault() 方法自己设置语言环境:docs.oracle.com/javase/1.5.0/docs/api/java/util/…
    • 哦,当然,如果您想即时更改语言环境,您需要在您的捆绑软件上调用 NLS.initializeMessages(BUNDLE_NAME, Messages.class) 来重新绑定字符串。
    【解决方案2】:

    我不确定这是否是您的意思,但请查看国际化-http://netbeans.org/kb/docs/java/gui-automatic-i18n.html

    【讨论】:

    • 似乎是我正在寻找的东西。不幸的是,本教程完全是为 NetBeans 编写的,而我使用的是 Eclipse...
    • 使用 Eclipse 内置的“外部化字符串”功能确实允许我从我的 GUI 文件中提取字符串并将它们放入资源中,但它仍然不会生成类型安全的类.我所追求的是一个工具来实际构建 code 与我的字符串,而不是 only 从资源包中提取字符串。
    【解决方案3】:

    您是否正在寻找能够解析 XML 文件并生成类似“类似结构”对象的 Java 实例(如 JAXP 和 JAXB)的东西?

    【讨论】:

    • 我更喜欢不需要自己定义 xml 方案和创建解析代码的东西——因为我只想要非常简单的对象(结构,或多或少,尽管有 String 属性) 我希望已经有了一些东西。
    【解决方案4】:

    我遇到了 ResGen,它给定资源包 XML 文件生成 Java 文件,这些文件可用于以类型安全的方式访问资源。

    http://eigenbase.sourceforge.net/resgen/

    【讨论】:

    • 这看起来很有希望——正是我想要的那种东西。我们目前没有使用 ant 进行构建,但这可能值得迈出这一步……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多