Где осуществляется локализация в коде Eclipse? - PullRequest
3 голосов
/ 24 марта 2009

У меня есть представление в приложении Eclipse RCP. Это представление имеет локализованное имя% view.name с переводом в файле plugin.properties на «My View Part».

Я изучаю исходный код Eclipse, чтобы понять, как работает интернационализация. До сих пор я не смог найти, в какой момент значение из файла свойств считывается и присваивается в качестве имени представления.

Если я начну с части чтения ресурса, я вижу, что класс ManifestLocalization читает файл свойств, но я не могу найти, где он используется.

Если я начну с присвоения имени, я вижу, что класс TableReader получает имя части представления, но оно уже локализовано. Я также видел, что Eclipse преобразует этот plugin.xml в некоторый сериализованный объект в некоторый момент. Может быть, это сделано из соображений производительности?

Итак, мой вопрос, в какое время эта строка "% view.name" преобразуется в "Часть моего просмотра"

Ответы [ 2 ]

3 голосов
/ 01 апреля 2009

Существует как минимум два механизма, поддерживающих локализацию в затмении: NLS и org.eclipse.core.runtime.registry.IConfigurationElement. Интересующая вас часть встречается в IConfigurationElement.

Когда вызывается IConfigurationElement.getAttribute(String key), метод ResourceTranslator.getResourceString() использует заголовок Bundle-Localization в манифесте OSGi, чтобы найти правильный файл свойств (обычно это plugin${locale}.properties) и запись в файле свойств.

Вы можете получить то, что на самом деле находится в файле plugin.xml, вызвав вместо этого метод getAttributeAsIs(String key).

0 голосов
/ 29 марта 2009

Это может варьироваться в зависимости от конкретной версии Eclipse, но похоже, что перевод происходит в ResourceTranslator.getResourceString (Bundle, String, ResourceBundle)

Для вклада части представления это происходит, когда манифест плагина загружается как часть ExtensionRegistry.addContribution ().

Вы правы в том, что переведенная версия кэшируется. Если вы установите точки останова в методах, которые я упомянул, вы заметите, что они запускаются только при первой инициализации рабочего пространства. Чтобы снова запустить их, необходимо очистить область конфигурации рабочей области.

...