Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/EditionUIMessages.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/EditionUIMessages.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/EditionUIMessages.java	(revision 1053)
@@ -18,14 +18,30 @@
 	public static String BackToText_3;
 	public static String BackToText_4;
 	public static String BackToText_5;
-	public static String EditionPanel_0;
-	public static String EditionPanel_1;
-	public static String EditionPanel_2;
-	public static String EditionPanel_5;
-	public static String EditionPanel_6;
-	public static String EditionPanel_7;
 	public static String EditionSelectorDialog_0;
 	public static String EditionSelectorDialog_1;
+	public static String editor_controls;
+
+	public static String editor_empty;
+
+	public static String editor_page_navigation_buttons;
+
+	public static String editor_text_navigation_buttons;
+
+	public static String editor_warning_no_id_parameter;
+
+	public static String editor_warning_unknowned_param_id;
+
+	public static String error_while_reading;
+
+	public static String menu_back;
+
+	public static String menu_copy_text_selection;
+
+	public static String menu_forward;
+
+	public static String menu_reload;
+
 	public static String OpenEdition_0;
 	public static String OpenEdition_1;
 	public static String OpenEdition_10;
@@ -44,7 +60,23 @@
 	public static String SynopticEditionEditor_7;
 	public static String SynopticEditionEditor_8;
 	public static String SynopticEditionEditor_9;
+
+	public static String warning_no_edition_found;
+
+	public static String warning_no_edition_with_name;
+
+	public static String warning_no_first_page;
+
+	public static String warning_page_not_found;
+
+	public static String warning_script_returned;
 	
+	public static String preference_preference_fast_highlight;
+	public static String preference_title;
+	
+	public static String CommandLink_empty;
+	public static String EditionLink_error_no_arguments;
+	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, EditionUIMessages.class);
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/messages.properties
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/messages.properties	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/messages/messages.properties	(revision 1053)
@@ -1,24 +1,34 @@
 
-BackToText_0 = Opening with first edition (no default edition set): 
+BackToText_0 = Opening with first edition (no default edition set): {0}
 BackToText_3 = Error: could not retrieve line word ids. Aborting back to text.
 BackToText_4 = No edition to open.
-BackToText_5 = Opening default editions: 
+BackToText_5 = Opening default editions: {0}
 
-EditionPanel_0 = No edition found for text=
-EditionPanel_1 = Fail to retrieve first page of edition 
-EditionPanel_2 = \ and text 
-EditionPanel_5 = \ edition=
-EditionPanel_6 = No edition with name 
-EditionPanel_7 = \ available for text 
+warning_no_edition_found=No edition found for text={0} and edition={1}
+warning_no_first_page=Fail to retrieve first page of edition={0} and text={1}
+error_while_reading=Error while reading {0}: {1}
+warning_script_returned=SCRIPT RETURNED={0}
+menu_copy_text_selection=Copy text selection
+menu_reload=Reload
+menu_back=Back
+menu_forward=Forward
+warning_page_not_found=Page not found ({0}).
+warning_no_edition_with_name=No edition with name={0} available for text={1}
 
 EditionSelectorDialog_0 = Editions
 EditionSelectorDialog_1 = Select one or more editions
+editor_controls=controls
+editor_empty=
+editor_page_navigation_buttons=page buttons
+editor_text_navigation_buttons=text buttons
+editor_warning_no_id_parameter=Cannot call txmcommand without 'id' parameter: {0}
+editor_warning_unknowned_param_id=warning: unknowned parameter id={0}
 
 OpenEdition_0  = Opening with first edition (no default edition set): 
 OpenEdition_1  = No edition to open.
-OpenEdition_10 = Error while opening editor: 
-OpenEdition_3  = Opening default editions: 
-OpenEdition_4  = Error while opening edition: 
+OpenEdition_10 = Error while opening editor: {0}
+OpenEdition_3  = Opening default editions: {0}
+OpenEdition_4  = Error while opening edition: {0}
 OpenEdition_7  = \ in the corpus
 OpenEdition_9  = Aborting: selection is not a corpus
 
@@ -32,4 +42,10 @@
 SynopticEditionEditor_6  = Error while getting available editions: 
 SynopticEditionEditor_7  = Next page
 SynopticEditionEditor_8  = Last page of the text
-SynopticEditionEditor_9  = Warning: could not find edition for name: 
+SynopticEditionEditor_9  = Warning: could not find edition for name={0}
+
+CommandLink_empty=
+EditionLink_error_no_arguments=Error: txmedition(corpusid, editionid?, textid?, wordid?) called with no arguments
+
+preference_preference_fast_highlight=Enable fast word highlight
+preference_title=Edition
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/CommandLink.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/CommandLink.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/CommandLink.java	(revision 1053)
@@ -2,17 +2,21 @@
 
 import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.browser.BrowserFunction;
+import org.txm.edition.rcp.messages.EditionUIMessages;
 
 public class CommandLink extends BrowserFunction {
-		String data = "";
-		Browser browser;
-		SynopticEditionEditor synopticEditionEditor;
-		CommandLink (SynopticEditionEditor synopticEditionEditor, Browser browser) {
-			super (browser, "txmcommand");
-			this.browser = browser;
-			this.synopticEditionEditor = synopticEditionEditor;
-		}
-		public Object function (Object[] arguments) {
-			return SynopticEditionEditor.callTXMCommand(arguments);
-		}
-	}
\ No newline at end of file
+	
+	String data = EditionUIMessages.CommandLink_empty;
+	Browser browser;
+	SynopticEditionEditor synopticEditionEditor;
+	
+	CommandLink (SynopticEditionEditor synopticEditionEditor, Browser browser) {
+		super (browser, "txmcommand"); //$NON-NLS-1$
+		this.browser = browser;
+		this.synopticEditionEditor = synopticEditionEditor;
+	}
+	
+	public Object function (Object[] arguments) {
+		return SynopticEditionEditor.callTXMCommand(arguments);
+	}
+}
\ No newline at end of file
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionLink.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionLink.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionLink.java	(revision 1053)
@@ -5,46 +5,50 @@
 import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.browser.BrowserFunction;
 import org.txm.edition.rcp.handlers.BackToText;
