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    (locale 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  (locale francês)
            CA/
              about.properties  (locale francês canadense)
            FR/
              EURO/
                about.properties (euros franceses da França)
          en/
            about.properties  (locale inglês)
            CA/
              about.properties  (locale inglês canadense)
            US/
              about.properties (locale inglês americano)
         de/
            about.properties (locale 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.find e Plugin.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 localizado 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.xml 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

Avisos legais.