Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/connector/ConnectorServlet.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/connector/ConnectorServlet.java	(revision 2222)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/connector/ConnectorServlet.java	(revision 2223)
@@ -34,4 +34,5 @@
 import net.fckeditor.handlers.ConnectorHandler;
 import net.fckeditor.handlers.ExtensionsHandler;
+import net.fckeditor.handlers.LocaleResolverHandler;
 import net.fckeditor.handlers.RequestCycleHandler;
 import net.fckeditor.handlers.ResourceTypeHandler;
@@ -115,13 +116,14 @@
 
 		XmlResponse xr;
+		LocaleResolverHandler lrh = new LocaleResolverHandler(request);
 
 		if (!RequestCycleHandler.isEnabledForFileBrowsing(request))
-			xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.NOT_AUTHORIZED_FOR_BROWSING);
+			xr = new XmlResponse(XmlResponse.EN_ERROR, lrh.getString("message.connector.fileBrowsing.disabled"));
 		else if (!CommandHandler.isValidForGet(commandStr))
-			xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_COMMAND);
+			xr = new XmlResponse(XmlResponse.EN_ERROR, lrh.getString("message.connector.invalid_command_specified"));
 		else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
-			xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_TYPE);
+			xr = new XmlResponse(XmlResponse.EN_ERROR, lrh.getString("message.connector.invalid_type_specified"));
 		else if (!UtilsFile.isValidPath(currentFolderStr))
-			xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_CURRENT_FOLDER);
+			xr = new XmlResponse(XmlResponse.EN_ERROR, lrh.getString("message.connector.invalid_current_folder_speficied"));
 		else {
 			CommandHandler command = CommandHandler.getCommand(commandStr);
@@ -206,4 +208,5 @@
 
 		UploadResponse ur;
+		LocaleResolverHandler lrh = new LocaleResolverHandler(request);
 
 		// if this is a QuickUpload request, 'commandStr' and 'currentFolderStr'
@@ -216,11 +219,12 @@
 		if (!RequestCycleHandler.isEnabledForFileUpload(request))
 			ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR, null, null,
-			        Messages.NOT_AUTHORIZED_FOR_UPLOAD);
+			        lrh.getString("message.connector.fileUpload.disabled"));
 		else if (!CommandHandler.isValidForPost(commandStr))
-			ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_COMMAND);
+			ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, lrh.getString("message.connector.invalid_command_specified"));
 		else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
-			ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_TYPE);
+			ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, lrh.getString("message.connector.invalid_type_specified"));
 		else if (!UtilsFile.isValidPath(currentFolderStr))
-			ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
+			ur = new UploadResponse(UploadResponse.SC_ERROR, null, null,
+					lrh.getString("message.connector.invalid_current_folder_speficied"));
 		else {
 			ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);
@@ -235,5 +239,6 @@
 
 			if (!currentDir.exists())