+import org.txm.edition.rcp.messages.EditionUIMessages;
 
 public class EditionLink extends BrowserFunction {
-		String data = "";
-		Browser browser;
-		SynopticEditionEditor synopticEditionEditor;
-		EditionLink (SynopticEditionEditor synopticEditionEditor, Browser browser) {
-			super (browser, "txmedition");
-			this.browser = browser;
-			this.synopticEditionEditor = synopticEditionEditor;
-		}
-		public Object function (Object[] arguments) { // corpus id, edition id, text id, word id
-			HashMap<String, String> params = new HashMap<String, String>();
 
-			String id = BackToText.class.getName();
+	String data = ""; //$NON-NLS-1$
+	Browser browser;
+	SynopticEditionEditor synopticEditionEditor;
 
-			if (arguments.length == 4) {
-				params.put(id+".corpusid", arguments[0].toString());
-				params.put(id+".editionid", arguments[1].toString());
-				params.put(id+".textid", arguments[2].toString());
-				params.put(id+".wordid", arguments[3].toString());
-			} else if (arguments.length == 3) {
-				params.put(id+".corpusid", arguments[0].toString());
-				params.put(id+".editionid", arguments[1].toString());
-				params.put(id+".textid", arguments[2].toString());
-				params.put(id+".wordid", null);
-			} else if (arguments.length == 2) {
-				params.put(id+".corpusid", arguments[0].toString());
-				params.put(id+".editionid", arguments[1].toString());
-				params.put(id+".textid", null);
-				params.put(id+".wordid", null);
-			} else if (arguments.length == 1) {
-				params.put(id+".corpusid", arguments[0].toString());
-				params.put(id+".editionid", null);
-				params.put(id+".textid", null);
-				params.put(id+".wordid", null);
-			} else {
-				System.out.println("Error: txmedition(corpusid, editionid?, textid?, wordid?) called with no arguments");
-				return null;
-			}
+	EditionLink (SynopticEditionEditor synopticEditionEditor, Browser browser) {
+		super (browser, "txmedition"); //$NON-NLS-1$
+		this.browser = browser;
+		this.synopticEditionEditor = synopticEditionEditor;
+	}
 
-			return SynopticEditionEditor.callTXMCommand(id, params);
+	public Object function (Object[] arguments) { // corpus id, edition id, text id, word id
+		HashMap<String, String> params = new HashMap<String, String>();
+
+		String id = BackToText.class.getName();
+
+		if (arguments.length == 4) {
+			params.put(id+".corpusid", arguments[0].toString()); //$NON-NLS-1$
+			params.put(id+".editionid", arguments[1].toString()); //$NON-NLS-1$
+			params.put(id+".textid", arguments[2].toString()); //$NON-NLS-1$
+			params.put(id+".wordid", arguments[3].toString()); //$NON-NLS-1$
+		} else if (arguments.length == 3) {
+			params.put(id+".corpusid", arguments[0].toString()); //$NON-NLS-1$
+			params.put(id+".editionid", arguments[1].toString()); //$NON-NLS-1$
+			params.put(id+".textid", arguments[2].toString()); //$NON-NLS-1$
+			params.put(id+".wordid", null); //$NON-NLS-1$
+		} else if (arguments.length == 2) {
+			params.put(id+".corpusid", arguments[0].toString()); //$NON-NLS-1$
+			params.put(id+".editionid", arguments[1].toString()); //$NON-NLS-1$
+			params.put(id+".textid", null); //$NON-NLS-1$
+			params.put(id+".wordid", null); //$NON-NLS-1$
+		} else if (arguments.length == 1) {
+			params.put(id+".corpusid", arguments[0].toString()); //$NON-NLS-1$
+			params.put(id+".editionid", null); //$NON-NLS-1$
+			params.put(id+".textid", null); //$NON-NLS-1$
+			params.put(id+".wordid", null); //$NON-NLS-1$
+		} else {
+			System.out.println(EditionUIMessages.EditionLink_error_no_arguments);
+			return null;
 		}
-	}
\ No newline at end of file
+
+		return SynopticEditionEditor.callTXMCommand(id, params);
+	}
+}
\ No newline at end of file
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 1053)
@@ -11,14 +11,6 @@
 import java.util.Set;
 import java.util.logging.Level;
 
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.IParameter;
-import org.eclipse.core.commands.NotEnabledException;
-import org.eclipse.core.commands.NotHandledException;
-import org.eclipse.core.commands.Parameterization;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.action.MenuManager;
@@ -28,7 +20,6 @@
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.browser.BrowserFunction;
 import org.eclipse.swt.browser.ProgressEvent;
 import org.eclipse.swt.browser.ProgressListener;
 import org.eclipse.swt.events.MenuEvent;
@@ -38,16 +29,9 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.internal.browser.BrowserViewer;
 import org.osgi.framework.Bundle;
-import org.txm.concordance.rcp.actions.BackToText;
-import org.txm.core.preferences.TXMPreferences;
 import org.txm.edition.rcp.messages.EditionUIMessages;
-import org.txm.edition.rcp.preferences.SynopticEditionPreferencePage;
 import org.txm.edition.rcp.preferences.SynopticEditionPreferences;
 import org.txm.objects.CorpusBuild;
 import org.txm.objects.Edition;
@@ -77,26 +61,26 @@
 	//HashMap<String, ArrayList<RGBA>> highlightedColorSpans = new HashMap<String, ArrayList<RGBA>>(); // background color
 
 	HashMap<String, ArrayList<RGBA>> highlightedColorPerWordIDS = new HashMap<String, ArrayList<RGBA>>(); // background color
-	public static final String STYLE_NORMAL = "normal";
-	public static final String STYLE_ITALIC = "italic";
-	public static final String STYLE_OBLIQUE = "oblique";
+	public static final String STYLE_NORMAL = "normal"; //$NON-NLS-1$
+	public static final String STYLE_ITALIC = "italic"; //$NON-NLS-1$
+	public static final String STYLE_OBLIQUE = "oblique"; //$NON-NLS-1$
 	HashMap<String, String> fontStylePerWordIDS = new HashMap<String, String>();
-	public static final String WEIGHT_NORMAL = "normal";
-	public static final String WEIGHT_BOLD = "bold";
+	public static final String WEIGHT_NORMAL = "normal"; //$NON-NLS-1$
+	public static final String WEIGHT_BOLD = "bold"; //$NON-NLS-1$
 	HashMap<String, String> fontWeightPerWordIDS = new HashMap<String, String>();
 	HashMap<String, ArrayList<RGBA>> fontColorPerWordIDS = new HashMap<String, ArrayList<RGBA>>();
-	public static final String SIZE_SMALL = "small";
-	public static final String SIZE_MEDIUM = "medium";
-	public static final String SIZE_LARGE = "larger";
-	public static final String SIZE_SMALLER = "smaller";
-	public static final String SIZE_LARGER = "larger";
+	public static final String SIZE_SMALL = "small"; //$NON-NLS-1$
+	public static final String SIZE_MEDIUM = "medium"; //$NON-NLS-1$
+	public static final String SIZE_LARGE = "larger"; //$NON-NLS-1$
+	public static final String SIZE_SMALLER = "smaller"; //$NON-NLS-1$
+	public static final String SIZE_LARGER = "larger"; //$NON-NLS-1$
 	HashMap<String, String> fontSizePerWordIDS = new HashMap<String, String>();
-	public static final String FAMILLY_TIMES = "\"Times New Roman\", Times";
-	public static final String FAMILLY_ARIAL = "Arial";
-	public static final String FAMILLY_COURIER = "\"Courier New\", Courier";
+	public static final String FAMILLY_TIMES = "\"Times New Roman\", Times"; //$NON-NLS-1$
+	public static final String FAMILLY_ARIAL = "Arial"; //$NON-NLS-1$
+	public static final String FAMILLY_COURIER = "\"Courier New\", Courier"; //$NON-NLS-1$
 	HashMap<String, String> fontFamillyPerWordIDS = new HashMap<String, String>();
-	public static final String VARIANT_NORMAL = "normal";
-	public static final String VARIANT_SMALLCAPS = "small-caps";
+	public static final String VARIANT_NORMAL = "normal"; //$NON-NLS-1$
+	public static final String VARIANT_SMALLCAPS = "small-caps"; //$NON-NLS-1$
 	HashMap<String, String> fontVariantPerWordIDS = new HashMap<String, String>();
 	String focusedWordID = null;
 
@@ -107,131 +91,131 @@
 			//"elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
 			//"elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
 			"} catch (e) { };"; //$NON-NLS-1$
