Språkmiljöspecifika filer

Fragment är ett praktiskt sätt att paketera språköversättningar. Låt oss titta närmare på katalogstrukturen som används för installation av språkmiljöspecifika översättningsfiler. Katalogstrukturen används oavsett om översatta filer paketeras i ett fragment eller om de levereras i det ursprungliga insticksprogrammet.

Det finns tre mekanismer för att hitta språkmiljöspecifika filer i ett insticksprogram.  

Det är viktigt att förstå vilken mekanism som används för att accessa en viss fil som måste översättas så att du vet vilket namn filen ska ha och var den ska placeras i filsystemet, relativt till insticksprogrammet.

Plattformens kärnmekanism

Plattformens kärna definierar en katalogstruktur som använder språkmiljöspecifika underkataloger för filer som är annorlunda i olika språkmiljöer. Översatta filer placeras i en katalog med namnet nl under insticksprogrammet. I följande installationsträd visas exempelvis ett trivialt insticksprogram (ingen kod) med språkmiljöspecifika översättningar av filen about.properties. De olika översättningarna visas som att de kommer från ett insticksprograms fragment snarare än från själva insticksprogrammet. Detta är typskt för leveransöversättningar som skiljer sig från grunden, men du kan också placera underkatalogen nl under själva insticksprogrammet.

acmeweb/
  eclipse/
    plugins/
      com.example.acme.acmewebsupport_1.0.0/
        plugin.xml
        about.properties    (standardspråkmiljö)
      com.example.acme.fragmentofacmewebsupport_1.0.0/
        fragment.xml   (ett fragment av com.example.acme.acmewebsupport 1.0.0)
        nl/
          fr/
            about.properties  (fransk språkmiljö)
            CA/
              about.properties  (fransk-kanadensisk språkmiljö)
            FR/
              EURO/
                about.properties (franska euros)
          en/
            about.properties  (engelsk språkmiljö)
            CA/
              about.properties  (engelsk-kanadensisk språkmiljö)
            US/
              about.properties (engelsk-amerikansk språkmiljö)
         de/
            about.properties (tysk språkmiljö) 

Filerna som ska översättas finns inte i JAR-filer. Varje fil ska ha exakt samma filnamn men finnas i underkataloger under nl i fragmentets (eller insticksprogrammets) rot.

Endast den mest specifika filen accessas vid körning. Filsökvägarna genomsöks som en del av mekanismen Platform.find, IPluginDescriptor.find och Plugin.find. Låt oss t.ex. anta att standardspråkmiljön är en_CA och ett insticksprogram söker efter about.properties enligt följande:

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

Metoden returnerar en URL-adress motsvarande den första platsen där about.properties hittas enligt följande ordning:

com.example.acme.acmewebsupport_1.0.0/nl/en/CA/about.properties
com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/CA/about.properties
 ... 		<alla andra fragment>
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

Mekanismen används av insticksprogram för att söka efter välkända filnamn i andra insticksprogram. Detta inkluderar följande välkända filnamn:

(Obs!  Filerna plugin.properties och fragment.properties saknas alldeles tydligt i den här listan. De behandlas på ett något annorlunda sätt, vilket beskrivs nedan.)

Javas resurssamlingar

Den vanliga Java-hanteringen av egenskapsresurssamlingar används för andra filer. Översatta filer finns i en JAR-fil där varje egenskapsfil har ett språkmiljöspecifikt namn, t.ex. "message_en_CA.properties".  Filerna är i paketspecifika underkataloger och kan visas i själva insticksprogrammet eller i ett av dess fragment. Varje översatt egenskapsfil kan vara partisk eftersom sökningen av nycklar accessar en väldefinierad kedja av egenskapsfiler.

Mekanismen plugin.properties

Den mekanism som används för att översätta filen plugin.properties använder namngivningsreglerna för Javas resurssamlingar. Filerna måste emellertid finnas i insticksprogrammets rot eller i roten för ett fragment till det här insticksprogrammet. Samma regler gäller för översättningen av MANIFEST.MF.

Definiera NL-fragment

Utformningen av NL-fragment har utvecklats något sedan 2.1. Tidigare tillhandahölls alla översättningsfiler (inklusive plugin.properties) i en jar. Detta var inkonsekvent eftersom filen plugin.properties tillhandahölls i insticksprogrammets rot.
Om du vill anpassa ditt NL-fragment till den nya modellen tar du bort översättningsfilerna för plugin.properties från jar och placerar dem i fragmentets rot som syskon till fragment.xml. Den nya formen på NL-fragmentet för org.eclipse.ui.workbench ser exempelvis ut som följer:

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