【问题标题】:Where is localization done in the Eclipse code?Eclipse 代码中的本地化在哪里?
【发布时间】:2010-10-15 03:51:46
【问题描述】:

我在 Eclipse RCP 应用程序中有一个贡献视图。此视图具有本地化名称 %view.name,并在 plugin.properties 文件中翻译为“我的视图部分”。

我正在研究 Eclipse 的源代码以了解国际化的工作原理。到目前为止,我还没有找到属性文件中的值在什么时候被读取并分配为视图的名称。

如果从资源读取部分入手,看到ManifestLocalization类读取了properties文件,但是找不到使用的地方。

如果我从名称分配开始,我看到 TableReader 类获取了视图部分的名称,但它已经本地化了。我还看到 Eclipse 在某个时候将此 plugin.xml 转换为一些序列化对象。也许是出于性能原因?

所以我的问题是,这个“%view.name”字符串是什么时候转换成“My View Part”的

【问题讨论】:

    标签: eclipse localization rcp


    【解决方案1】:

    在 Eclipse 中至少有两种支持本地化的机制:NLS 和org.eclipse.core.runtime.registry.IConfigurationElement。您感兴趣的部分出现在IConfigurationElement

    当调用IConfigurationElement.getAttribute(String key) 时,ResourceTranslator.getResourceString() 方法使用 OSGi 清单中的 Bundle-Localization 标头来查找正确的属性文件(通常是 plugin${locale}.properties)和属性文件中的条目。

    您可以通过调用getAttributeAsIs(String key) 方法来获取plugin.xml 文件中的实际内容。

    【讨论】:

    • 随着时间的流逝,这似乎是接近真相的壁橱
    • 在 Eclipse RCP javadocs 中发现:已弃用。 该方法等效于 getAttribute(String)。与其描述相反,此方法返回一个翻译后的值。请改用 getAttribute(String) 方法。
    【解决方案2】:

    这可能因 Eclipse 的特定版本而异,但看起来翻译正在 ResourceTranslator.getResourceString(Bundle, String, ResourceBundle) 中进行

    对于视图部分贡献,当插件清单作为 ExtensionRegistry.addContribution() 的一部分加载时会发生这种情况。

    翻译版本被缓存是正确的。如果您在我提到的方法中设置断点,您会注意到它们仅在首次初始化工作区时触发。为了让它们再次触发,您必须清除工作区的配置区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多