From 51cb71af4243a11a3431eeabaf191e23c7ec2f85 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Sun, 7 Oct 2012 16:04:28 +0200
Subject: [PATCH] Localization, Internationalization, New Icons

---
 .../application/GlobalPropertiesBean.java     |  22 +-
 .../session/CurrentConfigurationBean.java     |  27 +
 .../kieker/webgui/beans/session/UserBean.java |  25 +-
 .../view/CurrentAnalysisEditorGraphBean.java  |   6 +-
 .../src/main/resources/global.properties      |  11 +-
 .../src/main/resources/messages_de.properties | 146 +++++
 .../src/main/resources/messages_en.properties | 160 ++++++
 .../src/main/webapp/AnalysisEditor.xhtml      | 507 +++++++++---------
 Kieker.WebGUI/src/main/webapp/Cockpit.xhtml   |  20 +-
 .../src/main/webapp/Controller.xhtml          | 216 ++++----
 Kieker.WebGUI/src/main/webapp/Login.xhtml     |  79 +--
 .../src/main/webapp/ProjectOverview.xhtml     | 202 +++----
 .../src/main/webapp/WEB-INF/faces-config.xml  |  21 +
 .../src/main/webapp/css/AnalysisEditor.css    |  31 ++
 Kieker.WebGUI/src/main/webapp/css/Common.css  | 168 ++++++
 Kieker.WebGUI/src/main/webapp/css/Login.css   |   1 +
 Kieker.WebGUI/src/main/webapp/css/base.css    |  31 --
 .../src/main/webapp/css/js-graph-it.css       |  24 -
 .../src/main/webapp/dialogs/aboutDialog.xhtml |   2 +-
 .../dialogs/manageLibrariesDialog.xhtml       |  12 +-
 .../main/webapp/dialogs/projectDialogs.xhtml  |  30 +-
 .../main/webapp/dialogs/settingsDialog.xhtml  |  36 +-
 .../webapp/img/{ => LEDs}/Icon_LED_Gray.png   | Bin
 .../webapp/img/{ => LEDs}/Icon_LED_Green.png  | Bin
 .../webapp/img/{ => LEDs}/Icon_LED_Red.png    | Bin
 .../webapp/img/{ => LEDs}/Icon_LED_Yellow.png | Bin
 .../img/{ => graphIcons}/FilterIcon.png       | Bin
 .../img/{ => graphIcons}/ReaderIcon.png       | Bin
 .../img/{ => graphIcons}/RepositoryIcon.png   | Bin
 .../src/main/webapp/img/icons/About.png       | Bin 0 -> 780 bytes
 .../src/main/webapp/img/icons/Analysis.png    | Bin 0 -> 879 bytes
 .../main/webapp/img/icons/AnalysisEditor.png  | Bin 0 -> 789 bytes
 .../src/main/webapp/img/icons/AutoLayout.png  | Bin 0 -> 2367 bytes
 .../main/webapp/img/icons/AutoLayoutSmall.png | Bin 0 -> 837 bytes
 .../src/main/webapp/img/icons/Close.png       | Bin 0 -> 932 bytes
 .../src/main/webapp/img/icons/Cockpit.png     | Bin 0 -> 840 bytes
 .../main/webapp/img/icons/CockpitEditor.png   | Bin 0 -> 789 bytes
 .../main/webapp/img/icons/GridDisabled.png    | Bin 0 -> 898 bytes
 .../webapp/img/icons/GridDisabledSmall.png    | Bin 0 -> 471 bytes
 .../src/main/webapp/img/icons/GridEnabled.png | Bin 0 -> 1270 bytes
 .../webapp/img/icons/GridEnabledSmall.png     | Bin 0 -> 592 bytes
 .../src/main/webapp/img/icons/Home.png        | Bin 0 -> 779 bytes
 .../main/webapp/img/icons/ImportProject.png   | Bin 0 -> 759 bytes
 .../src/main/webapp/img/icons/Logout.png      | Bin 0 -> 954 bytes
 .../main/webapp/img/icons/ManageLibraries.png | Bin 0 -> 914 bytes
 .../src/main/webapp/img/icons/NewProject.png  | Bin 0 -> 471 bytes
 .../src/main/webapp/img/icons/Reload.png      | Bin 0 -> 792 bytes
 .../src/main/webapp/img/icons/Save.png        | Bin 0 -> 623 bytes
 .../src/main/webapp/img/icons/SaveAs.png      | Bin 0 -> 623 bytes
 .../src/main/webapp/img/icons/ScaleToFit.png  | Bin 0 -> 1776 bytes
 .../main/webapp/img/icons/ScaleToFitSmall.png | Bin 0 -> 749 bytes
 .../src/main/webapp/img/icons/Settings.png    | Bin 0 -> 927 bytes
 .../main/webapp/img/icons/SnapDisabled.png    | Bin 0 -> 1620 bytes
 .../webapp/img/icons/SnapDisabledSmall.png    | Bin 0 -> 685 bytes
 .../src/main/webapp/img/icons/SnapEnabled.png | Bin 0 -> 1611 bytes
 .../webapp/img/icons/SnapEnabledSmall.png     | Bin 0 -> 701 bytes
 .../src/main/webapp/img/icons/UserGuide.png   | Bin 0 -> 801 bytes
 57 files changed, 1154 insertions(+), 623 deletions(-)
 create mode 100644 Kieker.WebGUI/src/main/resources/messages_de.properties
 create mode 100644 Kieker.WebGUI/src/main/resources/messages_en.properties
 create mode 100644 Kieker.WebGUI/src/main/webapp/WEB-INF/faces-config.xml
 delete mode 100644 Kieker.WebGUI/src/main/webapp/css/base.css
 delete mode 100644 Kieker.WebGUI/src/main/webapp/css/js-graph-it.css
 rename Kieker.WebGUI/src/main/webapp/img/{ => LEDs}/Icon_LED_Gray.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => LEDs}/Icon_LED_Green.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => LEDs}/Icon_LED_Red.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => LEDs}/Icon_LED_Yellow.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => graphIcons}/FilterIcon.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => graphIcons}/ReaderIcon.png (100%)
 rename Kieker.WebGUI/src/main/webapp/img/{ => graphIcons}/RepositoryIcon.png (100%)
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/About.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Analysis.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/AnalysisEditor.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/AutoLayout.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/AutoLayoutSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Close.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Cockpit.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/CockpitEditor.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/GridDisabled.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/GridDisabledSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/GridEnabled.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/GridEnabledSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Home.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ImportProject.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Logout.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ManageLibraries.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/NewProject.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Reload.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Save.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SaveAs.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFit.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFitSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/Settings.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabled.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabledSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabled.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabledSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/UserGuide.png

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/GlobalPropertiesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/GlobalPropertiesBean.java
index 2a1a7c12..5c83ea36 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/GlobalPropertiesBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/GlobalPropertiesBean.java
@@ -17,7 +17,9 @@
 package kieker.webgui.beans.application;
 
 import java.io.IOException;
+import java.util.Locale;
 import java.util.Properties;
+import java.util.ResourceBundle;
 
 import javax.faces.bean.ApplicationScoped;
 import javax.faces.bean.ManagedBean;
@@ -44,14 +46,16 @@ public final class GlobalPropertiesBean {
 	private static final String PROPERTY_FACES_CONTEXT_THEME_KEY = "kieker.webgui.config.lookAndFeel.facesContextKey";
 	private static final String PROPERTY_THEME_COOKIE_NAME = "kieker.webgui.config.lookAndFeel.cookieName";
 	private static final String PROPERTY_DEFAULT_THEME = "kieker.webgui.config.lookAndFeel.defaultTheme";
+	private static final String PROPERTY_LANGUAGE_COOKIE_NAME = "kieker.webgui.config.language.cookieName";
 	private static final String PROPERTY_PROJECT_OVERVIEW_PAGE = "kieker.webgui.page.projectOverview";
-	private static final String PROPERTY_WELCOME_MESSAGE = "kieker.webgui.common.welcomeMessage";
-	private static final String PROPERTY_SHORT_WELCOME_MESSAGE = "kieker.webgui.common.shortWelcomeMessage";
 	private static final String PROPERTY_ANALYSIS_EDITOR_GRID_SIZE_COOKIE_NAME = "kieker.webgui.config.analysisEditor.gridSize.cookieName";
 	private static final String PROPERTY_ANALYSIS_EDITOR_GRID_COLOR_COOKIE_NAME = "kieker.webgui.config.analysisEditor.gridColor.cookieName";
 	private static final String PROPERTY_ANALYSIS_EDITOR_DEFAULT_GRID_SIZE = "kieker.webgui.config.analysisEditor.defaultGridSize";
 	private static final String PROPERTY_ANALYSIS_EDITOR_DEFAULT_GRID_COLOR = "kieker.webgui.config.analysisEditor.defaultGridColor";
 
+	private static final String PROPERTY_WELCOME_MESSAGE = "longWelcomeMessage";
+	private static final String PROPERTY_SHORT_WELCOME_MESSAGE = "shortWelcomeMessage";
+
 	private final Properties globalProperties = new Properties();
 
 	/**
@@ -109,8 +113,9 @@ public final class GlobalPropertiesBean {
 	 * 
 	 * @return The value of the property.
 	 */
-	public String getWelcomeMessage() {
-		return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_WELCOME_MESSAGE);
+	public String getWelcomeMessage(final Locale locale) {
+		// return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_WELCOME_MESSAGE);
+		return ResourceBundle.getBundle("messages", locale).getString(GlobalPropertiesBean.PROPERTY_WELCOME_MESSAGE);
 	}
 
 	/**
@@ -118,8 +123,9 @@ public final class GlobalPropertiesBean {
 	 * 
 	 * @return The value of the property.
 	 */
-	public String getShortWelcomeMessage() {
-		return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_SHORT_WELCOME_MESSAGE);
+	public String getShortWelcomeMessage(final Locale locale) {
+		// return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_SHORT_WELCOME_MESSAGE);
+		return ResourceBundle.getBundle("messages", locale).getString(GlobalPropertiesBean.PROPERTY_SHORT_WELCOME_MESSAGE);
 	}
 
 	/**
@@ -157,4 +163,8 @@ public final class GlobalPropertiesBean {
 	public String getAnalysisEditorDefaultGridColor() {
 		return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_ANALYSIS_EDITOR_DEFAULT_GRID_COLOR);
 	}
+
+	public String getLanguageCookieName() {
+		return this.globalProperties.getProperty(GlobalPropertiesBean.PROPERTY_LANGUAGE_COOKIE_NAME);
+	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentConfigurationBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentConfigurationBean.java
index 76c67761..cf246f53 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentConfigurationBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentConfigurationBean.java
@@ -16,6 +16,7 @@
 
 package kieker.webgui.beans.session;
 
+import java.util.Locale;
 import java.util.Map;
 
 import javax.annotation.PostConstruct;
@@ -39,6 +40,7 @@ import kieker.webgui.beans.application.GlobalPropertiesBean;
 @SessionScoped
 public final class CurrentConfigurationBean {
 
+	private String locale;
 	private String lookAndFeel;
 	private String gridColor;
 	private int gridSize;
@@ -158,6 +160,26 @@ public final class CurrentConfigurationBean {
 		}
 	}
 
+	public void setLocale(final String locale) {
+		synchronized (this) {
+			this.locale = locale;
+			CurrentConfigurationBean.saveValueInCookie(this.globalPropertiesBean.getLanguageCookieName(), locale);
+
+		}
+	}
+
+	public String getLocale() {
+		synchronized (this) {
+			return this.locale;
+		}
+	}
+
+	public Locale getLocaleObject() {
+		synchronized (this) {
+			return new Locale(this.locale);
+		}
+	}
+
 	/**
 	 * This method tries to load the default values of the properties from the {@link GlobalPropertiesBean} and the faces context.
 	 */
@@ -175,6 +197,8 @@ public final class CurrentConfigurationBean {
 
 			this.gridColor = this.globalPropertiesBean.getAnalysisEditorDefaultGridColor();
 			this.gridSize = Integer.parseInt(this.globalPropertiesBean.getAnalysisEditorDefaultGridSize());
+
+			this.locale = "en";
 		}
 	}
 
