我在Eclipse RCP应用程序中有一个贡献的视图。此视图具有本地化名称%view.name,plugin.properties文件上的转换为“我的视图部件”。
我正在研究Eclipse的源代码,以了解国际化的工作原理。到目前为止,我还无法找到属性文件中的值被读取并指定为视图名称。
如果我从资源读取部分开始,我看到类ManifestLocalization读取属性文件,但我找不到它的使用位置。
如果我从名称赋值开始,我看到TableReader类获取视图部分的名称,但它已经本地化。我还看到Eclipse在某些时候将这个plugin.xml转换为一些序列化对象。也许这是出于性能原因而做的?
所以我的问题是,这个“%view.name”字符串在什么时候被转换为“我的视图部分”
答案 0 :(得分: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文件中的实际内容。
答案 1 :(得分:0)
这可能因Eclipse的特定版本而异,但看起来像是在ResourceTranslator.getResourceString(Bundle,String,ResourceBundle)中进行翻译
对于视图部件贡献,当插件清单作为ExtensionRegistry.addContribution()的一部分加载时会发生这种情况。
您的翻译版本是高速缓存的。如果您在我提到的方法中设置断点,您会注意到它们仅在首次初始化工作空间时触发。为了使它们再次触发,您必须清除工作区的配置区域。