-				ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
+				ur = new UploadResponse(UploadResponse.SC_ERROR, null, null,
+						lrh.getString("message.connector.invalid_current_folder_speficied"));
 			else {
 
Index: Keditor.Java/trunk/java-core/src/main/java/net/fckeditor/connector/Messages.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/connector/Messages.java	(revision 2222)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- * 
- * == BEGIN LICENSE ==
- * 
- * Licensed under the terms of any of the following licenses at your
- * choice:
- * 
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- * 
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- * 
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- * 
- * == END LICENSE ==
- */
-package net.fckeditor.connector;
-
-/**
- * Some messages for the {@link ConnectorServlet}.
- *  
- * @version $Id$
- */
-public class Messages {
-
-	/** Error message NOT AUTHORIZED FOR FILE UPLOAD */
-	public static final String NOT_AUTHORIZED_FOR_UPLOAD = "The current user isn't authorized for file upload!";
-
-	/** Error message NOT AUTHORIZED FOR FILE BROWSING */
-	public static final String NOT_AUTHORIZED_FOR_BROWSING = "The current user isn't authorized for file browsing!";
-
-	/** Error message INVALID COMMAND SUPPLIED */
-	public static final String INVALID_COMMAND = "Invalid command specified";
-
-	/** Error message INVALID TYPE SUPPLIED */
-	public static final String INVALID_TYPE = "Invalid resource type specified";
-
-	/** Error message INVALID CURRENT FOLDER */
-	public static final String INVALID_CURRENT_FOLDER = "Invalid current folder specified";
-
-}
Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/handlers/LocaleResolverHandler.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/handlers/LocaleResolverHandler.java	(revision 2223)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/handlers/LocaleResolverHandler.java	(revision 2223)
@@ -0,0 +1,62 @@
+package net.fckeditor.handlers;
+
+import java.util.ResourceBundle;
+
+import javax.servlet.http.HttpServletRequest;
+
+import net.fckeditor.localization.LocaleResolver;
+import net.fckeditor.tool.Utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LocaleResolverHandler {
+
+	private static Logger logger = LoggerFactory
+			.getLogger(LocaleResolverHandler.class);
+	private static LocaleResolver localeResolver;
+	private ResourceBundle rb;
+
+	static {
+		String fqcn = PropertiesLoader
+				.getProperty("localization.localeResolverImpl");
+		if (Utils.isEmpty(fqcn))
+			logger
+					.warn("No valid property found for 'localization.localeResolverImpl', using default bundle!");
+			
+		else {
+			try {
+				Class<?> clazz = Class.forName(fqcn);
+				localeResolver = (LocaleResolver) clazz.newInstance();
+				logger
+						.info(
+								"LocaleResolver implementation '{}' successfully instantiated!",
+								localeResolver.getClass().getName());
+			} catch (Exception e) {
+				logger.error("Couldn't instantiate class [".concat(fqcn)
+						.concat("], default bundle will be used!!"), e);
+			}
+		}
+	}
+
+	public LocaleResolverHandler(HttpServletRequest request) {
+		try {
+			rb = ResourceBundle.getBundle("fckeditor", localeResolver
+					.resolveLocale(request), Thread.currentThread()
+					.getContextClassLoader());
+		} catch (Exception e) {
+			rb = null;
+		}
+	}
+
+	public String getString(String key) {
+
+		try {
+			return rb.getString(key);
+		} catch (Exception e) {
+			return PropertiesLoader.getProperty(key);
+		}
+
+	}
+
+}
Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/localization/impl/JstlResolver.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/localization/impl/JstlResolver.java	(revision 2222)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/localization/impl/JstlResolver.java	(revision 2223)
@@ -12,5 +12,4 @@
 	public Locale resolveLocale(HttpServletRequest request) {
 		
-		// TODO need to check locale is null?
 		return (Locale) Config.get(request.getSession(), Config.FMT_LOCALE);
 	}
Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/response/UploadResponse.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/response/UploadResponse.java	(revision 2222)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/response/UploadResponse.java	(revision 2223)
@@ -21,5 +21,4 @@
 package net.fckeditor.response;
 
-import net.fckeditor.connector.Messages;
 import net.fckeditor.tool.Utils;
 
@@ -64,9 +63,4 @@
 	public static final int SC_SECURITY_ERROR = 203;
 	
-	/** UploadResponse INVALID CURRENT FOLDER */
-	public static final UploadResponse UR_INVALID_CURRENT_FOLDER = new UploadResponse(
-			UploadResponse.SC_ERROR, null, null,
-			Messages.INVALID_CURRENT_FOLDER);
-
 	/**
 	 * Constructs the response with variable amount of parameters.
Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/tags/CheckTag.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/tags/CheckTag.java	(revision 2222)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/tags/CheckTag.java	(revision 2223)
@@ -31,9 +31,10 @@
 import javax.servlet.jsp.tagext.TagSupport;
 
-import net.fckeditor.handlers.PropertiesLoader;
+import net.fckeditor.handlers.LocaleResolverHandler;
 import net.fckeditor.handlers.RequestCycleHandler;
 import net.fckeditor.tool.Compatibility;
 
 /**
+ * TODO Rework JavaDoc when ticket #2361
  * This tag displays information about browser and user capabilities. There are
  * tree available commands (CompatibleBrowser, FileBrowsing, FileUpload) which
@@ -50,10 +51,4 @@
 	private static final String FILE_BROWSING = "FileBrowsing";
 	private static final String COMPATIBLE_BROWSER = "CompatibleBrowser";
-	private static final String PROPERTY_MESSAGE_FILE_BROWSING_DISABLED = "message.enabled_tag.connector.file_browsing.disabled";
-	private static final String PROPERTY_MESSAGE_FILE_BROWSING_ENABLED = "message.enabled_tag.connector.file_browsing.enabled";
-	private static final String PROPERTY_MESSAGE_FILE_UPLOAD_DISABLED = "message.enabled_tag.connector.file_upload.disalbed";
-	private static final String PROPERTY_MESSAGE_FILE_UPLOAD_ENABLED = "message.enabled_tag.connector.file_upload.enabled";
-	private static final String PROPERTY_MESSAGE_NOT_COMPATIBLE_BROWSER = "message.enabled_tag.compatible_browser.no";
-	private static final String PROPERTY_MESSAGE_COMPATIBLE_BROWSER = "message.enabled_tag.compatible_browser.yes";
 	private static Set<String> commands = new HashSet<String>(3);
 
@@ -83,30 +78,25 @@
 
 		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+		LocaleResolverHandler lrh = new LocaleResolverHandler(request);
 		String response = null;
 
 		if (command.equals(FILE_UPLOAD)) {
 			if (RequestCycleHandler.isEnabledForFileUpload(request))
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_FILE_UPLOAD_ENABLED);
+				response = lrh.getString("message.connector.fileUpload.enabled");
 			else
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_FILE_UPLOAD_DISABLED);
+				response = lrh.getString("message.connector.fileUpload.disabled");
 		}
 
 		if (command.equals(FILE_BROWSING)) {
 			if (RequestCycleHandler.isEnabledForFileBrowsing(request))
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_FILE_BROWSING_ENABLED);
+				response = lrh.getString("message.connector.fileBrowsing.enabled");
 			else
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_FILE_BROWSING_DISABLED);
+				response = lrh.getString("message.connector.fileBrowsing.disabled");
 		}
 		if (command.equals(COMPATIBLE_BROWSER)) {
 			if (Compatibility.isCompatibleBrowser(request))
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_COMPATIBLE_BROWSER);
+				response = lrh.getString("message.compatible_browser.yes");
 			else
-				response = PropertiesLoader
-				        .getProperty(CheckTag.PROPERTY_MESSAGE_NOT_COMPATIBLE_BROWSER);
+				response = lrh.getString("message.compatible_browser.no");
 		}
 
Index: /FCKeditor.Java/trunk/java-core/src/main/resources/net/fckeditor/handlers/default.properties
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/resources/net/fckeditor/handlers/default.properties	(revision 2222)
+++ /FCKeditor.Java/trunk/java-core/src/main/resources/net/fckeditor/handlers/default.properties	(revision 2223)
@@ -61,9 +61,16 @@
 fckeditor.width = 100%
 
-# some messages
-message.enabled_tag.compatible_browser.no = Your browser is not compatible
-message.enabled_tag.compatible_browser.yes = Your browser is fully compatible
-message.enabled_tag.connector.file_browsing.disabled = The Connector is disabled for FileBrowsing
-message.enabled_tag.connector.file_browsing.enabled = The Connector is enabled for FileBrowsing
-message.enabled_tag.connector.file_upload.disabled = The Connector is disabled for FileUpload
-message.enabled_tag.connector.file_upload.enabled = The Connector is enabled for FileUpload
+# default LocaleResolver implementation
+localization.localeResolverImpl = net.fckeditor.localization.impl.AcceptLanguageHeaderResolver
+
+# default messages (localizable)
+message.compatible_browser.no = Your browser is not compatible
+message.compatible_browser.yes = Your browser is fully compatible
+
+message.connector.fileUpload.disabled = You are not authorized to upload files!
+message.connector.fileUpload.enabled = You are authorized to upload files!
+message.connector.fileBrowsing.disabled = You are not authorized to browse files!
+message.connector.fileBrowsing.enabled = You are authorized to browse files!
+message.connector.invalid_command_specified = Invalid command specified
+message.connector.invalid_type_specified = Invalid resource type specified
+message.connector.invalid_current_folder_speficied = Invalid current folder specified
