3

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

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

如果我从资源读取部分开始,我看到类 ManifestLocalization 读取了属性文件,但是我找不到它的使用位置。

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

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

4

2 回答 2

3

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 文件中的实际内容。

于 2009-04-01T09:51:51.237 回答
0

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

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

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

于 2009-03-28T21:06:53.127 回答