Dove si trova la localizzazione effettuata nel codice di Eclipse?
-
21-08-2019 - |
Domanda
Ho una visione contribuito in un'applicazione Eclipse RCP. Questo punto di vista ha un nome localizzato% view.name, con la traduzione su un file plugin.properties a "My View Part".
Sto cercando nel codice sorgente di Eclipse per capire come funziona l'internazionalizzazione. Finora, non sono stato in grado di trovare a che punto il valore dal file delle proprietà viene letto e assegnato come il nome della vista.
Se inizio dalla parte lettura risorsa, vedo che il ManifestLocalization classe di legge il file delle proprietà, ma non riesco a trovare dove viene utilizzato.
Se parto dalla assegnazione del nome, vedo che la classe TableReader prende il nome della parte vista, ma è già localizzato. Ho visto anche che Eclipse converte questo plugin.xml in qualche oggetto serializzato a un certo punto. Forse è fatto per motivi di prestazioni?
Quindi la mia domanda è, a che ora è questa "% view.name" stringa convertita in "My View Part"
Soluzione
C'è almeno due meccanismi di supporto localizzazione in Eclipse: NLS e la org.eclipse.core.runtime.registry.IConfigurationElement
. La parte siete interessati a verifica nel IConfigurationElement
.
Quando il IConfigurationElement.getAttribute(String key)
viene chiamato, il metodo ResourceTranslator.getResourceString()
utilizza l'intestazione Bundle-localizzazione nel OSGi manifesto per trovare il file delle proprietà corrette (di solito questo è plugin${locale}.properties
) e l'ingresso nelle proprietà del file.
È possibile ottenere ciò che è effettivamente nel file plugin.xml chiamando il metodo getAttributeAsIs(String key)
invece.
Altri suggerimenti
Questo può variare a seconda della versione specifica di Eclipse, ma sembra che la traduzione sta accadendo in ResourceTranslator.getResourceString (Bundle, String, ResourceBundle)
Per un contributo parte vista, questo accade quando il manifesto plugin è caricato come parte di ExtensionRegistry.addContribution ().
Lei ha ragione che la versione tradotta viene memorizzato nella cache. Se si imposta i punti di interruzione nei metodi che ho citato, si noterà che essi fuoco solo quando il lavoro viene prima inizializzato. Al fine di rendere loro fuoco di nuovo, è necessario cancellare l'area di configurazione dell'area di lavoro.