-	public static final String highlightscriptRuleFast = "sheet.insertRule(\"#%s {background-color:rgba(%s,%s,%s,%s);}\", 0);";
-	public static final String colorscriptRuleFast = "sheet.insertRule(\"#%s {color:rgba(%s,%s,%s,%s);}\", 0);";
-	public static final String sizescriptRuleFast = "sheet.insertRule(\"#%s {font-size:%s;}\", 0);";
-	public static final String stylescriptRuleFast = "sheet.insertRule(\"#%s {font-style:%s;}\", 0);";
-	public static final String variantscriptRuleFast = "sheet.insertRule(\"#%s {font-variant:%s;}\", 0);";
-	public static final String famillyscriptRuleFast = "sheet.insertRule(\"#%s {font-familly:%s;}\", 0);";
-	public static final String weightscriptRuleFast = "sheet.insertRule(\"#%s {font-weight:%s;}\", 0);";
+	public static final String highlightscriptRuleFast = "sheet.insertRule(\"#%s {background-color:rgba(%s,%s,%s,%s);}\", 0);"; //$NON-NLS-1$
+	public static final String colorscriptRuleFast = "sheet.insertRule(\"#%s {color:rgba(%s,%s,%s,%s);}\", 0);"; //$NON-NLS-1$
+	public static final String sizescriptRuleFast = "sheet.insertRule(\"#%s {font-size:%s;}\", 0);"; //$NON-NLS-1$
+	public static final String stylescriptRuleFast = "sheet.insertRule(\"#%s {font-style:%s;}\", 0);"; //$NON-NLS-1$
+	public static final String variantscriptRuleFast = "sheet.insertRule(\"#%s {font-variant:%s;}\", 0);"; //$NON-NLS-1$
+	public static final String famillyscriptRuleFast = "sheet.insertRule(\"#%s {font-familly:%s;}\", 0);"; //$NON-NLS-1$
+	public static final String weightscriptRuleFast = "sheet.insertRule(\"#%s {font-weight:%s;}\", 0);"; //$NON-NLS-1$
 
-	public static final String highlightscriptRule = "sheet.insertRule(\"span[id=\\\"%s\\\"] {background-color:rgba(%s,%s,%s,%s); }\", 0);";
+	public static final String highlightscriptRule = "sheet.insertRule(\"span[id=\\\"%s\\\"] {background-color:rgba(%s,%s,%s,%s); }\", 0);"; //$NON-NLS-1$
 
 	public static final String clearhighlightscript = "try { var elt = document.getElementById(\"%s\"); elt.style.backgroundColor=\"white\";elt.style.fontWeight=\"\";" + //$NON-NLS-1$
 			"} catch (e) { };"; //$NON-NLS-1$
 
 	public String functions = 
-			""//"alert(\"loading functions\");"
-					+"\nfunction getNodeText(node) {"
-					+"\n	if (typeof node == 'string') return node;"
-					+"\n	else if (typeof  node.innerText != 'undefined') return node.innerText;"
-					+"\n	else if (typeof  node.InnerText != 'undefined') return node.InnerText;"
-					+"\n	else if (typeof  node.textContent != 'undefined') return node.textContent;"
-					+"\n	else return null;"
-					+"\n}"
-					+"\nfunction txmGetParent(node) {"
-					+"\n	if (typeof  node.parentNode != 'undefined') return node.parentNode;"
-					+"\n	else return null;"
-					+"\n}"
-					+"\nfunction txmGetChildren(node) {"
-					+"\n	if (typeof node == 'string') return 'STRING HTML';"
-					+"\n	else if (typeof  node.children != 'undefined') return node.children;"
-					+"\n	else if (typeof  node.ChildNodes != 'undefined') return node.ChildNodes;"
-					+"\n	else if (typeof  node.childNodes != 'undefined') return node.childNodes;"
-					+"\n	else return null;"
-					+"\n}"
-					+"\nfunction txmGetSelection() {"
-					+"\n	if (typeof window.getSelection != 'undefined') {return window.getSelection();}"
-					+"\n	else if (typeof document.selection != 'undefined') { return document.selection;}"
-					+"\n	else return 'NO SELECTION';"
-					+"\n}"
-					+"\nfunction txmGetRangeSize(selection) {"
-					+"\n	if (typeof selection.rangeCount != 'undefined') {return selection.rangeCount;}"
-					+"\n	else if (typeof selection.createRangeCollection != 'undefined') { return selection.createRangeCollection().length();} // IE5 has no multiple selection"
-					+"\n}"
-					+"\nfunction txmGetRange(selection, i) {"
-					+"\n	if (typeof selection.getRangeAt != 'undefined') {return selection.getRangeAt(i);}"
-					+"\n	else if (typeof selection.createRangeCollection != 'undefined') {return selection.createRangeCollection().item(i);}" // IE > IE5 
-					+"\n	else if (typeof selection.createRange != 'undefined') { return selection.createRange();} // IE5 has no multiple selection"
-					+"\n	else return 'NO RANGE';"
-					+"\n}"
-					+"\nfunction txmGetParentElementRange(range) {"
-					+"\n	if (typeof range.parentElement != 'undefined') {return range.parentElement();}"
-					+"\n	else if (typeof range.startContainer != 'undefined') { return range.startContainer.parentNode;}"
-					+"\n	else return 'NO PARENT';"
-					+"\n}"
-					+"\nfunction txmGetFragment(range) {"
-					+"\n	if (typeof range.cloneContents != 'undefined') { return range.cloneContents();}"
-					+"\n	else if (typeof range.htmlText != 'undefined') {var node = document.createElement('sel'); node.innerHTML = range.htmlText; 		return node;"
-					+"\n	} else return 'NO FRAG';"
-					+"\n}"
-					+"\nfunction txmGetTagName(node) {"
-					+"\n	if (typeof node.tagName != 'undefined') {return node.tagName;}"
-					+"\n	else if (typeof node.nodeName != 'undefined') { return node.nodeName;}"
-					+"\n	else if (typeof node.name != 'undefined') { return node.name;}"
-					+"\n	else return 'NO TAGNAME';"
-					+"\n}"
-					+"\nfunction findSpans(children, all) {"
-					+"\n    for (var i = 0 ; i < children.length ; i++) {"
-					+"\n    	var node = children.item(i);"
-					+"\n		if (node.nodeType == 1) {"
-					+"\n    	var id = node.getAttribute('id');"
-					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {"
-					+"\n            	if (id != null) all.push(id);"
-					+"\n        	} else {"
-					+"\n        		findSpans(txmGetChildren(node), all)"
-					+"\n        	}"
-					+"\n		}"
-					+"\n	}"
-					+"\n}"
-					+"\nfunction findIdsInString(str, all) {"
-					+"\n    for (var i = 0 ; i < children.length ; i++) {"
-					+"\n    	var node = children.item(i);"
-					+"\n		if (node.nodeType == 1) {"
-					+"\n    	var id = node.getAttribute('id');"
-					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {"
-					+"\n            	if (id != null) all.push(id);"
-					+"\n        	} else {"
-					+"\n        		findSpans(txmGetChildren(node), all)"
-					+"\n        	}"
-					+"\n		}"
-					+"\n	}"
-					+"\n}"
-					+"\nfunction get_type(thing){if(thing===null)return \"[object Null]\";  return Object.prototype.toString.call(thing);}\n"
-					+"\nfunction getDetailedObject(inputObject) { var detailedObject = {}; var properties; \n   do {        properties = Object.getOwnPropertyNames( inputObject );        for (var o in properties) {detailedObject[properties[o]] = inputObject[properties[o]];}} while ( inputObject = Object.getPrototypeOf(inputObject) );return detailedObject;}\n"
-					+"\nvar sheet = null;"
-					+"\ntry{"
-					+"\n	var style = document.createElement(\"style\");"
-					+"\n	style.appendChild(document.createTextNode(\"\"));"//webkit hack
-					+"\n	document.head.appendChild(style);"
-					+"\n	sheet = style.sheet;"
-					+"\n} catch(e) {sheet='error'}"
-					+"\ntry{"
-					+"\n" // define scrollIntoViewIfNeeded if absent
-					+"\nif (!Element.prototype.scrollIntoViewIfNeeded) {"
-					+"\n	Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {"
-					+"\n		centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;"
-					+"\n		var parent = this.parentNode,"
-					+"\n		parentComputedStyle = window.getComputedStyle(parent, null),"
-					+"\n		parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width')),"
-					+"\n		parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width')),"
-					+"\n		overTop = this.offsetTop - parent.offsetTop < parent.scrollTop,"
-					+"\n		overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight),"
-					+"\n		overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft,"
-					+"\n		overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth),"
-					+"\n		alignWithTop = overTop && !overBottom;"
-					+"\n		if ((overTop || overBottom) && centerIfNeeded) {"
-					+"\n			parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2;"
-					+"\n		}"
-					+"\n		if ((overLeft || overRight) && centerIfNeeded) {"
-					+"\n			parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2;"
-					+"\n		}"
-					+"\n		if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {"
-					+"\n			this.scrollIntoView(alignWithTop);"
-					+"\n		}"
-					+"\n	};"
-					+"\n}"
-					+"\n} catch(e) {Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView}";
+			""//"alert(\"loading functions\");" //$NON-NLS-1$
+					+"\nfunction getNodeText(node) {" //$NON-NLS-1$
+					+"\n	if (typeof node == 'string') return node;" //$NON-NLS-1$
+					+"\n	else if (typeof  node.innerText != 'undefined') return node.innerText;" //$NON-NLS-1$
+					+"\n	else if (typeof  node.InnerText != 'undefined') return node.InnerText;" //$NON-NLS-1$
+					+"\n	else if (typeof  node.textContent != 'undefined') return node.textContent;" //$NON-NLS-1$
+					+"\n	else return null;" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetParent(node) {" //$NON-NLS-1$
+					+"\n	if (typeof  node.parentNode != 'undefined') return node.parentNode;" //$NON-NLS-1$
+					+"\n	else return null;" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetChildren(node) {" //$NON-NLS-1$
+					+"\n	if (typeof node == 'string') return 'STRING HTML';" //$NON-NLS-1$
+					+"\n	else if (typeof  node.children != 'undefined') return node.children;" //$NON-NLS-1$
+					+"\n	else if (typeof  node.ChildNodes != 'undefined') return node.ChildNodes;" //$NON-NLS-1$
+					+"\n	else if (typeof  node.childNodes != 'undefined') return node.childNodes;" //$NON-NLS-1$
+					+"\n	else return null;" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetSelection() {" //$NON-NLS-1$
+					+"\n	if (typeof window.getSelection != 'undefined') {return window.getSelection();}" //$NON-NLS-1$
+					+"\n	else if (typeof document.selection != 'undefined') { return document.selection;}" //$NON-NLS-1$
+					+"\n	else return 'NO SELECTION';" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetRangeSize(selection) {" //$NON-NLS-1$
+					+"\n	if (typeof selection.rangeCount != 'undefined') {return selection.rangeCount;}" //$NON-NLS-1$
+					+"\n	else if (typeof selection.createRangeCollection != 'undefined') { return selection.createRangeCollection().length();} // IE5 has no multiple selection" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetRange(selection, i) {" //$NON-NLS-1$
+					+"\n	if (typeof selection.getRangeAt != 'undefined') {return selection.getRangeAt(i);}" //$NON-NLS-1$
+					+"\n	else if (typeof selection.createRangeCollection != 'undefined') {return selection.createRangeCollection().item(i);}" // IE > IE5  //$NON-NLS-1$
+					+"\n	else if (typeof selection.createRange != 'undefined') { return selection.createRange();} // IE5 has no multiple selection" //$NON-NLS-1$
+					+"\n	else return 'NO RANGE';" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetParentElementRange(range) {" //$NON-NLS-1$
+					+"\n	if (typeof range.parentElement != 'undefined') {return range.parentElement();}" //$NON-NLS-1$
+					+"\n	else if (typeof range.startContainer != 'undefined') { return range.startContainer.parentNode;}" //$NON-NLS-1$
+					+"\n	else return 'NO PARENT';" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetFragment(range) {" //$NON-NLS-1$
+					+"\n	if (typeof range.cloneContents != 'undefined') { return range.cloneContents();}" //$NON-NLS-1$
+					+"\n	else if (typeof range.htmlText != 'undefined') {var node = document.createElement('sel'); node.innerHTML = range.htmlText; 		return node;" //$NON-NLS-1$
+					+"\n	} else return 'NO FRAG';" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction txmGetTagName(node) {" //$NON-NLS-1$
+					+"\n	if (typeof node.tagName != 'undefined') {return node.tagName;}" //$NON-NLS-1$
+					+"\n	else if (typeof node.nodeName != 'undefined') { return node.nodeName;}" //$NON-NLS-1$
+					+"\n	else if (typeof node.name != 'undefined') { return node.name;}" //$NON-NLS-1$
+					+"\n	else return 'NO TAGNAME';" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction findSpans(children, all) {" //$NON-NLS-1$
+					+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
+					+"\n    	var node = children.item(i);" //$NON-NLS-1$
+					+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
+					+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
+					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
+					+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
+					+"\n        	} else {" //$NON-NLS-1$
+					+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
+					+"\n        	}" //$NON-NLS-1$
+					+"\n		}" //$NON-NLS-1$
+					+"\n	}" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction findIdsInString(str, all) {" //$NON-NLS-1$
+					+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
+					+"\n    	var node = children.item(i);" //$NON-NLS-1$
+					+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
+					+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
+					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
+					+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
+					+"\n        	} else {" //$NON-NLS-1$
+					+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
+					+"\n        	}" //$NON-NLS-1$
+					+"\n		}" //$NON-NLS-1$
+					+"\n	}" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\nfunction get_type(thing){if(thing===null)return \"[object Null]\";  return Object.prototype.toString.call(thing);}\n" //$NON-NLS-1$
+					+"\nfunction getDetailedObject(inputObject) { var detailedObject = {}; var properties; \n   do {        properties = Object.getOwnPropertyNames( inputObject );        for (var o in properties) {detailedObject[properties[o]] = inputObject[properties[o]];}} while ( inputObject = Object.getPrototypeOf(inputObject) );return detailedObject;}\n" //$NON-NLS-1$
+					+"\nvar sheet = null;" //$NON-NLS-1$
+					+"\ntry{" //$NON-NLS-1$
+					+"\n	var style = document.createElement(\"style\");" //$NON-NLS-1$
+					+"\n	style.appendChild(document.createTextNode(\"\"));"//webkit hack //$NON-NLS-1$
+					+"\n	document.head.appendChild(style);" //$NON-NLS-1$
+					+"\n	sheet = style.sheet;" //$NON-NLS-1$
+					+"\n} catch(e) {sheet='error'}" //$NON-NLS-1$
+					+"\ntry{" //$NON-NLS-1$
+					+"\n" // define scrollIntoViewIfNeeded if absent //$NON-NLS-1$
+					+"\nif (!Element.prototype.scrollIntoViewIfNeeded) {" //$NON-NLS-1$
+					+"\n	Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {" //$NON-NLS-1$
+					+"\n		centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;" //$NON-NLS-1$
+					+"\n		var parent = this.parentNode," //$NON-NLS-1$
+					+"\n		parentComputedStyle = window.getComputedStyle(parent, null)," //$NON-NLS-1$
+					+"\n		parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'))," //$NON-NLS-1$
+					+"\n		parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width'))," //$NON-NLS-1$
+					+"\n		overTop = this.offsetTop - parent.offsetTop < parent.scrollTop," //$NON-NLS-1$
+					+"\n		overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight)," //$NON-NLS-1$
+					+"\n		overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft," //$NON-NLS-1$
+					+"\n		overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth)," //$NON-NLS-1$
+					+"\n		alignWithTop = overTop && !overBottom;" //$NON-NLS-1$
+					+"\n		if ((overTop || overBottom) && centerIfNeeded) {" //$NON-NLS-1$
+					+"\n			parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2;" //$NON-NLS-1$
+					+"\n		}" //$NON-NLS-1$
+					+"\n		if ((overLeft || overRight) && centerIfNeeded) {" //$NON-NLS-1$
+					+"\n			parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2;" //$NON-NLS-1$
+					+"\n		}" //$NON-NLS-1$
+					+"\n		if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {" //$NON-NLS-1$
+					+"\n			this.scrollIntoView(alignWithTop);" //$NON-NLS-1$
+					+"\n		}" //$NON-NLS-1$
+					+"\n	};" //$NON-NLS-1$
+					+"\n}" //$NON-NLS-1$
+					+"\n} catch(e) {Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView}"; //$NON-NLS-1$
 	protected boolean fastWordHighLight = SynopticEditionPreferences.getInstance().getBoolean(SynopticEditionPreferences.FAST_HIGHLIGHT);
 	private ArrayList<ProgressListener> beforeHighlighListeners;
 	public ArrayList<ProgressListener> getBeforeHighlighListeners() {
@@ -258,14 +242,14 @@
 		File functionsFile = null;
 		try {
 
-			Bundle bundle = Platform.getBundle("org.txm.edition.rcp");
-			URL fileURL = bundle.getEntry("res/js/functions.js");
+			Bundle bundle = Platform.getBundle("org.txm.edition.rcp"); //$NON-NLS-1$
+			URL fileURL = bundle.getEntry("res/js/functions.js"); //$NON-NLS-1$
 			URL r = FileLocator.resolve(fileURL);
 			Log.info("Load JS functions from: "+r);
-			functions = IOUtils.getText(r, "UTF-8");
+			functions = IOUtils.getText(r, "UTF-8"); //$NON-NLS-1$
 
 		} catch (Exception e) {
-			System.out.println("Error while reading "+functionsFile+": "+e.getLocalizedMessage());
+			System.out.println(EditionUIMessages.bind(EditionUIMessages.error_while_reading, functionsFile, e.getLocalizedMessage()));
 			Log.printStackTrace(e);
 		}
 
@@ -281,8 +265,8 @@
 			public void completed(ProgressEvent event) {
 				
 				//				System.out.println("EditionPanel "+currentEdition.getName()+" reload "+getCurrentPage().getName());
-				Object rez = evaluate("return typeof sheet");
-				if ("undefined".equals(rez)) execute(functions); // build the sheet if not present in the HTML DOM
+				Object rez = evaluate("return typeof sheet"); //$NON-NLS-1$
+				if ("undefined".equals(rez)) execute(functions); // build the sheet if not present in the HTML DOM //$NON-NLS-1$
 				
 				// do something before the highlight is done
 				for (ProgressListener pl : beforeHighlighListeners) { pl.completed(event);}
@@ -295,7 +279,7 @@
 					//						buffer.append(String.format(clearhighlightscript, wordid)+"\n");
 					//					}
 				} else {
-					buffer.append("try { while(sheet.cssRules.length > 0) sheet.deleteRule(0); } catch (e) {};\n"); // empty style
+					buffer.append("try { while(sheet.cssRules.length > 0) sheet.deleteRule(0); } catch (e) {};\n"); // empty style //$NON-NLS-1$
 				}
 
 				if (buffer.length() > 0) execute(buffer.toString());
@@ -303,7 +287,7 @@
 
 				String firstWord = currentPage.getWordId();
 				Page nextPage = currentEdition.getNextPage(currentPage);
-				String lastWord = "w_999999999";
+				String lastWord = "w_999999999"; //$NON-NLS-1$
 				if (nextPage != null && currentPage != nextPage) lastWord = nextPage.getWordId();
 				//System.out.println("firstWord="+firstWord+" lastWord="+lastWord);
 				//int n = 0;
@@ -334,7 +318,7 @@
 					String s = null;
 					if (!fastWordHighLight) {
 						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
-						s = "try { document.getElementById(\"" + wordid + "\").style.backgroundColor=\"rgba("+composite.r+","+composite.g+","+composite.b+","+composite.a+")\";" //$NON-NLS-1$
+						s = "try { document.getElementById(\"" + wordid + "\").style.backgroundColor=\"rgba("+composite.r+","+composite.g+","+composite.b+","+composite.a+")\";" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
 								+ 
 								//								"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
 								//								"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
@@ -343,11 +327,11 @@
 								"} catch (e) { };"; //$NON-NLS-1$
 					} else {
 						//TODO: replace this line with the next one for TXM 0.7.9
-						s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a);
+						s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a); //$NON-NLS-1$ //$NON-NLS-2$
 						//						s = String.format(highlightscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
 					}
 
-					buffer.append(s+"\n");
+					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
 
 				if (buffer.length() > 0) execute(buffer.toString());
@@ -389,7 +373,7 @@
 					composite.b /= size;
 
 					String s = String.format(colorscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
-					buffer.append(s+"\n");
+					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
 
 				if (buffer.length() > 0) execute(buffer.toString());
@@ -397,14 +381,14 @@
 
 				for (String wordid : fontSizePerWordIDS.keySet()) {
 					String s = String.format(sizescriptRuleFast, wordid, fontSizePerWordIDS.get(wordid));
-					buffer.append(s+"\n");
+					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
 
 				for (String wordid : fontWeightPerWordIDS.keySet()) {
 					String s = null;
 					if (!fastWordHighLight) {
 						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
-						s = "try { document.getElementById(\"" + wordid + "\").style.fontWeight=\""+fontWeightPerWordIDS.get(wordid)+"\";" //$NON-NLS-1$
+						s = "try { document.getElementById(\"" + wordid + "\").style.fontWeight=\""+fontWeightPerWordIDS.get(wordid)+"\";" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 								+ 
 								//								"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
 								//								"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
@@ -422,12 +406,12 @@
 					} else {
 						s = String.format(weightscriptRuleFast, wordid, fontWeightPerWordIDS.get(wordid));
 					}
-					buffer.append(s+"\n");
+					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
 
 				for (String wordid : fontFamillyPerWordIDS.keySet()) {
 					String s = String.format(famillyscriptRuleFast, wordid, fontFamillyPerWordIDS.get(wordid));
-					buffer.append(s+"\n");
+					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
 
 				if (buffer.length() > 0) execute(buffer.toString());
@@ -435,8 +419,8 @@
 
 				if (focusedWordID != null) {
 					//System.out.println("Focus on: "+focusedWordID);
-					String s = "try { showElementIfNeeded(document.getElementById(\"" + focusedWordID + "\")); } catch (e) {document.getElementById(\"" + focusedWordID + "\").scrollIntoView();};"; //$NON-NLS-1$ //$NON-NLS-2$
-					buffer.append(s+"\n");
+					String s = "try { showElementIfNeeded(document.getElementById(\"" + focusedWordID + "\")); } catch (e) {document.getElementById(\"" + focusedWordID + "\").scrollIntoView();};"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					buffer.append(s+"\n"); //$NON-NLS-1$
 					focusedWordID = null; // focus one time
 				}
 
@@ -444,10 +428,10 @@
 				buffer = new StringBuilder();
 
 				if (highlightedAreas != null) {
-					for (int[] pos : highlightedAreas ) {
+					for (int[] pos : highlightedAreas) {
 						if (pos == null || pos.length != 4) continue;
-						String s = "try {v.setFocusOn("+pos[0]+", "+pos[1]+", "+pos[2]+", "+pos[3]+");} catch (e) { };"; //$NON-NLS-1$
-						buffer.append(s+"\n");
+						String s = "try {v.setFocusOn("+pos[0]+", "+pos[1]+", "+pos[2]+", "+pos[3]+");} catch (e) { };"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+						buffer.append(s+"\n"); //$NON-NLS-1$
 						break;// one word only for now
 					}
 				}
@@ -476,7 +460,7 @@
 	 * Bypass BrowserViewer restriction on the getBrowser method
 	 */
 	public String getDOM() {
-		return "";//execute("return document.innerHTML";
+		return "";//execute("return document.innerHTML"; //$NON-NLS-1$
 	}
 
 	public ISelectionProvider getSelectionProvider() {
@@ -520,7 +504,7 @@
 		for (String wordid : wordids) {
 			removeHighlightWordsById(color, wordid);
 			if (!fastWordHighLight) {
-				buffer.append(String.format(clearhighlightscript, wordid)+"\n");
+				buffer.append(String.format(clearhighlightscript, wordid)+"\n"); //$NON-NLS-1$
 			}
 		}
 
@@ -549,7 +533,7 @@
 		Edition edition = text.getEdition(name);
 
 		if (edition == null) {
-			String s = EditionUIMessages.EditionPanel_0+text+EditionUIMessages.EditionPanel_5+name;
+			String s = EditionUIMessages.bind(EditionUIMessages.warning_no_edition_found, text, name);
 			System.out.println(s);
 			StatusLine.setMessage(s);
 			Log.severe(s);
@@ -577,7 +561,7 @@
 		currentPage = currentEdition.getFirstPage();
 		currentText = currentEdition.getText();
 		if (currentPage == null) {
-			System.out.println(EditionUIMessages.EditionPanel_1+currentEdition.getName()+EditionUIMessages.EditionPanel_2+currentText.getName());
+			System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_first_page, currentEdition.getName(), currentText.getName()));
 		}
 
 		this.setURL(currentPage.toURL());
@@ -656,7 +640,7 @@
 			String editionName = currentEdition.getName();
 			Edition tmp = firstText.getEdition(editionName);
 			if (tmp == null) {
-				System.out.println(EditionUIMessages.EditionPanel_6+editionName+EditionUIMessages.EditionPanel_7+firstText.getName());
+				System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_edition_with_name, editionName, firstText.getName()));
 				return;
 			}
 			currentEdition = tmp;
@@ -682,7 +666,7 @@
 			String editionName = currentEdition.getName();
 			Edition tmp = lastText.getEdition(editionName);
 			if (tmp == null) {
-				System.out.println(EditionUIMessages.EditionPanel_6+editionName+EditionUIMessages.EditionPanel_7+lastText.getName());
+				System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_edition_with_name, editionName, lastText.getName()));
 				return;
 			}
 
@@ -715,7 +699,7 @@
 
 			Edition tmp = previousText.getEdition(editionName);
 			if (tmp == null) {
-				System.out.println(EditionUIMessages.EditionPanel_6+editionName+EditionUIMessages.EditionPanel_7+previousText.getName());
+				System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_edition_with_name, editionName, previousText.getName()));
 			}
 			currentEdition = tmp;
 			currentText = previousText;
@@ -746,7 +730,7 @@
 			String editionName = currentEdition.getName();
 			Edition tmp = nextText.getEdition(editionName);
 			if (tmp == null) {
-				System.out.println(EditionUIMessages.EditionPanel_6+editionName+EditionUIMessages.EditionPanel_7+nextText.getName());
+				System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_edition_with_name, editionName, nextText.getName()));
 				return;
 			}
 			currentEdition = tmp;
@@ -769,7 +753,7 @@
 		String editionName = currentEdition.getName();
 		Edition tmp = text.getEdition(editionName);
 		if (tmp == null) {
-			System.out.println(EditionUIMessages.EditionPanel_6+editionName+EditionUIMessages.EditionPanel_7+text.getName());
+			System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_no_edition_with_name, editionName, text.getName()));
 			return;
 		}
 
@@ -841,22 +825,22 @@
 	//		this.currentEdition = edition;
 	//	}
 
-	static String SCRIPT01 = "var html = \"\";"+
-			"if (typeof window.getSelection != \"undefined\") {"+ // modern Web browsers
-			"var sel = window.getSelection();"+
-			"if (sel.rangeCount) {"+
-			"var container = document.createElement(\"div\");"+
-			"for (var i = 0, len = sel.rangeCount; i < len; ++i) {"+
-			"container.appendChild(sel.getRangeAt(i).cloneContents());"+
-			"}"+
-			"html = container.innerHTML;"+
-			"}"+
-			"} else if (typeof document.selection != \"undefined\") {"+ // for IE < 11
-			"if (document.selection.type == \"Text\") {"+
-			"html = document.selection.createRange().htmlText;"+
-			"}" +
-			"}" +
-			"return html";
+	static String SCRIPT01 = "var html = \"\";"+ //$NON-NLS-1$
+			"if (typeof window.getSelection != \"undefined\") {"+ // modern Web browsers //$NON-NLS-1$
+			"var sel = window.getSelection();"+ //$NON-NLS-1$
+			"if (sel.rangeCount) {"+ //$NON-NLS-1$
+			"var container = document.createElement(\"div\");"+ //$NON-NLS-1$
+			"for (var i = 0, len = sel.rangeCount; i < len; ++i) {"+ //$NON-NLS-1$
+			"container.appendChild(sel.getRangeAt(i).cloneContents());"+ //$NON-NLS-1$
+			"}"+ //$NON-NLS-1$
+			"html = container.innerHTML;"+ //$NON-NLS-1$
+			"}"+ //$NON-NLS-1$
+			"} else if (typeof document.selection != \"undefined\") {"+ // for IE < 11 //$NON-NLS-1$
+			"if (document.selection.type == \"Text\") {"+ //$NON-NLS-1$
+			"html = document.selection.createRange().htmlText;"+ //$NON-NLS-1$
+			"}" + //$NON-NLS-1$
+			"}" + //$NON-NLS-1$
+			"return html"; //$NON-NLS-1$
 
 	public String getTextSelectionDOM() {
 		return ((String) evaluate(SCRIPT01));
@@ -865,47 +849,47 @@
 	public String[] getWordSelection() {
 
 		//System.out.println("getWordSelection");
-		String SCRIPT02_getspans = ""//functions
-				+"var all = [];"
-				+"\nvar sel = txmGetSelection();"
-				+"\nif (sel.rangeCount == 0) {return all;}"
+		String SCRIPT02_getspans = ""//functions //$NON-NLS-1$
+				+"var all = [];" //$NON-NLS-1$
+				+"\nvar sel = txmGetSelection();" //$NON-NLS-1$
+				+"\nif (sel.rangeCount == 0) {return all;}" //$NON-NLS-1$
 				//+"\nalert('sel='+sel);"
-				+"\nvar range = txmGetRange(sel, 0);"
+				+"\nvar range = txmGetRange(sel, 0);" //$NON-NLS-1$
 				//+"\nalert('range='+range);"
-				+"\nvar frag = txmGetFragment(range);"
+				+"\nvar frag = txmGetFragment(range);" //$NON-NLS-1$
 				//+"\nalert('frag='+frag);"
-				+"\nvar children = txmGetChildren(frag);"
+				+"\nvar children = txmGetChildren(frag);" //$NON-NLS-1$
 				//+"\nalert('children='+children);"
 				//+"\nalert('children.length='+children.length);"
-				+"\nif ((children.length == 0) || (children.length == 1 && children.item(0).nodeType == 3)) {"
-				+"\n	var parent = txmGetParentElementRange(range);"
+				+"\nif ((children.length == 0) || (children.length == 1 && children.item(0).nodeType == 3)) {" //$NON-NLS-1$
+				+"\n	var parent = txmGetParentElementRange(range);" //$NON-NLS-1$
 				//+"\n	if (parent instanceof HTMLHtmlElement) {alert('HTMLHtmlElement parent='+parent);return findIdsInString(parent, all);}"
-				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}"
-				+"\n	var id = parent.getAttribute('id');"
-				+"\n	var id = parent.getAttribute('id');"
-				+"\n	if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {"
-				+"\n		all.push(id);"
-				+"\n	} else {" // try with the parent's parent 
-				+"\n		var parent = txmGetParent(parent);"
+				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}" //$NON-NLS-1$
+				+"\n	var id = parent.getAttribute('id');" //$NON-NLS-1$
+				+"\n	var id = parent.getAttribute('id');" //$NON-NLS-1$
+				+"\n	if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {" //$NON-NLS-1$
+				+"\n		all.push(id);" //$NON-NLS-1$
+				+"\n	} else {" // try with the parent's parent  //$NON-NLS-1$
+				+"\n		var parent = txmGetParent(parent);" //$NON-NLS-1$
 				//+"\n		alert('text selection, parent='+txmGetTagName(parent))"
-				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}"
-				+"\n		var id = parent.getAttribute('id');"
-				+"\n		if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {"
-				+"\n			all.push(id);"
-				+"\n		}"
-				+"\n	}"
-				+"\n} else {"
-				+"\n	findSpans(children, all);"
-				+"\n}"
+				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}" //$NON-NLS-1$
+				+"\n		var id = parent.getAttribute('id');" //$NON-NLS-1$
+				+"\n		if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {" //$NON-NLS-1$
+				+"\n			all.push(id);" //$NON-NLS-1$
+				+"\n		}" //$NON-NLS-1$
+				+"\n	}" //$NON-NLS-1$
+				+"\n} else {" //$NON-NLS-1$
+				+"\n	findSpans(children, all);" //$NON-NLS-1$
+				+"\n}" //$NON-NLS-1$
 				//+"alert('result='+all)"
-				+"\nreturn all;";
+				+"\nreturn all;"; //$NON-NLS-1$
 
 		//		System.out.println(functions);
 		//		System.out.println(SCRIPT02_getspans);
 
 		Object ret = evaluate(SCRIPT02_getspans);
 		if (ret instanceof Object[]) {
-			Log.info("selection word ids="+Arrays.toString((Object[])ret));
+			Log.info("selection word ids="+Arrays.toString((Object[])ret)); //$NON-NLS-1$
 			Object[] array = (Object[])ret;
 			String[] sel = new String[2];
 			if (array.length == 0) {
@@ -919,14 +903,14 @@
 				return sel;
 			}
 		} else { 
-			System.out.println("SCRIPT RETURNED="+ret);
+			System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_script_returned, ret));
 			return null;
 		}
 	}
 
 	public String getTextSelection() {
 		//System.out.println("DOM="+getTextSelectionDOM());
-		String rez =  getTextSelectionDOM().replaceAll("<[^>]+>", "");
+		String rez =  getTextSelectionDOM().replaceAll("<[^>]+>", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		//System.out.println("STR="+rez);
 		return rez;
 	}
@@ -985,7 +969,7 @@
 				new MenuItem(menu, SWT.SEPARATOR);
 
 				MenuItem copyItem = new MenuItem(menu, SWT.NONE);
-				copyItem.setText("Copy text selection");
+				copyItem.setText(EditionUIMessages.menu_copy_text_selection);
 				copyItem.addSelectionListener(new SelectionListener() {
 
 					@Override
@@ -1003,7 +987,7 @@
 				copyItem.setEnabled(text != null && text.length() > 0);
 
 				MenuItem reloadItem = new MenuItem(menu, SWT.NONE);
-				reloadItem.setText("Reload");
+				reloadItem.setText(EditionUIMessages.menu_reload);
 				reloadItem.addSelectionListener(new SelectionListener() {
 
 					@Override
@@ -1015,7 +999,7 @@
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 				MenuItem backItem = new MenuItem(menu, SWT.NONE);
-				backItem.setText("Back");
+				backItem.setText(EditionUIMessages.menu_back);
 				backItem.addSelectionListener(new SelectionListener() {
 
 					@Override
@@ -1027,7 +1011,7 @@
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 				MenuItem forwardItem = new MenuItem(menu, SWT.NONE);
-				forwardItem.setText("Forward");
+				forwardItem.setText(EditionUIMessages.menu_forward);
 				forwardItem.addSelectionListener(new SelectionListener() {
 
 					@Override
@@ -1043,7 +1027,6 @@
 			@Override
 			public void menuHidden(MenuEvent e) {
 				// TODO Auto-generated method stub
-
 			}
 		});
 		//		// restore old listeners
@@ -1105,7 +1088,7 @@
 			currentPage = next;
 			this.setURL(currentPage.toURL());
 		} else {
-			System.out.println("Page not found ("+name+").");
+			System.out.println(EditionUIMessages.bind(EditionUIMessages.warning_page_not_found, name));
 		}
 	}
 
@@ -1130,23 +1113,23 @@
 		String id2 = ids[1];
 		if (id2 == null) id2 = id1;
 		String SCRIPT02_expand = ""
-				+ "var elt = document.getElementById(\""+id1+"\");\n"
-				+ "var elt2 = document.getElementById(\""+id2+"\");\n"
+				+ "var elt = document.getElementById(\""+id1+"\");\n" //$NON-NLS-1$ //$NON-NLS-2$
+				+ "var elt2 = document.getElementById(\""+id2+"\");\n" //$NON-NLS-1$ //$NON-NLS-2$
 				//+ "alert(\"elt=\"+elt);\n"
-				+ "var sel = txmGetSelection();\n"
+				+ "var sel = txmGetSelection();\n" //$NON-NLS-1$
 				//+ "alert(\"sel=\"+sel.extentNode);\n"
 				//+ "alert(\"typeof sel=\"+Object.getOwnPropertyNames(sel));\n"
 				//+ "alert(\"get_type sel=\"+get_type(sel));\n"
-				+ "var range = txmGetRange(sel, 0);\n"
+				+ "var range = txmGetRange(sel, 0);\n" //$NON-NLS-1$
 				//+ "alert(\"range=\"+range);\n"
 				//+ "alert(\"typeof range=\"+Object.getOwnPropertyNames(range));\n"
 				//+ "alert(\"get_type range=\"+get_type(range));\n"
-				+"range.setStart(elt, 0);\n"
-				+"range.setEndAfter(elt2, 0);\n"
-				+"sel.removeAllRanges();\n"
-				+"sel.addRange(range);\n"
-				+ "\n"
-				+ "return null;";
+				+"range.setStart(elt, 0);\n" //$NON-NLS-1$
+				+"range.setEndAfter(elt2, 0);\n" //$NON-NLS-1$
+				+"sel.removeAllRanges();\n" //$NON-NLS-1$
+				+"sel.addRange(range);\n" //$NON-NLS-1$
+				+ "\n" //$NON-NLS-1$
+				+ "return null;"; //$NON-NLS-1$
 
 		//System.out.println("Eval...\n"+SCRIPT02_expand);
 		evaluate(SCRIPT02_expand);
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/RGBA.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/RGBA.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/RGBA.java	(revision 1053)
@@ -7,13 +7,13 @@
 		this.r =r;this.g=g; this.b =b;
 	}
 	public RGBA(String rgb) {
-		String[] split = rgb.split(",");
+		String[] split = rgb.split(","); //$NON-NLS-1$
 		try{this.r =Integer.parseInt(split[0]);}catch(Exception e){}
 		try{this.g =Integer.parseInt(split[1]);}catch(Exception e){}
 		try{this.b =Integer.parseInt(split[2]);}catch(Exception e){}
 	}
 	public RGBA(String rgb, float a) {
-		String[] split = rgb.split(",");
+		String[] split = rgb.split(","); //$NON-NLS-1$
 		try{this.r =Integer.parseInt(split[0]);}catch(Exception e){}
 		try{this.g =Integer.parseInt(split[1]);}catch(Exception e){}
 		try{this.b =Integer.parseInt(split[2]);}catch(Exception e){}
@@ -23,5 +23,5 @@
 		this.r =r;this.g=g; this.b =b;this.a =a;
 	}
 
-	public String toString() {return "{"+r+", "+g+","+b+", "+a+"}";}
+	public String toString() {return "{"+r+", "+g+","+b+", "+a+"}";} //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 }
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 1053)
@@ -139,7 +139,7 @@
 							String s = panel.getTextSelection();
 							if (s.length() > 0) return s;
 						}
-						return "";
+						return EditionUIMessages.editor_empty;
 					}
 					@Override
 					public int getStartLine() {	return 0;}
@@ -317,7 +317,7 @@
 
 		editionsArea = getResultArea();
 
-		controlsArea = getBottomToolbar().installGLComposite("controls", 15, false);
+		controlsArea = getBottomToolbar().installGLComposite(EditionUIMessages.editor_controls, 15, false);
 		controlsArea.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
 		//spacer
 		new Label(controlsArea, SWT.NONE).setText("  "); //$NON-NLS-1$
@@ -369,7 +369,7 @@
 		}
 
 		// Navigation buttons
-		GLComposite pageNavigationComposite = new GLComposite(controlsArea, SWT.NONE, "page buttons");
+		GLComposite pageNavigationComposite = new GLComposite(controlsArea, SWT.NONE, EditionUIMessages.editor_page_navigation_buttons);
 		pageNavigationComposite.getLayout().numColumns = 6;
 		Button first = new Button(pageNavigationComposite, SWT.FLAT|SWT.PUSH);
 		Button previous = new Button(pageNavigationComposite, SWT.FLAT|SWT.PUSH);
@@ -379,11 +379,11 @@
 		Button last = new Button(pageNavigationComposite, SWT.FLAT|SWT.PUSH);
 		pageNavigationComposite.setLayoutData(new GridData(GridData.CENTER, GridData.FILL, true, false));
 		
-		GLComposite textNavigationComposite = new GLComposite(controlsArea, SWT.NONE, "text buttons");
+		GLComposite textNavigationComposite = new GLComposite(controlsArea, SWT.NONE, EditionUIMessages.editor_text_navigation_buttons);
 		textNavigationComposite.getLayout().numColumns = 6;
 		Button firstText = new Button(textNavigationComposite, SWT.FLAT);
 		Button previousText = new Button(textNavigationComposite, SWT.FLAT);
-		new Label(textNavigationComposite, SWT.NONE).setText(" ");
+		new Label(textNavigationComposite, SWT.NONE).setText(EditionUIMessages.editor_empty);
 		Button nextText = new Button(textNavigationComposite, SWT.FLAT|SWT.PUSH);
 		Button lastText = new Button(textNavigationComposite, SWT.FLAT|SWT.PUSH);
 		textNavigationComposite.setLayoutData(new GridData(GridData.CENTER, GridData.FILL, false, false));
@@ -671,7 +671,7 @@
 		}
 		updatePageLabel();
 		
-		notifyExtensions("onBackToText");
+		notifyExtensions("onBackToText"); //$NON-NLS-1$
 	}
 
 	public void reloadPage() {
@@ -687,7 +687,7 @@
 			sel = p.getTextSelection();
 			if (sel != null) return sel;
 		}
