Pergunta

Eu tenho uma visão contribuiu em um aplicativo Eclipse RCP. Esta visão tem um nome% view.name localizada, com a tradução em um arquivo plugin.properties para "My View Part".

Eu estou olhando para o código fonte do Eclipse para entender como a internacionalização funciona. Até agora, eu não tenho sido capaz de encontrar em que ponto o valor do arquivo de propriedades é lido e atribuído como o nome da vista.

Se eu começar a partir da parte de leitura de recursos, vejo que o ManifestLocalization classe lê o arquivo de propriedades, mas não consigo encontrar onde ele é usado.

Se eu começar a partir da atribuição de nome, eu vejo que a classe TableReader recebe o nome da peça vista, mas ele já está localizada. Vi também que Eclipse converte este plugin.xml em algum objeto serializado em algum ponto. Talvez ele é feito por motivos de desempenho?

Assim, a minha pergunta é: em que momento é este string "% view.name" convertido em "My View Part"

Foi útil?

Solução

Há pelo menos dois mecanismos de suporte de localização no eclipse: os NLS, e o org.eclipse.core.runtime.registry.IConfigurationElement. A parte que você está interessado em ocorre no IConfigurationElement.

Quando o IConfigurationElement.getAttribute(String key) é chamado, o método ResourceTranslator.getResourceString() usa o cabeçalho Bundle-Localization no OSGi manifesto para encontrar o arquivo de propriedades correta (geralmente este é plugin${locale}.properties) e entrada no arquivo de propriedades.

Você pode obter o que está realmente no arquivo plugin.xml chamando o método getAttributeAsIs(String key) vez.

Outras dicas

Isso pode variar, dependendo da versão específica do Eclipse, mas parece que a tradução está acontecendo em ResourceTranslator.getResourceString (Bundle, String, ResourceBundle)

Para uma parte contribuição vista, isto acontece quando o plug-in manifesto é carregado como parte de ExtensionRegistry.addContribution ().

Está certo que a versão traduzida é armazenada em cache. Se você definir pontos de interrupção nos métodos que eu mencionei, você vai perceber que eles só dispara quando o espaço de trabalho é inicializado pela primeira vez. A fim de fazê-los disparar de novo, você tem que limpar a área de configuração do espaço de trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top