diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index 33469bd94400c198ec61a5872a44cb87a12e875e..2350f41cd1924b27c7dc1808cba6b5c5823a88b6 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -1,6 +1,6 @@
auth->is_admin()) die('only allowed for administrators.');
+
+$app->uses('tpl');
+
+$app->tpl->newTemplate('form.tpl.htm');
+$app->tpl->setInclude('content_tpl', 'templates/language_export.htm');
+
+//* reading languages
+$language_option = '';
+$error = '';
+$msg = '';
+$selected_language = (isset($_REQUEST['lng_select']))?substr($_REQUEST['lng_select'],0,2):'en';
+if(!preg_match("/^[a-z]{2}$/i", $selected_language)) die('unallowed characters in selected language name.');
+
+$handle = opendir(ISPC_ROOT_PATH.'/lib/lang/');
+while ($file = readdir ($handle)) {
+ if ($file != '.' && $file != '..') {
+ $tmp_lng = substr($file,0,-4);
+ if($tmp_lng !='') {
+ $selected = ($tmp_lng == $selected_language)?'SELECTED':'';
+ $language_option .= "";
+ //if(isset($_POST['lng_new']) && $_POST['lng_new'] == $tmp_lng) $error = 'Language exists already.';
+ }
+ }
+}
+$app->tpl->setVar('language_option',$language_option);
+$app->tpl->setVar('error',$error);
+
+// Export the language file
+if(isset($_POST['lng_select']) && $error == '') {
+ //$lng_select = $_POST['lng_select'];
+ //if(!preg_match("/^[a-z]{2}$/i", $lng_select)) die('unallowed characters in language name.');
+
+ // This variable contains the content of the language files
+ $content = '';
+ $content .= "---|ISPConfig Language File|".$conf["app_version"]."|".$selected_language."\n";
+
+ //* get the global language file
+ $content .= "--|global|".$selected_language."|".$selected_language.".lng\n";
+ $content .= file_get_contents(ISPC_LIB_PATH."/lang/".$selected_language.".lng")."\n";
+
+ //* Get the global file of the module
+ //$content .= "---|$module|$selected_language|\n";
+ //copy(ISPC_WEB_PATH."/$module/lib/lang/$selected_language.lng",ISPC_WEB_PATH."/$module/lib/lang/$lng_new.lng");
+ $bgcolor = '#FFFFFF';
+ $language_files_list = array();
+ $handle = @opendir(ISPC_WEB_PATH);
+ while ($file = @readdir ($handle)) {
+ if ($file != '.' && $file != '..') {
+ if(@is_dir(ISPC_WEB_PATH.'/'.$file.'/lib/lang')) {
+ $handle2 = opendir(ISPC_WEB_PATH.'/'.$file.'/lib/lang');
+ while ($lang_file = @readdir ($handle2)) {
+ if ($lang_file != '.' && $lang_file != '..' && substr($lang_file,0,2) == $selected_language) {
+ $content .= "--|".$file."|".$selected_language."|".$lang_file."\n";
+ $content .= file_get_contents(ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$lang_file)."\n";
+ $msg .= 'Exported language file '.$lang_file.'
';
+ }
+ }
+ }
+ }
+ }
+
+ $content .= '---|EOF';
+
+ // Write the language file
+ file_put_contents(ISPC_WEB_TEMP_PATH.'/'.$selected_language.'.lng', $content);
+
+ $msg = "Exported language file to: /temp/".$selected_language.'.lng';
+
+ //$msg = nl2br($content);
+}
+
+$app->tpl->setVar('msg',$msg);
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_export.lng';
+include($lng_file);
+$app->tpl->setVar($wb);
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/admin/language_import.php b/interface/web/admin/language_import.php
new file mode 100644
index 0000000000000000000000000000000000000000..130fbc18d7450ef5e1c7ccc6d2d68187e147056e
--- /dev/null
+++ b/interface/web/admin/language_import.php
@@ -0,0 +1,108 @@
+auth->is_admin()) die('only allowed for administrators.');
+
+$app->uses('tpl');
+
+$app->tpl->newTemplate('form.tpl.htm');
+$app->tpl->setInclude('content_tpl', 'templates/language_import.htm');
+$msg = '';
+$error = '';
+
+// Export the language file
+if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
+ $lines = file($_FILES['file']['tmp_name']);
+ // initial check
+ $parts = explode('|',$lines[0]);
+ if($parts[0] == '---' && $parts[1] == 'ISPConfig Language File') {
+ if($parts[2] != $conf["app_version"]) {
+ $error .= 'Application version does not match. Appversion: '.$conf["app_version"].' Lanfile version: '.$parts[2];
+ } else {
+ unset($lines[0]);
+
+ $buffer = '';
+ $langfile_path = '';
+ // all other lines
+ foreach($lines as $line) {
+ $parts = explode('|',$line);
+ if(is_array($parts) && count($parts) > 0 && $parts[0] == '--') {
+ // Write language file, if its not the first file
+ if($buffer != '' && $langfile_path != '') {
+ if(@$_REQUEST['overwrite'] != 1 && @is_file($langfile_path)) {
+ $error .= "File exists, not written: $langfile_path
";
+ } else {
+ $msg .= "File written: $langfile_path
";
+ // file_put_contents($langfile_path,$buffer);
+ }
+ }
+ // empty buffer and set variables
+ $buffer = '';
+ $module_name = $parts[1];
+ $selected_language = $parts[2];
+ $file_name = $parts[3];
+ if(!preg_match("/^[a-z]{2}$/i", $selected_language)) die('unallowed characters in selected language name.');
+ if(!preg_match("/^[a-z_]+$/i", $module_name)) die('unallowed characters in module name.');
+ if(!preg_match("/^[a-z\._]+$/i", $file_name) || stristr($file_name,'..')) die('unallowed characters in language file name.');
+ if($module_name == 'global') {
+ $langfile_path = trim(ISPC_LIB_PATH."/lang/".$selected_language.".lng");
+ } else {
+ $langfile_path = trim(ISPC_WEB_PATH.'/'.$module_name.'/lib/lang/'.$file_name);
+ }
+ } else {
+ $buffer .= $line;
+ }
+ }
+ }
+ }
+}
+
+$app->tpl->setVar('msg',$msg);
+$app->tpl->setVar('error',$error);
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_import.lng';
+include($lng_file);
+$app->tpl->setVar($wb);
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_language_export.lng b/interface/web/admin/lib/lang/en_language_export.lng
new file mode 100644
index 0000000000000000000000000000000000000000..791fc894d31731be124b3cc083e4ace7661f9aa7
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_language_export.lng
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_language_import.lng b/interface/web/admin/lib/lang/en_language_import.lng
new file mode 100644
index 0000000000000000000000000000000000000000..7e513884cfe33be3a305aaee29d13205592685bf
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_language_import.lng
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_export.htm b/interface/web/admin/templates/language_export.htm
new file mode 100644
index 0000000000000000000000000000000000000000..732e9e40899623155dd5533518eb176a340ac767
--- /dev/null
+++ b/interface/web/admin/templates/language_export.htm
@@ -0,0 +1,12 @@
+
+
+
+