Фрагменты используются для создания пакетов переводов на различные языки. Рассмотрим более подробно структуру каталогов, которая применяется для установки файлов переводов. Данная структура каталогов используется независимо от того, объединены ли переведенные файлы в фрагмент или они входят в состав исходного модуля.
Для добавления переведенных файлов в модуль могут использоваться три механизма.
Необходимо понимать, какой механизм используется для доступа к файлу, который необходимо перевести, чтобы знать, как правильно следует назвать файл и в каком каталоге модуля его следует сохранить.
Этот механизм определяет структуру каталогов, которая использует отдельные подкаталоги для файлов, зависящих от локали. Переведенные файлы сохраняются в каталоге nl каталога модуля. Например, следующее дерево установки показывает упрощенный модуль (без кода) вместе с переводом файла about.properties для всех локалей. Как показано, различные переводы берутся из фрагмента модуля, а не самого модуля. Обычно переводы хранятся отдельно от основных файлов, хотя подкаталог nl можно перенести и в каталог модуля.
acmeweb/ eclipse/ plugins/ com.example.acme.acmewebsupport_1.0.0/ plugin.xml about.properties (локаль по умолчанию) com.example.acme.fragmentofacmewebsupport_1.0.0/ fragment.xml (фрагмент com.example.acme.acmewebsupport 1.0.0) nl/ fr/ about.properties (локаль французского языка) CA/ about.properties (локаль французского для Канады) FR/ EURO/ about.properties (локаль французского для Франции) en/ about.properties (локаль английского языка) CA/ about.properties (локаль английского для Канады) US/ about.properties локаль английского для США) de/ about.properties (локаль немецкого языка)
Файлы, предназначенные для перевода, не включены в файлы JAR. Все файлы имеют одинаковые имена, но расположены в отдельных каталогах подкаталога nl в корне фрагмента (или модуля).
В ходе выполнения программы используется только один файл, соответствующий данной локали. Для поиска путей к файлам используется механизм Platform.find, IPluginDescriptor.findиPlugin.find. Если по умолчанию используется локаль en_CA, то модуль осуществляет поиск about.properties следующим образом:
somePlugin.find("$nl$/about.properties");
Метод возвращает адрес, соответствующий первому найденному файлу about.properties в следующем порядке:
com.example.acme.acmewebsupport_1.0.0/nl/en/CA/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/CA/about.properties ... <any other fragments> com.example.acme.acmewebsupport_1.0.0/nl/en/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/about.properties ... com.example.acme.acmewebsupport_1.0.0/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/about.properties
Данный механизм используется для поиска известных имен файлов в других модулях. К ним относятся следующие имена:
(Примечание: Файлы plugin.properties и fragment.properties намеренно удалены из этого списка. Для них используется несколько иной механизм обработки.)
Стандартный механизм обработки комплектов ресурсов свойств используется для других файлов. Переведенные файлы включены в файл JAR, а каждому файлу свойств присвоено имя, соответствующее определенной локали, например, "message_en_CA.properties". Файлы находятся в подкаталогах соответствующих пакетов и могут присутствовать в самом модуле или одном из его фрагментов. Любой переведенный файл свойств может быть неполным, поскольку при поиске ключей просматривается строго определенная цепочка файлов свойств.
Формат языковых фрагментов немного изменен по сравнению с версией 2.1.
Ранее все файлы для перевода (в том числе plugin.properties) входили в состав файла jar.
Это противоречило тому, что файл plugin.properties находился в корне модуля.
Для того чтобы настроить языковой фрагмент для новой модели, следует удалить файлы перевода plugin.properties из файла jar и поместить их в корень фрагмента на одном уровне с файлом fragment.xml.
Например, новая форма языкового фрагмента для org.eclipse.ui.workbench выглядит следующим образом:
org.eclipse.ui.workbench.nl/ fragment.xml plugin_fr.properties plugin_pt_BR.properties ... nl1.jar