Вопрос

У меня есть внесенный просмотр в приложении Eclipse RCP.Это представление имеет локализованное название %view.name, с переводом в файле plugin.properties на "Часть моего представления".

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

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

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

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

Это было полезно?

Решение

В eclipse существует по крайней мере два механизма, поддерживающих локализацию: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) метод вместо этого.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top