Arquivos específicos do locale

Fragmentos são uma maneira conveniente de empacotar traduções do idioma nacional.  Vamos olhar mais detalhadamente a estrutura de diretórios utilizada para instalação dos arquivos de tradução específicos do locale.  Essa estrutura de diretórios é utilizada independente dos arquivos traduzidos serem empacotados em um fragmento ou enviados no plug-in original.

Há três mecanismos para localizar arquivos específicos do código do idioma em um plug-in.  

É importante entender o mecanismo utilizado para acessar um determinado arquivo que deve ser traduzido, para que você saiba que nome dar a ele e onde colocá-lo no sistema de arquivos relativo ao plug-in.

Mecanismo núcleo da plataforma

O núcleo da plataforma define uma estrutura de diretórios que utiliza subdiretórios específicos do locale para arquivos que diferem por locale.  Os arquivos traduzidos são colocados em um diretório chamado nl sob o plug-in.  Por exemplo, a seguinte árvore de instalação mostra um plug-in trivial (sem código) com traduções específicas do locale de seu arquivo about.properties.  As diversas traduções são mostradas como originadas de um fragmento de plug-in em vez do próprio plug-in.  Isso é típico para o fornecimento de traduções separadamente da base, mas também é possível colocar o subdiretório nl sob o próprio plug-in.

acmeweb/
  eclipse/
    plugins/
      com.example.acme.acmewebsupport_1.0.0/
        plugin.xml
        about.properties    (código do idioma padrão)
      com.example.acme.fragmentofacmewebsupport_1.0.0/
        fragment.xml   (um fragmento de com.example.acme.acmewebsupport 1.0.0)
        nl/
          fr/
            about.properties  (código do idioma francês)
            CA/
              about.properties  (código do idioma francês canadense)
            FR/
              EURO/
                about.properties (euros franceses da França)
          en/
            about.properties  (código do idioma inglês)
            CA/
              about.properties  (código do idioma francês canadense)
            US/
              about.properties (código do idioma inglês americano)
         de/
            about.properties (código do idioma alemão) 

Os arquivos a serem traduzidos não estão contidos em arquivos JAR.  Cada arquivo deve ter exatamente o mesmo nome de arquivo, mas estar localizado em subdiretórios sob o subdiretório nl na raiz do fragmento (ou do plug-in).

Apenas o arquivo mais específico é acessado em tempo de execução.  Os caminhos do arquivo são procurados como parte do mecanismoPlatform.find, IPluginDescriptor.findePlugin.find.  Por exemplo, suponha que o locale padrão seja en_CA, e um plug-in pesquise por about.properties como a seguir:

somePlugin.find("$nl$/about.properties");

O método retornará um URL correspondente ao primeiro local que about.properties for encontrado de acordo com a seguinte ordem:

com.example.acme.acmewebsupport_1.0.0/nl/en/CA/about.properties
com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/CA/about.properties
 ...  		<qualquer outro fragmento>
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

Esse mecanismo é utilizado por plug-ins para procurar nomes de arquivos reconhecidos dentro de outros plug-ins.  Isso inclui os seguintes nomes de arquivos reconhecidos:

(Nota:  Os arquivos plugin.properties e fragment.properties estão visivelmente ausentes dessa lista. Eles são tratados de uma maneira levemente diferente, descrita a seguir.)

Pacotes de Recursos Java

O tratamento Java padrão dos pacotes de recursos de propriedades é utilizado para outros arquivos.  Os arquivos traduzidos estão contidos em um arquivo JAR e cada arquivo de propriedades possui um nome específico do locale, tal como "message_en_CA.properties".  Os arquivos estão em subdiretórios específicos do pacote e podem aparecer no próprio plug-in ou em um de seus fragmentos.  Cada arquivo de propriedades traduzido pode ser parcial desde que a pesquisa de chaves acesse uma cadeia bem definida de arquivos de propriedades.

O mecanismo plugin.properties

O mecanismo utilizado para traduzir arquivos plugin.properties utiliza a convenção de denominação dos pacotes de recursos Java. No entanto, os arquivos deve estar localizados na raiz do plug-in ou na raiz de um fragmento desse plug-in. As mesmas regras se aplicam à tradução de MANIFEST.MF.

Definindo Fragmentos NL

A forma dos fragmentos NL se desenvolveu levemente desde o 2.1. Anteriormente, todos os arquivos de tradução (incluindo o plugin.properties) eram fornecidos em um jar. Isso era inconsistente desde que o arquivo plugin.properties era fornecido na raiz do plug-in.
Para adaptar seu fragmento NL ao novo modelo, remova os arquivos de tradução plugin.properties a partir de jar e os coloque na raiz do fragmento como irmãos de fragment.xml. Por exemplo, a nova forma do fragmento NL para org.eclipse.ui.workbench é o seguinte:

  org.eclipse.ui.workbench.nl/
     fragment.xml
     plugin_fr.properties
     plugin_pt_BR.properties
     ...
     nl1.jar