2009-03-24 6 views
3

J'ai une vue contribuée dans une application Eclipse RCP. Cette vue a un nom localisé% view.name, avec la traduction d'un fichier plugin.properties dans "My View Part". Je regarde le code source d'Eclipse pour comprendre le fonctionnement de l'internationalisation. Jusqu'à présent, je n'ai pas pu trouver à quel point la valeur du fichier de propriétés est lue et affectée comme nom de la vue. Si je commence à partir de la partie de lecture de ressources, je vois que la classe ManifestLocalization lit le fichier de propriétés, mais je ne trouve pas où elle est utilisée.Où la localisation est-elle effectuée dans le code Eclipse?

Si je commence à partir de l'attribution de nom, je vois que la classe TableReader obtient le nom de la partie vue, mais elle est déjà localisée. J'ai également vu qu'Eclipse convertit ce plugin.xml en un objet sérialisé à un moment donné. Peut-être que c'est fait pour des raisons de performance?

Ma question est, à quel moment est cette chaîne « % view.name » transformé en « My View partie »

Répondre

3

Il existe au moins deux mécanismes prenant en charge la localisation dans Eclipse: le NLS et le org.eclipse.core.runtime.registry.IConfigurationElement. La partie qui vous intéresse se produit dans le IConfigurationElement.

Lorsque la IConfigurationElement.getAttribute(String key) est appelée, la méthode ResourceTranslator.getResourceString() utilise l'en-tête Bundle-localisation dans les OSGi manifestes pour trouver le fichier de propriétés correctes (ce qui est habituellement plugin${locale}.properties) et l'entrée dans le fichier de propriétés.

Vous pouvez obtenir ce qui se trouve réellement dans le fichier plugin.xml en appelant la méthode getAttributeAsIs(String key) à la place.

+0

Comme le temps est sur le point d'expirer, cela semble être le placard à la vérité –

+0

Trouvé ceci dans les javadocs Eclipse RCP. * Obsolète * La méthode est équivalente à la getAttribute (String). Contrairement à sa description, cette méthode renvoie une valeur traduite. Utilisez plutôt la méthode getAttribute (String). – Peteter

0

Cela peut varier en fonction de la version spécifique d'Eclipse, mais il semble que la traduction est passe dans ResourceTranslator.getResourceString (Bundle, String, ResourceBundle)

Pour une contribution de partie de vue, cela se produit lorsque le manifeste du plug-in est chargé dans le cadre de ExtensionRegistry.addContribution().

Vous avez raison de dire que la version traduite est mise en cache. Si vous définissez des points d'arrêt dans les méthodes que j'ai mentionnées, vous remarquerez qu'ils se déclenchent uniquement lorsque l'espace de travail est initialisé pour la première fois. Pour les réactiver, vous devez effacer la zone de configuration de l'espace de travail.

Questions connexes