# RCP language packs



## Gast2 (24. Sep 2008)

Hallo 

welche language pack brauche ich für die nativen Dialoge bei einer RCP anwendung unter 3.2.2??



archive.eclipse.org/eclipse/downloads/drops/L-3.2_Language_Packs-200607121700/index.php

ich hab die RCP Runtime Binary Language Packs runtergeladen aber sind ja 20 neue plugins die ich da einfügen müsste??? Stimmt das???


----------



## foobar (24. Sep 2008)

Ich habe nur 3 Languagepacks installiert:

org.eclipse.jface.nl1
org.eclipse.swt.nl1
org.eclipse.ui.workbench.nl1

Damit sind alle Dialoge, Meldungen, Preferences, Menüs etc. schon mal abgedeckt. Für die Hilfe und Ähnliches brauchst du dann bei Bedarf noch mehr nl1-Plugins.


----------



## Gast2 (24. Sep 2008)

ok alles klar dachte es gibt nur ein plugin....
wenn ich das System.getProperties().set("osgi.nl","<new_locale">); zu laufzeit ändern will hab ich schon mitbekommen dass es nicht geht...
Aber wenn ich es neu setze und restart mache sollte er doch meine neuen einstellungen übernehmen oder?


----------



## Wildcard (24. Sep 2008)

Nein, ein Property ist flüchtig. Du brauchst schon einen Startup Parameter wie -Duser.locale=xy oder -nl xy


----------



## Gast2 (25. Sep 2008)

also der einzigste weg dass zu machen ist das .ini file zu ändern...

www.toedter.com/blog/?p=19

hier kann man sich ein bsp runterladen...
max-server.myftp.org/trac/mp3m


----------



## foobar (25. Sep 2008)

Wäre schön wenn man das zur Laufzeit ohne Neustart der Workbench machen könnte


----------



## Gast2 (25. Sep 2008)

ja das wäre auch gut für mich ...
mit dem ini file musst du halt immer erst deployen...

aber vielleicht gehts ja bald in der nächsten eclipse version

https://bugs.eclipse.org/bugs/show_bug.cgi?id=222023


----------



## foobar (25. Sep 2008)

Ohne Neustart stelle ich mir das aber ziemlich schwierig vor, weil dann alle Views/Editoren/Menüs etc neu erstellt werden müssten.


----------



## Gast2 (25. Sep 2008)

ja das stimmt , ich versuch grad noch die Locale zu beeinflussen 
bevor die Workbench gestartet wird

```
returnCode =
            PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
```


----------



## Gast2 (25. Sep 2008)

mhm habs mal so versucht aber leider bringt es nicht weiß jemand genau was die methode macht??? Dachte die reinitialiert vielleicht die bundles...
versteht jemand den mechanismus richtig wie nl pakete gesetzt werden??


```
Locale.setDefault(<new Locale>);
    NLS.initializeMessages("org.eclipse.ui.internal.messages",
        org.eclipse.ui.internal.WorkbenchMessages.class);
// andere

 PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
```


----------



## Wildcard (25. Sep 2008)

Es ist schon von Java aus technisch nicht möglich die Sprache zur Laufzeit zu wechseln, da alle Übersetzungen in public static final String Konstanten abgelegt sind.


----------



## Gast2 (25. Sep 2008)

Soviel ich weiß stimmt des aber nicht...
Nehmen wir zum Beispiel WorkbenchMessages 

```
public class WorkbenchMessages extends NLS {

	// ==============================================================================
	// Workbench Actions
	// ==============================================================================

	// --- File Menu ---
	public static String NewWizardAction_text;
	public static String NewWizardAction_toolTip;
	public static String CloseAllAction_text;
	public static String CloseAllAction_toolTip;
	public static String CloseAllSavedAction_text;
	public static String CloseAllSavedAction_toolTip;
	public static String CloseEditorAction_text;
	public static String CloseEditorAction_toolTip;
	public static String CloseOthersAction_text;
	public static String CloseOthersAction_toolTip;
	public static String NewEditorAction_text;
	public static String NewEditorAction_tooltip;
	public static String SaveAction_text;
	public static String SaveAction_toolTip;
	public static String SaveAs_text;
	public static String SaveAs_toolTip;
	public static String SaveAll_text;
	public static String SaveAll_toolTip;
	public static String Workbench_revert;
	public static String Workbench_revertToolTip;
	public static String Workbench_move;

	public static String Workbench_moveToolTip;
	public static String Workbench_rename;
	public static String Workbench_renameToolTip;
	public static String Workbench_refresh;
	public static String Workbench_refreshToolTip;
	public static String Workbench_properties;
	public static String Workbench_propertiesToolTip;


	public static String Workbench_print;
	public static String Workbench_printToolTip;
	public static String ExportResourcesAction_text;
	public static String ExportResourcesAction_fileMenuText;
	public static String ExportResourcesAction_toolTip;
	public static String ImportResourcesAction_text;
	public static String ImportResourcesAction_toolTip;
	public static String OpenRecent_errorTitle;
	public static String OpenRecent_unableToOpen;
	public static String Exit_text;
	public static String Exit_toolTip;
```

