Os fragmentos são uma maneira conveniente de constituir pacotes de traduções em idioma nacional. Vejamos mais propriamente a estrutura de directórios usada para instalar ficheiros de tradução específicos de locale. Esta estrutura de directórios é usada independentemente de os ficheiros traduzidos constituírem um pacote num fragmento ou serem disponibilizados no plug-in original.
Há três mecanismos para localizar ficheiros específicos de locale num plug-in.
É importante compreender qual o mecanismo utilizado para aceder a determinado ficheiro que tenha que ser traduzido para que saibamos que nome dar ao ficheiro e onde o colocar no sistema de ficheiros em relação ao plug-in.
O núcleo da plataforma define uma estrutura de directórios que utiliza subdirectórios específicos de locale para ficheiros que sejam diferentes em locale. Os ficheiros traduzidos são colocados num directório chamado nl abaixo do plug-in. Por exemplo, a árvore de instalação seguinte mostra um plug-in trivial (sem código) com traduções específicas de locale do respectivo ficheiro about.properties. As diversas traduções são apresentadas como oriundas de um fragmento de plug-in e não do plug-in propriamente dito. Isto é habitual na expedição de traduções separadamente da base, mas também se pode colocar o subdirectório nl abaixo do próprio plug-in.
acmeweb/ eclipse/ plugins/ com.example.acme.acmewebsupport_1.0.0/ plugin.xml about.properties (locale predefinido) com.example.acme.fragmentofacmewebsupport_1.0.0/ fragment.xml (fragmento de com.example.acme.acmewebsupport 1.0.0) nl/ fr/ about.properties (locale francês) CA/ about.properties (locale francês do Canadá) FR/ EURO/ about.properties (Euros de França) en/ about.properties (locale inglês) CA/ about.properties (locale inglês do Canadá) US/ about.properties (locale inglês dos EUA) de/ about.properties (locale alemão)
Os ficheiros a traduzir não estão contidos em ficheiros JAR. Cada ficheiro deve ter exactamente o mesmo nome de ficheiro, mas deve encontrar-se em subdirectórios abaixo do subdirectório nl na raiz do fragmento (ou do plug-in).
Só o ficheiro mais específico é acedido durante a execução. Os caminhos de ficheiros são pesquisados como parte dos mecanismosPlatform.find, IPluginDescriptor.find e Plugin.find. Por exemplo, suponhamos que o locale predefinido é en_CA, e um plug-in pesquisa por about.properties como se segue:
algumPlugin.find("$nl$/about.properties");
O método devolve um URL correspondente ao primeiro lugar onde about.properties é encontrado segundo esta 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 ... <outros fragmentos> 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
Este mecanismo é utilizado por plug-ins para pesquisar nomes de ficheiros bem conhecidos dentro de outros plug-ins. Isto inclui os seguintes nomes de ficheiros bem conhecidos:
(Nota: plugin.properties e fragment.properties estão significativamente ausentes desta lista. São processados de maneira ligeiramente diferentes como se descreve infra.)
O tratamento Java padrão de agrupamentos de recursos de propriedades é utilizado para outros ficheiros. Os ficheiros traduzidos estão contidos num ficheiro JAR, em que cada ficheiro de propriedades tem um nome específico de locale como, por exemplo, "message_en_CA.properties". Os ficheiros encontram-se em subdirectórios específicos de pacotes e podem aparecer no próprio plug-in ou num dos seus fragmentos. Cada ficheiro de propriedades traduzido poderá ser parcial dado que a busca de chaves acede a uma cadeia bem definida de ficheiros de propriedades.
A forma dos fragmentos NL evoluiu um pouco desde a versão 2.1.
Anteriormente, todos os ficheiros de tradução (incluindoplugin.properties) eram fornecidos num ficheiro JAR.
Isto era incoerente dado que o ficheiro plugin.properties era fornecido na raiz do plug-in.
Para adaptar o fragmento NL ao novo modelo, remova os ficheiros de tradução plugin.properties do JAR e coloque-os na raiz do fragmento como irmãos de fragment.xml.
Por exemplo, a nova forma do fragmento NL para org.eclipse.ui.workbench é a seguinte:
org.eclipse.ui.workbench.nl/ fragment.xml plugin_fr.properties plugin_pt_BR.properties ... nl1.jar