eclipse - 如何国际化java源代码?

标签 eclipse internationalization antlr abstract-syntax-tree

编辑 : 我完全重新写了这个问题,因为在我的前两个版本中似乎我不够清楚。 感谢您到目前为止的建议。

我想国际化源代码 对于教程项目(请注意,不是运行时应用程序)。这是一个示例(在 Java 中):

/** A comment */
public String doSomething() {
  System.out.println("Something was done successfully");
}

在 English ,然后有法语版本是这样的:
/** Un commentaire */
public String faitQuelqueChose() {
  System.out.println("Quelque chose a été fait avec succès.");
}

等等。然后在某处有类似属性文件的东西,可以使用常用工具编辑这些翻译,例如:
com.foo.class.comment1=A comment
com.foo.class.method1=doSomething
com.foo.class.string1=Something was done successfully

对于其他语言:
com.foo.class.comment1=Un commentaire
com.foo.class.method1=faitQuelqueChose
com.foo.class.string1=Quelque chose a été fait avec succès.

我试图找到最简单、最有效、最不引人注目的方法,以最少的手动繁重工作(除了显然翻译实际文本)来做到这一点。最好在 Eclipse 下工作。例如,原始代码将用英语编写,然后外部化(到属性,最好保持原始源代码不变),翻译(人工)然后重新生成(作为单独的源文件/项目)。

我发现的一些小径(除了 AlexS 建议的):
  • AntLR ,语言解析器/生成器。好像有支持Eclipse plugin
  • 使用 Eclipse's AST (抽象语法树),我猜想构建某种插件。

  • 我只是很惊讶现在还没有一个工具可以做到这一点。

    最佳答案

    我会使用唯一的字符串作为方法名(或者任何你想被本地化版本替换的东西。

    public String m37hod_1() {
      System.out.println(m355a6e_1);
    }
    

    然后我会为每种语言定义一个属性文件,如下所示:
    m37hod_1=doSomething
    m355a6e_1="Something was done successfully"
    

    然后我会编写一个小程序来解析源文件并替换字符串。所以一切都在 eclipse 之外。

    或者我会使用 Ant 任务 Replace和属性文件,而不是独立的翻译程序。
    类似的东西:
    <replace 
        file="${src}/*.*"
        value="defaultvalue"
        propertyFile="${language}.properties">
      <replacefilter 
        token="m37hod_1" 
        property="m37hod_1"/>
      <replacefilter 
        token="m355a6e_1" 
        property="m355a6e_1"/>
    </replace>
    

    使用其中一种方法,您无需在教程中解释任何有关本地化的内容(除非您愿意),但可以专注于您的实际主题。

    关于eclipse - 如何国际化java源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103976/

    相关文章:

    scala - 从 Antlr 生成 Scala 代码

    ANTLR 走错了分支

    android - 导出 Android 应用程序究竟有什么作用?

    mysql - 如何忽略eclipse中的 'table already exists'错误

    java - Eclipse 崩溃 : "An error has occurred. See the log file"

    java - "export as runnable JAR"选项丢失

    html - 您如何处理带有标记的文本翻译?

    graph - Open Graph 对象国际化 : no scrape/missing parameter fb_locale

    .net - 日期格式和客户端-服务器交互

    plugins - 使用 ANTLR4 插件的 Intellij 14 中的 java.lang.NoClassDefFoundError