ich denke ich müsste einfach die neu setzen und dann passt des, aber die oben genannte methode macht des leider nicht und den mechanismus wo das mit den nl packete gesetzt wird hab ich noch nicht gefunden.... oder noch nicht richtig verstanden....


----------



## foobar (25. Sep 2008)

Welchen NLS-Mechanismus verwendest du denn?

http://help.eclipse.org/help32/inde.../reference/ref-wizard-externalize-strings.htm

Ich bin bisher immer den traditionellen Weg ohne zusätzliche Klasse gegangen.


----------



## Wildcard (25. Sep 2008)

Ach, stimmt ja, die sind nicht final. Ändert trotzdem nichts, der Aufwand alle Strings zu ersetzen wäre viel zu groß. Jede Klasse die irgendwelche externalisierten Strings verwendet müsste in ein lächerlich großes Observer Monster eingespannt werden.

@foobar
der Eclipse Weg ist ganz nützlich, da der Compiler deine Strings prüfen kann und wenn man eine Message Klasse pro Package verwendet, wird auch nur das geladen was benötigt wird.


----------



## Gast2 (26. Sep 2008)

> Welchen NLS-Mechanismus verwendest du denn?



Ich suche nur grad wie eclipse die reource bundles mit den nl packs verwendet und vielleicht kann ich da was abschauen und dann irgendwie manipulieren


ich glaub nicht dass ich mit deinem link die eclipse konstanten beeinflussen kann damit er mir die neu setzt bevor ich die workbench neu initialisert wird...

@ wildcard ich kann mir doch via reflection mir alle konstanten holen und dann muss ich die neu setzen mit der entprechenden propertie datei...

Mein Ziel ist es ja nur vor die workbench initalisiert wird das einmal zu machen sobald sie initialisiert ist kann man sie sprache nicht mehr ändern...


----------



## foobar (26. Sep 2008)

Wildcard hat gesagt.:
			
		

> der Eclipse Weg ist ganz nützlich, da der Compiler deine Strings prüfen kann und wenn man eine Message Klasse pro Package verwendet, wird auch nur das geladen was benötigt wird.



Klingt für mich erstmal nach unnötigem Mehraufwand. Im Moment habe ich eine Propertiesdatei pro Anwendung und mit Hilfe von Eclipse lässt sich wunderbar nach obsoleten und fehlenden Properties suchen. Wenn man zusätzlich noch eine Klasse verwendet, muß man ja immer an zwei Stellen nachpflegen. Ist das nicht aufwendiger?


----------



## Gast2 (26. Sep 2008)

Hier meine lösung in der Klasse MessageResourceBundle gibt es folgende Methode...
sobald die applikation einmal gestartet wird , wird nlSuffixes !=null und es werden keine neuen bundles mehr geladen...
wenn man die locale neu setzt nlSuffixes auf null setzt(Reflection) und die oben genannte methode ausführt funktioniert des mechanismus wunderba...


```
private static String[] buildVariants(String root) {
		if (nlSuffixes == null) {
			//build list of suffixes for loading resource bundles
			String nl = Locale.getDefault().toString();
			ArrayList result = new ArrayList(4);
			int lastSeparator;
			while (true) {
				result.add('_' + nl + EXTENSION);
				lastSeparator = nl.lastIndexOf('_');
				if (lastSeparator == -1)
					break;
				nl = nl.substring(0, lastSeparator);
			}
			//add the empty suffix last (most general)
			result.add(EXTENSION);
			nlSuffixes = (String[]) result.toArray(new String[result.size()]);
		}
		root = root.replace('.', '/');
		String[] variants = new String[nlSuffixes.length];
		for (int i = 0; i < variants.length; i++)
			variants[i] = root + nlSuffixes[i];
		return variants;
	}
```


----------



## Wildcard (26. Sep 2008)

foobar hat gesagt.:
			
		

> Klingt für mich erstmal nach unnötigem Mehraufwand. Im Moment habe ich eine Propertiesdatei pro Anwendung und mit Hilfe von Eclipse lässt sich wunderbar nach obsoleten und fehlenden Properties suchen. Wenn man zusätzlich noch eine Klasse verwendet, muß man ja immer an zwei Stellen nachpflegen. Ist das nicht aufwendiger?