@@ -196,6 +220,9 @@ public final class CurrentConfigurationBean {
 			if (cookies.containsKey(this.globalPropertiesBean.getAnalysisEditorGridSizeCookieName())) {
 				this.gridSize = Integer.parseInt(((Cookie) cookies.get(this.globalPropertiesBean.getAnalysisEditorGridSizeCookieName())).getValue());
 			}
+			if (cookies.containsKey(this.globalPropertiesBean.getLanguageCookieName())) {
+				this.locale = ((Cookie) cookies.get(this.globalPropertiesBean.getLanguageCookieName())).getValue();
+			}
 		}
 	}
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/UserBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/UserBean.java
index 0e3df0b7..02e4db07 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/UserBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/UserBean.java
@@ -38,10 +38,14 @@ public final class UserBean {
 	private static final String WELCOME_MSG_TEMPLATE = "growlComp.renderMessage({summary : '%s', detail : '%s', severity: 'info'});";
 
 	private String userName;
+	private String password;
 
 	@ManagedProperty(value = "#{globalPropertiesBean}")
 	private GlobalPropertiesBean globalPropertiesBean;
 
+	@ManagedProperty(value = "#{currentConfigurationBean}")
+	private CurrentConfigurationBean currentConfigurationBean;
+
 	/**
 	 * Default constructor. <b>Do not use this constructor. This bean is JSF managed.</b>
 	 */
@@ -68,6 +72,14 @@ public final class UserBean {
 		this.userName = name;
 	}
 
+	public String getPassword() {
+		return this.password;
+	}
+
+	public void setPassword(final String password) {
+		this.password = password;
+	}
+
 	/**
 	 * Tries to login. If this has been successful the page of the project overview will be returned.
 	 * 
@@ -100,13 +112,22 @@ public final class UserBean {
 		this.globalPropertiesBean = globalPropertiesBean;
 	}
 
+	public CurrentConfigurationBean getCurrentConfigurationBean() {
+		return this.currentConfigurationBean;
+	}
+
+	public void setCurrentConfigurationBean(final CurrentConfigurationBean currentConfigurationBean) {
+		this.currentConfigurationBean = currentConfigurationBean;
+	}
+
 	/**
 	 * This method shows the welcome message using the growl component and the global properties.
 	 */
 	public void showWelcomeMessage() {
 		if (this.globalPropertiesBean != null) {
-			final String finalMsg = String.format(UserBean.WELCOME_MSG_TEMPLATE, this.globalPropertiesBean.getShortWelcomeMessage(),
-					this.globalPropertiesBean.getWelcomeMessage());
+			final String finalMsg = String.format(UserBean.WELCOME_MSG_TEMPLATE,
+					this.globalPropertiesBean.getShortWelcomeMessage(this.currentConfigurationBean.getLocaleObject()),
+					this.globalPropertiesBean.getWelcomeMessage(this.currentConfigurationBean.getLocaleObject()));
 
 			RequestContext.getCurrentInstance().execute(finalMsg);
 		}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorGraphBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorGraphBean.java
index 5a8dd732..030cab75 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorGraphBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorGraphBean.java
@@ -170,9 +170,9 @@ public final class CurrentAnalysisEditorGraphBean {
 	 */
 	public void declareGraph() {
 		RequestContext.getCurrentInstance().execute(CurrentAnalysisEditorGraphBean.JS_CMD_CREATE_GRAPH_VAR);
-		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Filter', '../img/FilterIcon.png');");
-		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Reader', '../img/ReaderIcon.png');");
-		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Repository', '../img/RepositoryIcon.png');");
+		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Filter', '../img/graphIcons/FilterIcon.png');");
+		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Reader', '../img/graphIcons/ReaderIcon.png');");
+		RequestContext.getCurrentInstance().execute("graph.setNodeIcon('Repository', '../img/graphIcons/RepositoryIcon.png');");
 	}
 
 	/**
diff --git a/Kieker.WebGUI/src/main/resources/global.properties b/Kieker.WebGUI/src/main/resources/global.properties
index 7a0c847e..915ffb4c 100644
--- a/Kieker.WebGUI/src/main/resources/global.properties
+++ b/Kieker.WebGUI/src/main/resources/global.properties
@@ -1,12 +1,3 @@
-#------------------------------------------------------------------------------
-#
-# These constants concern common things
-#
-#------------------------------------------------------------------------------
-
-kieker.webgui.common.shortWelcomeMessage = Welcome to the Kieker.WebGUI
-kieker.webgui.common.welcomeMessage = This is an early alpha version of the Kieker Web GUI. Therefore it may contain bugs and some functionality may have not been implemented yet. Just click "Login" to continue.
-
 #------------------------------------------------------------------------------
 #
 # These constants concern the further (and more specific) configuration of the
@@ -14,6 +5,8 @@ kieker.webgui.common.welcomeMessage = This is an early alpha version of the Kiek
 #
 #------------------------------------------------------------------------------
 
+kieker.webgui.config.language.cookieName = language
+
 kieker.webgui.config.lookAndFeel.cookieName = lookAndFeel
 kieker.webgui.config.lookAndFeel.defaultTheme = glass-x
 kieker.webgui.config.lookAndFeel.facesContextKey = theme
diff --git a/Kieker.WebGUI/src/main/resources/messages_de.properties b/Kieker.WebGUI/src/main/resources/messages_de.properties
new file mode 100644
index 00000000..4c09a04c
--- /dev/null
+++ b/Kieker.WebGUI/src/main/resources/messages_de.properties
@@ -0,0 +1,146 @@
+#------------------------------------------------------------------------------
+#
+# These are the messages which are commonly used within all pages.
+#
+#------------------------------------------------------------------------------
+
+yes=Ja
+ok=Ok
+cancel=Abbrechen
+
+file=Datei
+newProject=Neues Project
+importProject=Projekt Importieren
+refreshProjectsList=Projektliste Aktualisieren
+settings=Einstellungen
+
+help=Hilfe
+userGuide=User Guide
+about=\u00dcber...
+
+analysisEditor=Analyse Editor
+analysis=Analyse
+analysisController=Analyse Controller
+cockpitEditor=Cockpit Editor
+cockpit=Cockpit
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the login page.
+#
+#------------------------------------------------------------------------------
+
+shortWelcomeMessage=Willkommen bei der Kieker.WebGUI
+longWelcomeMessage=Dies ist eine fr\u00fche Alpha Version der Kieker Web GUI. Deshalb kann diese noch Bugs enthalten und einige Funktionalit\u00e4ten sind m\u00f6glicherweise noch nicht implementiert. Klicken Sie einfach auf "Anmelden" um fortzufahren.
+
+username=Benutzername
+password=Passwort
+
+login=Anmelden
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the project overview page.
+#
+#------------------------------------------------------------------------------
+
+projectName=Projektname
+state=Status
+lastModification=Letzte \u00c4nderung
+owner=Besitzer
+
+copyProject=Projekt Kopieren
+renameProject=Projekt Umbenennen
+deleteProject=Projekt L\u00f6schen
+
+name=Name
+newName=Neuer Name 
+
+msgReallyDeleteProject=M\u00f6chten Sie wirklich das ausgew\u00e4hlte Projekt l\u00f6schen?
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the analysis editor page.
+#
+#------------------------------------------------------------------------------
+
+saveProject=Projekt Speichern
+saveProjectAs=Projekt Speichern Unter
+reloadProject=Projekt Neu Laden
+manageLibraries=Bibliotheken Verwalten
+closeProject=Projekt schlie\u00dfen
+
+graph=Graph
+analysisEditorScaleToFit = An Fenstergr\u00f6\u00dfe Anpassen
+grid=Gitter
+snap=Einrasten
+autoLayout=Auto-Layout
+
+disable=Deaktivieren
+enable=Aktivieren
+
+noPropertiesAvailable=Keine Eigenschaften vorhanden
+
+className=ClassName
+
+tooltipClassName=Der Klassenname der Komponente.
+tooltipName=Der Name der Komponente.
+
+availablePlugins=Verf\u00fcgbare Plugins
+
+reader=Reader
+filter=Filter
+repositories=Repositories
+
+configuration=Konfiguration
+dependencies=Abh\u00e4ngigkeiten
+inputPorts=Eingabeports
+outputPorts=Ausgabeports
+repositoryPorts=Repositoryports
+					   
+msgProjectModified=Das Projekt wurde in der Zwischenzeit au\u00dferhalb dieses Editors modifiziert. Wollen Sie die \u00c4nderungen \u00fcberschreiben?
+
+properties=Eigenschaften
+property=Eigenschaft
+value=Wert
+
+libraries=Bibliotheken
+fileName=Dateiname
+fileSize=Gr\u00f6\u00dfe
+libOptions=Optionen
+
+msgOnlyJar=Zur Zeit k\u00f6nnen lediglich *.jar-Abh\u00e4ngigkeiten hochgeladen werden. Die maximale Dateigr\u00f6\u00dfe ist beschr\u00e4nkt auf 100 [MiByte].
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the analysis page.
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the cockpit editor page.
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the cockpit page.
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the settings dialog.
+#
+#------------------------------------------------------------------------------
+
+common=Allgemein
+lookAndFeel=Aussehen
+chooseTheme=Motiv Ausw\u00e4hlen
+language=Sprache
+
+toolPalette=Werkzeugpalette
+lists=Listen
+gridSize=Gittergr\u00f6\u00dfe
+gridColor=Gitterfarbe
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/messages_en.properties b/Kieker.WebGUI/src/main/resources/messages_en.properties
new file mode 100644
index 00000000..ea4ef0ca
--- /dev/null
+++ b/Kieker.WebGUI/src/main/resources/messages_en.properties
@@ -0,0 +1,160 @@
+#------------------------------------------------------------------------------
+#
+# These are the messages which are commonly used within all pages.
+#
+#------------------------------------------------------------------------------
+
+yes=Yes
+ok=Ok
+cancel=Cancel
+
+file=File
+newProject=New Project
+importProject=Import Project
+refreshProjectsList=Refresh Projects List
+settings=Settings
+
+help=Help
+userGuide=User Guide
+about=About...
+
+analysisEditor=Analysis Editor
+analysis=Analysis
+analysisController=Analysis Controller
+cockpitEditor=Cockpit Editor
+cockpit=Cockpit
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the login page.
+#
+#------------------------------------------------------------------------------
+
+shortWelcomeMessage=Welcome to the Kieker.WebGUI
+longWelcomeMessage=This is an early alpha version of the Kieker Web GUI. Therefore it may contain bugs and some functionality may have not been implemented yet. Just click "Login" to continue.
+
+username=Username
+password=Password
+
+login=Login
+           
+#------------------------------------------------------------------------------
+#
+# These are the messages for the project overview page.
+#
+#------------------------------------------------------------------------------
+
+projectName=Project Name
+state=State
+lastModification=Last Modification
+owner=Owner
+
+copyProject=Copy Project
+renameProject=Rename Project
+deleteProject=Delete Project
+
+name=Name
+newName=New Name 
+
+msgReallyDeleteProject=Do you really want to delete the selected project?
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the analysis editor page.
+#
+#------------------------------------------------------------------------------
+
+saveProject=Save Project
+saveProjectAs=Save Project As
+reloadProject=Reload Project
+manageLibraries=Manage Libraries
+closeProject=Close Project
+
+graph=Graph
+scaleToFit=Scale To Fit
+grid=Grid
+snap=Snap
+autoLayout=Auto-Layout
+
+disable=Disable
+enable=Enable
+
+noPropertiesAvailable=No properties available
+
+className=ClassName
+
+tooltipClassName=The class name of this component.
+tooltipName=The name of this component.
+
+availablePlugins=Available Plugins
+
+reader=Reader
+filter=Filter
+repositories=Repositories
+
+configuration=Configuration
+dependencies=Dependencies
+inputPorts=Input Ports
+outputPorts=Output Ports
+repositoryPorts=Repository Ports
+					   
+msgProjectModified=The project has been modified externally in the meanwhile. Do you want to overwrite the changes?
+
+properties=Properties
+property=Property
+value=Value
+
+libraries=Libraries
+fileName=Filename
+fileSize=Size
+libOptions=Options
+
+msgOnlyJar=Currently only *.jar-Dependencies can be uploaded. The maximal file size is limited to 100 [MiByte].
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the analysis page.
+#
+#------------------------------------------------------------------------------
+
+<p:commandButton value="Instantiate Analysis Controller" action="#{currentControllerBean.instantiateAnalysis()}" update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                    <p:commandButton value="Clean Analysis" action="#{currentControllerBean.cleanAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                    <p:commandButton value="Start Analysis" action="#{currentControllerBean.startAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                    <p:commandButton value="Stop Analysis"
+					
+					 <p:tooltip for="iconLEDRed1" value="Indicates that the AnalysisController has not been instantiated yet."/>
+                        <p:tooltip for="iconLEDYellow" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
+                        <p:tooltip for="iconLEDGreen" value="Indicates that the AnalysisController has been started and is running."/>
+                        <p:tooltip for="iconLEDRed2" value="Indicates that the AnalysisController has been terminated or has failed."/>
+                        <p:tooltip for="iconLEDRed1_2" value="Indicates that the AnalysisController has not been instantiated yet."/>
+                        <p:tooltip for="iconLEDYellow_2" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
+                        <p:tooltip for="iconLEDGreen_2" value="Indicates that the AnalysisController has been started and is running."/>
+                        <p:tooltip for="iconLEDRed2_2" value="Indicates that the AnalysisController has been terminated or has failed."/>
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the cockpit editor page.
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the cockpit page.
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# These are the messages for the settings dialog.
+#
+#------------------------------------------------------------------------------
+
+common=Common
+lookAndFeel=Look and Feel
+chooseTheme=Choose Theme
+language=Language
+
+toolPalette=Tool Palette
+lists=Lists
+gridSize=Grid-Size
+gridColor=Grid-Color
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml b/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
index 935666ce..720e408a 100644
--- a/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
@@ -13,282 +13,283 @@
         <f:event type="preRenderView" listener="#{currentAnalysisEditorBean.initialize()}"  />
     </f:metadata>
 
-    <h:head>
-        <title>Kieker.WebGUI</title>
-        <!-- Load the necessary CSS files. -->
-        <link rel="stylesheet" type="text/css" href="../css/base.css"  />
-        <link rel="stylesheet" type="text/css" href="../css/FlowEditor.css"  />
-        <link rel="stylesheet" type="text/css" href="../css/Common.css" />
-        <link rel="stylesheet" type="text/css" href="../css/AnalysisEditor.css" />
+    <f:view locale="#{currentConfigurationBean.locale}">
+        <h:head>
+            <title>Kieker.WebGUI</title>
+            <!-- Load the necessary CSS files. -->
+            <link rel="stylesheet" type="text/css" href="../css/FlowEditor.css"  />
+            <link rel="stylesheet" type="text/css" href="../css/Common.css" />
+            <link rel="stylesheet" type="text/css" href="../css/AnalysisEditor.css" />
 
-        <!-- Load the necessary JS files. -->
-        <script language="javascript" type="text/javascript" src="../js/jit.js"></script>
-        <script language="javascript" type="text/javascript" src="../js/flowEditor.js"></script>
+            <!-- Load the necessary JS files. -->
+            <script language="javascript" type="text/javascript" src="../js/jit.js"></script>
+            <script language="javascript" type="text/javascript" src="../js/flowEditor.js"></script>
 
-        <script>            
-            nodeClickListener = function(node, info, e) {
-                nodeClickCommand([{name : 'ID', value : node.id}]);
-            }
+            <script>            
+                nodeClickListener = function(node, info, e) {
+                    nodeClickCommand([{name : 'ID', value : node.id}]);
+                }
             
-            nodeRemoveListener = function(node) {
-                nodeRemoveCommand([{name : 'ID', value : node.id}]);
-            }
+                nodeRemoveListener = function(node) {
+                    nodeRemoveCommand([{name : 'ID', value : node.id}]);
+                }
             
-            edgeCreateListener = function(sourceNode, targetNode, sourcePort, targetPort) {
-                edgeCreateCommand([{name : 'sourcePortID', value : sourcePort.id},{name : 'targetPortID', value : targetPort.id}]);
-            }
+                edgeCreateListener = function(sourceNode, targetNode, sourcePort, targetPort) {
+                    edgeCreateCommand([{name : 'sourcePortID', value : sourcePort.id},{name : 'targetPortID', value : targetPort.id}]);
+                }
             
-            edgeRemoveListener = function(sourceNode, targetNode, sourcePort, targetPort) {
-                edgeRemoveCommand([{name : 'sourcePortID', value : sourcePort.id},{name : 'targetPortID', value : targetPort.id}]);
-            }
-        </script>
-    </h:head>
+                edgeRemoveListener = function(sourceNode, targetNode, sourcePort, targetPort) {
+                    edgeRemoveCommand([{name : 'sourcePortID', value : sourcePort.id},{name : 'targetPortID', value : targetPort.id}]);
+                }
+            </script>
+        </h:head>
 
-    <h:body>        
-        <h:form id="hidden" style="display:none">
-            <p:remoteCommand autoRun="true" name="init" action="#{currentAnalysisEditorBean.initializeGraph()}" />
-        </h:form>
-        <h:form id="hiddenNodeProperties" style="display:none"> 
-            <p:remoteCommand name="nodeClickCommand" action="#{currentAnalysisEditorGraphBean.nodeClicked()}" update=":propertiesForm"/>
-            <p:remoteCommand name="nodeRemoveCommand" action="#{currentAnalysisEditorGraphBean.nodeRemoved()}" update=":propertiesForm"/>
-            <p:remoteCommand name="edgeCreateCommand" action="#{currentAnalysisEditorGraphBean.edgeCreated()}"/>
-            <p:remoteCommand name="edgeRemoveCommand" action="#{currentAnalysisEditorGraphBean.edgeRemoved()}"/>
-        </h:form>
+        <h:body>        
+            <h:form id="hidden" style="display:none">
+                <p:remoteCommand autoRun="true" name="init" action="#{currentAnalysisEditorBean.initializeGraph()}" />
+            </h:form>
+            <h:form id="hiddenNodeProperties" style="display:none"> 
+                <p:remoteCommand name="nodeClickCommand" action="#{currentAnalysisEditorGraphBean.nodeClicked()}" update=":propertiesForm"/>
+                <p:remoteCommand name="nodeRemoveCommand" action="#{currentAnalysisEditorGraphBean.nodeRemoved()}" update=":propertiesForm"/>
+                <p:remoteCommand name="edgeCreateCommand" action="#{currentAnalysisEditorGraphBean.edgeCreated()}"/>
+                <p:remoteCommand name="edgeRemoveCommand" action="#{currentAnalysisEditorGraphBean.edgeRemoved()}"/>
+            </h:form>
 
-        <p:layout fullPage="true">
+            <p:layout fullPage="true">
 
-            <p:layoutUnit position="north">
-                <h:form id="menuForm">
-                    <!-- The following is the toolbar to navigate between the different pages. -->
-                    <p:toolbar>
-                        <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
-                        </p:toolbarGroup>
-                        <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml?faces-redirect=true" />
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" disabled="true"/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" outcome="Controller.xhtml?faces-redirect=true">
-                                <f:param name="projectName" value="#{currentAnalysisEditorBean.projectName}" rendered="#{not empty currentAnalysisEditorBean.projectName}" />
-                            </p:button>
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" disabled="true">
-                            </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" disabled="true">
-                            </p:button>
-                        </p:toolbarGroup>
-                    </p:toolbar>
+                <p:layoutUnit position="north">
+                    <h:form id="menuForm">
+                        <!-- The following is the toolbar to navigate between the different pages. -->
+                        <p:toolbar>
+                            <p:toolbarGroup align="left">
+                                <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
+                            </p:toolbarGroup>
+                            <p:toolbarGroup align="right">
+                                <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml?faces-redirect=true" />
+                                <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysisEditor" value="#{localizedMessages.analysisEditor}" disabled="true"/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysis" value="#{localizedMessages.analysis}" outcome="Controller.xhtml?faces-redirect=true">
+                                    <f:param name="projectName" value="#{currentAnalysisEditorBean.projectName}" rendered="#{not empty currentAnalysisEditorBean.projectName}" />
+                                </p:button>
+                                <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpitEditor" value="#{localizedMessages.cockpitEditor}" disabled="true">
+                                </p:button>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpit" value="#{localizedMessages.cockpit}" disabled="true">
+                                </p:button>
+                            </p:toolbarGroup>
+                        </p:toolbar>
 
-                    <!-- The following is the main menu. -->
-                    <p:menubar> 
-                        <p:submenu  label="File">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-disk" value="  Save Project" update=":messages" ajax="true" action="#{currentAnalysisEditorBean.saveProject(false)}" disabled="#{empty currentAnalysisEditorBean.project}"/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-disk" value="  Save Project As" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
-                            <p:separator />
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-refresh" value="  Reload Project" ajax="false" url="analysisEditor?projectName=#{currentAnalysisEditorBean.projectName}" disabled="#{empty currentAnalysisEditorBean.project}" />
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-bookmark" value="  Manage Libraries" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
-                            <p:separator />
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-gear" value="  Settings" onclick="settingsDlg.show()" ajax="true"/>
-                            <p:separator />
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-circle-close" value="  Close Project" action="ProjectOverview.xhtml?faces-redirect=true" ajax="false"/>
-                        </p:submenu>
+                        <!-- The following is the main menu. -->
+                        <p:menubar> 
+                            <p:submenu  label="#{localizedMessages.file}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-save" value="  #{localizedMessages.saveProject}" update=":messages" ajax="true" action="#{currentAnalysisEditorBean.saveProject(false)}" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveAs" value="  #{localizedMessages.saveProjectAs}" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
+                                <p:separator />
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reload" value="  #{localizedMessages.reloadProject}" ajax="false" url="analysisEditor?projectName=#{currentAnalysisEditorBean.projectName}" disabled="#{empty currentAnalysisEditorBean.project}" />
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-manageLibraries" value="  #{localizedMessages.manageLibraries}" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                                <p:separator />
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
+                                <p:separator />
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-close" value="  #{localizedMessages.closeProject}" action="ProjectOverview.xhtml?faces-redirect=true" ajax="false"/>
+                            </p:submenu>
 
-                        <p:submenu label="Graph">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-search" value="  Scale To Fit" ajax="true" action="#{currentAnalysisEditorGraphBean.scaleToFit()}" />
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-grip-dotted-horizontal" value="  #{currentAnalysisEditorGraphBean.gridEnabled ? 'Disable' : 'Enable'} Grid" ajax="true" action="#{currentAnalysisEditorGraphBean.switchGrid()}" update=":menuForm"/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-link" value="  #{currentAnalysisEditorGraphBean.snapEnabled ? 'Disable' : 'Enable'} Snap" ajax="true" action="#{currentAnalysisEditorGraphBean.switchSnap()}" update=":menuForm"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-shuffle" value="  Auto-Layout" ajax="true" />
-                        </p:submenu>
+                            <p:submenu label="Graph">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-scaleToFitSmall" value="  #{localizedMessages.analysisEditorScaleToFit}" ajax="true" action="#{currentAnalysisEditorGraphBean.scaleToFit()}" />
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.gridEnabled ? 'ui-icon-gridEnabledSmall' : 'ui-icon-gridDisabledSmall'}" value="  #{localizedMessages.grid} #{currentAnalysisEditorGraphBean.gridEnabled ? localizedMessages.disable : localizedMessages.enable}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchGrid()}" update=":menuForm"/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.snapEnabled ? 'ui-icon-snapEnabledSmall' : 'ui-icon-snapDisabledSmall'}" value="  #{localizedMessages.snap} #{currentAnalysisEditorGraphBean.snapEnabled ? localizedMessages.disable: localizedMessages.enable}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchSnap()}" update=":menuForm"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-autoLayoutSmall" value="  #{localizedMessages.autoLayout}" ajax="true" />
+                            </p:submenu>
 
-                        <p:submenu label="Help">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-help" value="  User Guide" ajax="true" disabled="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-comment" value="  About..." onclick="aboutDlg.show()" ajax="true"/>
-                        </p:submenu>
+                            <p:submenu label="#{localizedMessages.help}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-userGuide" value="  #{localizedMessages.userGuide}" ajax="true" disabled="true"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-about" value="  #{localizedMessages.about}" onclick="aboutDlg.show()" ajax="true"/>
+                            </p:submenu>
 
-                        <p:menuitem styleClass="logOutButton" icon="ui-icon-power" value="#{userBean.userName}" ajax="true" url="login"/>
-                    </p:menubar> 
-                    <p:spacer height="5"/>
-                    <p:menubar> 
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-search" value="  Scale To Fit" ajax="true" action="#{currentAnalysisEditorGraphBean.scaleToFit()}" />
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-grip-dotted-horizontal" value="  #{currentAnalysisEditorGraphBean.gridEnabled ? 'Disable' : 'Enable'} Grid" ajax="true" action="#{currentAnalysisEditorGraphBean.switchGrid()}" update=":menuForm"/>
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-link" value="  #{currentAnalysisEditorGraphBean.snapEnabled ? 'Disable' : 'Enable'} Snap" ajax="true" action="#{currentAnalysisEditorGraphBean.switchSnap()}" update=":menuForm"/>
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-shuffle" value="  Auto-Layout" ajax="true" />
-                    </p:menubar>
-                </h:form>
-            </p:layoutUnit>
+                            <p:menuitem styleClass="logOutButton element-with-whitespace" icon="ui-icon-logout" value=" #{userBean.userName}" ajax="true" url="login"/>
+                        </p:menubar> 
+                        <p:spacer height="5"/>
+                        <p:menubar> 
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-scaleToFit" ajax="true" action="#{currentAnalysisEditorGraphBean.scaleToFit()}" />
+                            <p:menuitem styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.gridEnabled ? 'ui-icon-gridEnabled' : 'ui-icon-gridDisabled'}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchGrid()}" update=":menuForm"/>
+                            <p:menuitem styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.snapEnabled ? 'ui-icon-snapEnabled' : 'ui-icon-snapDisabled'}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchSnap()}" update=":menuForm"/>
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-autoLayout" ajax="true" />
+                        </p:menubar>
+                    </h:form>
+                </p:layoutUnit>
 
-            <!-- This is the center component showing the graph and everything. -->
-            <p:layoutUnit style="font-size: 12px" position="center" id="centerLayout">
-                <div id="center-container" style="width: 100%;height: 100%">
-                    <div id="infovis"/> 
-                </div>
-            </p:layoutUnit> 
+                <!-- This is the center component showing the graph and everything. -->
+                <p:layoutUnit style="font-size: 12px" position="center" id="centerLayout">
+                    <div id="center-container" style="width: 100%;height: 100%">
+                        <div id="infovis"/> 
+                    </div>
+                </p:layoutUnit> 
 
-            <!-- This is the component presenting the available properties. -->
-            <p:layoutUnit style="font-size: 12px" position="south" size="150" header="Properties" resizable="true" collapsible="true">
-                <h:form id="propertiesForm" >
-                    <p:dataTable editable="true" value="#{currentAnalysisEditorBean.advancedPluginProperties}" var="property" rowIndexVar="rowIndex" emptyMessage="No properties available" rendered="#{not empty currentAnalysisEditorBean.selectedPlugin}">
-                        <p:column headerText="Property" style="width:125px">
-                            <!-- The first property is always the classname, the second one always the normal name. After that, other properties can follow. -->
-                            <h:outputText id="classNameProperty" value="ClassName" rendered="#{rowIndex == 0}"/>
-                            <h:outputText id="nameProperty" value="Name" rendered="#{rowIndex == 1}"/>
-                            <h:outputText id="normalProperty" value="#{property.name}" rendered="#{rowIndex > 1}"/>
-                            <p:tooltip for="classNameProperty" value="The class name of this component." rendered="#{rowIndex == 0}"/>
-                            <p:tooltip for="nameProperty" value="The name of this component." rendered="#{rowIndex == 1}"/>
-                            <p:tooltip for="normalProperty" value="#{currentAnalysisEditorBean.getDescription(currentAnalysisEditorBean.selectedPlugin, property.name)}" rendered="#{rowIndex > 1}"/>
-                        </p:column>
+                <!-- This is the component presenting the available properties. -->
+                <p:layoutUnit style="font-size: 12px" position="south" size="150" header="#{localizedMessages.properties}" resizable="true" collapsible="true">
+                    <h:form id="propertiesForm" >
+                        <p:dataTable editable="true" value="#{currentAnalysisEditorBean.advancedPluginProperties}" var="property" rowIndexVar="rowIndex" emptyMessage="No properties available" rendered="#{not empty currentAnalysisEditorBean.selectedPlugin}">
+                            <p:column headerText="#{localizedMessages.property}" style="width:125px">
+                                <!-- The first property is always the classname, the second one always the normal name. After that, other properties can follow. -->
+                                <h:outputText id="classNameProperty" value="#{localizedMessages.className}" rendered="#{rowIndex == 0}"/>
+                                <h:outputText id="nameProperty" value="#{localizedMessages.name}" rendered="#{rowIndex == 1}"/>
+                                <h:outputText id="normalProperty" value="#{property.name}" rendered="#{rowIndex > 1}"/>
+                                <p:tooltip for="classNameProperty" value="#{localizedMessages.tooltipClassName}" rendered="#{rowIndex == 0}"/>
+                                <p:tooltip for="nameProperty" value="#{localizedMessages.tooltipName}" rendered="#{rowIndex == 1}"/>
+                                <p:tooltip for="normalProperty" value="#{currentAnalysisEditorBean.getDescription(currentAnalysisEditorBean.selectedPlugin, property.name)}" rendered="#{rowIndex > 1}"/>
+                            </p:column>
 
-                        <!-- The classname is not editable, the name is editable with a specific target, other properies are editable normally. -->
-                        <p:column headerText="Value" style="width:125px">
-                            <h:outputText id="className" value="#{currentAnalysisEditorBean.selectedPlugin.classname}" rendered="#{rowIndex == 0}"/>
-                            <p:inplace id="nameEditor" editor="true" rendered="#{rowIndex == 1}" >  
-                                <p:inputText value="#{currentAnalysisEditorBean.selectedPlugin.name}" />
-                                <p:ajax event="save" listener="#{currentAnalysisEditorGraphBean.renameNode(currentAnalysisEditorBean.selectedPlugin, currentAnalysisEditorBean.selectedPlugin.name)}" />
-                            </p:inplace>  
-                            <p:inplace id="normalEditor" editor="true" rendered="#{rowIndex > 1}">  
-                                <p:inputText value="#{property.value}" />
-                            </p:inplace>  
-                            <p:tooltip for="className" value="The class name of this component." rendered="#{rowIndex == 0}"/>
-                            <p:tooltip for="nameEditor" value="The name of this component." rendered="#{rowIndex == 1}"/>
-                            <p:tooltip for="normalEditor" value="#{currentAnalysisEditorBean.getDescription(currentAnalysisEditorBean.selectedPlugin, property.name)}" rendered="#{rowIndex > 1}"/>
-                        </p:column>                       
-                    </p:dataTable>
-                </h:form>
-            </p:layoutUnit>
+                            <!-- The classname is not editable, the name is editable with a specific target, other properies are editable normally. -->
+                            <p:column headerText="#{localizedMessages.value}" style="width:125px">
+                                <h:outputText id="className" value="#{currentAnalysisEditorBean.selectedPlugin.classname}" rendered="#{rowIndex == 0}"/>
+                                <p:inplace id="nameEditor" editor="true" rendered="#{rowIndex == 1}" >  
+                                    <p:inputText value="#{currentAnalysisEditorBean.selectedPlugin.name}" />
+                                    <p:ajax event="save" listener="#{currentAnalysisEditorGraphBean.renameNode(currentAnalysisEditorBean.selectedPlugin, currentAnalysisEditorBean.selectedPlugin.name)}" />
+                                </p:inplace>  
+                                <p:inplace id="normalEditor" editor="true" rendered="#{rowIndex > 1}">  
+                                    <p:inputText value="#{property.value}" />
+                                </p:inplace>  
+                                <p:tooltip for="className" value="#{localizedMessages.tooltipClassName}" rendered="#{rowIndex == 0}"/>
+                                <p:tooltip for="nameEditor" value="#{localizedMessages.tooltipName}" rendered="#{rowIndex == 1}"/>
+                                <p:tooltip for="normalEditor" value="#{currentAnalysisEditorBean.getDescription(currentAnalysisEditorBean.selectedPlugin, property.name)}" rendered="#{rowIndex > 1}"/>
+                            </p:column>                       
+                        </p:dataTable>
+                    </h:form>
+                </p:layoutUnit>
 
-            <!-- The following is the toolpalette, presenting the available plugins etc. -->
-            <p:layoutUnit position="east" size="300" header="Available Plugins" resizable="true" collapsible="true">
-                <h:form id="toolpalette">
-                    <p:accordionPanel multiple="true" activeIndex="0,1,2">
-                        <p:tab title="Reader">
-                            <ui:repeat value="#{currentAnalysisEditorBean.availableReaders}" var="reader">
-                                <p:commandLink id="readerLink" value="#{reader.simpleName}" action="#{currentAnalysisEditorBean.addPlugin(reader)}" update=":messages" /><br/>
-                                <p:tooltip for="readerLink">
-                                    <b><h:outputText value="#{reader.simpleName} (#{reader.name})"/></b>
-                                    <br/>
-                                    <h:outputText value="#{currentAnalysisEditorBean.getDescription(reader)}"/>
-                                    <br/><br/>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getOutputPorts(reader)}">
-                                        <b><h:outputText value="Output Ports:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getOutputPorts(reader)}" var="port">
-                                            #{port.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getRepositoryPorts(reader)}">
-                                        <b><h:outputText value="Repository Ports:" /></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getRepositoryPorts(reader)}" var="port">
-                                            #{port.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(reader)}">
-                                        <b><h:outputText value="Configuration:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getProperties(reader)}" var="property">
-                                            #{property.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(reader)}">
-                                        <b><h:outputText value="Dependencies:"/></b>
+                <!-- The following is the toolpalette, presenting the available plugins etc. -->
+                <p:layoutUnit position="east" size="300" header="#{localizedMessages.availablePlugins}" resizable="true" collapsible="true">
+                    <h:form id="toolpalette">
+                        <p:accordionPanel multiple="true" activeIndex="0,1,2">
+                            <p:tab title="#{localizedMessages.reader}">
+                                <ui:repeat value="#{currentAnalysisEditorBean.availableReaders}" var="reader">
+                                    <p:commandLink id="readerLink" value="#{reader.simpleName}" action="#{currentAnalysisEditorBean.addPlugin(reader)}" update=":messages" /><br/>
+                                    <p:tooltip for="readerLink">
+                                        <b><h:outputText value="#{reader.simpleName} (#{reader.name})"/></b>
                                         <br/>
-                                        <h:outputText value="#{currentAnalysisEditorBean.getDependencies(reader)}"/>
-                                    </ui:fragment>
-                                </p:tooltip>
-                            </ui:repeat>
-                        </p:tab>
-                        <p:tab title="Filter">
-                            <ui:repeat value="#{currentAnalysisEditorBean.availableFilters}" var="filter">
-                                <p:commandLink id="filterLink" value="#{filter.simpleName}" action="#{currentAnalysisEditorBean.addPlugin(filter)}" update=":messages"/><br/>
-                                <p:tooltip for="filterLink">
-                                    <b><h:outputText value="#{filter.simpleName} (#{filter.name})"/></b>
-                                    <br/>
-                                    <h:outputText value="#{currentAnalysisEditorBean.getDescription(filter)}"/>
-                                    <br/><br/>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getInputPorts(filter)}">
-                                        <b><h:outputText value="Input Ports:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getInputPorts(filter)}" var="port">
-                                            #{port.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getOutputPorts(filter)}">
-                                        <b><h:outputText value="Output Ports:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getOutputPorts(filter)}" var="port">
-                                            #{port.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getRepositoryPorts(filter)}">
-                                        <b><h:outputText value="Repository Ports:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getRepositoryPorts(filter)}" var="port">
-                                            #{port.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(filter)}">
-                                        <b><h:outputText value="Configuration:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getProperties(filter)}" var="property">
-                                            #{property.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(filter)}">
-                                        <b><h:outputText value="Dependencies:"/></b>
+                                        <h:outputText value="#{currentAnalysisEditorBean.getDescription(reader)}"/>
+                                        <br/><br/>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getOutputPorts(reader)}">
+                                            <b><h:outputText value="#{localizedMessages.outputPorts}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getOutputPorts(reader)}" var="port">
+                                                #{port.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getRepositoryPorts(reader)}">
+                                            <b><h:outputText value="#{localizedMessages.repositoryPorts}:" /></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getRepositoryPorts(reader)}" var="port">
+                                                #{port.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(reader)}">
+                                            <b><h:outputText value="#{localizedMessages.configuration}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getProperties(reader)}" var="property">
+                                                #{property.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(reader)}">
+                                            <b><h:outputText value="#{localizedMessages.dependencies}:"/></b>
+                                            <br/>
+                                            <h:outputText value="#{currentAnalysisEditorBean.getDependencies(reader)}"/>
+                                        </ui:fragment>
+                                    </p:tooltip>
+                                </ui:repeat>
+                            </p:tab>
+                            <p:tab title="#{localizedMessages.filter}">
+                                <ui:repeat value="#{currentAnalysisEditorBean.availableFilters}" var="filter">
+                                    <p:commandLink id="filterLink" value="#{filter.simpleName}" action="#{currentAnalysisEditorBean.addPlugin(filter)}" update=":messages"/><br/>
+                                    <p:tooltip for="filterLink">
+                                        <b><h:outputText value="#{filter.simpleName} (#{filter.name})"/></b>
                                         <br/>
-                                        <h:outputText value="#{currentAnalysisEditorBean.getDependencies(filter)}"/>
-                                    </ui:fragment>
-                                </p:tooltip>                                
-                            </ui:repeat>
-                        </p:tab>
-                        <p:tab title="Repositories">
-                            <ui:repeat value="#{currentAnalysisEditorBean.availableRepositories}" var="repository">
-                                <p:commandLink id="repositoryLink" value="#{repository.simpleName}" action="#{currentAnalysisEditorBean.addRepository(repository)}" update=":messages"/><br/>
-                                <p:tooltip for="repositoryLink">
-                                    <b><h:outputText value="#{repository.simpleName} (#{repository.name})"/></b>
-                                    <br/>
-                                    <h:outputText value="#{currentAnalysisEditorBean.getDescription(repository)}"/>
-                                    <br/><br/>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(repository)}">
-                                        <b><h:outputText value="Configuration:"/></b>
-                                        <p:dataList value="#{currentAnalysisEditorBean.getProperties(repository)}" var="property">
-                                            #{property.name()}
-                                        </p:dataList>
-                                    </ui:fragment>
-                                    <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(repository)}">
-                                        <b><h:outputText value="Dependencies:"/></b>
+                                        <h:outputText value="#{currentAnalysisEditorBean.getDescription(filter)}"/>
+                                        <br/><br/>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getInputPorts(filter)}">
+                                            <b><h:outputText value="#{localizedMessages.inputPorts}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getInputPorts(filter)}" var="port">
+                                                #{port.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getOutputPorts(filter)}">
+                                            <b><h:outputText value="#{localizedMessages.outputPorts}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getOutputPorts(filter)}" var="port">
+                                                #{port.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getRepositoryPorts(filter)}">
+                                            <b><h:outputText value="#{localizedMessages.repositoryPorts}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getRepositoryPorts(filter)}" var="port">
+                                                #{port.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(filter)}">
+                                            <b><h:outputText value="#{localizedMessages.configuration}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getProperties(filter)}" var="property">
+                                                #{property.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(filter)}">
+                                            <b><h:outputText value="#{localizedMessages.dependencies}:"/></b>
+                                            <br/>
+                                            <h:outputText value="#{currentAnalysisEditorBean.getDependencies(filter)}"/>
+                                        </ui:fragment>
+                                    </p:tooltip>                                
+                                </ui:repeat>
+                            </p:tab>
+                            <p:tab title="#{localizedMessages.repositories}">
+                                <ui:repeat value="#{currentAnalysisEditorBean.availableRepositories}" var="repository">
+                                    <p:commandLink id="repositoryLink" value="#{repository.simpleName}" action="#{currentAnalysisEditorBean.addRepository(repository)}" update=":messages"/><br/>
+                                    <p:tooltip for="repositoryLink">
+                                        <b><h:outputText value="#{repository.simpleName} (#{repository.name})"/></b>
                                         <br/>
-                                        <h:outputText value="#{currentAnalysisEditorBean.getDependencies(repository)}"/>
-                                    </ui:fragment>
-                                </p:tooltip>  
-                            </ui:repeat>
-                        </p:tab>
-                    </p:accordionPanel>
-                </h:form>
-            </p:layoutUnit>
-        </p:layout>
+                                        <h:outputText value="#{currentAnalysisEditorBean.getDescription(repository)}"/>
+                                        <br/><br/>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getProperties(repository)}">
+                                            <b><h:outputText value="#{localizedMessages.configuration}:"/></b>
+                                            <p:dataList value="#{currentAnalysisEditorBean.getProperties(repository)}" var="property">
+                                                #{property.name()}
+                                            </p:dataList>
+                                        </ui:fragment>
+                                        <ui:fragment rendered="#{not empty currentAnalysisEditorBean.getDependencies(repository)}">
+                                            <b><h:outputText value="#{localizedMessages.dependencies}:"/></b>
+                                            <br/>
+                                            <h:outputText value="#{currentAnalysisEditorBean.getDependencies(repository)}"/>
+                                        </ui:fragment>
+                                    </p:tooltip>  
+                                </ui:repeat>
+                            </p:tab>
+                        </p:accordionPanel>
+                    </h:form>
+                </p:layoutUnit>
+            </p:layout>
 
-        <p:dialog header="Save Project" resizable="false" modal="true" widgetVar="forceSaveDlg">
-            <h:form>
-                <div style="text-align: center">
-                    <h:outputText value="The project has been modified externally in the meanwhile. Do you want to overwrite the changes?" /> 
-                </div>
-                <hr/>
-                <div style="text-align: right">
-                    <p:commandButton value="Yes" action="#{currentAnalysisEditorBean.saveProject(true)}" oncomplete="forceSaveDlg.hide()" update=":messages" />
-                    <p:spacer width="10px" height="10" />
-                    <p:commandButton value="Cancel" onclick="forceSaveDlg.hide()" />
-                </div>
-            </h:form>
-        </p:dialog>
+            <p:dialog header="#{localizedMessages.saveProject}" resizable="false" modal="true" widgetVar="forceSaveDlg">
+                <h:form>
+                    <div style="text-align: center">
+                        <h:outputText value="#{localizedMessages.msgProjectModified}" /> 
+                    </div>
+                    <hr/>
+                    <div style="text-align: right">
+                        <p:commandButton value="#{localizedMessages.yes}" action="#{currentAnalysisEditorBean.saveProject(true)}" oncomplete="forceSaveDlg.hide()" update=":messages" />
+                        <p:spacer width="10px" height="10" />
+                        <p:commandButton value="#{localizedMessages.cancel}" onclick="forceSaveDlg.hide()" />
+                    </div>
+                </h:form>
+            </p:dialog>
 
-        <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
+            <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
 
-        <!-- Include the dialog for the configuration. -->
-        <ui:include src="dialogs/settingsDialog.xhtml" />
+            <!-- Include the dialog for the configuration. -->
+            <ui:include src="dialogs/settingsDialog.xhtml" />
 
-        <!-- Include the about-dialog. -->
-        <ui:include src="dialogs/aboutDialog.xhtml" />
+            <!-- Include the about-dialog. -->
+            <ui:include src="dialogs/aboutDialog.xhtml" />
 
-        <!-- Include the dialog the manage the libraries. -->
-        <ui:include src="dialogs/manageLibrariesDialog.xhtml" />
+            <!-- Include the dialog the manage the libraries. -->
+            <ui:include src="dialogs/manageLibrariesDialog.xhtml" />
 
-    </h:body>
+        </h:body>
+    </f:view>
 </html>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml b/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
index 044afd45..f0472a9d 100644
--- a/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
@@ -32,31 +32,31 @@
                         <p:toolbarGroup align="right">
                             <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml">
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="#{localizedMessages.analysisEditor}" style="white-space: none" outcome="AnalysisEditor.xhtml">
                                 <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
                             </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml">
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="#{localizedMessages.analysis}" style="white-space: none" outcome="Controller.xhtml">
                                 <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
                             </p:button>
                             <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" outcome="CockpitEditor.xhtml">
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="#{localizedMessages.cockpitEditor}" style="white-space: none" outcome="CockpitEditor.xhtml">
                                 <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
                             </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none"  disabled="true">
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="#{localizedMessages.cockpit}" style="white-space: none"  disabled="true">
                             </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
                     <p:menubar>
-                        <p:submenu label="File">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-gear" value="  Settings"  onclick="settingsDlg.show()" ajax="true"/>
+                        <p:submenu label="#{localizedMessages.file}">
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-gear" value="  #{localizedMessages.settings}"  onclick="settingsDlg.show()" ajax="true"/>
                             <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-circle-close" value="  Close Project"  action="ProjectOverview.xhtml?faces-redirect=true" ajax="false"/>
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-circle-close" value="  #{localizedMessages.closeProject}"  action="ProjectOverview.xhtml?faces-redirect=true" ajax="false"/>
                         </p:submenu>
 
-                        <p:submenu label="Help">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-help" value="  User Guide" ajax="true" disabled="true"/>
+                        <p:submenu label="#{localizedMessages.help}">
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-help" value="  #{localizedMessages.userGuide}" ajax="true" disabled="true"/>
                             <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-comment" value="  About..." onclick="aboutDlg.show()" ajax="true"/>
+                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-comment" value="  #{localizedMessages.about}" onclick="aboutDlg.show()" ajax="true"/>
                         </p:submenu>
 
                         <p:menuitem styleClass="logOutButton" icon="ui-icon-power" value="#{userBean.userName}" ajax="true" url="login"/>
diff --git a/Kieker.WebGUI/src/main/webapp/Controller.xhtml b/Kieker.WebGUI/src/main/webapp/Controller.xhtml
index bccc8510..e0039b07 100644
--- a/Kieker.WebGUI/src/main/webapp/Controller.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Controller.xhtml
@@ -11,111 +11,113 @@
         <f:viewParam name="projectName" value="#{currentControllerBean.projectName}"/>
     </f:metadata>
 
-    <h:head>
-        <title>Kieker.WebGUI</title>
-        <link rel="stylesheet" type="text/css" href="../css/Common.css" />
-        <link rel="stylesheet" type="text/css" href="../css/Controller.css" />
-    </h:head>
-
-    <h:body>
-
-        <!-- This is the layout for the whole page. -->
-        <p:layout id="layout" fullPage="true">
-
-            <p:layoutUnit position="north" collapsible="false">
-                <h:form>
-                    <p:toolbar>
-                        <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentControllerBean.projectName, 30)}"/>
-                        </p:toolbarGroup>
-                        <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml?faces-redirect=true" />
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml?faces-redirect=true">
-                                <f:param name="projectName" value="#{currentControllerBean.projectName}" rendered="#{not empty currentControllerBean.projectName}" />
-                            </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" disabled="true">
-                            </p:button>
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" disabled="true">
-                            </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" disabled="true">
-                            </p:button>
-                        </p:toolbarGroup>
-                    </p:toolbar>
-
-                    <p:menubar>
-                        <p:submenu label="File">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-gear" value="  Settings" onclick="settingsDlg.show()" ajax="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-circle-close" value="  Close Controller" action="ProjectOverview.xhtml?faces-redirect=true"  ajax="false"/>   
-                        </p:submenu>
-
-                        <p:submenu label="Help">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-help" value="  User Guide" ajax="true" disabled="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-comment" value="  About..." onclick="aboutDlg.show()" ajax="true"/>
-                        </p:submenu>
-
-                        <p:menuitem styleClass="logOutButton" icon="ui-icon-power" value="#{userBean.userName}" ajax="true" url="login"/>
-                    </p:menubar>
-
-                </h:form>
-            </p:layoutUnit>
-
-
-            <p:layoutUnit position="center" id="centerLayout">
-                <h:form id="logList"> 
-                    <ui:repeat  value="#{currentControllerBean.log}" var="entry">
-                        <h:outputText value="#{entry}"/><br/><br/>
-                    </ui:repeat> 
-                </h:form>
-            </p:layoutUnit>
-
-            <p:layoutUnit position="south" header="Control" resizable="true" collapsible="true">
-                <h:form id="controllerForm">
-                    <p:commandButton value="Instantiate Analysis Controller" action="#{currentControllerBean.instantiateAnalysis()}" update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
-                    <p:commandButton value="Clean Analysis" action="#{currentControllerBean.cleanAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
-                    <p:commandButton value="Start Analysis" action="#{currentControllerBean.startAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
-                    <p:commandButton value="Stop Analysis" action="#{currentControllerBean.stopAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
-                    <p:poll interval="1" update=":ledsForm"/>
-                </h:form>  
-                <hr/>
-                <h:form id="ledsForm">
-                    <div align="center">
-                        <h:graphicImage id="iconLEDRed1"  url="../img/Icon_LED_Red.png" height="50px" rendered="#{currentControllerBean.isAnalysisNotAvailable()}"/>
-                        <h:graphicImage id="iconLEDRed1_2"  url="../img/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisNotAvailable()}"/>
-                        <p:spacer height="0" width="15px"/>
-                        <h:graphicImage id="iconLEDYellow"  url="../img/Icon_LED_Yellow.png" height="50px" rendered="#{currentControllerBean.isAnalysisReady()}"/>
-                        <h:graphicImage id="iconLEDYellow_2"  url="../img/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisReady()}"/>
-                        <p:spacer height="0" width="15px"/>
-                        <h:graphicImage id="iconLEDGreen"  url="../img/Icon_LED_Green.png" height="50px" rendered="#{currentControllerBean.isAnalysisRunning()}"/>
-                        <h:graphicImage id="iconLEDGreen_2"  url="../img/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisRunning()}"/>
-                        <p:spacer height="0" width="15px"/>
-                        <h:graphicImage id="iconLEDRed2"  url="../img/Icon_LED_Red.png" height="50px" rendered="#{currentControllerBean.isAnalysisTerminated() or currentControllerBean.isAnalysisFailed()}"/>
-                        <h:graphicImage id="iconLEDRed2_2"  url="../img/Icon_LED_Gray.png" height="50px" rendered="#{not (currentControllerBean.isAnalysisTerminated() or currentControllerBean.isAnalysisFailed())}"/>
-
-                        <p:tooltip for="iconLEDRed1" value="Indicates that the AnalysisController has not been instantiated yet."/>
-                        <p:tooltip for="iconLEDYellow" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
-                        <p:tooltip for="iconLEDGreen" value="Indicates that the AnalysisController has been started and is running."/>
-                        <p:tooltip for="iconLEDRed2" value="Indicates that the AnalysisController has been terminated or has failed."/>
-                        <p:tooltip for="iconLEDRed1_2" value="Indicates that the AnalysisController has not been instantiated yet."/>
-                        <p:tooltip for="iconLEDYellow_2" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
-                        <p:tooltip for="iconLEDGreen_2" value="Indicates that the AnalysisController has been started and is running."/>
-                        <p:tooltip for="iconLEDRed2_2" value="Indicates that the AnalysisController has been terminated or has failed."/>
-                    </div>
-                </h:form>
-
-            </p:layoutUnit>
-        </p:layout>
-
-        <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
-
-        <!-- Include the dialog for the configuration. -->
-        <ui:include src="dialogs/settingsDialog.xhtml" />
-
-        <!-- Include the about-dialog. -->
-        <ui:include src="dialogs/aboutDialog.xhtml" />
-
-    </h:body>
+    <f:view locale="#{currentConfigurationBean.locale}">
+        <h:head>
+            <title>Kieker.WebGUI</title>
+            <link rel="stylesheet" type="text/css" href="../css/Common.css" />
+            <link rel="stylesheet" type="text/css" href="../css/Controller.css" />
+        </h:head>
+
+        <h:body>
+
+            <!-- This is the layout for the whole page. -->
+            <p:layout id="layout" fullPage="true">
+
+                <p:layoutUnit position="north" collapsible="false">
+                    <h:form>
+                        <p:toolbar>
+                            <p:toolbarGroup align="left">
+                                <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentControllerBean.projectName, 30)}"/>
+                            </p:toolbarGroup>
+                            <p:toolbarGroup align="right">
+                                <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml?faces-redirect=true" />
+                                <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysisEditor" value="#{localizedMessages.analysisEditor}" style="white-space: none" outcome="AnalysisEditor.xhtml?faces-redirect=true">
+                                    <f:param name="projectName" value="#{currentControllerBean.projectName}" rendered="#{not empty currentControllerBean.projectName}" />
+                                </p:button>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysis" value="#{localizedMessages.analysis}" style="white-space: none" disabled="true">
+                                </p:button>
+                                <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpitEditor" value="#{localizedMessages.cockpitEditor}" disabled="true">
+                                </p:button>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpit" value="#{localizedMessages.cockpit}" disabled="true">
+                                </p:button>
+                            </p:toolbarGroup>
+                        </p:toolbar>
+
+                        <p:menubar>
+                            <p:submenu label="#{localizedMessages.file}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-close" value="  #{localizedMessages.closeProject}" action="ProjectOverview.xhtml?faces-redirect=true"  ajax="false"/>   
+                            </p:submenu>
+
+                            <p:submenu label="#{localizedMessages.help}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-userGuide" value="  #{localizedMessages.userGuide}" ajax="true" disabled="true"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-about" value="  #{localizedMessages.about}" onclick="aboutDlg.show()" ajax="true"/>
+                            </p:submenu>
+
+                            <p:menuitem styleClass="logOutButton element-with-whitespace" icon="ui-icon-logout" value=" #{userBean.userName}" ajax="true" url="login"/>
+                        </p:menubar>
+
+                    </h:form>
+                </p:layoutUnit>
+
+
+                <p:layoutUnit position="center" id="centerLayout">
+                    <h:form id="logList"> 
+                        <ui:repeat  value="#{currentControllerBean.log}" var="entry">
+                            <h:outputText value="#{entry}"/><br/><br/>
+                        </ui:repeat> 
+                    </h:form>
+                </p:layoutUnit>
+
+                <p:layoutUnit position="south" header="Control" resizable="true" collapsible="true">
+                    <h:form id="controllerForm">
+                        <p:commandButton value="Instantiate Analysis Controller" action="#{currentControllerBean.instantiateAnalysis()}" update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                        <p:commandButton value="Clean Analysis" action="#{currentControllerBean.cleanAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                        <p:commandButton value="Start Analysis" action="#{currentControllerBean.startAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                        <p:commandButton value="Stop Analysis" action="#{currentControllerBean.stopAnalysis()}"  update=":messages :logList" disabled="#{empty currentControllerBean.projectName}"/>
+                        <p:poll interval="1" update=":ledsForm"/>
+                    </h:form>  
+                    <hr/>
+                    <h:form id="ledsForm">
+                        <div align="center">
+                            <h:graphicImage id="iconLEDRed1"  url="../img/LEDs/Icon_LED_Red.png" height="50px" rendered="#{currentControllerBean.isAnalysisNotAvailable()}"/>
+                            <h:graphicImage id="iconLEDRed1_2"  url="../img/LEDs/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisNotAvailable()}"/>
+                            <p:spacer height="0" width="15px"/>
+                            <h:graphicImage id="iconLEDYellow"  url="../img/LEDs/Icon_LED_Yellow.png" height="50px" rendered="#{currentControllerBean.isAnalysisReady()}"/>
+                            <h:graphicImage id="iconLEDYellow_2"  url="../img/LEDs/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisReady()}"/>
+                            <p:spacer height="0" width="15px"/>
+                            <h:graphicImage id="iconLEDGreen"  url="../img/LEDs/Icon_LED_Green.png" height="50px" rendered="#{currentControllerBean.isAnalysisRunning()}"/>
+                            <h:graphicImage id="iconLEDGreen_2"  url="../img/LEDs/Icon_LED_Gray.png" height="50px" rendered="#{not currentControllerBean.isAnalysisRunning()}"/>
+                            <p:spacer height="0" width="15px"/>
+                            <h:graphicImage id="iconLEDRed2"  url="../img/LEDs/Icon_LED_Red.png" height="50px" rendered="#{currentControllerBean.isAnalysisTerminated() or currentControllerBean.isAnalysisFailed()}"/>
+                            <h:graphicImage id="iconLEDRed2_2"  url="../img/LEDs/Icon_LED_Gray.png" height="50px" rendered="#{not (currentControllerBean.isAnalysisTerminated() or currentControllerBean.isAnalysisFailed())}"/>
+
+                            <p:tooltip for="iconLEDRed1" value="Indicates that the AnalysisController has not been instantiated yet."/>
+                            <p:tooltip for="iconLEDYellow" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
+                            <p:tooltip for="iconLEDGreen" value="Indicates that the AnalysisController has been started and is running."/>
+                            <p:tooltip for="iconLEDRed2" value="Indicates that the AnalysisController has been terminated or has failed."/>
+                            <p:tooltip for="iconLEDRed1_2" value="Indicates that the AnalysisController has not been instantiated yet."/>
+                            <p:tooltip for="iconLEDYellow_2" value="Indicates that the AnalysisController has been instantiated, but not yet started."/>
+                            <p:tooltip for="iconLEDGreen_2" value="Indicates that the AnalysisController has been started and is running."/>
+                            <p:tooltip for="iconLEDRed2_2" value="Indicates that the AnalysisController has been terminated or has failed."/>
+                        </div>
+                    </h:form>
+
+                </p:layoutUnit>
+            </p:layout>
+
+            <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
+
+            <!-- Include the dialog for the configuration. -->
+            <ui:include src="dialogs/settingsDialog.xhtml" />
+
+            <!-- Include the about-dialog. -->
+            <ui:include src="dialogs/aboutDialog.xhtml" />
+
+        </h:body>
+    </f:view>
 </html>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/Login.xhtml b/Kieker.WebGUI/src/main/webapp/Login.xhtml
index 0665d838..0f86c8d3 100644
--- a/Kieker.WebGUI/src/main/webapp/Login.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Login.xhtml
@@ -2,47 +2,50 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:p="http://primefaces.org/ui">
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:f="http://java.sun.com/jsf/core">
 
-    <h:head>
-        <title>Kieker.WebGUI</title>
-        <link rel="stylesheet" type="text/css" href="../css/Common.css" />
-        <link rel="stylesheet" type="text/css" href="../css/Login.css" />
-    </h:head>
+    <f:view locale="#{currentConfigurationBean.locale}">
+        <h:head>
+            <title>Kieker.WebGUI</title>
+            <link rel="stylesheet" type="text/css" href="../css/Common.css" />
+            <link rel="stylesheet" type="text/css" href="../css/Login.css" />
+        </h:head>
 
-   
-    <h:body onload="showWelcomeMessage();">
-        <h:form>
-            <p:remoteCommand action="#{userBean.showWelcomeMessage()}" name="showWelcomeMessage"/>
-        </h:form> 
-        <div align="center" >
-            <img src="../img/kieker-header.jpg"/>
-        </div>
-        <div align="center" class="stretch">
-            <div class="custom-background">
-                <br/>
-                <p:spacer width="0" height="100"/>
 
-                <!-- The following is the login form -->
-                <h:form>  
-                    <div class="stretch" align="center">
-                        <p:panel header="Welcome to the Kieker.WebGUI" styleClass="login-panel">
-                            <h:panelGrid columnClasses="col1 , col2" styleClass="grid" columns="2" cellpadding="5">  
-                                <h:outputLabel for="username" value="Username:" />  
-                                <p:inputText styleClass="input" id="username" required="true" value="#{userBean.userName}" label="username"/>  
+        <h:body onload="showWelcomeMessage();">
+            <h:form>
+                <p:remoteCommand action="#{userBean.showWelcomeMessage()}" name="showWelcomeMessage"/>
+            </h:form> 
+            <div align="center" >
+                <img src="../img/kieker-header.jpg"/>
+            </div>
+            <div align="center" class="stretch">
+                <div class="custom-background">
+                    <br/>
+                    <p:spacer width="0" height="100"/>
+
+                    <!-- The following is the login form -->
+                    <h:form>  
+                        <div class="stretch" align="center">
+                            <p:panel header="#{localizedMessages.shortWelcomeMessage}" styleClass="login-panel">
+                                <h:panelGrid columnClasses="col1 , col2" styleClass="grid" columns="2" cellpadding="5" >  
+                                    <h:outputLabel for="username" value="#{localizedMessages.username}:" />  
+                                    <p:inputText styleClass="input" id="username" required="true" value="#{userBean.userName}" label="username"/>  
 
-                                <h:outputLabel for="password" value="Password:" />  
-                                <p:password styleClass="input" id="password" required="false" label="password" />  
-                            </h:panelGrid>  
-                            <hr/>
-                            <div align="right">
-                                <p:commandButton value="Login" ajax="false" action="#{userBean.login}" />
-                            </div>
-                        </p:panel>
-                        <p:growl sticky="true" autoUpdate="true" widgetVar="growlComp"/>
-                    </div>
-                </h:form>  
+                                    <h:outputLabel for="password" value="#{localizedMessages.password}:" />  
+                                    <p:password styleClass="input" id="password" required="false" value="#{userBean.password}" label="password" />  
+                                </h:panelGrid>  
+                                <hr/>
+                                <div align="right">
+                                    <p:commandButton value="#{localizedMessages.login}" ajax="false" action="#{userBean.login}" />
+                                </div>
+                            </p:panel>
+                            <p:growl sticky="true" autoUpdate="true" widgetVar="growlComp"/>
+                        </div>
+                    </h:form>  
+                </div>
             </div>
-        </div>
-    </h:body>
+        </h:body>
+    </f:view>
 </html>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml b/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
index fd67f460..917acbe5 100644
--- a/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
@@ -6,107 +6,109 @@
       xmlns:p="http://primefaces.org/ui"
       xmlns:f="http://java.sun.com/jsf/core">
 
-    <h:head>
-        <title>Kieker.WebGUI</title>
-        <link rel="stylesheet" type="text/css" href="../css/Common.css" />
-        <link rel="stylesheet" type="text/css" href="../css/ProjectOverview.css" />
-    </h:head>
-
-    <h:body>
-        <p:layout fullPage="true">            
-            <p:layoutUnit position="north">
-                <h:form id="menuForm">
-                    <p:toolbar>
-                        <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker"/>
-                        </p:toolbarGroup>
-                        <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" disabled="true" action="ProjectOverview.xhtml" />
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml?faces-redirect=true">
-                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" rendered="#{not empty currentProjectOverviewBean.projectName}"/>
-                            </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml?faces-redirect=true">
-                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" rendered="#{not empty currentProjectOverviewBean.projectName}"/>
-                            </p:button>
-                            <p:separator/>
-                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" disabled="true">
-                            </p:button>
-                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" disabled="true">
-                            </p:button>
-                        </p:toolbarGroup>
-                    </p:toolbar>
-
-                    <p:menubar>
-                        <p:submenu label="File">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-document" value="  New Project" onclick="newProjectDialog.show()" ajax="true"/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-folder-open" value="  Import Project" ajax="true" disabled="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-refresh" value="  Refresh Projects List" update=":projectsListForm" action="#{currentProjectOverviewBean.updateLists()}" ajax="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-gear" value="  Settings" onclick="settingsDlg.show()" ajax="true"/>
-                        </p:submenu>
-
-                        <p:submenu label="Help">
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-help" value="  User Guide" ajax="true" disabled="true"/>
-                            <p:separator/>
-                            <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-comment" value="  About..." onclick="aboutDlg.show()" ajax="true"/>
-                        </p:submenu>
-
-                        <p:menuitem styleClass="logOutButton" icon="ui-icon-power" value="#{userBean.userName}" ajax="true" url="login"/>
-                    </p:menubar>
-                </h:form>
-            </p:layoutUnit>
-
-            <!-- Abstand zu Icons -->
-            <p:layoutUnit position="center">
-                <h:form id="projectsListForm"> 
-                    <p:dataTable rows="15" paginator="true" paginatorPosition="both" var="project" rowsPerPageTemplate="5,10,15,25,50" value="#{currentProjectOverviewBean.projects}" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" selection="#{currentProjectOverviewBean.projectName}" rowKey="#{project}" selectionMode="single">  
-                        <!-- Makes sure that rows are selected instantaneously. -->
-                        <p:ajax event="rowSelect" listener="#{currentProjectOverviewBean.onRowSelect}" update=":menuForm" />
-
-                        <p:column headerText="Project Name" id="modelHeader" sortBy="#{project}">  
-                            <p:commandLink id="dynaButton" value="#{project}"/>
-
-                            <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom" style="width:210px">  
-                                <p:menuitem icon="ui-icon-wrench" id="openButton" value="  Analysis Editor" styleClass="element-with-whitespace" ajax="false" url="analysisEditor?projectName=#{project}"/>
-                                <p:menuitem icon="ui-icon-circle-triangle-e" id="controlAnalysis"  styleClass="element-with-whitespace" value="  Analysis" ajax="false" url="controller?projectName=#{project}" />
+    <f:view locale="#{currentConfigurationBean.locale}">
+        <h:head>
+            <title>Kieker.WebGUI</title>
+            <link rel="stylesheet" type="text/css" href="../css/Common.css" />
+            <link rel="stylesheet" type="text/css" href="../css/ProjectOverview.css" />
+        </h:head>
+
+        <h:body>
+            <p:layout fullPage="true">            
+                <p:layoutUnit position="north">
+                    <h:form id="menuForm">
+                        <p:toolbar>
+                            <p:toolbarGroup align="left">
+                                <h:outputText styleClass="kieker-title" value="Kieker"/>
+                            </p:toolbarGroup>
+                            <p:toolbarGroup align="right">
+                                <p:commandButton styleClass="perspective-button" icon="ui-icon-home" disabled="true" action="ProjectOverview.xhtml" />
                                 <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysisEditor" value="#{localizedMessages.analysisEditor}" style="white-space: none" outcome="AnalysisEditor.xhtml?faces-redirect=true">
+                                    <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" rendered="#{not empty currentProjectOverviewBean.projectName}"/>
+                                </p:button>
+                                <p:button styleClass="perspective-button" icon="ui-icon-analysis" value="#{localizedMessages.analysis}" style="white-space: none" outcome="Controller.xhtml?faces-redirect=true">
+                                    <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" rendered="#{not empty currentProjectOverviewBean.projectName}"/>
+                                </p:button>
+                                <p:separator/>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpitEditor" value="#{localizedMessages.cockpitEditor}" disabled="true">
+                                </p:button>
+                                <p:button styleClass="perspective-button" icon="ui-icon-cockpit" value="#{localizedMessages.cockpit}" disabled="true">
+                                </p:button>
+                            </p:toolbarGroup>
+                        </p:toolbar>
+
+                        <p:menubar>
+                            <p:submenu label="#{localizedMessages.file}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-newProject" value="  #{localizedMessages.newProject}" onclick="newProjectDialog.show()" ajax="true"/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-importProject" value="  #{localizedMessages.importProject}" ajax="true" disabled="true"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reload" value="  #{localizedMessages.refreshProjectsList}" update=":projectsListForm" action="#{currentProjectOverviewBean.updateLists()}" ajax="true"/>
+                                <p:separator/>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
+                            </p:submenu>
 
-                                <p:menuitem icon="ui-icon-wrench" id="editAnalysisViews"  styleClass="element-with-whitespace" value="  Cockpit Editor" ajax="false" disabled="true" />
-                                <p:menuitem icon="ui-icon-image" id="showAnalysis"  styleClass="element-with-whitespace" value="  Cockpit" ajax="false" disabled="true" />
+                            <p:submenu label="#{localizedMessages.help}">
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-userGuide" value="  #{localizedMessages.userGuide}" ajax="true" disabled="true"/>
                                 <p:separator/>
-                                <p:menuitem id="copyButton" icon="ui-icon-copy"  styleClass="element-with-whitespace" value="  Copy Project" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()"/>
-                                <p:menuitem id="renameButton" icon="ui-icon-pencil"  styleClass="element-with-whitespace" value="  Rename Project"  action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()" disabled="true"/>
-                                <p:menuitem id="deleteButton" icon="ui-icon-trash"  styleClass="element-with-whitespace" value="  Delete Project" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" disabled="true"/>      
-                            </p:menu>
-                        </p:column>  
-                        <p:column headerText="State" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}">  
-                            <h:outputText value="#{projectsBean.getAnalysisControllerState(project)}"/>  
-                        </p:column>
-
-                        <p:column headerText="Last Modification" sortBy="#{projectsBean.getCurrTimeStamp(project)}" style="text-align: center">  
-                            <h:outputText value="#{projectsBean.getCurrTimeStamp(project)}" />  
-                        </p:column>  
-
-                        <p:column headerText="Owner" style="text-align: center" rendered="false">   
-                            <h:outputText value="N/A" />  
-                        </p:column>  
-
-                    </p:dataTable>  
-                </h:form>
-            </p:layoutUnit>
-
-        </p:layout>
-
-        <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
-
-        <!-- Include the about-dialog. -->
-        <ui:include src="dialogs/aboutDialog.xhtml" />
-        <!-- Include the dialogs for the project managment. -->
-        <ui:include src="dialogs/projectDialogs.xhtml" />
-        <!-- Include the dialog for the configuration. -->
-        <ui:include src="dialogs/settingsDialog.xhtml" />
-
-    </h:body>
+                                <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-about" value="  #{localizedMessages.about}" onclick="aboutDlg.show()" ajax="true"/>
+                            </p:submenu>
+
+                            <p:menuitem styleClass="logOutButton element-with-whitespace" icon="ui-icon-logout" value=" #{userBean.userName}" ajax="true" url="login"/>
+                        </p:menubar>
+                    </h:form>
+                </p:layoutUnit>
+
+                <!-- Abstand zu Icons -->
+                <p:layoutUnit position="center">
+                    <h:form id="projectsListForm"> 
+                        <p:dataTable rows="15" paginator="true" paginatorPosition="both" var="project" rowsPerPageTemplate="5,10,15,25,50" value="#{currentProjectOverviewBean.projects}" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" selection="#{currentProjectOverviewBean.projectName}" rowKey="#{project}" selectionMode="single">  
+                            <!-- Makes sure that rows are selected instantaneously. -->
+                            <p:ajax event="rowSelect" listener="#{currentProjectOverviewBean.onRowSelect}" update=":menuForm" />
+
+                            <p:column headerText="#{localizedMessages.projectName}" id="modelHeader" sortBy="#{project}">  
+                                <p:commandLink id="dynaButton" value="#{project}"/>
+
+                                <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom" style="width:210px">  
+                                    <p:menuitem icon="ui-icon-wrench" id="openButton" value="  #{localizedMessages.analysisEditor}" styleClass="element-with-whitespace" ajax="false" url="analysisEditor?projectName=#{project}"/>
+                                    <p:menuitem icon="ui-icon-circle-triangle-e" id="controlAnalysis"  styleClass="element-with-whitespace" value="  #{localizedMessages.analysis}" ajax="false" url="controller?projectName=#{project}" />
+                                    <p:separator/>
+
+                                    <p:menuitem icon="ui-icon-wrench" id="editAnalysisViews"  styleClass="element-with-whitespace" value="  #{localizedMessages.cockpitEditor}" ajax="false" disabled="true" />
+                                    <p:menuitem icon="ui-icon-image" id="showAnalysis"  styleClass="element-with-whitespace" value="  #{localizedMessages.cockpit}" ajax="false" disabled="true" />
+                                    <p:separator/>
+                                    <p:menuitem id="copyButton" icon="ui-icon-copy"  styleClass="element-with-whitespace" value="  #{localizedMessages.copyProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()"/>
+                                    <p:menuitem id="renameButton" icon="ui-icon-pencil"  styleClass="element-with-whitespace" value="  #{localizedMessages.renameProject}"  action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()" disabled="true"/>
+                                    <p:menuitem id="deleteButton" icon="ui-icon-trash"  styleClass="element-with-whitespace" value="  #{localizedMessages.deleteProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" disabled="true"/>      
+                                </p:menu>
+                            </p:column>  
+                            <p:column headerText="#{localizedMessages.state}" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}">  
+                                <h:outputText value="#{projectsBean.getAnalysisControllerState(project)}"/>  
+                            </p:column>
+
+                            <p:column headerText="#{localizedMessages.lastModification}" sortBy="#{projectsBean.getCurrTimeStamp(project)}" style="text-align: center">  
+                                <h:outputText value="#{projectsBean.getCurrTimeStamp(project)}" />  
+                            </p:column>  
+
+                            <p:column headerText="#{localizedMessages.owner}" style="text-align: center" rendered="false">   
+                                <h:outputText value="N/A" />  
+                            </p:column>  
+
+                        </p:dataTable>  
+                    </h:form>
+                </p:layoutUnit>
+
+            </p:layout>
+
+            <p:growl id="messages" life="1500" showDetail="true"  autoUpdate="false" sticky="true"/>  
+
+            <!-- Include the about-dialog. -->
+            <ui:include src="dialogs/aboutDialog.xhtml" />
+            <!-- Include the dialogs for the project managment. -->
+            <ui:include src="dialogs/projectDialogs.xhtml" />
+            <!-- Include the dialog for the configuration. -->
+            <ui:include src="dialogs/settingsDialog.xhtml" />
+
+        </h:body>
+    </f:view>
 </html>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/WEB-INF/faces-config.xml b/Kieker.WebGUI/src/main/webapp/WEB-INF/faces-config.xml
new file mode 100644
index 00000000..6dfa9de1
--- /dev/null
+++ b/Kieker.WebGUI/src/main/webapp/WEB-INF/faces-config.xml
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- =========== FULL CONFIGURATION FILE ================================== -->
+
+<faces-config version="2.1"
+    xmlns="http://java.sun.com/xml/ns/javaee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
+
+    <application>
+        <locale-config>
+            <default-locale>en</default-locale>
+            <supported-locale>de</supported-locale>
+        </locale-config>
+        <resource-bundle>
+            <base-name>messages</base-name>
+            <var>localizedMessages</var>
+        </resource-bundle>
+    </application>
+
+</faces-config>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/AnalysisEditor.css b/Kieker.WebGUI/src/main/webapp/css/AnalysisEditor.css
index 40e4f2f4..8574703e 100644
--- a/Kieker.WebGUI/src/main/webapp/css/AnalysisEditor.css
+++ b/Kieker.WebGUI/src/main/webapp/css/AnalysisEditor.css
@@ -11,4 +11,35 @@
 /* This is necessary to remove the border from the datalist */
 .ui-datalist * {
     border : 0px !important;
+}
+
+#center-container {
+    height:100%;
+}
+
+#center-container {
+    width:100%;
+}
+
+#infovis {
+    width:100%;
+    height:100%;
+    margin:auto;
+    overflow:hidden;
+}
+
+.tip {
+    color: #111;
+    width: 139px;
+    background-color: white;
+    border:1px solid #ccc;
+    -moz-box-shadow:#555 2px 2px 8px;
+    -webkit-box-shadow:#555 2px 2px 8px;
+    -o-box-shadow:#555 2px 2px 8px;
+    box-shadow:#555 2px 2px 8px;
+    opacity:0.9;
+    filter:alpha(opacity=90);
+    font-size:10px;
+    font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
+    padding:7px;
 }
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/Common.css b/Kieker.WebGUI/src/main/webapp/css/Common.css
index 690ce0ef..da437091 100644
--- a/Kieker.WebGUI/src/main/webapp/css/Common.css
+++ b/Kieker.WebGUI/src/main/webapp/css/Common.css
@@ -73,4 +73,172 @@
 
 .kieker-title {
     font-size: 25px !important;
+}
+
+.ui-icon-close {
+    background: url('../img/icons/Close.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-reload {
+    background: url('../img/icons/Reload.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-settings {
+    background: url('../img/icons/Settings.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-logout {
+    background: url('../img/icons/Logout.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-scaleToFitSmall {
+    background: url('../img/icons/ScaleToFitSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-scaleToFit {
+    background: url('../img/icons/ScaleToFit.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-snapEnabled {
+    background: url('../img/icons/SnapEnabled.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-snapDisabled {
+    background: url('../img/icons/SnapDisabled.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-snapEnabledSmall {
+    background: url('../img/icons/SnapEnabledSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-snapDisabledSmall {
+    background: url('../img/icons/SnapDisabledSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-gridEnabled {
+    background: url('../img/icons/GridEnabled.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-gridDisabled {
+    background: url('../img/icons/GridDisabled.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-gridEnabledSmall {
+    background: url('../img/icons/GridEnabledSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-gridDisabledSmall {
+    background: url('../img/icons/GridDisabledSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-autoLayoutSmall {
+    background: url('../img/icons/AutoLayoutSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-autoLayout {
+    background: url('../img/icons/AutoLayout.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-home {
+    background: url('../img/icons/Home.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-analysisEditor {
+    background: url('../img/icons/AnalysisEditor.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-analysis {
+    background: url('../img/icons/Analysis.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-cockpitEditor {
+    background: url('../img/icons/CockpitEditor.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-cockpit {
+    background: url('../img/icons/Cockpit.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-save {
+    background: url('../img/icons/Save.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-saveAs {
+    background: url('../img/icons/SaveAs.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-newProject {
+    background: url('../img/icons/NewProject.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-importProject {
+    background: url('../img/icons/ImportProject.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-userGuide {
+    background: url('../img/icons/UserGuide.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-about {
+    background: url('../img/icons/About.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-manageLibraries {
+    background: url('../img/icons/ManageLibraries.png') no-repeat !important;
+    height:16px;
+    width:16px;
 }
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/Login.css b/Kieker.WebGUI/src/main/webapp/css/Login.css
index 979aa28d..c45311e1 100644
--- a/Kieker.WebGUI/src/main/webapp/css/Login.css
+++ b/Kieker.WebGUI/src/main/webapp/css/Login.css
@@ -6,6 +6,7 @@
 
 .col1 {
     width: fit-content !important;
+    text-align: right;
 }
 
 .col2 {
diff --git a/Kieker.WebGUI/src/main/webapp/css/base.css b/Kieker.WebGUI/src/main/webapp/css/base.css
deleted file mode 100644
index 4e050017..00000000
--- a/Kieker.WebGUI/src/main/webapp/css/base.css
+++ /dev/null
@@ -1,31 +0,0 @@
-#center-container {
-    height:100%;
-}
-
-#center-container {
-    width:100%;
-}
-
-
-#infovis {
-    width:100%;
-    height:100%;
-    margin:auto;
-    overflow:hidden;
-}
-
-.tip {
-    color: #111;
-    width: 139px;
-    background-color: white;
-    border:1px solid #ccc;
-    -moz-box-shadow:#555 2px 2px 8px;
-    -webkit-box-shadow:#555 2px 2px 8px;
-    -o-box-shadow:#555 2px 2px 8px;
-    box-shadow:#555 2px 2px 8px;
-    opacity:0.9;
-    filter:alpha(opacity=90);
-    font-size:10px;
-    font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
-    padding:7px;
-}
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/js-graph-it.css b/Kieker.WebGUI/src/main/webapp/css/js-graph-it.css
deleted file mode 100644
index 46757760..00000000
--- a/Kieker.WebGUI/src/main/webapp/css/js-graph-it.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.draggable
-{
-	position: absolute;
-	cursor: move;
-	z-index: 1;
-}
-
-.connector
-{
-	background-color: black;
-}
-
-.dock_point
-{
-	height: 1px;
-	width: 1px;
-	overflow: hidden;
-	padding: 0px !important;
-	border: none !important;
-	margin: 0px !important;
-	position: absolute;
-	font-size: 1px;
-	visibility: hidden;
-}
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/aboutDialog.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/aboutDialog.xhtml
index 622a4bac..ae2ae151 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/aboutDialog.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/aboutDialog.xhtml
@@ -6,7 +6,7 @@
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:p="http://primefaces.org/ui">     
 
-    <p:dialog header="About..." resizable="false" modal="true" widgetVar="aboutDlg">
+    <p:dialog header="#{localizedMessages.about}" resizable="false" modal="true" widgetVar="aboutDlg">
         <h:form>
             <img src="../img/kieker-logo-transparent.png" alt="Kieker-Logo" width="491" height="150" />
             <hr/>
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/manageLibrariesDialog.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/manageLibrariesDialog.xhtml
index f87e5871..a88d652e 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/manageLibrariesDialog.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/manageLibrariesDialog.xhtml
@@ -5,21 +5,21 @@
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:p="http://primefaces.org/ui">     
 
-    <p:dialog id="manageLibrariesDlg" header="Libraries" resizable="false"
+    <p:dialog id="manageLibrariesDlg" header="#{localizedMessages.libraries}" resizable="false"
               modal="true" widgetVar="manageLibrariesDialog">
 
         <h:form id="dependenciesForm">
             <p:dataTable id="currentDependencies" value="#{currentAnalysisEditorBean.libraries}"  var="dependency" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" >     
 
-                <p:column headerText="Filename">  
+                <p:column headerText="#{localizedMessages.fileName}">  
                     <h:outputText value="#{dependency}"/>
                 </p:column>  
 
-                <p:column headerText="Size" style="text-align: center">  
+                <p:column headerText="#{localizedMessages.fileSize}" style="text-align: center">  
                     <h:outputText value="N/A [MiByte]"/>
                 </p:column> 
 
-                <p:column headerText="Options" style="text-align: center; width:40px">  
+                <p:column headerText="#{localizedMessages.libOptions}" style="text-align: center; width:40px">  
                     <p:commandButton id="deleteButton" icon="ui-icon-trash" disabled="true"/>    
                     <p:tooltip for="deleteButton" value="Delete Library"/>
                 </p:column> 
@@ -29,7 +29,7 @@
         <p:spacer width="0" height="5"/>
         <div>
             <!-- This is the form for the uploading. -->
-            <h:outputText value="Currently only *.jar-Dependencies can be uploaded. The maximal file size is limited to 100 [MiByte]." />
+            <h:outputText value="#{localizedMessages.msgOnlyJar}" />
             <br />
             <br />
             <h:form enctype="multipart/form-data">
@@ -39,7 +39,7 @@
         <hr/>
         <div style="text-align: right">
             <h:form>
-                <p:commandButton value="Ok" ajax="true" onclick="manageLibrariesDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.ok}" ajax="true" onclick="manageLibrariesDialog.hide()" />
             </h:form>
         </div>
     </p:dialog>
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/projectDialogs.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/projectDialogs.xhtml
index 076b390b..ec56dba0 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/projectDialogs.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/projectDialogs.xhtml
@@ -8,21 +8,21 @@
 
     <!-- ******************************************************************************** -->
     <!-- This is the dialog to create a new project. -->
-    <p:dialog id="newProjectDlg" header="New Project" resizable="false" modal="true" widgetVar="newProjectDialog">
+    <p:dialog id="newProjectDlg" header="#{localizedMessages.newProject}" resizable="false" modal="true" widgetVar="newProjectDialog">
         <!-- Make sure that closing of the dialog also clears the input field. -->
         <p:ajax event="close" update="newProjectDialogForm:newProjectInputText" />
 
         <h:form id="newProjectDialogForm">  
             <div style="text-align: center">
-                <h:outputText value="Name: " /> 
+                <h:outputText value="#{localizedMessages.name}: " /> 
                 <p:inputText id="newProjectInputText" value="#{stringBean.string}" />
             </div>
 
             <hr/>
             <div style="text-align: right">
-                <p:commandButton value="Ok" action="#{projectsBean.addProject(stringBean.string)}" update=":projectsListForm :messages" oncomplete="newProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.ok}" action="#{projectsBean.addProject(stringBean.string)}" update=":projectsListForm :messages" oncomplete="newProjectDialog.hide()" />
                 <p:spacer width="10px" height="10" />
-                <p:commandButton value="Cancel" onclick="newProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.cancel}" onclick="newProjectDialog.hide()" />
             </div>
         </h:form>  
     </p:dialog>
@@ -34,50 +34,50 @@
 
         <h:form id="renameProjectDialogForm">  
             <div style="text-align: center">
-                <h:outputText value="New Name: " /> 
+                <h:outputText value="#{localizedMessages.newName}: " /> 
                 <p:inputText id="renameProjectInputText" value="#{stringBean.string}" />
             </div>
 
             <hr/>
             <div style="text-align: right">
-                <p:commandButton value="Ok" action="#{projectsBean.renameProject(currentProjectOverviewBean.projectName, stringBean.string)}" update=":projectsListForm :messages" oncomplete="renameProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.ok}" action="#{projectsBean.renameProject(currentProjectOverviewBean.projectName, stringBean.string)}" update=":projectsListForm :messages" oncomplete="renameProjectDialog.hide()" />
                 <p:spacer width="10px" height="10" />
-                <p:commandButton value="Cancel" onclick="renameProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.cancel}" onclick="renameProjectDialog.hide()" />
             </div>
         </h:form>  
     </p:dialog>
 
-    <p:dialog id="deleteProjectDlg" header="Delete Project" resizable="false" modal="true" widgetVar="deleteProjectDialog">
+    <p:dialog id="deleteProjectDlg" header="#{localizedMessages.deleteProject}" resizable="false" modal="true" widgetVar="deleteProjectDialog">
 
         <h:form id="deleteProjectDialogForm">  
             <div style="text-align: center">
-                <h:outputText value="Do you really want to delete the selected project?" /> 
+                <h:outputText value="#{localizedMessages.msgReallyDeleteProject}" /> 
             </div>
 
             <hr/>
             <div style="text-align: right">
-                <p:commandButton value="Ok" action="#{projectsBean.deleteProject(currentProjectOverviewBean.projectName)}" update=":projectsListForm :messages" oncomplete="deleteProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.ok}" action="#{projectsBean.deleteProject(currentProjectOverviewBean.projectName)}" update=":projectsListForm :messages" oncomplete="deleteProjectDialog.hide()" />
                 <p:spacer width="10px" height="10" />
-                <p:commandButton value="Cancel" onclick="deleteProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.cancel}" onclick="deleteProjectDialog.hide()" />
             </div>
         </h:form>  
     </p:dialog>
 
-    <p:dialog id="copyProjectDlg" header="Copy Project" resizable="false" modal="true" widgetVar="copyProjectDialog">
+    <p:dialog id="copyProjectDlg" header="#{localizedMessages.copyProject}" resizable="false" modal="true" widgetVar="copyProjectDialog">
         <!-- Make sure that closing of the dialog also clears the input field. -->
         <p:ajax event="close" update="copyProjectDialogForm:copyProjectDialogInputText" />
 
         <h:form id="copyProjectDialogForm">  
             <div style="text-align: center">
-                <h:outputText value="Name: " /> 
+                <h:outputText value="#{localizedMessages.name}: " /> 
                 <p:inputText id="copyProjectDialogInputText" value="#{stringBean.string}" />
             </div>
 
             <hr/>
             <div style="text-align: right">
-                <p:commandButton value="Ok" action="#{projectsBean.copyProject(currentProjectOverviewBean.projectName, stringBean.string)}" update=":projectsListForm :messages" oncomplete="copyProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.ok}" action="#{projectsBean.copyProject(currentProjectOverviewBean.projectName, stringBean.string)}" update=":projectsListForm :messages" oncomplete="copyProjectDialog.hide()" />
                 <p:spacer width="10px" height="10" />
-                <p:commandButton value="Cancel" onclick="copyProjectDialog.hide()" />
+                <p:commandButton value="#{localizedMessages.cancel}" onclick="copyProjectDialog.hide()" />
             </div>
         </h:form>  
     </p:dialog>
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/settingsDialog.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/settingsDialog.xhtml
index ee5efc2b..114993ea 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/settingsDialog.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/settingsDialog.xhtml
@@ -5,49 +5,49 @@
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:p="http://primefaces.org/ui">     
 
-    <p:dialog id="settingsDialog" header="Settings" resizable="false"
+    <p:dialog id="settingsDialog" header="#{localizedMessages.settings}" resizable="false"
               modal="true" widgetVar="settingsDlg">
         <h:form>
             <p:tabView>
-                <p:tab title="Common">
+                <p:tab title="#{localizedMessages.common}">
                     <h:panelGrid columns="2" cellpadding="10">
-                        <h:outputText value="Look and Feel:" />
-                        <p:themeSwitcher value="#{currentConfigurationBean.lookAndFeel}"
-                                         style="width:150px" effect="fade">
-                            <f:selectItem itemLabel="Choose Theme" itemValue="" />
+                        <h:outputText value="#{localizedMessages.lookAndFeel}:" />
+                        <p:themeSwitcher value="#{currentConfigurationBean.lookAndFeel}" style="width:150px" effect="fade">
+                            <f:selectItem itemLabel="#{localizedMessages.chooseTheme}" itemValue="" />
                             <f:selectItems value="#{themeSwitcherBean.themes}" />
                         </p:themeSwitcher>
 
-                        <h:outputText value="Language:"/>
-                        <p:selectOneMenu effectDuration="20" style="width:150px"> 
-                            <f:selectItem itemLabel="English"/>
+                        <h:outputText value="#{localizedMessages.language}:"/>
+                        <p:selectOneMenu value="#{currentConfigurationBean.locale}" style="width:150px"> 
+                            <f:selectItem itemValue="en" itemLabel="English"/>
+                            <f:selectItem itemValue="de" itemLabel="Deutsch"/>
                         </p:selectOneMenu>
                     </h:panelGrid>
                 </p:tab>
-                <p:tab title="Analysis Editor">
+                <p:tab title="#{localizedMessages.analysisEditor}">
                     <h:panelGrid columns="2" cellpadding="10">
-                        <h:outputText value="Tool Palette"/>
+                        <h:outputText value="#{localizedMessages.toolPalette}:"/>
                         <p:selectOneMenu style="width:150px">
-                            <f:selectItem itemLabel="Lists"/>
+                            <f:selectItem itemLabel="#{localizedMessages.lists}"/>
                         </p:selectOneMenu>
 
-                        <h:outputText value="Grid-Size:"/>
+                        <h:outputText value="#{localizedMessages.gridSize}:"/>
                         <p:spinner value="#{currentConfigurationBean.gridSize}" valueChangeListener="#{currentAnalysisEditorBean.gridSizeListener}" suffix=" [px]"/>
 
-                        <h:outputText value="Grid-Color:"/>
+                        <h:outputText value="#{localizedMessages.gridColor}:"/>
                         <p:colorPicker value="#{currentConfigurationBean.gridColor}" valueChangeListener="#{currentAnalysisEditorBean.gridColorListener}"/>
                     </h:panelGrid>
                 </p:tab>
-                <p:tab title="Analysis Controller" disabled="true">
+                <p:tab title="#{localizedMessages.analysisController}" disabled="true">
                 </p:tab>
-                <p:tab title="Cockpit Editor" disabled="true">
+                <p:tab title="#{localizedMessages.cockpitEditor}" disabled="true">
                 </p:tab>
-                <p:tab title="Cockpit" disabled="true">
+                <p:tab title="#{localizedMessages.cockpit}" disabled="true">
                 </p:tab>
             </p:tabView>
             <hr/>
             <div style="text-align: right">
-                <p:commandButton value="Ok" oncomplete="settingsDlg.hide();" />
+                <p:commandButton value="#{localizedMessages.ok}" oncomplete="settingsDlg.hide();" update="@all" />
             </div>
         </h:form>
     </p:dialog>
diff --git a/Kieker.WebGUI/src/main/webapp/img/Icon_LED_Gray.png b/Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Gray.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/Icon_LED_Gray.png
rename to Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Gray.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/Icon_LED_Green.png b/Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Green.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/Icon_LED_Green.png
rename to Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Green.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/Icon_LED_Red.png b/Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Red.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/Icon_LED_Red.png
rename to Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Red.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/Icon_LED_Yellow.png b/Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Yellow.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/Icon_LED_Yellow.png
rename to Kieker.WebGUI/src/main/webapp/img/LEDs/Icon_LED_Yellow.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/FilterIcon.png b/Kieker.WebGUI/src/main/webapp/img/graphIcons/FilterIcon.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/FilterIcon.png
rename to Kieker.WebGUI/src/main/webapp/img/graphIcons/FilterIcon.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/ReaderIcon.png b/Kieker.WebGUI/src/main/webapp/img/graphIcons/ReaderIcon.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/ReaderIcon.png
rename to Kieker.WebGUI/src/main/webapp/img/graphIcons/ReaderIcon.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/RepositoryIcon.png b/Kieker.WebGUI/src/main/webapp/img/graphIcons/RepositoryIcon.png
similarity index 100%
rename from Kieker.WebGUI/src/main/webapp/img/RepositoryIcon.png
rename to Kieker.WebGUI/src/main/webapp/img/graphIcons/RepositoryIcon.png
diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/About.png b/Kieker.WebGUI/src/main/webapp/img/icons/About.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9b743767a05334354e9d3106fa09d3173dea34c
GIT binary patch
literal 780
zcmV+n1M~ceP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008hNkl<Zc-oDV
zOK4Pg6vlt&&b>2<nMdOojnPCKU!WGFC@6}q6tw8V7SS$>58B#lp`uV)D3WeOAqz$E
z0Scn13!f-OEiPIVq##+uLKAiJP@@%-n9M7gduL8hT=*y{^bZ&A<(%(3|L^<G73_Q*
zsJm47BqlWMeZiTohdj_FGRV8<o;nljN$iO8O$dVDlmnMs$;)tUdP%DnzT|#GImsV7
z`E{t97V0=dl4h!;M3+|5#wMc7-!+X5zQXkwi&`Uc_ccK{(9!V}$D<i$Kbgt)Aj>0q
z*+Lb+;PHY^wh`w%W5`!`(o`BC)<2iEL$0*HCZJax(kw90TI%_k2sy$`<QYGrgcwf~
zc~T78S3jRxUxFG=FhP8Iqp?fl2K(M%CvEB@&n4*%aIhrg{1`imMP4z)C?3$rX!bK%
z9uLFb67;KBc^2J#Cvl$E3M*$j%*#TlRk`(CxnZ|(DK|kOt`L*L`vg7ufywyRNG4Qx
z)U7CE@#zThv>CR(K<Z9`n|>ctsNj^zJ4ZtNHw13CRtDYdw)q!Le_Oc7nwf(f{JjEi
zNYNEpa?LJ#DdPfvv)l&tjEZtDS0jO}wge>2kyMz@jxdcGPcjsB&ZI17$2&|K&b&FG
zJs0D1v#>>!s<I9m7ktRAsc=<hr1gs}%CY--vX>Jq8%SH)KCA3vi_EOs1XR+;N9Owx
zbKpuMOmbtMKN=#8ITo-^$_u)%rj0{A9=)$z?ppgpVhqs39NU8?6X}`%o6W#_ODSzp
zM(UI`V+$l(XYrYcubvhehhuY#26Szv!&ut+a$FsI!Vbm9UF@Wmt5$z%k7r)ggaXQJ
zd;SzgIvI`9!B6XE;8!}hM_UXs#qy6y-@jW&CdjE1vOV}J!?n1%xG%)kQi$V3CHQ{?
z!_k(swmQXOC!pflRKE6I`D>)U|0Iw=9aZ~%>{W!9>Pm5>zJCDi4+>lv6B+;j0000<
KMNUMnLSTX!`fQW{

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Analysis.png b/Kieker.WebGUI/src/main/webapp/img/icons/Analysis.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2c8c2227de5f36a5300571cfcd12ed47cd6b426
GIT binary patch
literal 879
zcmV-#1CacQP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009vNkl<Zc-n1~
zYiLtv7{~u_lGD@N)3i<Esn|;-ja`)%#cH$xjV)I3IxnC_#x~fdh*(5$j0u9Gh$t#L
z=9f+IgE!FW)Q(OqC~BRxYPC_5rO9lXCbqe>Ik}vib9P#xP}>I{-Y@_EkN3F|OcAyn
z<+PlVRZ}_zBMRVomJdKg&zs{O{&OvvVBB6-sVi3hXfLf?UtuZNX!G?DB|?;q;{69t
z#Pgr`LUx!t{N|K*U=qOkUCH;09P>{soavyAN+W7Y>M+QL@h<XGf&hY)$!rR3-EBkf
zy1mWrGrhOR0j15w->zEM_-mD=ipb@_qOwMOVV*Yzc1ND$aiA4BUaCa^aybzXJr6S-
z?Jt&le+%9xOp~6eTUY(I-tN@oDF_q_z*)8ivx?`BmllY*ao2YdX)X&+0%SN5*B{*Q
z`aAloh;@r`-{x(r4;8BQpecZ&2%IxE!d~Q<(5!GWfZOlSA(0+NCM&`p{eVAyzqgju
z?yy|@a>I%>`FRARNlRHjy&088=cMVx(_vihIf7_1jyRjb<@0wAlDZaCTkTSdi_u$P
zR2!hA6<ExC4V%F=)r4`?eGpxtztI;9;mM`YG2&=3x79T0TspN3T9q7nl@c!IC)o9C
zCz<~V-og$4Ua%Ps@uYx97Y2`!IopgE8@?*qq*ckFmmnJHb(;3Wrr9vT+&y#+?ctv#
zGmnI1jt%o@{UyAgR4mi(T)EqPvSeBwbZP>f^aF?S0LoQO<7Qv76`hF_7|8~aV0pwx
z1pMpIp!I0TMGCBWCdUt^t|d#0rWp)84Ebiv*6f5$yZTf2GhOhqHxcK&h;eSIc}WaJ
z1pIaN<5Ty|SpC={mDDOXHSA%|FPLqk%PkBjn846=P*DZo1Qzj}4^i$dQhXRa{(d~|
z^hMiG4=f*eo$eR|7^YJ)otfI&u*-DZYAq|Qwk$?P!CaV>cI3nig2|Wg4nD)H{zve<
z>hHaOHu6oVCw+I)F%{0BD(y~fOHGr0g~>`YaygNW-hs5fd|!9U*ZF7cO7C;_)KGv6
zPI--^p(&CRk%y7WC#AGXZk7~6D#7;&ycif6<P)Fk{|979Pq12>LXZFe002ovPDHLk
FV1mFqsowwq

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/AnalysisEditor.png b/Kieker.WebGUI/src/main/webapp/img/icons/AnalysisEditor.png
new file mode 100644
index 0000000000000000000000000000000000000000..89089ece36d97f143555d5ee32808b454b87e156
GIT binary patch
literal 789
zcmV+w1M2*VP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008qNkl<Zc-nQ6
zTS!xJ7{LGkb2fKX=W>+WG~3v6n|7fGnN%CiE)NE&Dcvt1JxNeK6g`wh7b+hD5qgNi
z9s(bt3uU2(4t;0@#hja)jHNSWx;d7(?d)vltnWy|)b+vtaQH62?}`z~=;)|0lgVth
zTCLM4k4#NXVIGgyNRs5CL?YqWYPFrKHq3pTPUmhg^p%&FpH-{XgX;moVDPnAEIvuo
z^h`V+uh;2xlWPF~vYY~^M-vkhJ1rJVbXD*3`79ENWSGzAqevuTHJMEIKp;>IrcWA;
zW-rdoG%_+$%P>qwI2=CS($W&=bY8Fb8~}Q<*(`zz9PmyHg~FGqRI0{cFqGi+<qi!E
z9e{aUTUuIb2BF+;w-Eqt03(bsA_xL;|MT<ny>)eUCpG{$vD@v(mY0{g%xx-_>J1Ff
z3Yl|*gJ8EbG&D@*1#seUINBlOJ-J+7oJ=M&zovudG0HNTbee?<`&L`b3-J5>3UKPD
zlGHAOB#<-0eEvg78{4hA)Oz0y0I%1llu9K73kzXmDn+5;Sw0HzRY)l#-lJ@``Hpo9
z^Irf=d@CHxSDH?13k#*_`%l-0TlVxqQK_O$zfFOZ3dt*I<HCKLD!T#T^ZN7zNe-mb
z=?X3ww(w&z5Zr(L-7FQMaBo$$u~}ca36&|NT@UM(m)8KG=PFq9AOx3)L_#r4{C6}O
ztu>p?bDUk;`mCTpAo^Hk(jVj?3YqxslOyWeD*#vt31>XUGHeefZ~`X&AQTGiv)OFU
z-1bDR&m{t3!GOuAH|r|psI;W;O6TFSr+9I3(GZKpJaDQZilPML<Kt(Vnwt9ZZD-G=
zF4+uSWY-zC@2ECZ#)_nZ3hZ*Z2snx_aH=&PkLN9v{ta5-fj=)NmW9XAET-oYeA!q=
zbF*40xcK7g(f*Ygba!_XkX;P-Eo50%05BdL(Ha2gxb@KtB2o#4j6d$UL34(`AEIAR
TWf-c+00000NkvXXu0mjfD5Y$f

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/AutoLayout.png b/Kieker.WebGUI/src/main/webapp/img/icons/AutoLayout.png
new file mode 100644
index 0000000000000000000000000000000000000000..32b25356a9e754123e2c572f229acfabd66b1fcd
GIT binary patch
literal 2367
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

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/AutoLayoutSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/AutoLayoutSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a22a2d31ec6e33d4377a8127bb58ee8e80ca6f0
GIT binary patch
literal 837
zcmV-L1G@Z)P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009FNkl<Zc-p0t
zUr1AN6vw}Jf9}1zUhixhSuSTj*c=oQg%asY4<S8B5~RbjMcRr;5+)_fgh8W+uzctx
zTnrII45h666I%8Mvl&R)A2pSN%GPwI+njgTd%G?WB&mna%kRfIhtD~`-#K3b|7pbE
zf<B**V_9~mMx)7M7$&Q&t<7P#+b7oq3=9mYNs`>kaa{ItvLs1a27@6}DVuzc=QKAr
zR~8o+Us(lcYHBLY&CRvxbh;fBMKR0Hg^^(>Mg|cH$G{yr4w6(u6h-v+_dm<Y$;n*>
zsHv&BT3uazRxT8GELZz<>n2i$+To{+m?^A8M!EqslK`IQ1-IL6a=BdJRsba>CB^mi
z^^MB_f*>I9QG9sX4U>5*pj<>W+zGX|2o$3Qt)bD_*l4%eY&TW_+1c6Vo}Qlfa{Gk1
zBw%*<C=Bc@J_ipYtjd5s(FfLa5?`i*Fr_5o$>S#-d3kyJR{&<SnUVit%wn;mOi#}O
zKia_198|j9nBhs#2^?sOMQn+{q7a10hZkB}TDCjN9b<7oW@aW)QBl!pwOaSRot#5(
zQ2`yR#+DRHZdrv1e+bE1J$ONqA)*|MVeV(}d+VLnJ>~ZD@%R`W4u{+6bXN6^2?(i^
zuz?ICCxgbvuU`?0Bq4Q!R-Qrx5rF}z5J4jltE#Fx@AY_V<AD79`~r{1(>fJgk{3h5
zW+R7CY#u5>g{eS@C$*bMEhESf3DY5^c;%AQH97w7Qs2Y-LL4B!KdrmF`=dN2jE;>?
zr|(Kn?rQIPG5Th7!d7-VU$5W7ex7_iQ+wHU{n)7sMeMp{<)hx7UG8(XU>smFnMis2
z4*3245o4-R>3!gRrIeIWj^$`!ftDikiurr(cRLbDsWY+=-D@p5QP}%@sG;=W?y^6$
zVA*ET)OqX1)6&v5`X2k<^*$WzJ5zblN>UmPttJ$lMxj&?ApCOz?`gPQu%?)bjubg#
zi!o~O<*RF2z0r`QTc7t^HWK2hkU+?%6beTt)&%JEI=PBM3<LtwzvTQ2=;t>BaAu`i
P00000NkvXXu0mjfyU>Sn

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Close.png b/Kieker.WebGUI/src/main/webapp/img/icons/Close.png
new file mode 100644
index 0000000000000000000000000000000000000000..b50dc52f5cdf1af9989bdadd5d37f215985842f5
GIT binary patch
literal 932
zcmV;V16%xwP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000APNkl<Zc-nPS
zYe-vX7=FIw<Y>%h(j>-Q%vy`92?mF?8dTg61X+u1XGeGGWew}-)-hqAV<^bRK-M2p
z*yfKirqEXBCe@ZmW67jxDce#ntFEm&4WspBNz^oJT+HowzMVKIg}V3O$M;^I_j#U|
z;D2J&Vo_-rra(#vf;{ivJ3AZMDvvz<7~a19d81r@T31nVR99A3l4UXxhz*h)M^~n&
z?}x_6`$EZN_kN!*`b>jMdi~24c6-0Mx!DB2AGmV|!umRpN<ku*1C^D4*$l3``>#o_
z_vk^6yZ)p>k5c(c(}4pn<>ABfjln_q@7=@V@^WnU;lp6&-<FrBuP!W9$XZ(gwHncj
z7n37S=c`9nSFe*cmQ@_LSZ0emI?U<bUW`snh0X>7UH3&$`8hc&#cH*=W7n=LwqwVN
zpi*rjgUtqCXQ%(ixj73tL&(Y2mX>cxEC!d;`QT%YYn-R__snExb@iTFjpmB7vC#;Y
zMe6EREQkn;9S%sv)w=uoPLp0j`cLfJ_ZA<CV87RU$i?$Rnc|;oYnyf(jpws!Y80Rp
z@sSZsxZUw{z`)t;Y)4)qfeVBTlJ5y|ze#DmU!@ASq|+}9#A54{<>jB0snwmNs7MMy
z!1}@hydKX=t00_A6Eb!oJKI;9NaPOyW28rv+yOMCb-H91rG<?K!xtqi`z|&%0EGha
zwKa^*%>2<#>Dx2F<Poh_+OAM6S|gDiy~(7Tv;*IKzHQrw(%f8xwc4OYF4sdQ0~Oik
z7Z=e#J$<taI4+X%AhX(cH8oWZp1&omtx4ME=g*M_psru9|4FUYN;X+mDuMib(1{89
z<=wk|ml@`x+o{ywnPShWQzh0|Y*ZHt75JBy=zDW>4a5e>-T{7SuB?2GHJLVb&Oq-O
zA0G}IjUVhOFOM6vT5C=`{)XZ4<M(CD%krqthp$~O=Vjo~rjcF}XSRt>e%)@blGN7&
z;yTdj0F4I7$^t~j5siXAdW3(5hH&Y|joV)V2Y&+sPpoVe)AzFMXP=gqp3v6SJqN4x
zKQyA=SXu)0co4jHEp{fAI`0NLM5C=fb4)uJMnV|o#VWnNY4^^Z_JZ780||%0aa?dJ
z5cu_%L}Hi%3x5I|TVCVSA*vw}1c4!<iKLYBE9tbbRo=f$!D6-^r{fy{0000<MNUMn
GLSTZ0h{}cl

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Cockpit.png b/Kieker.WebGUI/src/main/webapp/img/icons/Cockpit.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1d971efa0cada3bc89f5f2e3f11f17abbe46ebc
GIT binary patch
literal 840
zcmV-O1GoH%P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009INkl<Zc-oDV
zdq`7p6vw~!?rzR!rRLOSX<BMfW;L^Skyc_hLn<XOOQ;E9h(RhA^nfTRdKg$iWKdZ|
zK`Skb?CDZVDlP3z_@3L`!+E#+>^4XW4Lb1q<M-v959fS2hroZv@swr$U;B*1XWH8N
zKXqcP<oX<~7kDl~Ay;TXDKwmn()h}#*owM`X%~NVKNu76dDpf)xu1U$*WIa6io#4P
zB;1R(Sio=s7(tXCaI5wGp+oOJ>>ULtUXn!U(o(-gWp0e5uU~=?tb*G*2xgdu7(N+f
zR16f+(_r}c>B%~+cKIlPL6@)e3GjXtH-G*Dn&rXA#6u<(F+2~7qTqJB!8j}+DaBBE
z;pWh)J5A0JK<A#_Wx)}X3dMxkDpHdSyWI|!Wj%!~%fQim5&q0q1cXin$Iy7&aR2qW
z_O9Zq)y5|t!0r6J(;3T`?xg(#;H}Mq(P)Gq2p+n%em|xs#Dff9I?}RT>Z+*mIIF*+
z&l<Sw&=Ut&t{A^%RZ5#GRHc^X<YLff13?flbv#ETe-&O+q>)K!Qb}`*BC72)%shvR
zx|2P<_j+SI9#m##Y}meDd)<|?28^#CIF6HAKa5CqAE5LGWF$lha$&%RoA!2eSiZpG
zbb-A>rg#9QOBNC7a})K6Tl3RJ$!(|83E{&*ga*Bk02H7gVIB%Vg(D2lt+nXq2QciG
z!&;@-JhBHzR;NzQ)#=^^uU+T+%LlRZ8q|Sj0UsIQMZsxRqq}(%Ah>X%?e1d(T4>`v
zbNOGJSXrPe$v<`au*qZs@90GkN}-(Sl02Z`vPZ*Q8wYhn2y87)!qaDlR}G)PT=)x6
zkelms;MlQ#xm@n|>)+FQ!xk0&+D|zlUS{cGoR!(<^=0$IvthG9WEd1Tbe$Y^3;Rm;
z99<k3m{wU+Q#R<f)+bJ3XC*J3Q52?%h;FQU)l?iiZihI~gR0hk!=>-0^f8YqE+|Oe
zVK%dWYHR04l6iBI%Y1k?Q~&bK&32>d)MJxvXiUJrV%6j@!sMih7PD3Ot^EXpxKI0b
SNutC60000<MNUMnLSTYJqLuIf

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/CockpitEditor.png b/Kieker.WebGUI/src/main/webapp/img/icons/CockpitEditor.png
new file mode 100644
index 0000000000000000000000000000000000000000..89089ece36d97f143555d5ee32808b454b87e156
GIT binary patch
literal 789
zcmV+w1M2*VP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008qNkl<Zc-nQ6
zTS!xJ7{LGkb2fKX=W>+WG~3v6n|7fGnN%CiE)NE&Dcvt1JxNeK6g`wh7b+hD5qgNi
z9s(bt3uU2(4t;0@#hja)jHNSWx;d7(?d)vltnWy|)b+vtaQH62?}`z~=;)|0lgVth
zTCLM4k4#NXVIGgyNRs5CL?YqWYPFrKHq3pTPUmhg^p%&FpH-{XgX;moVDPnAEIvuo
z^h`V+uh;2xlWPF~vYY~^M-vkhJ1rJVbXD*3`79ENWSGzAqevuTHJMEIKp;>IrcWA;
zW-rdoG%_+$%P>qwI2=CS($W&=bY8Fb8~}Q<*(`zz9PmyHg~FGqRI0{cFqGi+<qi!E
z9e{aUTUuIb2BF+;w-Eqt03(bsA_xL;|MT<ny>)eUCpG{$vD@v(mY0{g%xx-_>J1Ff
z3Yl|*gJ8EbG&D@*1#seUINBlOJ-J+7oJ=M&zovudG0HNTbee?<`&L`b3-J5>3UKPD
zlGHAOB#<-0eEvg78{4hA)Oz0y0I%1llu9K73kzXmDn+5;Sw0HzRY)l#-lJ@``Hpo9
z^Irf=d@CHxSDH?13k#*_`%l-0TlVxqQK_O$zfFOZ3dt*I<HCKLD!T#T^ZN7zNe-mb
z=?X3ww(w&z5Zr(L-7FQMaBo$$u~}ca36&|NT@UM(m)8KG=PFq9AOx3)L_#r4{C6}O
ztu>p?bDUk;`mCTpAo^Hk(jVj?3YqxslOyWeD*#vt31>XUGHeefZ~`X&AQTGiv)OFU
z-1bDR&m{t3!GOuAH|r|psI;W;O6TFSr+9I3(GZKpJaDQZilPML<Kt(Vnwt9ZZD-G=
zF4+uSWY-zC@2ECZ#)_nZ3hZ*Z2snx_aH=&PkLN9v{ta5-fj=)NmW9XAET-oYeA!q=
zbF*40xcK7g(f*Ygba!_XkX;P-Eo50%05BdL(Ha2gxb@KtB2o#4j6d$UL34(`AEIAR
TWf-c+00000NkvXXu0mjfD5Y$f

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/GridDisabled.png b/Kieker.WebGUI/src/main/webapp/img/icons/GridDisabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..c39a62f447089f3c7c95bce9a1d69152d7c95cc3
GIT binary patch
literal 898
zcmV-|1AY97P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80009?Nkl<Zc-p;}
zJ4{+p7{@O*CUtaTVQ_GCG@K?~-HiiF!$i^nA3PNwNmHZvK%)X_I*@c|7qJ8kL2+<!
zW#I@RzTzW9qp5>2lKAFAzwe~SQ187$FW!F1336@@-|zmv$NAI=e=HV@nL9c<zBhmg
zD(&Inp?G$7W^Ze2`&#Q69sgrwWW+x{K5kdzxLhs^q9_W*Vo|ufyetER&1f`!`B#7d
z0NB(3lu9M$9M{dwjc|2!RX#pG{s@YGs~KQ;csStodQ}17+dn=&GJw0gJE5tmNdOhZ
zy}dn4XJ_Y+{|12T`ubYX>-9{D)6-LNcX!v))zzg4@dPk5G!&San5Y{7<QEJE1Ir79
zI5{~Hx3{+~CX-1P;t61Ia4;}AIjK4a&^c6raB*=Vw6wIaeGUQnAZ9Wdi`i_JK)eb7
zI>PuP1jL>Ju^-pz*urOpLP1QY)8^jZ-moly$KzoDc%U8?_~JmgkAP@vYip_V^Yizk
zqoXAWz`(#jU}|bgH2{aeFz}MZ+~8^;#Ky)3&1SR2=kpa60aSahfZ)z?p<^B*4gg9^
z0s8y<>sEjpcZx7v0R&iIU#FX!n*_>T9sqNoj;r8BAXEc#fPxX|xKaSO+szcv0)U4i
znM_hBM=~}xCIxW0T(1^_=Wox$fB={SiU9SLVKwKK0J0%)I-Rdl1xn5<0c4X90n~QF
zTAZV;tgO&nE=S<bkpegzj=B}#<;OeUb4w%=3_!LI*zI-(pmeyJ<H}DZi^t=1Yio;u
zA9(-_0ZLbEB3652B>>r0Y_r)I0Cp_)pbCT<rIweM>CVm$nVFf92f%@Z1889|c~h8>
z$n5N_JOGYlc!g?Z(P)&yoJi*8=A-~HD6kOVb*hy`A`!a3zfb1p=j8z~1X?Pvw6sJI
z4i3n|!h$@2)*%Ro!}Rd*kof(6DL_w84+GFL1dEG{^yuh_1cN~-KzDaH1GvAx*AxJ&
zAQTEo0jySQV0wDmc6)pK*CC~Pf4*O>FW^i70O?dJ^$z-h6ri=W^+R7@-{;20#)irc
z$1j$bzE|7lYjt(?C;Zp+2__@yRNUU){uUC%029$0J{8sa_O<K-T)DZq`By%lFH}DJ
Y4fIs*Khyt6djJ3c07*qoM6N<$g4v^)sQ>@~

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/GridDisabledSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/GridDisabledSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ddf3bf9c96c5e53d5531866cfef0766fbb5b39f
GIT binary patch
literal 471
zcmV;|0Vw{7P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004=Nkl<Zc-oEA
zJ8QyF6ae6x&0pXYce}bc_`*m2fkS^qX{Y{(4$>O&5k*819DJdo#$B$HAc~6Uls20V
z4hm{+?}JEcqvXKNg(T<WoO2Tn;1~{vvdiTXz@0ds&qz^}cc;_&ar=xTm%(5FL!pq{
zEEypLj>jX|@Aqi4*}Qo?p3i@PEXyz)4x0j+rh&uZKzF>*cszc^?|xYZ^a{4yEwI^a
zv=WTGM59sh3iSJZ7>Pto0TP$Xg;qfpo(EX3*Wblr(UHw&5e0g^-a|ld<#akxY_(dc
zsZ@%WBuS${x7&q+AUp(&EiD!cH6D-inM{TOoleIRK$1x%qyhq5D`>adcZYb}20;iQ
ziXxxO<rvUvwH}^=o~*}mxl|L01fS368PIGtVK5k^0LO8E67}5}^Z8s&CX;-jP+&l#
z(SUxx-_j6`K&ez>K)qgvKA+DrFq_TPbUMwK%Vh@CYBlKfdMyLf>68MMN`(Q{Y8B$2
z#BJ8E*&HU5$xkd6bKozS0f9i^*>1N#kr(x|Htx6gce|Z38jU29`wLP+C?M`c*^mGL
N002ovPDHLkV1gM;)J*^Y

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/GridEnabled.png b/Kieker.WebGUI/src/main/webapp/img/icons/GridEnabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..3df73e6c43482f389dd45ea1477495103959df85
GIT binary patch
literal 1270
zcmV<S1PS|zP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000ENNkl<Zc-pm>
zNk}Y57=TOXx#5QUf{F((d3co9dF1LbARfGgAqOD`w;A^hLd1Q+Wh4Y5BoHrZL`B>V
z9=r;{RuMN`a2=hvG3vO?Oi#c6FQz)}bdS!AFFzF3UDnk9^}p4xA92d~__#JZJNqwx
z5aOd)tya6yXw+wBX8z{sZ~WLpeSLjjQ&W@P7sa9|5<w7%-EJp0H#g#`(Wv7-efrf~
z00RK%d;xGc98@`uhldAZHk-wxqobd|qJMY{P*+!HXl`z%0HYQ{{uS8i_=(P0K4fbm
ze7#_`!LXAblb%RONC*K}2;1A+`8hc`gI)s^UJ+tq0D@By&UWW4UxOjq1R?@}<Jm@j
z|7alz2?^8^r>CdF*49>jZf@@2n*g=7wT70K77FmaiI9J+&aY&O)rRwLq7@!MIeD@X
z{<E2+q@>WeK#1exV_{=sBR?-MZ}3%snwlCzYilb7sJO6`4abN7EC9m}hkx)7kQ6)Y
z0)6%uHSq2rA^=$LAIP8Im`QqiI{hhwfOrsAR#x)0TJ4}m02db*BrY!Q#m2L<Gm?~)
zB)#9=-O)KbJe(@R06aN4q1k{zNe}n)qw6@|-rfpJOH10~;^JXdfa>aM3V@rv1)#AC
zO2OPDCMJg1Y&NPG=gZ4W5)~Ci_sq@BEt*WG?;08!914J{swzWUTN?!clhH_)3*@(S
z5X#fj6P<&DgQd0W>uVAg7AB=6TI2EYkt8Q4Q!6bjEbyzVt6WD%hutjzJ|lH(Z0rkw
z^Ye3(n3yQN-{0TU85PR+#K*@=%5mUX(b3U#jRAnAl>n8Mm68QKae*2D+k;<=1KomW
zp<57Oetw=`US8%P-PHjw2Jk94JUk?Ufq^dopt_OB$Vln^`T3d7K|w)o_n^T2K+@9E
zs5Kx4cn}UMt`eZ4qJmlg0p4o?x!_so0<_5N>?{xI$Tc=LDgnyN%Ow}QCkEtu<NzoL
zfHB|}fTba3fvXE3k4Z#C#H%iF-GhQzfG&^&sJfu6tn8~~0o%iZP<|EzPz^!^V3qK_
z08BZ`)zuZv0+i|LX?|^Oje|Q!2~b*EDp>%tKyF$T*9ccDM7W1lM!Bn)3#O)~D1d4m
z(ChUS0O`H80R9FAv%ob7<!4P!PV(#P>m2A&2S68~>9C|Sv%Lm@ibF#~B><@Nv=@+z
z+yx9kwG``gItqXl3ojK{7q~_^bHQ6#fQ2YEHI+V3Oib{bo10u`XQw&<HY5ljr)J{%
zb!tKQmIa{m=AlF4y1Kg50k9>*E7TJJi^W1`bb+S;V`F1H^od+|cefG%8U^YCG#NG)
zU#k$|dDx<%jE;`-J3BjEPfw3J0J^|a3;5!Kk&zL8cXyZT?d??u@Wutc01OWg^Lu-H
zTwh<G5}>H4hytL=u=`=D#RS0u0s^FWyk1c>8jagMQ~}&AtdklV8shi&_qqQ5ekDL*
zVIc)zzWqN00Wb>&1_qP>1qB6$_V#ui-d=KXwS>EMcl+cP1AwK)#l>%-9w-4aGBSQB
zDJl5{Oz6*ADtT-5+WTAUY|PBe{0%YkGjvAEt~e_zD;NSK1v(-P`w!jIulHmf;6#Xp
g^MiwfTlwF<0F!tOT{wRjaR2}S07*qoM6N<$f;Rs>UH||9

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/GridEnabledSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/GridEnabledSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..a24f021ddb43517639631603f5d23b9b89a6ce0b
GIT binary patch
literal 592
zcmV-W0<ZmvP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006PNkl<Zc-n=N
zNsAgm6vs;^&?+8s@(_Bi!9Xsq?Gg}1a?8=fe2S2q@)ZI(NTTA7h$47!L&fbfCn*m>
z@vcPBj5jBaOS^TYsyf{mb&?0KU%y&@_5S^;6#!ei-EJC<#<$=J+wb>iJRX12>-Aqw
z=M?18YPH~N*A4e$j}wGlICccKYaYD3dPKwF@T1e|{CWmxHk<Il=H@>C!pRQ%=8tbN
zj~4)XT!TBO00com-EQ}T+wJ~#26$n6!+l2#J$19<0rN~H#w!LaALiiQ^94|;RA4@z
zqh7D~-sAE3Wk93RfE+fZQc0<+)e2}d8aXZ&3!qRa0MGMayWN86bUI0;QrEFq3{gP6
zUWX2cgCmQHkqug{_OD3hcDo&Y#~<`Q6biA?XjGtpTCE0cHXA4Dl1^T)*FddS%Q-QG
z5SUCR_dcJGjYJ|Mpjxd`04ej51Syiuhr@wLpa8joN~HqrcKbgikchiLVMK!8?`Pxj
zxCkhh%g}1IK3TzXxujB#B?JNiHjzk(fKsUhEf$LmIMz;DC*=}=R1gdX*<>;)0*b{V
zG@H%;l^|6&8jUC*olc8@LZJW+2E)Y)j=LdMKmg%zn9XD|A|Rj7LzBrQw{f%C0ES`C
zqGW@?fC94FtO&^EauEL{9HC#b)A4@4|I_RBUgH}q0$eWFtxl(VMHUh#?K+O9<Fnap
e-05_pWbbd^O@$zRSdE4N0000<MNUMnLSTa1&I^zL

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Home.png b/Kieker.WebGUI/src/main/webapp/img/icons/Home.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e7d58db9a686cf07c74b6419fc68138d547d37c
GIT binary patch
literal 779
zcmV+m1N8ifP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008gNkl<Zc-nna
zZAepL7(MsiZLPV@nw#@ufo5xcO`#M^(NQK+A(kN{s6>rIE2DlCL=uI6D(sIzn3{?P
zsg+VBk{=mGU?NRjDoN?YZMtkaU2eMVu2&5yHJ{6Uf1Puluk%n?C4y4k(+qdr7BA~j
zfTGFAnpltP>quR^XE~Pom-sfAFOpx4RtKEetrE+EBs3_37@hE<v)^X@q_@;Mri^z+
z>JtW62>2y6Xf>MHM;S>Xv5=1i;(8vy(16_uc)fsQ7N~5o&$P6)U$neVe7qzej;~5h
zO-rje9K~g5LSPs`6#yvZ08J1><BLgLq=9Y&(Aw?sKCOO{G1;oEp!gAazB@H%2eOib
zWgHG5^9ACRfW&9zY$j)b+77_&2CAB@Q$1~EN{Sy@ka;@$a%mXJ7^ecFLKe$jE#}+M
z8-b=Tz~C5AUR-j85@|{cPiAFYhzw<s5&IwJvUsUui3p9VvdT(Il2}$65}%$a-{`>(
zKPT>KebyuwG&;~cz=6fa#ZcSB=aeMjL9sF^=ZsK9)+hxkj<22l`WvAAJMe27_||y8
zhGJB?dGWb-Z}SB_D2PDOk+lVGwgDZ)1#?apJ`~+5px_s~XIpxCyL#_tMkoMoM7kgo
zGsFiJG2x#*&p%{<P8W;(k2DNF$=^Th)fJyRKtZTtsNj?*2hU&9s?=l^@IdavBG8wD
zl#GM;7!wZSMmu1hB3^JY7&VOJU3p1^t*`Frq7#K%{RQgm`WWr8eVQ15Y?ARICDjCp
z0hR@fq~CGk0kd@$I{i5G%}u)D*23f&)8~;TD>LFysW@zZzVcAcsqkIFg76R#6cYYI
z?Pl8?2FC0#7=O(6zACCVb+ufZHujFLI3}(rkYPBS?NViAT7W7dTB=aUd0d*ZTg?`8
ze^-a8uk#t}_Vi4T4Y^mn#=nCn+(7Pv=FSh(%d#%#^n_<M+;0LL1U4E^JVO8g002ov
JPDHLkV1l{lWP<<z

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ImportProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/ImportProject.png
new file mode 100644
index 0000000000000000000000000000000000000000..1279be4f8df032f4f93395f70ef9fa87fd001920
GIT binary patch
literal 759
zcmV<T0to$yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008MNkl<Zc-m!?
zUr1A76u{5@w|Vb2r&p1Iq(lZ~WdHQ$LoY2Ke3F7aCG=qQ&`TN#AsIyYkVu<2U$mGA
zk;>J|(Rz>wbquzLAP^S#(x4@lju2~`clW!ubMJJ2+6Ra4`_6aH?>pyw-=UynBoc{c
zQ4|@LWi?|@2w`<yw^I~VkK#f(hWn;?JpNviq>y1l9XSsVKb8guA4CluP1C?I3>b6i
z8UdzlFc@5!o}TUwg+h7((B0j0V`1U-8vqUP7S!k^u~A^LaA37sP0;f4@+Ys?+qJ&F
zUIcV@Uh~W^EXusVgGzMJG#zyP$Q?jc|A4E(fgp<s@cDdQ;c&PJkS@DDb90L_!&yxL
zITV#(EfAL8Pr;c}A_#(Dq+kLfkw_8HA-O$IpUuk6O-{TW4xJIA<{<~^9cXK<1D@wi
z!1(xhS2P+e0@^#=p1TiU%7UGTlTAW-1O_Ct4Q;3E%m`*?W`dKGlh-#lH;aHv2)Hv8
zkQ2K)NUaX2cd%su>R=mMPdH$8b#-H4V4ydZN^O)q<3$AYJ(`ub{!&<J3R+xNa8<K~
zH0%}~8XbG!^N#wbrl#%{-{){#Xm@*VJ$WVnRvG*Vc{R^cP%qFR;0y?%GrwR(9-9aR
z0{s<$^B6(z$h@4TxdK4P>T5&;O(8&IBn{e6hz6hg*Vfkh@z?5QfO81AIl3rw78V#f
ze}KNAAS9<~Kn@6q*&h&lJLbna^e2<a{{dG$ecmP6Ze@XE@;U>6evroSGYY1#6({ff
z_lIJ!*jPmh$6L<2dxl=j3W7y-@*Kx96hm~1O6LG}Gek}9DcNt~5Am-{Be!!oWv2ol
z*wBq-uh^Ypqs>uU!#kW#-d<bH*=lUS*Vxo5vFiKhkC9a3%S2{>SE~RN6gaR4jK(u6
pL1SYvxW=}|%vdf>R3%$#{}0+zOdvRkjx_)P002ovPDHLkV1k&zQpW%Q

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Logout.png b/Kieker.WebGUI/src/main/webapp/img/icons/Logout.png
new file mode 100644
index 0000000000000000000000000000000000000000..099e1fbc1341adfbc2a09d6f7e297f4dffb81143
GIT binary patch
literal 954
zcmV;r14aCaP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000AlNkl<Zc-muR
zzyZSZI~CHCV)p+1^Y_Q%<trQ(^_0EFrj8Mp0s7wQu?58yi$Dt6TI=0z?On8+paFZ%
zKIC9vVwP|*lzE`<of@B%Te*M{sAOh;lShb`^IbD5dz&wxKW_?m(t3wsz{KVIEKT&a
zR&a50$gSV7A#dBE)1N}p$`&v(GBV6)$n-8QsqPgJlhI&f{QK(ajoYz}scyUA285JO
zGl~fGKFH6@#ly_Z#L(0+aqg$jZ;u3I*3AF&pMhaoo}a%(c+Hd`XCv8PzyC6P|Nism
zuKkC+xA&#)Wi;^1V)h7#Ja4M2s{0RUUfYsm?=P;XOV+cp;qxzOU-0qQe};{XiC*__
z-IZ1Ht!&8*wiIRf_n+a?oyU*&Zd<RxXb@cFlAB+=o0XNBVb%T{pSH9|M=&$|*`@Cu
z8slBow}63>iD5%iy2thX8~6PA&tzkhJ8zAfm6piq`yUyOZe145=#bP<6B3)+%*f2l
zP*s@U^Xb;1ivORV|CKQI2}y6Cx%%JVfB$D!CfU8Xu=@xj2R{?9vQ<S=!<5!zcRw&Z
zIk9Onqg{MWyH9LZ1rrMk!<5Qo^9RQ_p8|yohkyjXki2^Szdygee}46J>ettgzJbJr
zRE(7Ds#e{7^YJ^w<3lSKFzN)CwuYt`SFy9RGMwADHfdF3+I)BvF*Ab$`TyU)|6yVd
znXSG8meHHOe*M94Z`Z;(i~{<8$+68d=Lqw2Ffjl5_Uz;1>y|wUE|0J!n*6!DMSt?j
z9{Kp6R}B~w4CfZqS2D5+NXt3bth%70uOrCM%fTSV@$b0|+mA9yLC#fHk{rK48u#9L
z%kt{$f4>Lc*?OLQ{;&Au%MXTcuU~xM-WX=e$igei#3!d;5z#WgMMPGTQJ9OFL7ba`
zL6-af7XjA)H~#$l|NqqwCbe518Tns)`OEO-%TES|uOAsUb`|u#ymq1j>_=8!5gu_J
z`}UyX_6!3Zc@|NAHU?2H1_mBB28J&{H@pG{-^(vRec%5uynXfJ-^NLeOYR)mlK<`9
zix2Rm%*HLi#VsruZW5YR;Oy<AqbkMEBmp$&?|(*y4?q4gy#M^;-@!e*Zta}gKjq!i
z`-{GReD@h6GcmJq0Qvt#Ik@?ZWi|CJM5UyqSXr1EKfHSW;=#2`r#`=bcN!QoFMoae
c@(-p50P|^fo!raHwg3PC07*qoM6N<$f(@Mc+5i9m

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibraries.png b/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibraries.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f06b149360c48b1aeada49f841fcf87db0c20fd
GIT binary patch
literal 914
zcmV;D18w|?P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000A7Nkl<Zc-l=;
zYiJy06g}U}WcHbvJlZYU#x>Z|)-*BI5^FWCCYXg5yV#frR>4A;#fpfiNc>Y{i&~^=
zE!fBqMFPbi7O~KFZPh}F{u0#SBcWZJu4#5jVz$}5HuL<vvn$0rocV?s&bjxTxeQbf
zKKa>5bMJv<P!SOf0RcbYmjPJ<I0sA{STljuRbV0q%un6K-=ib1O{L!)W|7T%#g^`Y
z$;PgZJHpjKh)_!+bpaBp0$dVUCUSwubBn-i0VvL|VdCuZGuiWp`&d)kv$0LdcW<cM
zH!@WvG9gN62m>lj;*h{Rk#kExzDQ&b3&7-$=Vq42PB*f99~<c1_4L4({)mDg5kdro
zx+`>seSjpA2-&oG1)e2NFJ^CKaQ4&p+gNnR3)-Fgj_5*Z0+IDKkZEk6#Nj$7EMo<J
zA48CYJOq4|Y}RjxfD1Oh_~7jX+t8ZQwk8kj*5y9L<8d&?s2`(F9Ajg@!f{-9uLMCr
zp-@0RpGV(wFQFm67iUhqMFK4;t$F{T-W~WH9UUD|DTw;|df2v&TrLMyQBhl02Q}ow
z_3>Zu-iaY}?eE8=FNSlcNFYK2t-VL}4|`_N)YJq~6mP>dmSL|fz+5T7S}npR{5+9`
zd{-yZQxd)#CV_R^Q`#d3kLk$=B=qg9@`eW^|D52OC9>j{?Z7+fvbcm|RTL+`xrX%c
zkp!!6PHDRiyrb{g>EM~xBFy<o2%<!uNsN3~@^I<oWg*vbFs<&!P&$LlBS#agZd*!g
z+xN2Gv)jcJcdvoZ{YgX#<?=dLs5FsHL%0y-0Io`H_~gnh{Pgul30AW;rETguq(A;p
z0R8O-O5^GB1YS4pSa2)@+%`#+a`A;A5w2D3z{ybuzg-+kFl9?hi^UJ=$%n&u{{BTQ
z{eA(A+c4L)ptd?x_C7b0hy70mhUFq_N0E`+@k7SO`1hw0ta@|5wr$Vrde5U_ME$qW
z-Eb4;;tcIR$BIykStE$)1s5f;hL%T$At_LTGQJv}!qrR1Da6M6Hg<M)4ZiW}!KW<K
zw8N4mmevdxKE+QVGH<aQD%*Ap@0q|E6XX|P89a79``5?b+MywKPYgn!y^{KW#c$ur
oe*)}(pIny<eEHky>>o@20*2jadLKRM@&Et;07*qoM6N<$f^HAFkN^Mx

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/NewProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/NewProject.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ddf3bf9c96c5e53d5531866cfef0766fbb5b39f
GIT binary patch
literal 471
zcmV;|0Vw{7P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004=Nkl<Zc-oEA
zJ8QyF6ae6x&0pXYce}bc_`*m2fkS^qX{Y{(4$>O&5k*819DJdo#$B$HAc~6Uls20V
z4hm{+?}JEcqvXKNg(T<WoO2Tn;1~{vvdiTXz@0ds&qz^}cc;_&ar=xTm%(5FL!pq{
zEEypLj>jX|@Aqi4*}Qo?p3i@PEXyz)4x0j+rh&uZKzF>*cszc^?|xYZ^a{4yEwI^a
zv=WTGM59sh3iSJZ7>Pto0TP$Xg;qfpo(EX3*Wblr(UHw&5e0g^-a|ld<#akxY_(dc
zsZ@%WBuS${x7&q+AUp(&EiD!cH6D-inM{TOoleIRK$1x%qyhq5D`>adcZYb}20;iQ
ziXxxO<rvUvwH}^=o~*}mxl|L01fS368PIGtVK5k^0LO8E67}5}^Z8s&CX;-jP+&l#
z(SUxx-_j6`K&ez>K)qgvKA+DrFq_TPbUMwK%Vh@CYBlKfdMyLf>68MMN`(Q{Y8B$2
z#BJ8E*&HU5$xkd6bKozS0f9i^*>1N#kr(x|Htx6gce|Z38jU29`wLP+C?M`c*^mGL
N002ovPDHLkV1gM;)J*^Y

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Reload.png b/Kieker.WebGUI/src/main/webapp/img/icons/Reload.png
new file mode 100644
index 0000000000000000000000000000000000000000..494964cc71d2c52576356eaf6fb74f4c7f166990
GIT binary patch
literal 792
zcmV+z1LypSP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008tNkl<Zc-oDV
zdq|T}7{;IPbIWO#Zdit7rOkxWl#->CrC`#<(k_C{Ot2slvrG$R7+RX>DoN0!Fi;y>
zUZ_8eE|xPZF)S%1r>(+i^AcOGHK)6MoqbA%|JVx;=Wq`1?>y(_eJLyu)ft<j*7*uW
zJnMu~Z?ruP%WTp9drvI{sK^Mrd-8Hq0&HgJmCuZyJDP5)$Fw>7a@!~W3veS<Bul$g
zB?iOH9M~*SJdt*Ff9TsOmUc}n3`q8trJYF=gYOT}i^vH95!iECUPEM-JdTp3dTsIZ
z<gJ;sI?A`_^p4F36zqj8Nd)m?HvwF?T>!PzhdsCGhneeFr6E*tysPxQq$tz$Q^}}R
zUp^W2KU$}W%r>S?lr^B)9l+h{M4O{x18^u><hFqyo=Y4!uuf|3lonBW(a66j$(DfQ
zJY$cQ87BRpZFF?_<FI<PwYyK<QrG^w^GJ}jAtn8IIJheSD}&1F+Is3#7><=mVyh@8
zPx42S>_9|gcD2JSm{iJfIRBgLN_RTyR^h>VP%gkP1uAMg8maw(*xZmE(8U#yzj2s3
z*<I4pnCgEAMUPfj{MtcyHh%eik!XDc3`)Q-i1K>WQ6WBXeRK|^d{1{CocRFH3E)yJ
zgqa$LMyX*Q_Ta^i5XV)*wa&gUX^1H+7(I|%j(jS3H8`b7=nV~mA9&<dN4q${B6`*d
z5oMjJjg2h!tqIV)g*EXuLfJm3Jb?$vF^FLS_E<t>-*bsLn5hZdL`0<j44uHWX4E$K
zAdv+W#^Fj<GO}$(K-)+1NWZxFlE=NtrQ0lEia1x1+I0bqJ$O^`5(nO^FwO!_N8)Hn
zJZgr9V9I`s5+4DC3BlOo!H1KhfaDV=76b5A1zlMis$MCPrx=0u?=0-vh`@qq$kQ8<
zGOoitoe?xmL+I~?h-EJDA)RYc>(D<i0=WYXl}f{YW^NjV9^j1W;Gv(w_l0I-e*6JX
W)F5xftF~AG0000<MNUMnLSTZ$26Siu

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Save.png b/Kieker.WebGUI/src/main/webapp/img/icons/Save.png
new file mode 100644
index 0000000000000000000000000000000000000000..76613eca1233548d23d83e418273aaf0c65b299e
GIT binary patch
literal 623
zcmV-#0+9WQP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006uNkl<Zc-o~?
zJ%}1n5T57%|4$SP<3T{HKsYc>Bt_uL7!W~76BJZbRMMF?LAWY*N+7k31RDu9C#VEL
zf*>}cWjKg}Xt40#)y=$@d*%Y^9GKm=J2T&Y^UW-QGmX%TR;!gLmC7e-wHhQ6$x#$V
zKo^e3qd?=wKPKQi7CRgc>-l^>Jpo9i(l?Pvr090L=@|$iAP5570nq~3@AvG!*=(TQ
zZXfIQ`U^a_7yuT$FBA$N0)YSn;2_*62r^(!0rL4g<Z`(bK7V3aDwXQ<_4Rcu7z~~O
zsB`1Rl+|vxgHR|0wOZ{XhTbs%qtW;^lgYeFBoZK(%ULmMabm#%Xd9Hl)zuXYhr=%z
zdQC8ySgqDhDwTRl0Tc?we;IHc7K;Uh!(nK(THo=VhhTxs;c)zjMxzf=NCqI2$xaNo
zkd*#*yM^_74cTlKDwWF5<#PFm;0QHNr}LNDY*yNAHZT|r4209CV7!0c%3v^n>2xZL
z$KwaYWHMb`US8gEddXyx6;XG&T>psL@AskEY{G0d1Ka}&^qAP~_GccCr%h=hC5Xjh
zP_0%$uh&C5oo1p^r-0pV7mCFqJJZ}=ulJHzESBe9ulE~{QbH-yT_}}GpwsCf9*?tR
zzF4Et2+HO1N!U)OlO(vla*all^!xo;WTW%>d{h@g86hYu<UW~9#73hbu2w77?#<23
zTfRsHM{<Eh8vLRZCm_4Oh4;2mz`VoVWJJ{E_V2!)^EaMjzX2Y#M|Qp#{cHdL002ov
JPDHLkV1h8I8lwOJ

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SaveAs.png b/Kieker.WebGUI/src/main/webapp/img/icons/SaveAs.png
new file mode 100644
index 0000000000000000000000000000000000000000..76613eca1233548d23d83e418273aaf0c65b299e
GIT binary patch
literal 623
zcmV-#0+9WQP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006uNkl<Zc-o~?
zJ%}1n5T57%|4$SP<3T{HKsYc>Bt_uL7!W~76BJZbRMMF?LAWY*N+7k31RDu9C#VEL
zf*>}cWjKg}Xt40#)y=$@d*%Y^9GKm=J2T&Y^UW-QGmX%TR;!gLmC7e-wHhQ6$x#$V
zKo^e3qd?=wKPKQi7CRgc>-l^>Jpo9i(l?Pvr090L=@|$iAP5570nq~3@AvG!*=(TQ
zZXfIQ`U^a_7yuT$FBA$N0)YSn;2_*62r^(!0rL4g<Z`(bK7V3aDwXQ<_4Rcu7z~~O
zsB`1Rl+|vxgHR|0wOZ{XhTbs%qtW;^lgYeFBoZK(%ULmMabm#%Xd9Hl)zuXYhr=%z
zdQC8ySgqDhDwTRl0Tc?we;IHc7K;Uh!(nK(THo=VhhTxs;c)zjMxzf=NCqI2$xaNo
zkd*#*yM^_74cTlKDwWF5<#PFm;0QHNr}LNDY*yNAHZT|r4209CV7!0c%3v^n>2xZL
z$KwaYWHMb`US8gEddXyx6;XG&T>psL@AskEY{G0d1Ka}&^qAP~_GccCr%h=hC5Xjh
zP_0%$uh&C5oo1p^r-0pV7mCFqJJZ}=ulJHzESBe9ulE~{QbH-yT_}}GpwsCf9*?tR
zzF4Et2+HO1N!U)OlO(vla*all^!xo;WTW%>d{h@g86hYu<UW~9#73hbu2w77?#<23
zTfRsHM{<Eh8vLRZCm_4Oh4;2mz`VoVWJJ{E_V2!)^EaMjzX2Y#M|Qp#{cHdL002ov
JPDHLkV1h8I8lwOJ

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFit.png b/Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFit.png
new file mode 100644
index 0000000000000000000000000000000000000000..e91690a13bc84413af70f84509c52b35b2a68daf
GIT binary patch
literal 1776
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
SP%(7?0000<MNUMnLSTXgCOU2a

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFitSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/ScaleToFitSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd2c924d9894f491c5622664a60b2f423167ee2f
GIT binary patch
literal 749
zcmV<J0uud+P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008CNkl<Zc-noF
zZ%7ki9LJyM+-|wpZqAmDJDIE(Z7RKRu^^}jCDIpyHlhf65jBbERr*2*ioiEk6cQOD
z!H~39zKQC^G*H{bnPEXT-HT}cTl=SZyY9B@?&-O6in!GezW3Zc_xwKh`##U_Ajrq~
z_&9+Ox`=Nt==FLAj|u!d0wL^oyWJxAM?mE=F)_IhA$i1Rvo%?**8DUAnG6Tw@%SW!
zpvmEIaQ^{J^g0~Qn?|D%K)Ce+Aw>v?q6k=a^Epk^*NOsy!6_3?jM?pW9Z70|EX!CZ
z4?$Qm;CVsfdEUt|bff?f3WZKrR8+pVSPpJY?5aSqp^Uj)7TaO3S5;L#D*(*Qd~CqJ
zM~y}b5Cnk*cK}KyvMgah4scwiqq^GmumCVUJzZ|K(yJ6jkqQ9sx+*0ZAqhwlQmw45
ztu)ux*1RjaiSzT{p3pRNL#x%ORc!m0BpFKr>+9*oR4Q5La=FB!fN(ghGZ>6RCX=a^
zBuS-!o#aF!f#&9BXJtuhY;E)WDhk++@b{JTRH>%Dgn+d;d6VOQ`{VJSL$O$Fa4GsD
zv$DF@-qX`FRRCzYKczchAW!NvAl`S?^?C1Cd_LciU@$ntFpRLgyxcr6Fc8=Q9KG|w
zU^9`y{d%%agK@FVZ1>xaW4HH0y1KgBu+?F+*(^k((PqEjuR@@^J9Op5VRQe3bBBP8
zH?HB)XHk?<S)jANpmn`oZ`;Dc!mvi8Q6Z5?BmmF!g)cWc%`ZAnS=2?BUM*!=mMeSh
zb@Ihp*W>Z1kaRjNB$LUr@YZ0UwA@}ZT3<~a7iEAxeObJxi+z1e<r2!@sl`QMW9U!*
zXmcAI8(D0nWo&HpC2sq>u=lC25|`ejE3?$g0!IR#%@RaO30|(<bxOD|p#s5ufOrgI
fQ>hd$2*R7cy}nz<*U#iF00000NkvXXu0mjfk1}aA

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Settings.png b/Kieker.WebGUI/src/main/webapp/img/icons/Settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3ef615d92c514dd66527d3161d54753fa8698ba
GIT binary patch
literal 927
zcmV;Q17Q4#P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000AKNkl<Zc-nQ7
zc}x>o9LIk%ZKs!|LrcX<-Jn1%qCizJ;%YXa5#mL##Fil76^rg_uo{((A{*EEhwExk
z6OVYsgG2=rBI>fK8#R#)D4rD$M2gS~J)kq~l<7=smxQLq_4CI|Uh>W7z4v|ZArJ*t
zXpYUuPN~C#Zi;XX8oj(9@&dG<>HKqs8NLJZ-;ip0i?b}VGC&M=;o9VT2bU?Kv300B
zR>~8pl%n{Wokt9gJEr>Y3S>V&zjCH(y5VWJpP7*;;C2o8;gzKy0&EDzC&Yo5;gM}^
zJ;x}D64>57+etR9qrVa$`oAoh^U_kQ3nqg3g%ch&JpweyL{{M_;vqXX1G@Y|XsNB*
z0#A?DMFhCMCDG%wotv-E|EWAj0Y}e1^!1z1H3xjd?*({*MwwZ#NGOqtgFFnJlhdHD
z`TAjB!)jARFs}0Pwcj?*)Csu&!4N==am_Yw*W)9U{Y40iO+k1Pg=R`#<$2}woa_<4
z5c))lAYmPN<b8H;1KC*m8bQk*{JU~RdUirAACltu&{$u8$b7)CBf6;ZvkmgpLQ|_O
zacc4aUkq-F0c*p>i{#Dq<p{F;>TOUZ<zsvv{Hjj}#!nLM=G$4#wfZ;F60PxkiF$F_
zWnXxwAKvu^IuDmuu%FCV5F~k3F2Y4~VRl7jY4KcH)?^8|TyE=Un_YLpFs*G&uwYk%
za#BuVKSzjw)8!4kY`SUcxl~$*j0Jw&-_c&QG;<b)hPw#Q{Y;3Zh~Y+|P}Cd()Z=gy
z^SCj16~!Q6AEsfL42JISDVj1WkgU3!2CDd%Wd$1WkbbZalCUgm0>lV7fQA!n*f_!h
zkl~xP^b&C4&Kr=?&H>`qZuO`@kW;N;Gz(k#I4)(pBaA?daZ@LXVUKR=sK7zc;o?{j
zi3QNvN5S#4EsnrHzprI%ZB3CQ2+~(C0jcU2_U)~`Qq97$ImJd}O>qi`6Hc7`y9aDT
zG-%avAeT$vkFA?(t@lswi@d}!P*EH==yNdY75k8x`6Zw8GUN&gh6bxm+mFxDZ7#uL
zaJl74$H&(V`xlYD9q+#pM58<Sz>=j^Yi^u6bhWp$y+W3#HE{V@QFr^@y&h}F^RNEG
z{~=YSNtpnhgz<PE-JdM3aY_wBdxuckV`rmtUjR@8WE)_+($D|^002ovPDHLkV1oIL
Bzy|;T

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabled.png b/Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..2edea5e0e0ae8f57384446794bd4351474c9d2ca
GIT binary patch
literal 1620
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
SHw4B20000<MNUMnLSTZCDFhV&

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabledSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/SnapDisabledSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5416ea6efbd3c3108899c23aec5fffd13a292c9
GIT binary patch
literal 685
zcmV;e0#f~nP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007XNkl<Zc-muR
zzycO5Sm36lq?G;f<45i9-@h|TOH1GQ^5x4ycX#(y=xQ0!1*T7*ULFw<(SHB_{Vzw4
z9=-kd@85sM#>OhTy1D`f4<4N9@9&?1(}1wBFrDh^>hnN_XFEGP6Tf}?cK^?xKmXa;
z*(KA`(k5kQX8Lw?ba+plI&~XX12Qr)T2oU~E7Q}{P0yS;a~4@nO-)T2=(Ss`fuO&?
zKLM)&K#8fYuC6JGiHSm|PoMsZW&q3N$&>G127;235+9rfI5;?@02K)B-MbgX04FCW
zmg3^#JNNG0yPBJu>y2SROG}Hfj*d>Bva+)E#fuk<EiEm7@$m34u&}T&FflPP0L7RD
z1qGWvefsna7{Ix4ad8Jw3;>4ws@mGxP;PE+um%ne4hB|MRxkz`!pzJJRtGeQVaJXg
zr+_ZB*uQ`Of4BjWk&$aAOqdY-|Nno6pFe*xu(7d$G0YH<0gQ}{3@1*UU;xI_>22G#
znIAiL3}HZQZ0wr0wzgo9?Z1BgVgN=RTr<o75IA}ABnY40v}u$1kt0VC1^`2TO-)Tr
zFi0`X0GJDqy>RN(DUdf#uU)&={P5w!2m^o#WldpWVK7J&F!7+c0NH?Z=gu))zkdDn
ziWMu&4;?y$Fd!!<XALkB1%osKlP^3BK$?*a044*5J9qA!Ub=Lt`GErm5C#C_cujP4
zbTCLEC?L@d0EG<*+`4s(;lYCkrxz|<XpRyK6%`e0LPA1<K_Lyo=>CVf;OWz+40rF|
zJw0jCBy(V3A`DPeR16Ri5wQemgasfBgEas9_YWL4zkmN`c=P7XbzpQZ0O<n&A8{QZ
T(Hq&-00000NkvXXu0mjfrS~nG

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabled.png b/Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..e263e16486b028c3d2e13cac5c081f68f4b4ffd9
GIT binary patch
literal 1611
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
JPDHLkV1i2@^>hFL

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabledSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/SnapEnabledSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f177f48f4a88e51e8542727e86e22a99ef32856
GIT binary patch
literal 701
zcmV;u0z&<XP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007nNkl<Zc-muR
zKm$EJJ&e-Q(kY6HirFkIEZRSR{$vEwH@|=XzVO+zXZ=x8QNNMZGol-?V8MdPfq{WJ
zhYufqdf>o;bASK-{bz1&uIuXRs&ww$xh+SI9Pw{#Z2X7Sfbj5ei>j)sW2;xM-VQV<
z`RmuOum1e`!@$A8A>ild*I8d*pVHCM5jAbvwB=Y0$j!~|N=!^FPD@MEI&<dCO=LMW
zH8qjBbLZaMv}x0p?(Xg=tOoS;^-Xnib4!Vjj~6<7_Uu<=Idye)mPwN)-MxDC>Xo9R
zB5$k)L_|d9Dl02_?A^OJ<iv>+-;w1kEiGB<>gpanc<|sxW@e@nh5-!?4f4N!{Zjq?
z`!|Dyg$1*LfdLa27Z(FC1{j!_m>3QnI>am~DLMDuyLS&?zI+)E^y+mK0}>JvR+N^O
zhI4asgEavIj)9ex70d=<W@cuvx*IocFl^nr^+b7jxh0ALk&%&WCQO(R3}XNI@q>Yl
zjSY-JhJY~007gbehLa~xGVI^K|Md3l+s%(1JN6%LKx}O6nzpvKV30y!;$dKCXNMaA
za{<TzVAy~RISq^rb6}c47y$IsnwpxLV2}n-I3T+K*$bynpJq6J{`~26>(-eA6C1(+
zVBD`MEG!HL*$hfNFayxT0GJvXu3fu!dgaQM=D>hO7?7Qvy(T?9Js70v-@kt-{)fc`
z$P1S)U1GR>`}XOjOP87-Ja`acKyh*Ln&{~0V36Yf|NmnIAj}0fZ{B3MfB*jJg$oy&
z1M>>PfXd3sH30zu!5~{e7?%MLA3kJw^ytxPV17W21#NBZRA3f%0cpS%g&<b}b0#=^
jo;-PSao4V0Z6JLBQpy`3q@6G&00000NkvXXu0mjfB|k;9

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/UserGuide.png b/Kieker.WebGUI/src/main/webapp/img/icons/UserGuide.png
new file mode 100644
index 0000000000000000000000000000000000000000..abe5d5dab5305320c447e6e6bf0dd8692896a453
GIT binary patch
literal 801
zcmV++1K#|JP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0008$Nkl<Zc-obc
zNobQn7>1wulO}DGw$U!crP3G|#54_7#Z=LQ(yCC@iqeA@af^py5tkkm5!{Qo)Ey5h
zs7TdARa~Hmd#y`s-A!FE#ie!mTTIf%CUFvKv?z!#%<#<&-!tF$&Io?fZ6QiTB(g{k
zP6bj_`1BO6cwlEGT;(qk(WxGigb+u~7R!vRvN9Mkg0Rtu;`0%ztD~u^DtyH2-T4fb
zpM|bJ0C(WDwV+@|+L|@^0s#`8P7<=R2+5e17L@1Dd0kP#2Df|5W2mTuNE~nrO8RGJ
zp6a)DEq=L?>~bNzUU0h!<>a8r%Y$pzh%_{CWA*B;Wvc4D4R_-Jxwz;kDk{|3?F1bT
zbfu+GDLelBnRcCy)OG6!*VOQR>sHzt8!1=S12@3+wz~?^0PVI(lTwtVBuGdAvl(Os
z-=guVRTykG{Nu(EuCI^XxC0*Sf-xVVGX{7lNyDvHgrdZa@yq1Mi4!Cb8icxgKP^qo
zBz^RfcA<ttfk4xGaI}Ii2DlEbPK_o*bSH=9XrDeEQ*|{DpS+_{n~vU~p-Xz-&*SF&
z>?wEmwW;IPNH`D!?1hu_6lJDXh<F8E(u?+khdGyMCD*Da7>wYTWQ`WiZ`yqB%<&`B
z9($gJVgUK-;};tYmxraL#e4W_vEW&`kyrLH4Ct*vrxO@;pvX&J-hc9FYX0!t9{*q|
zY%9;nDbLQxh;4Qh7xQM0i+h+zH)-hKOQDxcPLBSWn~fKX#^z1#0hj>Vfv|o-cJ|WT
zAw#rAgMkinAI_94B6YN#z9xlC3HaXnmD-w1m2>BpuIK@XYM6`@A%7?=uo;b`Q}ue|
z8?9dLoLkmbFtyO4_=C;9=H}X=S-x2VzU)zh9i7F4T@C6l=em_HK|zomqm{;oO&R9k
z`%fQ2KhIxO&)S}C8@c4&^<#Iw`6GpY0RE->`zH!rifP|K$Eby#+UolM21Ipb+eD#H
f?OpZCZ_ob$XX*f>&YR7t00000NkvXXu0mjfNZgAR

literal 0
HcmV?d00001

-- 
GitLab