# LanguageSwitcher in RCP



## lam_tr (10. Mai 2010)

Hallo zusammen,

ich habe versucht mit hilfe von einem Snippet

```
package de.dc.language.switcher;
/*******************************************************************************
 * Copyright (c) 2009 Siemens AG
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * [url=http://www.eclipse.org/legal/epl-v10.html]Eclipse Public License - Version 1.0[/url]
 *
 * Contributors:
 *    Kai Toedter - initial API and implementation
 *******************************************************************************/


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.osgi.service.datalocation.Location;
import org.eclipse.ui.PlatformUI;

/**
 * Switches the language in RCP based products. Works only if the product is
 * deployed to the local file system since the <product>.ini file is altered.
 * 
 * @see org.eclipse.core.commands.IHandler
 * @see org.eclipse.core.commands.AbstractHandler
 */
public class LanguageSwitchHandler extends AbstractHandler {
	/**
	 * The constructor.
	 */
	public LanguageSwitchHandler() {
	}

	/**
	 * the command has been executed, so extract extract the needed information
	 * from the application context.
	 */
	public Object execute(ExecutionEvent event) throws ExecutionException {
		String locale = event
				.getParameter("language.locale");
		// Does not work:
		 System.getProperties().setProperty("eclipse.exitdata", "-nl " +
		 locale);
		changeLocale(locale);
		PlatformUI.getWorkbench().restart();
		return null;
	}

	private static void changeLocale(String locale) {
		Location configArea = Platform.getInstallLocation();
		String product = Platform.getProduct().getName();
		if (configArea == null) {
			return;
		}

		URL location = null;
		try {
			location = new URL(configArea.getURL().toExternalForm() + product
					+ ".ini");
		} catch (MalformedURLException e) {
			// This should never happen
		}
		 System.out.println("LanguageSwitchHandler.loadConfigurationInfo(): "
		 + location);

		try {
			String fileName = location.getFile();
			File file = new File(fileName);
			fileName += ".bak";
			file.renameTo(new File(fileName));
			BufferedReader in = new BufferedReader(new FileReader(fileName));
			BufferedWriter out = new BufferedWriter(new FileWriter(location
					.getFile()));
			try {
				boolean isNl = false;
				boolean isNlWiritten = false;
				String line = in.readLine();
				while (line != null) {
					if (!isNl) {
						out.write(line);
					} else {
						out.write(locale);
						isNl = false;
						isNlWiritten = true;
					}
					out.newLine();
					if (line.equals("-nl")) {
						isNl = true;
					}
					line = in.readLine();
				}
				if (!isNlWiritten) {
					out.write("-nl");
					out.newLine();
					out.write(locale);
					out.newLine();
				}
				out.flush();
			} finally {
				if (in != null) {
					try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (out != null) {
					try {
						out.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
```

Einen LanguageSwitcher in meiner Applikation zu bauen. Hab da die passenden Commands und MenuItems in die Plugin.xml eingetragen.

So mein Problem grad ist, mein RCP wechselt die Sprache nicht beim umschalten.
Achja natürlich habe ich davor schon externalize Strings gemacht für die passenden Sprachen.

Beim debuggen macht der sogar beim changeLocale(locale) (siehe oben), sogar das richtig gesetzte "Parameter" von dem Plugin gesetzten Extension ein.

Woran kann es wohl liegen dass es nicht funktioniert?

Gruss Lam


----------



## Gast2 (10. Mai 2010)

Das kann mehrere Gründe haben...
Du kannst die Sprache nicht zur Laufzeit wechseln!
Du musst den RCP einmal runter fahren und wieder starten dafür gibt es ein bit weiß es grad nicht auswendig!!
Davor musst du eine Map befüllen die deine neuen Paramter vor allem den -nl und -user.language neu setzt... Das geht glaub erst ab eclipse 3.4 davor gibts ein paar Bugs dazu...

EDIT: ok ich sehe machst du einen restart... aber wie gesagt du musst eine map füllen und einfach die ganzen paramter neu setzen... Im Notfall kannst es auch mit Reflection machen aber erst unter eclipse 3.4


----------



## lam_tr (10. Mai 2010)

Hi SirWayne,

also ich benutze eclipse 3.6, von daher müsste es passen?

Was bewirkt die Map denn genau?

Kannst du mir da mal bitte weiterhelfen?

hab mein plugin hochgeladen. ich hab das schon mal hinbekommen, aber warum jetzt nicht
klappt. ist wirklich ärgerlich.

Hoffe du kannst mir da weiterhelfen.

vielen Dank om voraus.

Gruss Lam


----------



## Gast2 (10. Mai 2010)

Keine Ahnung musst du googlen ist so lange hier die Mpa ist eine Map von eclipse und setzt deine StartParameter vor dem restart neu...

EDIT: Vielleicht bringt dir das was
https://bugs.eclipse.org/bugs/show_bug.cgi?id=222023


----------



## lam_tr (18. Mai 2010)

hi zusammen,

habs grad eben gemerkt das dieses thema in der falschen kategorie ist. Moderator kannst du bitte dieses thema in plattfromspezifischen bereich verschieben?

und zum zweiten. hab das problem zwar nicht gelöst, aber ein workaround.

sobald ich das plugin deploye, funktioniert der switcher. warum, keine ahnung.

auf jeden fall funktionierts jetzt


----------



## Wildcard (18. Mai 2010)

lam_tr hat gesagt.:


> habs grad eben gemerkt das dieses thema in der falschen kategorie ist. Moderator kannst du bitte dieses thema in plattfromspezifischen bereich verschieben?


Done. Ich setze es auch auf erledigt.


----------



## Kai Tödter (20. Mai 2010)

Das liegt daran, dass ich das product.ini File parse. Dieses existiert NUR bei einer deployten Installation. Ich habe noch keine Lösung gefunden, einen Language-Switch aus dem Eclipse SDK anzustoßen...


----------

