poniedziałek, 8 grudnia 2008

zastosowanie fragmentów do tłumaczenia pluginów

Załóżmy, że chcesz mieć aplikację ze stroną intro. Skorzystałeś z plugina org.eclipse.ui.intro i np. żeby mieć mniej pracy dodałeś jeszcze org.eclipse.ui.intro.universal. Aplikacja ma być zlokalizowana na język polski, ale okazuje się, że stworzona strona intro wygląda mniej więcej tak:

mamy więc przynajmniej 2 teksty, które się nie przetłumaczyły i nie mamy wpływu na ich treść. Są to: 'overview' oraz 'workbench'.

Teksty te znajdują się w pluginie org.eclipse.ui.intro.universal, a konkretniej w pliku Messages.properties. Ale przecież nie będziesz modyfikował żródeł standardowego plugina eclipsowego tylko po to, żeby zaczął on mówić po polsku. Co możesz zrobić? Fajnie byłoby móc rozszerzyć istniejący plugin bez możliwości ingerowania w jego ciało. Okazuje się, że można to zrobić i jest to całkiem proste! Wystarczy wykorzystać do tego tzw. plugin fragment.

Czym jest fragment? Jest to nic innego jak opcjonalna część plugina, która może być dostarczona do dystrybucji wraz z pluginem. Fragment może zawierać dodatkowe biblioteki, zasoby (obrazki) oraz rozszerzenia (extensions) - nie może jednak nadpisywać istniejących w pluginie macierzystym klas. Kiedy fragment jest wczytywany przez eclipsa, jest on logicznie (nie fizycznie!) łączony z pluginem macierzystym. Nowe biblioteki i zasoby znajdujące się we fragmencie są automatycznie widoczne w pluginie, z którym powiązany jest dany fragment i tym samym plugin może z nich korzystać.

Tak więc jeśli w pluginie znajduje się plik Messages.properties, to jeśli znajdowałby się tam również plik Messages_pl.properties, plugin potrafiłby mówić w języku polskim! Zatem do dzieła:

new -> other -> Fragment project
project name: org.eclipse.ui.intro.universal.nl.fragment

->next
Host plug-in -> Plug-in ID: org.eclipse.ui.intro.universal
-> finish

w nowo powstałym fragmencie należy w źródłach utworzyć pakiet
org.eclipse.ui.internal.intro.universal i następnie dodać do niego plik Messages_pl.properties, który powstał przez skopiowanie pliku Messages.properties z pluginu org.eclipse.ui.intro.universal. Docelowo otrzymujemy taką strukturę:




Tłumaczymy kolejne linie w Messages_pl.properties lub tylko te, które są potrzebne, m. in. workbench oraz overview, które nam się nie podobały na pierwszym zrzucie.

Gdy plik zostanie przetłumaczony, należy zapewnić, żeby fragment org.eclipse.ui.intro.universal.nl.fragment znajdował się w classpath uruchamianego produktu. Efekt końcowy wygląda tak:




podsumowanie
Za pomocą plugin fragmentu można rozszerzyć plugin bazowy, dodać do niego różne zasoby. Jednym z częściej wykorzystywanych zastosowań fragmentów jest lokalizowanie plugina: plików .properties oraz obrazków specyficznych dla danego kraju.

Brak komentarzy: