diff --git a/src/messenger/.settings/org.eclipse.core.resources.prefs b/src/messenger/.settings/org.eclipse.core.resources.prefs
index 40b2ec46..b0cba131 100644
--- a/src/messenger/.settings/org.eclipse.core.resources.prefs
+++ b/src/messenger/.settings/org.eclipse.core.resources.prefs
@@ -1,4 +1,5 @@
-#Tue Sep 30 01:27:05 CEST 2008
+#Thu Nov 27 00:52:16 CET 2008
 eclipse.preferences.version=1
 encoding//webim/INSTALL_RUS.txt=cp1251
 encoding//webim/locales/ru=cp1251
+encoding//webim/locales/sp/properties=ISO-8859-1
diff --git a/src/messenger/webim/libs/common.php b/src/messenger/webim/libs/common.php
index 6e268bcc..dfac34d3 100644
--- a/src/messenger/webim/libs/common.php
+++ b/src/messenger/webim/libs/common.php
@@ -150,6 +150,34 @@ function load_messages($locale) {
 	$messages[$locale] = $hash;
 }
 
+function save_message($locale,$key,$value) {
+	global $webim_encoding;
+	$result = "";
+	$added = false;
+	$current_encoding = $webim_encoding;
+	$fp = fopen(dirname(__FILE__)."/../locales/$locale/properties", "r");
+	while (!feof($fp)) {
+		$line = fgets($fp, 4096);
+		$keyval = split("=", $line, 2 );
+		if( isset($keyval[1]) ) {
+			if($keyval[0] == 'encoding') {
+				$current_encoding = trim($keyval[1]);
+			} else if(!$added && $keyval[0] == $key) {
+				$line = "$key=".myiconv($webim_encoding, $current_encoding, str_replace("\n", "\\n",trim($value)))."\n";
+				$added = true;
+			}
+		}
+		$result .= $line;
+	}
+	fclose($fp);
+	if(!$added) {
+		$result .= "$key=".myiconv($webim_encoding, $current_encoding, str_replace("\n", "\\n",trim($value)))."\n";
+	}
+	$fp = fopen(dirname(__FILE__)."/../locales/$locale/properties", "w");
+	fwrite($fp, $result);
+	fclose($fp);
+}
+
 function getoutputenc() {
 	global $current_locale, $output_encoding, $webim_encoding, $messages;
 	if(!isset($messages[$current_locale]))
diff --git a/src/messenger/webim/locales/en/properties b/src/messenger/webim/locales/en/properties
index 9932b3eb..9d066a57 100644
--- a/src/messenger/webim/locales/en/properties
+++ b/src/messenger/webim/locales/en/properties
@@ -191,6 +191,7 @@ form.field.agent_commonname.description=This name will be seen by your visitors.
 form.field.email=Your email
 form.field.message=Message
 form.field.name=Your name
+form.field.translation=Translation
 install.1.connected=You are connected to MySQL server version {0}
 install.2.create=Create database "{0}"
 install.2.db_exists=Database "{0}" is created.
@@ -251,6 +252,8 @@ page.preview.style_default=-from general settings-
 page.preview.title=Site style
 page.preview.userchat=Chat window (user-mode)
 page.translate.descr=If you don't like the translation, please send us an update.   
+page.translate.done=Your translation is saved.
+page.translate.one=Enter you translation.
 page.translate.title=Translate Open WebIM
 page_agent.create_new=Here you can create new operator
 page_agent.tab.avatar=Photo
diff --git a/src/messenger/webim/locales/ru/properties b/src/messenger/webim/locales/ru/properties
index c6e14786..d6f3f44c 100644
--- a/src/messenger/webim/locales/ru/properties
+++ b/src/messenger/webim/locales/ru/properties
@@ -1,6 +1,6 @@
 encoding=cp1251
-output_charset=Windows-1251
-output_encoding=cp1251
+output_charset=utf-8
+output_encoding=utf-8
 site.url=http://webim.sourceforge.net
 site.title=webim.sf.net
 company.title=Web Messenger Community
@@ -191,6 +191,7 @@ form.field.agent_commonname.description=
 form.field.email=Ваш email
 form.field.message=Сообщение
 form.field.name=Ваше имя
+form.field.translation=Текст перевода
 install.1.connected=Вы подсоединены к серверу MySQL версии {0}.
 install.2.create=Создать базу данных "{0}"
 install.2.db_exists=Создана база данных "{0}".
@@ -251,6 +252,8 @@ page.preview.style_default=-
 page.preview.title=Стиль мессенджера
 page.preview.userchat=Chat window (user-mode)
 page.translate.descr=Если вам не нравится перевод, пришлите нам ваш вариант.   
+page.translate.done=Ваш перевод сохранен.
+page.translate.one=Введите ваш вариант перевода.
 page.translate.title=Переведите Open WebIM
 page_agent.create_new=Создание нового оператора
 page_agent.tab.avatar=Фотография
diff --git a/src/messenger/webim/operator/translate.php b/src/messenger/webim/operator/translate.php
index fb07237b..a47d3446 100644
--- a/src/messenger/webim/operator/translate.php
+++ b/src/messenger/webim/operator/translate.php
@@ -16,37 +16,75 @@ require_once('../libs/common.php');
 require_once('../libs/operator.php');
 require_once('../libs/pagination.php');
 
-$source = "en";
-$target = verifyparam("target", "/^[\w-]{2,5}$/", "en");
-
 $operator = check_login();
 
-$page = array(
-	'operator' => topage(get_operator_name($operator)),
-	'lang1' => $source,
-	'lang2' => $target
-);
+$source = verifyparam("source", "/^[\w-]{2,5}$/", $default_locale);
+$target = verifyparam("target", "/^[\w-]{2,5}$/", $home_locale);
+$stringid = verifyparam("key", "/^[_\.\w]+$/", "");
 
 if(!isset($messages[$source])) {
 	load_messages($source);
 }
+$lang1 = $messages[$source];
 if(!isset($messages[$target])) {
 	load_messages($target);
 }
-$lang1 = $messages[$source];
 $lang2 = $messages[$target];
 
-$page["title1"] = isset($lang1["localeid"]) ? $lang1["localeid"] : $source;
-$page["title2"] = isset($lang2["localeid"]) ? $lang2["localeid"] : $target;
+$errors = array();
+$page = array(
+	'operator' => topage(get_operator_name($operator)),
+	'lang1' => $source,
+	'lang2' => $target,
+	'title1' => isset($lang1["localeid"]) ? $lang1["localeid"] : $source,
+	'title2' => isset($lang2["localeid"]) ? $lang2["localeid"] : $target
+);
+
+if($stringid) {
+	$translation = isset($lang2[$stringid]) ? $lang2[$stringid] : "";
+	if(isset($_POST['translation'])) {
+
+		$translation = getparam('translation');
+
+		if(!$translation) {
+			$errors[] = no_field("form.field.translation");
+		}
+
+		if(count($errors) == 0) {
+			save_message($target, $stringid, $translation);
+
+			$page['saved'] = true;
+			start_html_output();
+			require('../view/translate.php');
+			exit;
+		}
+	}
+
+	$page['saved'] = false;
+	$page['key'] = $stringid;
+	$page['target'] = $target;
+	$page['formoriginal'] = isset($lang1[$stringid]) ? $lang1[$stringid] : "
| "> | 
| Key | - | - | - | |||||
| - - | - - | - - | -||||||
| + | + 0 ) { + print getlocal("errors.header"); + foreach( $errors as $e ) { + print getlocal("errors.prefix"); + print $e; + print getlocal("errors.suffix"); + } + print getlocal("errors.footer"); + } ?> + + | +
+
+ 
 + + + + + + 
 + + + + +  | 
+||||||||||||||||||||||||||||||||||||||||||||||||||||