Файлы, зависящие от локали

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

Для добавления переведенных файлов в модуль могут использоваться три механизма.  

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

Основной механизм платформы

Этот механизм определяет структуру каталогов, которая использует отдельные подкаталоги для файлов, зависящих от локали.  Переведенные файлы сохраняются в каталоге 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 намеренно удалены из этого списка. Для них используется несколько иной механизм обработки.)

Комплекты ресурсов Java

Стандартный механизм обработки комплектов ресурсов свойств используется для других файлов.  Переведенные файлы включены в файл JAR, а каждому файлу свойств присвоено имя, соответствующее определенной локали, например, "message_en_CA.properties".  Файлы находятся в подкаталогах соответствующих пакетов и могут присутствовать в самом модуле или одном из его фрагментов.  Любой переведенный файл свойств может быть неполным, поскольку при поиске ключей просматривается строго определенная цепочка файлов свойств.

Механизм plugin.properties

Механизм, применяемый для преобразования файлов plugin.properties, использует соглашение об именах для комплектов ресурсов Java. Однако файлы должны быть расположены в корне модуля или в корне фрагмента данного модуля. Для перевода MANIFEST.MF применяются аналогичные правила.

Определение языковых фрагментов

Формат языковых фрагментов немного изменен по сравнению с версией 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