Nein, der Wizard macht das. Er legt dir die Strings in der Klasse und in der Properties Datei an. Alle Projekte der Eclipse Foundation externalisieren AFAIK auf diese Weise. Ist auch ganz nett um zu prüfen ob ein String an mehreren Stellen verwendet wird.


----------



## foobar (26. Sep 2008)

Wildcard hat gesagt.:
			
		

> foobar hat gesagt.:
> 
> 
> 
> ...


Ja das habe ich im Wizard schon gesehen. Da kann man ja auswählen welchen Mechanismus man verwenden will. Ist eben nur die Frage wie leicht sich das später pflegen lässt, denn die Beschriftungen ändern sich ja schon mal oder fallen weg. Ich werds nachher einfach mal ausprobieren.


----------



## foobar (26. Sep 2008)

Wie bringe ich Eclipse denn dazu den neuen NLS-Mechanismus zu verwenden? Ich habe das Bundle org.eclipse.osgi.util bereits überall hinzugefügt d.h. Runconfig, plugin etc. und trotzdem ist die Funktion im Externalizewizard nicht verfügbar? Was mache ich falsch?


----------



## Wildcard (26. Sep 2008)

Hinzufügen musst du eigentlich gar nichts. Bei einem Plugin Projekt bietet dir der Wizard 'Use Eclipse Externalization' an.
Die Pflege ist auch kein Problem, geht über find broken externalized strings. Ausserdem logged die Plattform alle unused und missing Entries in den Properties Dateien beim Laden des Bundles mit und erzeugt einen Eintrag in der Error Log View. Damit siehst du sofort wenn etwas nicht mehr passt.


----------



## foobar (27. Sep 2008)

Wildcard hat gesagt.:
			
		

> Hinzufügen musst du eigentlich gar nichts.


Die Option ist aber erst verfügbar, wenn das Plugin org.eclipse.osgi.util sich im Buildpath befindet. Bei meinem auf Features basierenden Projekt wird die Option aus irgendwelchen Gründen nie aktiv. Bei dem RcpMailProjekt habe ich das Plugin einfach dem Product hinzugefügt und sofort war die Option verfügbar.

siehe hier:


> If unchecked the standard externalization mechanism is used, otherwise the new Eclipse string externalization mechanism is used.
> Note: This field is only present if the project build path contains the org.eclipse.osgi.util.NLS class.


Quelle: http://help.eclipse.org/help32/inde.../reference/ref-wizard-externalize-strings.htm



			
				Wildcard hat gesagt.:
			
		

> Bei einem Plugin Projekt bietet dir der Wizard 'Use Eclipse Externalization' an.
> Die Pflege ist auch kein Problem, geht über find broken externalized strings. Ausserdem logged die Plattform alle unused und missing Entries in den Properties Dateien beim Laden des Bundles mit und erzeugt einen Eintrag in der Error Log View. Damit siehst du sofort wenn etwas nicht mehr passt.



Ich habe den Mechanismus mal an einem RcpMailProjekt getestet und bin echt begeistert davon. Die Pflege der Propertiesdatei funktioniert wunderbar.


----------



## Wildcard (28. Sep 2008)

Ok, bei mir sind es meistens PlugIn Projekte, da ist es automatisch in Build Path. Wieder was gelernt...


> Ich habe den Mechanismus mal an einem RcpMailProjekt getestet und bin echt begeistert davon. Die Pflege der Propertiesdatei funktioniert wunderbar.


Ich bin auch sehr angetan davon. Allerdings frage ich mich, ob die Eclipse Probleme mit dem PermSpace eventuell auch auf die vielen static Strings zurückzuführen sind  ???:L


----------



## Gast2 (2. Okt 2008)

Muss ich die NL packages noch irgendwie besonders hinzufügen in meinem feature??? Kann ja nicht sein dass ich jedes NL plugin dass ich verwende extra im feature.xml hinzufügen muss oder??
Mein Problem ist beim export des products exportiert er meine NL plugins nicht mit(in der target platform sind sie definitiv mitdrin)


----------



## Gast2 (1. Dez 2008)

Hallo, 

wollte dieses theman nochmal kurz auf nehmen... 
Wenn ich eine target eclipse 3.3.1 nehmen dann ziehen meine eclipse nl pugins nicht mehr? Warum???
Jemand eine Idee?
thx...

EDIT:

archive.eclipse.org/eclipse/downloads/drops/L-3.2.1_Language_Packs-200609210945/index.php
 also die ich hab ich für den RCP 3.3.1 heruntergeladen


----------



