Eclipse RCP 国际化分离插件

3

没有教程提供如何创建和使用国际化插件片段的具体示例。我需要plugin.xml文件和源代码文件的翻译。尝试理解翻译放在哪里,以及国际化门面放在哪里。

1. 该片段如何适用于多插件企业应用程序,更重要的是,所有这些插件如何将其字符串外部化到片段中的适当文件夹中?

2. 那么外部JAR文件呢? 机制如何为外部资源提供翻译支持?

3. 冒着很大的风险,是否可以提供viewperspective的独立翻译? 不一定是在运行时,因为我知道bundle不能动态切换。

2个回答

5

有一些可用的帮助,这篇文章列出了过程。它基于Eclipse 2.0(!),但基本思想仍然是正确的。 甚至更好的文章是Vogella的这个教程

  1. 为了翻译每个插件,您需要创建一个插件片段。片段与一个主机插件相关联,因此您需要多个片段。尽管每个片段可以包含几种语言。如第一篇文章中的步骤5所述,语言由文件夹结构分隔。

  2. 我猜您是指非Eclipse Java jar,是吗?如果是这样,那就是完全不同的过程,最好适用于带有Java标记的单独问题。Oracle有可能会有所帮助的指南。但请记住,您只需要翻译用户暴露给的内容。因此,重构以将所有用户可见字符串保留到Eclipse插件可能是一个好主意。

  3. 您是否指的是视图/透视的名称?如果是,是的。您也可以将在plugin.xml中提供的信息翻译成其他语言。请参阅Vogellas文章第3章

编辑:

在第三点,我是指选择要翻译的View(例如通过视图菜单),然后重新启动应用程序,然后只有所述视图应该翻译

嗯...我想到了一种在理论上可以工作的方法,但我不确定它是否是最佳选择。 因此,翻译基于区域设置。给定语言环境,将选择某个翻译。如果找不到适当的翻译,则会选择默认值。

因此,如果您的View菜单更改了应用程序的语言环境,例如“ us-en-v1”,并且您只有一个View具有针对语言环境“ us-en-v1”的翻译,那么特定的View将被翻译,但应用程序的其余部分将使用默认值(可能是它们默认回到最接近的翻译,不记得确切内容了)。

然后,对于每个视图,您将创建一个新的翻译并使用唯一的区域设置。

这应该可以工作,但它滥用了翻译应该工作的方式,因此可能会导致问题。

曾经我做过类似的事情,一个应用程序在同一语言中使用,但是不同的客户有不同的词汇。因此,我们使用i18n通过定义自己的地区设置来使应用程序使用正确的术语。


在第3点中,我指的是选择要翻译的View(例如通过视图菜单),然后重新启动应用程序,然后只有该视图应该被翻译。 - Georgian
@GGrec 编辑了我的答案以回应评论 - Fredrik
有趣的想法,每个视图都有自定义区域设置。 - Georgian

2
我们正在使用http://babel.eclipse.org/babel/让人们翻译现有的资源。构建过程将所需的语言片段添加到工件中。每个插件都定义了自己的Messages.properties / Messages.java文件。 我猜你对外部jar包无能为力。
例如:
public final class MyMessages {
  // a string member as you reference it later in the code 
  public static String login_window_user_label;

  // static initializer which initalizes the fields in this class
  static {
    NLS.initializeMessages("mymessages", MyMessages.class);
  }
}

通常在同一个包中,您会有一个属性文件,比如这个:

mymessages.properties

其中包含字符串:

login_window_user_label = Enter username to login to {0}

在代码中,你需要执行以下操作:

String userNameLabel = NLS.bind(MyMessages.login_window_user_label, Environment.getName());

这就是我们如何使我们的捆绑包“可翻译”。构建会生成语言片段,而Babel服务器实例则允许翻译。

通过“外部JAR”我指的是我自己构建的JAR。许多业务逻辑被打包到客户端JAR中,但如果不翻译这些资源,国际化将毫无意义。 - Georgian
所以:
  1. 您可以使用Messages/.properties机制启用国际化。
  2. 结合Babel服务器(和构建过程),您可以创建片段。 那么问题还有什么呢?
- user166566
JAR问题已经解决,因为我将会构建包以及访问器类和消息绑定。 - Georgian
Babel 只用于翻译 Eclipse.org 项目,还是我也可以用它来翻译自己的项目? - Georgian
据我所知,您可以使用它来翻译包,无论它们是否来自org.eclipse命名空间。但是,您需要拥有自己的Babel服务器实例。 - user166566

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接