【问题标题】:Java: Static string localizationJava:静态字符串本地化
【发布时间】:2012-03-29 11:45:34
【问题描述】:

是否有任何工具可以将 java .properties 文件编译为可以在 Java EE (tomcat) 应用程序中使用的类?类似于 Eclipse 插件生成静态 R.strings 类的 android。

我找到了这篇文章:

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

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

【问题讨论】:

标签: java localization


【解决方案1】:

我从未听说过这种工具。 GWT 有一个很棒的基于延迟绑定的技术,但它不是您正在寻找的东西。不过我认为可以为此类任务实现一个基本的代码生成器。

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

【讨论】:

  • +1 用于使用小型 java 应用程序生成代码,您可以从 ant 任务中自动调用该任务,您可以在 eclipse 中将其添加为自动调用的构建器。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    ResourceBundle 呢?

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

    【讨论】:

    • 与最近对这个问题的另一个回答一样,这并没有回答这个问题。你描述的是它通常是如何完成的。但是在 android 中,您会在编译时 (R.id) 中获得一个包含所有资源的生成类。如果未定义 property1,您将在此处获得运行时异常。如果它没有在 Android 中定义,你会得到一个编译时错误。
    【解决方案4】:

    我认为可以在自定义的 maven 插件(或 Ant 任务)中使用 ANTLR 为属性文件编写一个非常简单的语法,该插件仅在编译步骤之前生成 Java 源代码。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        Compiler Assisted Localization (CAL10N) 与您的要求不完全一致,但可能会有所帮助。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-28
          • 1970-01-01
          • 2014-11-21
          相关资源
          最近更新 更多