## Wildcard (1. Dez 2008)

Warum versuchst du Language Plugins von Eclipse 3.2.1 in Eclipse 3.3 zu stopfen?


----------



## Gast2 (1. Dez 2008)

weil es für 3.3.1 keine gibt?? oder ich zumindest keine finde ... ich hab hier welche gesucht aber lässt sich nichts runterladen Babel
oder welche sollte ich nehmen????

EDIT:

hier finde ich kein neueres als 3.2.1 

archive.eclipse.org/eclipse/downloads/index.php


----------



## Wildcard (1. Dez 2008)

Babel ist richtig.


----------



## Gast2 (1. Dez 2008)

ja aber wo sind die downloads???? Ich bin zu doof die zu finden...


----------



## Gast2 (1. Dez 2008)

Also hier hab ich jetzt was gefunden
http://build.eclipse.org/technology/babel/test-updates/europa/plugins/

aber jetzt verstehe ich die vorgehensweise nicht mehr jetzt habe ich für jedes plugin kein properties file mehr sondern ein eigenes jar... Stimmt das?


----------



## Wildcard (1. Dez 2008)

Natürlich ein eigenes jar. Willst du etwa tausende properties in die einzelnen Plugins packen?


----------



## Gast2 (1. Dez 2008)

ja in den alten packs war es so, dass für jedes plugin ein eigenes nl plugin gab und nicht für ein plugin n nl plugin für sprachen...bei 5 plugin mit 20 sprachen sind das ja 100 plugins


----------



## Wildcard (1. Dez 2008)

Nicht 100 PlugIns, sondern 100 Fragments. Ist doch aber wesentlich komfortabler als alles aus- und wieder einzupacken


----------



## Gast2 (2. Dez 2008)

Sorry ich versteh ich jetzt nicht ganz... 

1. Ich finde gar nichts auf der Babel Seite zum runterladen
Babel
Oder kannst du mir sagen wo ich die Fragemente runterladen kann???
2. Ich hab nur plugins auf der oben an genannten Seite gefunden(vielleicht war die auch falsch)...
Auf jeden Fall ist es dort so dass ich z.B. für das org.eclipse.ui.workbench ein org.eclipse.ui.workbench.nl_de,
org.eclipse.ui.workbench.nl_en,org.eclipse.ui.workbench.nl_fr usw. habe
d.h. für mich jedes plugin hat x nl plugins...


----------



## Wildcard (2. Dez 2008)

Das sind keine PlugIns, sondern PlugIn Fragmente.
http://www.eclipse.org/articles/Article-Internationalization/how2I18n.html


----------



## Gast2 (2. Dez 2008)

ok aber trotzdem muss ich für jedes plugin x language fragemente einbinden ... 
hätte es nicht eins getan wo alle darin enthalten sind???


----------



## Wildcard (2. Dez 2008)

Und wenn du nicht alle haben willst? Ist doch völlig egal wie viele Fragmente das sind, was stört dich?


----------



## Gast2 (2. Dez 2008)

Das ich die bis jetzt alle einzeln runter laden müsste...und im jnlp file auch jedes fragment hinzufügen müsste...


----------



## Wildcard (2. Dez 2008)

Auf Babel kannst du das Ding doch komplett laden. Ein JNLP kannst du dir auch mit ANT/Maven bauen.


----------



## Gast2 (2. Dez 2008)

ich weiß nicht ich kann das ding nicht komplett laden... der grüne button tut nichts...und was ich mit der url anfagen soll http://download.eclipse.org/technology/babel/update-site/europa/ weiß ich auch nicht...


----------



## Wildcard (2. Dez 2008)

Das ist eine Update Site. Die trägst du in den Update-Manager ein.


----------



## Gast2 (2. Dez 2008)

ah ok jetzt ist der groschen gefallen =)


----------



## Gast2 (2. Dez 2008)

Ok aber nochmal ne frage habe ich dazu...
Warum exportiert er mir die language fragemente erst mit aus, wenn ich die in meinem feature.xml expliziet hinzugefügt hab... Geht das auch anders?


----------



## Wildcard (2. Dez 2008)

Warum soll denn etwas automatisch exportiert werden was nicht teil deines Products ist?


----------



## Gast2 (2. Dez 2008)

ja schon klar die frage war eher geht das auch eleganter als jedes fragement einzeln hinzuzufügen?

EDIT: Noch ne andere Frage ich hab jetzt die deutschen fragemente runtergeladen und in meiner target platform mit aufgenommen jetzt ist ber mein eclipse auch deutsch(voll häßlich ), obwohl mein eclipse ja nichts mit meiner target platform zu tun hat... woher zieht eclipse denn die???


----------