-		return "";
+		return EditionUIMessages.editor_empty;
 	}
 
 	@Override
@@ -808,7 +808,7 @@
 				Parameterization p = new Parameterization(iparam, params.get(k));
 				parameters.add(p);
 			} catch (NotDefinedException e) {
-				System.out.println("warning: unknowned parameter id="+k);
+				System.out.println(EditionUIMessages.editor_warning_unknowned_param_id+k);
 			}
 		}
 
@@ -840,14 +840,14 @@
 			params.put(arguments[i].toString(), arguments[i+1].toString());
 		}
 
-		String id = params.get("id");
+		String id = params.get("id"); //$NON-NLS-1$
 		if (id != null) {
-			params.remove("id");
+			params.remove("id"); //$NON-NLS-1$
 			//System.out.println("CALLING CMD with id="+id+" and parameters="+params);
 			//get the command from plugin.xml
 			callTXMCommand(id, params);
 		} else {
-			System.out.println("Cannot call txmcommand without 'id' parameter: "+params);
+			System.out.println(EditionUIMessages.editor_warning_no_id_parameter+params);
 		}
 		return arguments;
 	}
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/preferences/SynopticEditionPreferencePage.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/preferences/SynopticEditionPreferencePage.java	(revision 1052)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/preferences/SynopticEditionPreferencePage.java	(revision 1053)
@@ -5,6 +5,7 @@
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.txm.edition.rcp.messages.EditionUIMessages;
 import org.txm.rcp.Application;
 
 /**
@@ -26,7 +27,7 @@
 		super();
 		preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE, Application.PLUGIN_ID);
 		setPreferenceStore(preferences);
-		setTitle("Edition");
+		setTitle(EditionUIMessages.preference_title);
 	}
 	
 	@Override
@@ -34,7 +35,7 @@
 
 	@Override
 	protected void createFieldEditors() {
-		fast_highlight = new BooleanFieldEditor(SynopticEditionPreferences.FAST_HIGHLIGHT, "Enable fast word highlight", getFieldEditorParent());
+		fast_highlight = new BooleanFieldEditor(SynopticEditionPreferences.FAST_HIGHLIGHT, EditionUIMessages.preference_preference_fast_highlight, getFieldEditorParent());
 		addField(fast_highlight);
 	}
 }
