Fragmenter er en nyttig måde at pakke nationale sproglige oversættelser på. I det følgende gennemgås den biblioteksstruktur, der benyttes ved installation af specifikke sprogfiler. Denne biblioteksstruktur bruges, uanset om de oversatte filer er pakket i et fragment eller leveret i den oprindelige plugin.
Der er tre mekanismer til brug for at finde de specifikke sprogfiler i en plugin.
Det er vigtigt at forstå, hvilke mekanismer der bruges til at få adgang til en given fil, som skal oversættes, så du ved, hvad filen skal hedde, og hvor den skal placeres i filsystemet i forhold til plugin'en.
Platformkernen definerer en biblioteksstruktur, der bruger sprogspecifikke underbiblioteker for filer, der adskiller sig ved sprogkonventionerne. Oversatte filer placeres i et bibliotek, der hedder nl under plugin'en. Følgende installationstræstruktur f.eks. viser en almindelig (ingen kode) plugin med sprogspecifikke oversættelser af filen about.properties. De forskellige oversættelser vises som kommende fra et plugin-fragment og ikke fra selve plugin'en. Det er en typisk måde at levere oversættelser separat fra basen, men du kan også placere nl-underbiblioteket under selve plugin'en.
acmeweb/ eclipse/ plugins/ com.example.acme.acmewebsupport_1.0.0/ plugin.xml about.properties (standardsprogkonvention) com.example.acme.fragmentofacmewebsupport_1.0.0/ fragment.xml (et fragment af com.example.acme.acmewebsupport 1.0.0) nl/ fr/ about.properties (Fransk sprogkonvention) CA/ about.properties (Fransk canadisk sprogkonvention) FR/ EURO/ about.properties (Fransk franske euro) en/ about.properties (Engelsk sprogkonvention) CA/ about.properties (Engelsk canadisk sprogkonvention) US/ about.properties (Engelsk amerikansk sprogkonvention) de/ about.properties (Tysk sprogkonvention)
De filer, der skal oversættes, findes ikke i JAR-filer. Hver fil bør have præcis det samme filnavn, men være placeret i underbiblioteker under nl-underbiblioteket i fragmentets (eller plugin'ens) rod.
Der er kun adgang til den meste specifikke fil ved runtime. Der søges i filstierne som en del af Platform.find-, IPluginDescriptor.find- og Plugin.find-mekanismerne. Antag f.eks., at standardsprogkonventionen er en_CA, og en plugin søger efter about.properties på følgende måde:
somePlugin.find("$nl$/about.properties");
Metoden returnerer en URL, der svarer til første plads. about.properties findes iht. følgende rækkefølge:
com.example.acme.acmewebsupport_1.0.0/nl/en/CA/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/CA/about.properties ... <andre fragmenter> 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
Denne mekanisme bruges af plugins til at søge efter kendte filnavne i andre plugins. Det omfatter følgende kendte filnavne:
(Bemærk: plugin.properties og fragment.properties indgår bemærkelsesværdigt ikke i denne liste. De behandles en smule anderledes. Se nedenfor.)
Java-standardhåndtering af egenskabsressourcebundter benyttes til andre filer. Oversatte filer opbevares i en JAR-fil, hvor hver egenskabsfil har et sprogspecifikt navn, f.eks. "message_en_CA.properties". Filerne er placeret i pakkespecifikke underbiblioteker og vises muligvis i selve plugin'en til et af dens fragmenter. Hver oversat egenskabsfil kan være delvis, da opslag efter nøgler giver adgang til en veldefineret kæde af egenskabsfiler.
Faconen på NL-fragmenter har udviklet sig en smule siden version 2.1.
Tidligere blev alle oversættelsesfiler (inkl. plugin.properties) stillet til rådighed i en jar-fil.
Men det skabte inkonsistens, da filen plugin.properties stilles til rådighed i plugin'ens rod.
For at tilpasse dit NL-fragment til den nye model skal du fjerne plugin.properties-oversættelsesfilerne fra jar-filen og placere dem i fragmentets rod som ligestillede objekter til fragment.xml.
Den nye facon på NL-fragmentet for org.eclipse.ui.workbench er følgende:
org.eclipse.ui.workbench.nl/ fragment.xml plugin_fr.properties plugin_pt_BR.properties ... nl1.jar