summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2014-08-14 22:50:05 +0200
committerSimon Rettberg2014-08-14 22:50:05 +0200
commitb776c51856e387941130562e3711005036ee26fb (patch)
tree4cf8348e3ddaf1e783c4a86d3cf9cd847fa79217
parentRe-Format all language files for cleaner future diffs (diff)
downloadslx-admin-b776c51856e387941130562e3711005036ee26fb.tar.gz
slx-admin-b776c51856e387941130562e3711005036ee26fb.tar.xz
slx-admin-b776c51856e387941130562e3711005036ee26fb.zip
[i18n] Sanity checks, introduced subdir for template language files
-rw-r--r--inc/dictionary.inc.php16
-rw-r--r--inc/util.inc.php20
-rw-r--r--lang/de/templates/dialog-generic.json (renamed from lang/de/dialog-generic.json)0
-rw-r--r--lang/de/templates/main-menu-login.json (renamed from lang/de/main-menu-login.json)0
-rw-r--r--lang/de/templates/main-menu-logout.json (renamed from lang/de/main-menu-logout.json)0
-rw-r--r--lang/de/templates/messagebox-error.json (renamed from lang/de/messagebox-error.json)0
-rw-r--r--lang/de/templates/messagebox-info.json (renamed from lang/de/messagebox-info.json)0
-rw-r--r--lang/de/templates/messagebox-success.json (renamed from lang/de/messagebox-success.json)0
-rw-r--r--lang/de/templates/messagebox-warning.json (renamed from lang/de/messagebox-warning.json)0
-rw-r--r--lang/de/templates/minilinux/download.json (renamed from lang/de/minilinux/download.json)0
-rw-r--r--lang/de/templates/minilinux/filelist.json (renamed from lang/de/minilinux/filelist.json)0
-rw-r--r--lang/de/templates/page-adduser.json (renamed from lang/de/page-adduser.json)0
-rw-r--r--lang/de/templates/page-baseconfig.json (renamed from lang/de/page-baseconfig.json)0
-rw-r--r--lang/de/templates/page-login.json (renamed from lang/de/page-login.json)0
-rw-r--r--lang/de/templates/page-main-guest.json (renamed from lang/de/page-main-guest.json)0
-rw-r--r--lang/de/templates/page-main.json (renamed from lang/de/page-main.json)0
-rw-r--r--lang/de/templates/page-minilinux.json4
-rw-r--r--lang/de/templates/page-news.json (renamed from lang/de/page-news.json)0
-rw-r--r--lang/de/templates/page-remote-tgz-list.json (renamed from lang/de/page-remote-tgz-list.json)0
-rw-r--r--lang/de/templates/page-syslog.json (renamed from lang/de/page-syslog.json)0
-rw-r--r--lang/de/templates/page-vmstore.json (renamed from lang/de/page-vmstore.json)0
-rw-r--r--lang/de/templates/pagenav.json (renamed from lang/de/pagenav.json)0
-rw-r--r--lang/de/templates/serversetup/ipaddress.json (renamed from lang/de/serversetup/ipaddress.json)0
-rw-r--r--lang/de/templates/serversetup/ipxe.json (renamed from lang/de/serversetup/ipxe.json)0
-rw-r--r--lang/de/templates/sysconfig/_page.json (renamed from lang/de/sysconfig/_page.json)2
-rw-r--r--lang/de/templates/sysconfig/ad-checkconnection.json (renamed from lang/de/sysconfig/ad-checkconnection.json)0
-rw-r--r--lang/de/templates/sysconfig/ad-finish.json (renamed from lang/de/sysconfig/ad-finish.json)0
-rw-r--r--lang/de/templates/sysconfig/ad-start.json (renamed from lang/de/sysconfig/ad-start.json)0
-rw-r--r--lang/de/templates/sysconfig/branding-check.json (renamed from lang/de/sysconfig/branding-check.json)0
-rw-r--r--lang/de/templates/sysconfig/branding-start.json (renamed from lang/de/sysconfig/branding-start.json)0
-rw-r--r--lang/de/templates/sysconfig/cfg-finish.json (renamed from lang/de/sysconfig/cfg-finish.json)0
-rw-r--r--lang/de/templates/sysconfig/cfg-start.json (renamed from lang/de/sysconfig/cfg-start.json)0
-rw-r--r--lang/de/templates/sysconfig/custom-filelist.json (renamed from lang/de/sysconfig/custom-filelist.json)0
-rw-r--r--lang/de/templates/sysconfig/custom-fileselect.json (renamed from lang/de/sysconfig/custom-fileselect.json)0
-rw-r--r--lang/de/templates/sysconfig/custom-upload.json (renamed from lang/de/sysconfig/custom-upload.json)0
-rw-r--r--lang/de/templates/sysconfig/start.json (renamed from lang/de/sysconfig/start.json)0
-rw-r--r--lang/de/templates/systemstatus/_page.json (renamed from lang/de/systemstatus/_page.json)0
-rw-r--r--lang/de/templates/systemstatus/addresses.json (renamed from lang/de/systemstatus/addresses.json)0
-rw-r--r--lang/de/templates/systemstatus/diskstat.json (renamed from lang/de/systemstatus/diskstat.json)0
-rw-r--r--lang/de/templates/systemstatus/services.json (renamed from lang/de/systemstatus/services.json)0
-rw-r--r--lang/de/templates/systemstatus/systeminfo.json (renamed from lang/de/systemstatus/systeminfo.json)0
-rw-r--r--lang/de/templates/translation/_page.json (renamed from lang/de/translation/_page.json)0
-rw-r--r--lang/de/templates/translation/messages.json (renamed from lang/de/translation/messages.json)0
-rw-r--r--lang/de/templates/translation/template.json (renamed from lang/de/translation/template.json)0
-rw-r--r--lang/de/templates/vmstore/mount.json (renamed from lang/de/vmstore/mount.json)0
-rw-r--r--lang/en/templates/dialog-generic.json (renamed from lang/en/dialog-generic.json)0
-rw-r--r--lang/en/templates/main-menu-login.json (renamed from lang/en/main-menu-login.json)0
-rw-r--r--lang/en/templates/main-menu-logout.json (renamed from lang/en/main-menu-logout.json)0
-rw-r--r--lang/en/templates/messagebox-error.json (renamed from lang/en/messagebox-error.json)0
-rw-r--r--lang/en/templates/messagebox-info.json (renamed from lang/en/messagebox-info.json)0
-rw-r--r--lang/en/templates/messagebox-success.json (renamed from lang/en/messagebox-success.json)0
-rw-r--r--lang/en/templates/messagebox-warning.json (renamed from lang/en/messagebox-warning.json)0
-rw-r--r--lang/en/templates/minilinux/download.json (renamed from lang/en/minilinux/download.json)0
-rw-r--r--lang/en/templates/minilinux/filelist.json (renamed from lang/en/minilinux/filelist.json)0
-rw-r--r--lang/en/templates/page-adduser.json (renamed from lang/en/page-adduser.json)0
-rw-r--r--lang/en/templates/page-baseconfig.json (renamed from lang/en/page-baseconfig.json)0
-rw-r--r--lang/en/templates/page-login.json (renamed from lang/en/page-login.json)0
-rw-r--r--lang/en/templates/page-main-guest.json (renamed from lang/en/page-main-guest.json)0
-rw-r--r--lang/en/templates/page-main.json (renamed from lang/en/page-main.json)0
-rw-r--r--lang/en/templates/page-minilinux.json (renamed from lang/de/page-minilinux.json)0
-rw-r--r--lang/en/templates/page-news.json (renamed from lang/en/page-news.json)0
-rw-r--r--lang/en/templates/page-remote-tgz-list.json (renamed from lang/en/page-remote-tgz-list.json)0
-rw-r--r--lang/en/templates/page-syslog.json (renamed from lang/en/page-syslog.json)0
-rw-r--r--lang/en/templates/page-vmstore.json (renamed from lang/en/page-vmstore.json)0
-rw-r--r--lang/en/templates/pagenav.json (renamed from lang/en/pagenav.json)0
-rw-r--r--lang/en/templates/serversetup/ipaddress.json (renamed from lang/en/serversetup/ipaddress.json)0
-rw-r--r--lang/en/templates/serversetup/ipxe.json (renamed from lang/en/serversetup/ipxe.json)0
-rw-r--r--lang/en/templates/sysconfig/_page.json (renamed from lang/en/sysconfig/_page.json)0
-rw-r--r--lang/en/templates/sysconfig/ad-checkconnection.json (renamed from lang/en/sysconfig/ad-checkconnection.json)0
-rw-r--r--lang/en/templates/sysconfig/ad-finish.json (renamed from lang/en/sysconfig/ad-finish.json)0
-rw-r--r--lang/en/templates/sysconfig/ad-start.json (renamed from lang/en/sysconfig/ad-start.json)0
-rw-r--r--lang/en/templates/sysconfig/branding-check.json (renamed from lang/en/sysconfig/branding-check.json)0
-rw-r--r--lang/en/templates/sysconfig/branding-start.json (renamed from lang/en/sysconfig/branding-start.json)0
-rw-r--r--lang/en/templates/sysconfig/cfg-finish.json (renamed from lang/en/sysconfig/cfg-finish.json)0
-rw-r--r--lang/en/templates/sysconfig/cfg-start.json (renamed from lang/en/sysconfig/cfg-start.json)0
-rw-r--r--lang/en/templates/sysconfig/custom-filelist.json (renamed from lang/en/sysconfig/custom-filelist.json)0
-rw-r--r--lang/en/templates/sysconfig/custom-fileselect.json (renamed from lang/en/sysconfig/custom-fileselect.json)0
-rw-r--r--lang/en/templates/sysconfig/custom-upload.json (renamed from lang/en/sysconfig/custom-upload.json)0
-rw-r--r--lang/en/templates/sysconfig/start.json (renamed from lang/en/sysconfig/start.json)0
-rw-r--r--lang/en/templates/systemstatus/_page.json (renamed from lang/en/systemstatus/_page.json)0
-rw-r--r--lang/en/templates/systemstatus/addresses.json (renamed from lang/en/systemstatus/addresses.json)0
-rw-r--r--lang/en/templates/systemstatus/diskstat.json (renamed from lang/en/systemstatus/diskstat.json)0
-rw-r--r--lang/en/templates/systemstatus/services.json (renamed from lang/en/systemstatus/services.json)0
-rw-r--r--lang/en/templates/systemstatus/systeminfo.json (renamed from lang/en/systemstatus/systeminfo.json)0
-rw-r--r--lang/en/templates/translation/_page.json (renamed from lang/en/translation/_page.json)0
-rw-r--r--lang/en/templates/translation/messages.json (renamed from lang/en/translation/messages.json)0
-rw-r--r--lang/en/templates/translation/template.json (renamed from lang/en/translation/template.json)0
-rw-r--r--lang/en/templates/vmstore/mount.json (renamed from lang/en/vmstore/mount.json)0
-rw-r--r--lang/pt/page-minilinux.json4
-rw-r--r--lang/pt/templates/dialog-generic.json (renamed from lang/pt/dialog-generic.json)0
-rw-r--r--lang/pt/templates/main-menu-login.json (renamed from lang/pt/main-menu-login.json)0
-rw-r--r--lang/pt/templates/main-menu-logout.json (renamed from lang/pt/main-menu-logout.json)0
-rw-r--r--lang/pt/templates/messagebox-error.json (renamed from lang/pt/messagebox-error.json)0
-rw-r--r--lang/pt/templates/messagebox-info.json (renamed from lang/pt/messagebox-info.json)0
-rw-r--r--lang/pt/templates/messagebox-success.json (renamed from lang/pt/messagebox-success.json)0
-rw-r--r--lang/pt/templates/messagebox-warning.json (renamed from lang/pt/messagebox-warning.json)0
-rw-r--r--lang/pt/templates/minilinux/download.json (renamed from lang/pt/minilinux/download.json)0
-rw-r--r--lang/pt/templates/minilinux/filelist.json (renamed from lang/pt/minilinux/filelist.json)0
-rw-r--r--lang/pt/templates/page-adduser.json (renamed from lang/pt/page-adduser.json)0
-rw-r--r--lang/pt/templates/page-baseconfig.json (renamed from lang/pt/page-baseconfig.json)0
-rw-r--r--lang/pt/templates/page-login.json (renamed from lang/pt/page-login.json)0
-rw-r--r--lang/pt/templates/page-main-guest.json (renamed from lang/pt/page-main-guest.json)0
-rw-r--r--lang/pt/templates/page-main.json (renamed from lang/pt/page-main.json)0
-rw-r--r--lang/pt/templates/page-minilinux.json (renamed from lang/en/page-minilinux.json)0
-rw-r--r--lang/pt/templates/page-news.json (renamed from lang/pt/page-news.json)0
-rw-r--r--lang/pt/templates/page-remote-tgz-list.json (renamed from lang/pt/page-remote-tgz-list.json)0
-rw-r--r--lang/pt/templates/page-syslog.json (renamed from lang/pt/page-syslog.json)0
-rw-r--r--lang/pt/templates/page-vmstore.json (renamed from lang/pt/page-vmstore.json)0
-rw-r--r--lang/pt/templates/pagenav.json (renamed from lang/pt/pagenav.json)0
-rw-r--r--lang/pt/templates/serversetup/ipaddress.json (renamed from lang/pt/serversetup/ipaddress.json)0
-rw-r--r--lang/pt/templates/serversetup/ipxe.json (renamed from lang/pt/serversetup/ipxe.json)0
-rw-r--r--lang/pt/templates/sysconfig/_page.json (renamed from lang/pt/sysconfig/_page.json)0
-rw-r--r--lang/pt/templates/sysconfig/ad-checkconnection.json (renamed from lang/pt/sysconfig/ad-checkconnection.json)0
-rw-r--r--lang/pt/templates/sysconfig/ad-finish.json (renamed from lang/pt/sysconfig/ad-finish.json)0
-rw-r--r--lang/pt/templates/sysconfig/ad-start.json (renamed from lang/pt/sysconfig/ad-start.json)0
-rw-r--r--lang/pt/templates/sysconfig/branding-check.json (renamed from lang/pt/sysconfig/branding-check.json)0
-rw-r--r--lang/pt/templates/sysconfig/branding-start.json (renamed from lang/pt/sysconfig/branding-start.json)0
-rw-r--r--lang/pt/templates/sysconfig/cfg-finish.json (renamed from lang/pt/sysconfig/cfg-finish.json)0
-rw-r--r--lang/pt/templates/sysconfig/cfg-start.json (renamed from lang/pt/sysconfig/cfg-start.json)0
-rw-r--r--lang/pt/templates/sysconfig/custom-filelist.json (renamed from lang/pt/sysconfig/custom-filelist.json)0
-rw-r--r--lang/pt/templates/sysconfig/custom-fileselect.json (renamed from lang/pt/sysconfig/custom-fileselect.json)0
-rw-r--r--lang/pt/templates/sysconfig/custom-upload.json (renamed from lang/pt/sysconfig/custom-upload.json)0
-rw-r--r--lang/pt/templates/sysconfig/start.json (renamed from lang/pt/sysconfig/start.json)0
-rw-r--r--lang/pt/templates/systemstatus/_page.json (renamed from lang/pt/systemstatus/_page.json)0
-rw-r--r--lang/pt/templates/systemstatus/addresses.json (renamed from lang/pt/systemstatus/addresses.json)0
-rw-r--r--lang/pt/templates/systemstatus/diskstat.json (renamed from lang/pt/systemstatus/diskstat.json)0
-rw-r--r--lang/pt/templates/systemstatus/services.json (renamed from lang/pt/systemstatus/services.json)0
-rw-r--r--lang/pt/templates/systemstatus/systeminfo.json (renamed from lang/pt/systemstatus/systeminfo.json)0
-rw-r--r--lang/pt/templates/translation/_page.json (renamed from lang/pt/translation/_page.json)0
-rw-r--r--lang/pt/templates/translation/messages.json (renamed from lang/pt/translation/messages.json)0
-rw-r--r--lang/pt/templates/translation/template.json (renamed from lang/pt/translation/template.json)0
-rw-r--r--lang/pt/templates/vmstore/mount.json (renamed from lang/pt/vmstore/mount.json)0
-rw-r--r--modules/translation.inc.php68
133 files changed, 67 insertions, 47 deletions
diff --git a/inc/dictionary.inc.php b/inc/dictionary.inc.php
index 3a157555..5ac0d569 100644
--- a/inc/dictionary.inc.php
+++ b/inc/dictionary.inc.php
@@ -5,6 +5,8 @@ class Dictionary
private static $messageArray;
private static $languages;
+ private static $templateCache = array();
+ private static $hardcodedMessages = false;
public static function init()
{
@@ -53,7 +55,9 @@ class Dictionary
{
if ($lang === false)
$lang = LANG;
- $file = "lang/" . $lang . "/" . $template . ".json";
+ $file = "lang/" . $lang . "/templates/" . $template . ".json";
+ if (isset(self::$templateCache[$file]))
+ return self::$templateCache[$file];
$language = array('lang' => $lang);
$content = @file_get_contents($file);
if ($content === false) // File does not exist for language
@@ -61,13 +65,16 @@ class Dictionary
$json = json_decode($content, true);
if (!is_array($json))
return $language;
- return array_merge($language, $json);
+ return self::$templateCache[$file] = array_merge($language, $json);
}
public static function translate($string)
{
- $hardcoded = json_decode(file_get_contents("lang/" . LANG . "/messages-hardcoded.json"), true);
- return $hardcoded[$string];
+ if (self::$hardcodedMessages === false)
+ self::$hardcodedMessages = @json_decode(@file_get_contents("lang/" . LANG . "/messages-hardcoded.json"), true);
+ if (!isset(self::$hardcodedMessages[$string]))
+ return "(missing: $string :missing)";
+ return self::$hardcodedMessages[$string];
}
public static function getMessages()
@@ -83,3 +90,4 @@ class Dictionary
}
Dictionary::init();
+
diff --git a/inc/util.inc.php b/inc/util.inc.php
index 45a6b684..109c0c5d 100644
--- a/inc/util.inc.php
+++ b/inc/util.inc.php
@@ -103,6 +103,26 @@ class Util
return preg_replace('/[^a-zA-Z0-9_\-]+/', '_', $name);
}
+ public static function safePath($path, $prefix = '')
+ {
+ if (empty($path))
+ return false;
+ $path = trim($path);
+ if ($path{0} == '/' || preg_match('/[\x00-\x19\?\*]/', $path))
+ return false;
+ if (strpos($path, '..') !== false)
+ return false;
+ if (substr($path, 0, 2) !== './')
+ $path = "./$path";
+ if (empty($prefix))
+ return $path;
+ if (substr($prefix, 0, 2) !== './')
+ $prefix = "./$prefix";
+ if (substr($path, 0, strlen($prefix)) !== $prefix)
+ return false;
+ return $path;
+ }
+
/**
* Create human readable error description from a $_FILES[<..>]['error'] code
*
diff --git a/lang/de/dialog-generic.json b/lang/de/templates/dialog-generic.json
index ff429fdd..ff429fdd 100644
--- a/lang/de/dialog-generic.json
+++ b/lang/de/templates/dialog-generic.json
diff --git a/lang/de/main-menu-login.json b/lang/de/templates/main-menu-login.json
index 083d68a7..083d68a7 100644
--- a/lang/de/main-menu-login.json
+++ b/lang/de/templates/main-menu-login.json
diff --git a/lang/de/main-menu-logout.json b/lang/de/templates/main-menu-logout.json
index 6b7ba9ff..6b7ba9ff 100644
--- a/lang/de/main-menu-logout.json
+++ b/lang/de/templates/main-menu-logout.json
diff --git a/lang/de/messagebox-error.json b/lang/de/templates/messagebox-error.json
index c44dc44f..c44dc44f 100644
--- a/lang/de/messagebox-error.json
+++ b/lang/de/templates/messagebox-error.json
diff --git a/lang/de/messagebox-info.json b/lang/de/templates/messagebox-info.json
index 0967ef42..0967ef42 100644
--- a/lang/de/messagebox-info.json
+++ b/lang/de/templates/messagebox-info.json
diff --git a/lang/de/messagebox-success.json b/lang/de/templates/messagebox-success.json
index 0967ef42..0967ef42 100644
--- a/lang/de/messagebox-success.json
+++ b/lang/de/templates/messagebox-success.json
diff --git a/lang/de/messagebox-warning.json b/lang/de/templates/messagebox-warning.json
index 0967ef42..0967ef42 100644
--- a/lang/de/messagebox-warning.json
+++ b/lang/de/templates/messagebox-warning.json
diff --git a/lang/de/minilinux/download.json b/lang/de/templates/minilinux/download.json
index 0967ef42..0967ef42 100644
--- a/lang/de/minilinux/download.json
+++ b/lang/de/templates/minilinux/download.json
diff --git a/lang/de/minilinux/filelist.json b/lang/de/templates/minilinux/filelist.json
index ec659d1e..ec659d1e 100644
--- a/lang/de/minilinux/filelist.json
+++ b/lang/de/templates/minilinux/filelist.json
diff --git a/lang/de/page-adduser.json b/lang/de/templates/page-adduser.json
index 0f446025..0f446025 100644
--- a/lang/de/page-adduser.json
+++ b/lang/de/templates/page-adduser.json
diff --git a/lang/de/page-baseconfig.json b/lang/de/templates/page-baseconfig.json
index fe62ab86..fe62ab86 100644
--- a/lang/de/page-baseconfig.json
+++ b/lang/de/templates/page-baseconfig.json
diff --git a/lang/de/page-login.json b/lang/de/templates/page-login.json
index 03576a07..03576a07 100644
--- a/lang/de/page-login.json
+++ b/lang/de/templates/page-login.json
diff --git a/lang/de/page-main-guest.json b/lang/de/templates/page-main-guest.json
index efd11954..efd11954 100644
--- a/lang/de/page-main-guest.json
+++ b/lang/de/templates/page-main-guest.json
diff --git a/lang/de/page-main.json b/lang/de/templates/page-main.json
index f2db5ac6..f2db5ac6 100644
--- a/lang/de/page-main.json
+++ b/lang/de/templates/page-main.json
diff --git a/lang/de/templates/page-minilinux.json b/lang/de/templates/page-minilinux.json
new file mode 100644
index 00000000..f30f7b76
--- /dev/null
+++ b/lang/de/templates/page-minilinux.json
@@ -0,0 +1,4 @@
+{
+ "lang_errorGetting": "Fehler beim Herunterladen der Liste!",
+ "lang_listObtained": "Liste wird heruntergeladen..."
+} \ No newline at end of file
diff --git a/lang/de/page-news.json b/lang/de/templates/page-news.json
index b25a6b46..b25a6b46 100644
--- a/lang/de/page-news.json
+++ b/lang/de/templates/page-news.json
diff --git a/lang/de/page-remote-tgz-list.json b/lang/de/templates/page-remote-tgz-list.json
index c277826c..c277826c 100644
--- a/lang/de/page-remote-tgz-list.json
+++ b/lang/de/templates/page-remote-tgz-list.json
diff --git a/lang/de/page-syslog.json b/lang/de/templates/page-syslog.json
index 49e94602..49e94602 100644
--- a/lang/de/page-syslog.json
+++ b/lang/de/templates/page-syslog.json
diff --git a/lang/de/page-vmstore.json b/lang/de/templates/page-vmstore.json
index db057d26..db057d26 100644
--- a/lang/de/page-vmstore.json
+++ b/lang/de/templates/page-vmstore.json
diff --git a/lang/de/pagenav.json b/lang/de/templates/pagenav.json
index 0967ef42..0967ef42 100644
--- a/lang/de/pagenav.json
+++ b/lang/de/templates/pagenav.json
diff --git a/lang/de/serversetup/ipaddress.json b/lang/de/templates/serversetup/ipaddress.json
index eb3d34d3..eb3d34d3 100644
--- a/lang/de/serversetup/ipaddress.json
+++ b/lang/de/templates/serversetup/ipaddress.json
diff --git a/lang/de/serversetup/ipxe.json b/lang/de/templates/serversetup/ipxe.json
index 36e49d31..36e49d31 100644
--- a/lang/de/serversetup/ipxe.json
+++ b/lang/de/templates/serversetup/ipxe.json
diff --git a/lang/de/sysconfig/_page.json b/lang/de/templates/sysconfig/_page.json
index 81acaed7..7c10aa8c 100644
--- a/lang/de/sysconfig/_page.json
+++ b/lang/de/templates/sysconfig/_page.json
@@ -1,6 +1,6 @@
{
"lang_activate": "Aktivieren",
- "lang_active": "",
+ "lang_active": "Aktiv",
"lang_availableModules": "Verf\u00fcgbare Konfigurationsmodule",
"lang_availableSystem": "Verf\u00fcgbare Systemkonfigurationen",
"lang_close": "Schlie\u00dfen",
diff --git a/lang/de/sysconfig/ad-checkconnection.json b/lang/de/templates/sysconfig/ad-checkconnection.json
index 17415bc4..17415bc4 100644
--- a/lang/de/sysconfig/ad-checkconnection.json
+++ b/lang/de/templates/sysconfig/ad-checkconnection.json
diff --git a/lang/de/sysconfig/ad-finish.json b/lang/de/templates/sysconfig/ad-finish.json
index e91e98dc..e91e98dc 100644
--- a/lang/de/sysconfig/ad-finish.json
+++ b/lang/de/templates/sysconfig/ad-finish.json
diff --git a/lang/de/sysconfig/ad-start.json b/lang/de/templates/sysconfig/ad-start.json
index cf4aa59d..cf4aa59d 100644
--- a/lang/de/sysconfig/ad-start.json
+++ b/lang/de/templates/sysconfig/ad-start.json
diff --git a/lang/de/sysconfig/branding-check.json b/lang/de/templates/sysconfig/branding-check.json
index 740cc34f..740cc34f 100644
--- a/lang/de/sysconfig/branding-check.json
+++ b/lang/de/templates/sysconfig/branding-check.json
diff --git a/lang/de/sysconfig/branding-start.json b/lang/de/templates/sysconfig/branding-start.json
index 1b7a660b..1b7a660b 100644
--- a/lang/de/sysconfig/branding-start.json
+++ b/lang/de/templates/sysconfig/branding-start.json
diff --git a/lang/de/sysconfig/cfg-finish.json b/lang/de/templates/sysconfig/cfg-finish.json
index 86fb7a15..86fb7a15 100644
--- a/lang/de/sysconfig/cfg-finish.json
+++ b/lang/de/templates/sysconfig/cfg-finish.json
diff --git a/lang/de/sysconfig/cfg-start.json b/lang/de/templates/sysconfig/cfg-start.json
index c5f4c5fa..c5f4c5fa 100644
--- a/lang/de/sysconfig/cfg-start.json
+++ b/lang/de/templates/sysconfig/cfg-start.json
diff --git a/lang/de/sysconfig/custom-filelist.json b/lang/de/templates/sysconfig/custom-filelist.json
index 1a73a858..1a73a858 100644
--- a/lang/de/sysconfig/custom-filelist.json
+++ b/lang/de/templates/sysconfig/custom-filelist.json
diff --git a/lang/de/sysconfig/custom-fileselect.json b/lang/de/templates/sysconfig/custom-fileselect.json
index 94085f65..94085f65 100644
--- a/lang/de/sysconfig/custom-fileselect.json
+++ b/lang/de/templates/sysconfig/custom-fileselect.json
diff --git a/lang/de/sysconfig/custom-upload.json b/lang/de/templates/sysconfig/custom-upload.json
index b41d6748..b41d6748 100644
--- a/lang/de/sysconfig/custom-upload.json
+++ b/lang/de/templates/sysconfig/custom-upload.json
diff --git a/lang/de/sysconfig/start.json b/lang/de/templates/sysconfig/start.json
index 37992831..37992831 100644
--- a/lang/de/sysconfig/start.json
+++ b/lang/de/templates/sysconfig/start.json
diff --git a/lang/de/systemstatus/_page.json b/lang/de/templates/systemstatus/_page.json
index b0d31f0c..b0d31f0c 100644
--- a/lang/de/systemstatus/_page.json
+++ b/lang/de/templates/systemstatus/_page.json
diff --git a/lang/de/systemstatus/addresses.json b/lang/de/templates/systemstatus/addresses.json
index 0967ef42..0967ef42 100644
--- a/lang/de/systemstatus/addresses.json
+++ b/lang/de/templates/systemstatus/addresses.json
diff --git a/lang/de/systemstatus/diskstat.json b/lang/de/templates/systemstatus/diskstat.json
index 3d2f28ba..3d2f28ba 100644
--- a/lang/de/systemstatus/diskstat.json
+++ b/lang/de/templates/systemstatus/diskstat.json
diff --git a/lang/de/systemstatus/services.json b/lang/de/templates/systemstatus/services.json
index 0967ef42..0967ef42 100644
--- a/lang/de/systemstatus/services.json
+++ b/lang/de/templates/systemstatus/services.json
diff --git a/lang/de/systemstatus/systeminfo.json b/lang/de/templates/systemstatus/systeminfo.json
index cd4027f1..cd4027f1 100644
--- a/lang/de/systemstatus/systeminfo.json
+++ b/lang/de/templates/systemstatus/systeminfo.json
diff --git a/lang/de/translation/_page.json b/lang/de/templates/translation/_page.json
index 94e448c2..94e448c2 100644
--- a/lang/de/translation/_page.json
+++ b/lang/de/templates/translation/_page.json
diff --git a/lang/de/translation/messages.json b/lang/de/templates/translation/messages.json
index 656c7e15..656c7e15 100644
--- a/lang/de/translation/messages.json
+++ b/lang/de/templates/translation/messages.json
diff --git a/lang/de/translation/template.json b/lang/de/templates/translation/template.json
index 8f3dfb66..8f3dfb66 100644
--- a/lang/de/translation/template.json
+++ b/lang/de/templates/translation/template.json
diff --git a/lang/de/vmstore/mount.json b/lang/de/templates/vmstore/mount.json
index dbc75281..dbc75281 100644
--- a/lang/de/vmstore/mount.json
+++ b/lang/de/templates/vmstore/mount.json
diff --git a/lang/en/dialog-generic.json b/lang/en/templates/dialog-generic.json
index c7551ed3..c7551ed3 100644
--- a/lang/en/dialog-generic.json
+++ b/lang/en/templates/dialog-generic.json
diff --git a/lang/en/main-menu-login.json b/lang/en/templates/main-menu-login.json
index 26391c9f..26391c9f 100644
--- a/lang/en/main-menu-login.json
+++ b/lang/en/templates/main-menu-login.json
diff --git a/lang/en/main-menu-logout.json b/lang/en/templates/main-menu-logout.json
index 54d7831e..54d7831e 100644
--- a/lang/en/main-menu-logout.json
+++ b/lang/en/templates/main-menu-logout.json
diff --git a/lang/en/messagebox-error.json b/lang/en/templates/messagebox-error.json
index c44dc44f..c44dc44f 100644
--- a/lang/en/messagebox-error.json
+++ b/lang/en/templates/messagebox-error.json
diff --git a/lang/en/messagebox-info.json b/lang/en/templates/messagebox-info.json
index 2c63c085..2c63c085 100644
--- a/lang/en/messagebox-info.json
+++ b/lang/en/templates/messagebox-info.json
diff --git a/lang/en/messagebox-success.json b/lang/en/templates/messagebox-success.json
index 2c63c085..2c63c085 100644
--- a/lang/en/messagebox-success.json
+++ b/lang/en/templates/messagebox-success.json
diff --git a/lang/en/messagebox-warning.json b/lang/en/templates/messagebox-warning.json
index 2c63c085..2c63c085 100644
--- a/lang/en/messagebox-warning.json
+++ b/lang/en/templates/messagebox-warning.json
diff --git a/lang/en/minilinux/download.json b/lang/en/templates/minilinux/download.json
index 2c63c085..2c63c085 100644
--- a/lang/en/minilinux/download.json
+++ b/lang/en/templates/minilinux/download.json
diff --git a/lang/en/minilinux/filelist.json b/lang/en/templates/minilinux/filelist.json
index 11835c10..11835c10 100644
--- a/lang/en/minilinux/filelist.json
+++ b/lang/en/templates/minilinux/filelist.json
diff --git a/lang/en/page-adduser.json b/lang/en/templates/page-adduser.json
index 42bae6dc..42bae6dc 100644
--- a/lang/en/page-adduser.json
+++ b/lang/en/templates/page-adduser.json
diff --git a/lang/en/page-baseconfig.json b/lang/en/templates/page-baseconfig.json
index dfd235b5..dfd235b5 100644
--- a/lang/en/page-baseconfig.json
+++ b/lang/en/templates/page-baseconfig.json
diff --git a/lang/en/page-login.json b/lang/en/templates/page-login.json
index 4b192a7a..4b192a7a 100644
--- a/lang/en/page-login.json
+++ b/lang/en/templates/page-login.json
diff --git a/lang/en/page-main-guest.json b/lang/en/templates/page-main-guest.json
index 8676d0d4..8676d0d4 100644
--- a/lang/en/page-main-guest.json
+++ b/lang/en/templates/page-main-guest.json
diff --git a/lang/en/page-main.json b/lang/en/templates/page-main.json
index 86f4eb52..86f4eb52 100644
--- a/lang/en/page-main.json
+++ b/lang/en/templates/page-main.json
diff --git a/lang/de/page-minilinux.json b/lang/en/templates/page-minilinux.json
index 087e01be..087e01be 100644
--- a/lang/de/page-minilinux.json
+++ b/lang/en/templates/page-minilinux.json
diff --git a/lang/en/page-news.json b/lang/en/templates/page-news.json
index ab925ccc..ab925ccc 100644
--- a/lang/en/page-news.json
+++ b/lang/en/templates/page-news.json
diff --git a/lang/en/page-remote-tgz-list.json b/lang/en/templates/page-remote-tgz-list.json
index 22f0fd53..22f0fd53 100644
--- a/lang/en/page-remote-tgz-list.json
+++ b/lang/en/templates/page-remote-tgz-list.json
diff --git a/lang/en/page-syslog.json b/lang/en/templates/page-syslog.json
index 71f61693..71f61693 100644
--- a/lang/en/page-syslog.json
+++ b/lang/en/templates/page-syslog.json
diff --git a/lang/en/page-vmstore.json b/lang/en/templates/page-vmstore.json
index 667b8734..667b8734 100644
--- a/lang/en/page-vmstore.json
+++ b/lang/en/templates/page-vmstore.json
diff --git a/lang/en/pagenav.json b/lang/en/templates/pagenav.json
index 2c63c085..2c63c085 100644
--- a/lang/en/pagenav.json
+++ b/lang/en/templates/pagenav.json
diff --git a/lang/en/serversetup/ipaddress.json b/lang/en/templates/serversetup/ipaddress.json
index 699aeacc..699aeacc 100644
--- a/lang/en/serversetup/ipaddress.json
+++ b/lang/en/templates/serversetup/ipaddress.json
diff --git a/lang/en/serversetup/ipxe.json b/lang/en/templates/serversetup/ipxe.json
index 1ab18e14..1ab18e14 100644
--- a/lang/en/serversetup/ipxe.json
+++ b/lang/en/templates/serversetup/ipxe.json
diff --git a/lang/en/sysconfig/_page.json b/lang/en/templates/sysconfig/_page.json
index 679514c2..679514c2 100644
--- a/lang/en/sysconfig/_page.json
+++ b/lang/en/templates/sysconfig/_page.json
diff --git a/lang/en/sysconfig/ad-checkconnection.json b/lang/en/templates/sysconfig/ad-checkconnection.json
index 5ae50d59..5ae50d59 100644
--- a/lang/en/sysconfig/ad-checkconnection.json
+++ b/lang/en/templates/sysconfig/ad-checkconnection.json
diff --git a/lang/en/sysconfig/ad-finish.json b/lang/en/templates/sysconfig/ad-finish.json
index 8f89046e..8f89046e 100644
--- a/lang/en/sysconfig/ad-finish.json
+++ b/lang/en/templates/sysconfig/ad-finish.json
diff --git a/lang/en/sysconfig/ad-start.json b/lang/en/templates/sysconfig/ad-start.json
index f40c6939..f40c6939 100644
--- a/lang/en/sysconfig/ad-start.json
+++ b/lang/en/templates/sysconfig/ad-start.json
diff --git a/lang/en/sysconfig/branding-check.json b/lang/en/templates/sysconfig/branding-check.json
index 6a481d8b..6a481d8b 100644
--- a/lang/en/sysconfig/branding-check.json
+++ b/lang/en/templates/sysconfig/branding-check.json
diff --git a/lang/en/sysconfig/branding-start.json b/lang/en/templates/sysconfig/branding-start.json
index f419f5a4..f419f5a4 100644
--- a/lang/en/sysconfig/branding-start.json
+++ b/lang/en/templates/sysconfig/branding-start.json
diff --git a/lang/en/sysconfig/cfg-finish.json b/lang/en/templates/sysconfig/cfg-finish.json
index b8729636..b8729636 100644
--- a/lang/en/sysconfig/cfg-finish.json
+++ b/lang/en/templates/sysconfig/cfg-finish.json
diff --git a/lang/en/sysconfig/cfg-start.json b/lang/en/templates/sysconfig/cfg-start.json
index 8ab46f37..8ab46f37 100644
--- a/lang/en/sysconfig/cfg-start.json
+++ b/lang/en/templates/sysconfig/cfg-start.json
diff --git a/lang/en/sysconfig/custom-filelist.json b/lang/en/templates/sysconfig/custom-filelist.json
index 50bec5b5..50bec5b5 100644
--- a/lang/en/sysconfig/custom-filelist.json
+++ b/lang/en/templates/sysconfig/custom-filelist.json
diff --git a/lang/en/sysconfig/custom-fileselect.json b/lang/en/templates/sysconfig/custom-fileselect.json
index 2ae25e16..2ae25e16 100644
--- a/lang/en/sysconfig/custom-fileselect.json
+++ b/lang/en/templates/sysconfig/custom-fileselect.json
diff --git a/lang/en/sysconfig/custom-upload.json b/lang/en/templates/sysconfig/custom-upload.json
index a568be7c..a568be7c 100644
--- a/lang/en/sysconfig/custom-upload.json
+++ b/lang/en/templates/sysconfig/custom-upload.json
diff --git a/lang/en/sysconfig/start.json b/lang/en/templates/sysconfig/start.json
index 4567d649..4567d649 100644
--- a/lang/en/sysconfig/start.json
+++ b/lang/en/templates/sysconfig/start.json
diff --git a/lang/en/systemstatus/_page.json b/lang/en/templates/systemstatus/_page.json
index df976df4..df976df4 100644
--- a/lang/en/systemstatus/_page.json
+++ b/lang/en/templates/systemstatus/_page.json
diff --git a/lang/en/systemstatus/addresses.json b/lang/en/templates/systemstatus/addresses.json
index 2c63c085..2c63c085 100644
--- a/lang/en/systemstatus/addresses.json
+++ b/lang/en/templates/systemstatus/addresses.json
diff --git a/lang/en/systemstatus/diskstat.json b/lang/en/templates/systemstatus/diskstat.json
index 50dfc383..50dfc383 100644
--- a/lang/en/systemstatus/diskstat.json
+++ b/lang/en/templates/systemstatus/diskstat.json
diff --git a/lang/en/systemstatus/services.json b/lang/en/templates/systemstatus/services.json
index 2c63c085..2c63c085 100644
--- a/lang/en/systemstatus/services.json
+++ b/lang/en/templates/systemstatus/services.json
diff --git a/lang/en/systemstatus/systeminfo.json b/lang/en/templates/systemstatus/systeminfo.json
index 602693f5..602693f5 100644
--- a/lang/en/systemstatus/systeminfo.json
+++ b/lang/en/templates/systemstatus/systeminfo.json
diff --git a/lang/en/translation/_page.json b/lang/en/templates/translation/_page.json
index 1c84d34c..1c84d34c 100644
--- a/lang/en/translation/_page.json
+++ b/lang/en/templates/translation/_page.json
diff --git a/lang/en/translation/messages.json b/lang/en/templates/translation/messages.json
index 433e9cdf..433e9cdf 100644
--- a/lang/en/translation/messages.json
+++ b/lang/en/templates/translation/messages.json
diff --git a/lang/en/translation/template.json b/lang/en/templates/translation/template.json
index ad07a8b6..ad07a8b6 100644
--- a/lang/en/translation/template.json
+++ b/lang/en/templates/translation/template.json
diff --git a/lang/en/vmstore/mount.json b/lang/en/templates/vmstore/mount.json
index 29814430..29814430 100644
--- a/lang/en/vmstore/mount.json
+++ b/lang/en/templates/vmstore/mount.json
diff --git a/lang/pt/page-minilinux.json b/lang/pt/page-minilinux.json
deleted file mode 100644
index 087e01be..00000000
--- a/lang/pt/page-minilinux.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "lang_errorGetting": "",
- "lang_listObtained": ""
-} \ No newline at end of file
diff --git a/lang/pt/dialog-generic.json b/lang/pt/templates/dialog-generic.json
index 3fff2478..3fff2478 100644
--- a/lang/pt/dialog-generic.json
+++ b/lang/pt/templates/dialog-generic.json
diff --git a/lang/pt/main-menu-login.json b/lang/pt/templates/main-menu-login.json
index 460a9180..460a9180 100644
--- a/lang/pt/main-menu-login.json
+++ b/lang/pt/templates/main-menu-login.json
diff --git a/lang/pt/main-menu-logout.json b/lang/pt/templates/main-menu-logout.json
index d329ac47..d329ac47 100644
--- a/lang/pt/main-menu-logout.json
+++ b/lang/pt/templates/main-menu-logout.json
diff --git a/lang/pt/messagebox-error.json b/lang/pt/templates/messagebox-error.json
index c44dc44f..c44dc44f 100644
--- a/lang/pt/messagebox-error.json
+++ b/lang/pt/templates/messagebox-error.json
diff --git a/lang/pt/messagebox-info.json b/lang/pt/templates/messagebox-info.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/messagebox-info.json
+++ b/lang/pt/templates/messagebox-info.json
diff --git a/lang/pt/messagebox-success.json b/lang/pt/templates/messagebox-success.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/messagebox-success.json
+++ b/lang/pt/templates/messagebox-success.json
diff --git a/lang/pt/messagebox-warning.json b/lang/pt/templates/messagebox-warning.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/messagebox-warning.json
+++ b/lang/pt/templates/messagebox-warning.json
diff --git a/lang/pt/minilinux/download.json b/lang/pt/templates/minilinux/download.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/minilinux/download.json
+++ b/lang/pt/templates/minilinux/download.json
diff --git a/lang/pt/minilinux/filelist.json b/lang/pt/templates/minilinux/filelist.json
index c7ce8965..c7ce8965 100644
--- a/lang/pt/minilinux/filelist.json
+++ b/lang/pt/templates/minilinux/filelist.json
diff --git a/lang/pt/page-adduser.json b/lang/pt/templates/page-adduser.json
index 524f3dd5..524f3dd5 100644
--- a/lang/pt/page-adduser.json
+++ b/lang/pt/templates/page-adduser.json
diff --git a/lang/pt/page-baseconfig.json b/lang/pt/templates/page-baseconfig.json
index fc1e8508..fc1e8508 100644
--- a/lang/pt/page-baseconfig.json
+++ b/lang/pt/templates/page-baseconfig.json
diff --git a/lang/pt/page-login.json b/lang/pt/templates/page-login.json
index 3d1e19eb..3d1e19eb 100644
--- a/lang/pt/page-login.json
+++ b/lang/pt/templates/page-login.json
diff --git a/lang/pt/page-main-guest.json b/lang/pt/templates/page-main-guest.json
index 0e20f03b..0e20f03b 100644
--- a/lang/pt/page-main-guest.json
+++ b/lang/pt/templates/page-main-guest.json
diff --git a/lang/pt/page-main.json b/lang/pt/templates/page-main.json
index e14b2663..e14b2663 100644
--- a/lang/pt/page-main.json
+++ b/lang/pt/templates/page-main.json
diff --git a/lang/en/page-minilinux.json b/lang/pt/templates/page-minilinux.json
index 087e01be..087e01be 100644
--- a/lang/en/page-minilinux.json
+++ b/lang/pt/templates/page-minilinux.json
diff --git a/lang/pt/page-news.json b/lang/pt/templates/page-news.json
index 3c03cb34..3c03cb34 100644
--- a/lang/pt/page-news.json
+++ b/lang/pt/templates/page-news.json
diff --git a/lang/pt/page-remote-tgz-list.json b/lang/pt/templates/page-remote-tgz-list.json
index ce3b52b0..ce3b52b0 100644
--- a/lang/pt/page-remote-tgz-list.json
+++ b/lang/pt/templates/page-remote-tgz-list.json
diff --git a/lang/pt/page-syslog.json b/lang/pt/templates/page-syslog.json
index 432c065d..432c065d 100644
--- a/lang/pt/page-syslog.json
+++ b/lang/pt/templates/page-syslog.json
diff --git a/lang/pt/page-vmstore.json b/lang/pt/templates/page-vmstore.json
index 334c9881..334c9881 100644
--- a/lang/pt/page-vmstore.json
+++ b/lang/pt/templates/page-vmstore.json
diff --git a/lang/pt/pagenav.json b/lang/pt/templates/pagenav.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/pagenav.json
+++ b/lang/pt/templates/pagenav.json
diff --git a/lang/pt/serversetup/ipaddress.json b/lang/pt/templates/serversetup/ipaddress.json
index 57eb2070..57eb2070 100644
--- a/lang/pt/serversetup/ipaddress.json
+++ b/lang/pt/templates/serversetup/ipaddress.json
diff --git a/lang/pt/serversetup/ipxe.json b/lang/pt/templates/serversetup/ipxe.json
index 4c0c8fa5..4c0c8fa5 100644
--- a/lang/pt/serversetup/ipxe.json
+++ b/lang/pt/templates/serversetup/ipxe.json
diff --git a/lang/pt/sysconfig/_page.json b/lang/pt/templates/sysconfig/_page.json
index b0c1f8e9..b0c1f8e9 100644
--- a/lang/pt/sysconfig/_page.json
+++ b/lang/pt/templates/sysconfig/_page.json
diff --git a/lang/pt/sysconfig/ad-checkconnection.json b/lang/pt/templates/sysconfig/ad-checkconnection.json
index cf1fbfba..cf1fbfba 100644
--- a/lang/pt/sysconfig/ad-checkconnection.json
+++ b/lang/pt/templates/sysconfig/ad-checkconnection.json
diff --git a/lang/pt/sysconfig/ad-finish.json b/lang/pt/templates/sysconfig/ad-finish.json
index 5345410c..5345410c 100644
--- a/lang/pt/sysconfig/ad-finish.json
+++ b/lang/pt/templates/sysconfig/ad-finish.json
diff --git a/lang/pt/sysconfig/ad-start.json b/lang/pt/templates/sysconfig/ad-start.json
index e9f4c887..e9f4c887 100644
--- a/lang/pt/sysconfig/ad-start.json
+++ b/lang/pt/templates/sysconfig/ad-start.json
diff --git a/lang/pt/sysconfig/branding-check.json b/lang/pt/templates/sysconfig/branding-check.json
index c1500f55..c1500f55 100644
--- a/lang/pt/sysconfig/branding-check.json
+++ b/lang/pt/templates/sysconfig/branding-check.json
diff --git a/lang/pt/sysconfig/branding-start.json b/lang/pt/templates/sysconfig/branding-start.json
index 84f4b687..84f4b687 100644
--- a/lang/pt/sysconfig/branding-start.json
+++ b/lang/pt/templates/sysconfig/branding-start.json
diff --git a/lang/pt/sysconfig/cfg-finish.json b/lang/pt/templates/sysconfig/cfg-finish.json
index fb3a55d5..fb3a55d5 100644
--- a/lang/pt/sysconfig/cfg-finish.json
+++ b/lang/pt/templates/sysconfig/cfg-finish.json
diff --git a/lang/pt/sysconfig/cfg-start.json b/lang/pt/templates/sysconfig/cfg-start.json
index 7b980f3c..7b980f3c 100644
--- a/lang/pt/sysconfig/cfg-start.json
+++ b/lang/pt/templates/sysconfig/cfg-start.json
diff --git a/lang/pt/sysconfig/custom-filelist.json b/lang/pt/templates/sysconfig/custom-filelist.json
index fc42bed6..fc42bed6 100644
--- a/lang/pt/sysconfig/custom-filelist.json
+++ b/lang/pt/templates/sysconfig/custom-filelist.json
diff --git a/lang/pt/sysconfig/custom-fileselect.json b/lang/pt/templates/sysconfig/custom-fileselect.json
index 01512cbb..01512cbb 100644
--- a/lang/pt/sysconfig/custom-fileselect.json
+++ b/lang/pt/templates/sysconfig/custom-fileselect.json
diff --git a/lang/pt/sysconfig/custom-upload.json b/lang/pt/templates/sysconfig/custom-upload.json
index db1cd58f..db1cd58f 100644
--- a/lang/pt/sysconfig/custom-upload.json
+++ b/lang/pt/templates/sysconfig/custom-upload.json
diff --git a/lang/pt/sysconfig/start.json b/lang/pt/templates/sysconfig/start.json
index 7cca8df0..7cca8df0 100644
--- a/lang/pt/sysconfig/start.json
+++ b/lang/pt/templates/sysconfig/start.json
diff --git a/lang/pt/systemstatus/_page.json b/lang/pt/templates/systemstatus/_page.json
index d1cd9451..d1cd9451 100644
--- a/lang/pt/systemstatus/_page.json
+++ b/lang/pt/templates/systemstatus/_page.json
diff --git a/lang/pt/systemstatus/addresses.json b/lang/pt/templates/systemstatus/addresses.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/systemstatus/addresses.json
+++ b/lang/pt/templates/systemstatus/addresses.json
diff --git a/lang/pt/systemstatus/diskstat.json b/lang/pt/templates/systemstatus/diskstat.json
index 555b38aa..555b38aa 100644
--- a/lang/pt/systemstatus/diskstat.json
+++ b/lang/pt/templates/systemstatus/diskstat.json
diff --git a/lang/pt/systemstatus/services.json b/lang/pt/templates/systemstatus/services.json
index 0967ef42..0967ef42 100644
--- a/lang/pt/systemstatus/services.json
+++ b/lang/pt/templates/systemstatus/services.json
diff --git a/lang/pt/systemstatus/systeminfo.json b/lang/pt/templates/systemstatus/systeminfo.json
index 75fdcca3..75fdcca3 100644
--- a/lang/pt/systemstatus/systeminfo.json
+++ b/lang/pt/templates/systemstatus/systeminfo.json
diff --git a/lang/pt/translation/_page.json b/lang/pt/templates/translation/_page.json
index af575a4d..af575a4d 100644
--- a/lang/pt/translation/_page.json
+++ b/lang/pt/templates/translation/_page.json
diff --git a/lang/pt/translation/messages.json b/lang/pt/templates/translation/messages.json
index cb5fc59b..cb5fc59b 100644
--- a/lang/pt/translation/messages.json
+++ b/lang/pt/templates/translation/messages.json
diff --git a/lang/pt/translation/template.json b/lang/pt/templates/translation/template.json
index 008da819..008da819 100644
--- a/lang/pt/translation/template.json
+++ b/lang/pt/templates/translation/template.json
diff --git a/lang/pt/vmstore/mount.json b/lang/pt/templates/vmstore/mount.json
index 0a103374..0a103374 100644
--- a/lang/pt/vmstore/mount.json
+++ b/lang/pt/templates/vmstore/mount.json
diff --git a/modules/translation.inc.php b/modules/translation.inc.php
index a5852826..428fe2d3 100644
--- a/modules/translation.inc.php
+++ b/modules/translation.inc.php
@@ -26,21 +26,10 @@ class Page_Translation extends Page
Util::redirect('?do=Main');
}
- if (Request::get('template')) {
- $this->template = Request::get('template');
- }
-
- if (Request::get('page')) {
- $this->page = Request::get('page');
- }
-
- if (Request::get('delete')) {
- $this->delete = Request::get('delete');
- }
-
- if (Request::post('update')) {
- $this->update = Request::post('update');
- }
+ $this->template = Request::get('template');
+ $this->page = Request::get('page');
+ $this->delete = Request::get('delete');
+ $this->update = Request::post('update');
}
protected function doRender()
@@ -57,17 +46,20 @@ class Page_Translation extends Page
case 'messages':
//renders the message edition page
Render::addTemplate('translation/messages', array(
- 'token' => Session::get('token'),
'msgs' => $this->initMsg(false),
'msgsHC' => $this->initMsg(true)
));
break;
case 'templates':
+ $this->template = Util::safePath($this->template);
+ if ($this->template === false) {
+ Message::addError('invalid-path');
+ Util::redirect('?do=Translation');
+ }
//renders the tag edition page
if ($this->templateAnalysis($this->template)) {
Render::addTemplate('translation/template', array(
- 'token' => Session::get('token'),
- 'template' => $this->template,
+ 'template' => 'templates/' . $this->template,
'tags' => $this->tags
));
break;
@@ -75,7 +67,6 @@ class Page_Translation extends Page
default:
//renders the template selection page
Render::addTemplate('translation/_page', array(
- 'token' => Session::get('token'),
'table' => $this->initTable(),
));
}
@@ -92,12 +83,13 @@ class Page_Translation extends Page
//loads every template
$files = $this->listTemplates();
//loads every json from each language
- $de = $this->listJson('de/');
- $en = $this->listJson('en/');
- $pt = $this->listJson('pt/');
+ $de = $this->listJson('de/templates/');
+ $en = $this->listJson('en/templates/');
+ $pt = $this->listJson('pt/templates/');
//checks the JSON tags from every language
foreach ($files as $key => $value) {
+ // Don't list templates without lang tags
$tmp = $this->checkJson($de[$key], 'de');
if ($tmp === false) // TODO: Pretty solution
continue;
@@ -123,10 +115,9 @@ class Page_Translation extends Page
$dir = 'templates/';
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($objects as $name => $object) {
- if (array_pop(explode('.', $name)) === 'html') {
- $key = str_replace($dir, '', $name);
- $key = str_replace('.html', '', $key);
- $files[$key] = $name;
+ if (substr($name, -5) === '.html') {
+ $key = substr($name, strlen($dir), -5);
+ $files[$key] = substr($name, strlen($dir));
}
}
return $files;
@@ -143,9 +134,9 @@ class Page_Translation extends Page
$dir = 'lang/' . $lang;
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($objects as $name => $object) {
- if (array_pop(explode('.', $name)) === 'json') {
+ if (substr($name, -5) === '.json') {
$key = str_replace($dir, '', $name);
- $key = str_replace('.json', '', $key);
+ $key = substr($key, 0, -5);
$json[$key] = $key;
}
}
@@ -165,7 +156,7 @@ class Page_Translation extends Page
return "JSON file is missing";
}
//loads a template and find all its tags
- $htmlTemplate = file_get_contents('templates/' . $path . '.html');
+ $htmlTemplate = @file_get_contents("templates/$path.html");
if (preg_match_all('/{{lang_(.*?)}}/s', $htmlTemplate, $matches) == 0)
return false;
$htmlCount = count(array_unique($matches[1]));
@@ -208,14 +199,15 @@ class Page_Translation extends Page
*/
private function templateAnalysis($path)
{
+ $templateFile = "templates/$path.html";
//checks if the template is valid
- if (!file_exists('templates/' . $path . '.html')) {
- Message::addError('invalid-template');
+ if (!file_exists($templateFile)) {
+ Message::addError('invalid-template', $templateFile);
return false;
}
//finds every mustache tag within the html template
- $htmlTemplate = file_get_contents('templates/' . $path . '.html');
+ $htmlTemplate = file_get_contents($templateFile);
preg_match_all('/{{(lang_.*?)}}/s', $htmlTemplate, $matches);
$tags = array_flip($matches[1]);
@@ -235,8 +227,6 @@ class Page_Translation extends Page
unset($json['lang']);
//merges the arrays to keep the unique tags
$test = array_merge($json, $tags);
- //echo "TEST:\n";
- //print_r($test);
//loads the content of every JSON tag from the specified language
foreach (array_keys($test) as $tag) {
$this->tags[] = array(
@@ -247,7 +237,6 @@ class Page_Translation extends Page
'class' => $this->checkJsonTags($path, $tag)
);
}
- //echo "TAGS:\n";
//print_r($this->tags);
return true;
@@ -325,7 +314,6 @@ class Page_Translation extends Page
}
if ($tag !== 'newtag') {
$json[$lang][$tag] = $value;
- error_log("Setting \$json['$lang']['$tag'] = '$value';");
} else {
$json[$lang][$_REQUEST['newtag']] = $value;
}
@@ -336,7 +324,11 @@ class Page_Translation extends Page
//saves the new values on the file
foreach ($json as $key => $array) {
- $path = 'lang/' . $key . '/' . $_POST['path'] . '.json'; // TODO: Wtf? Unvalidated user input -> filesystem access!
+ $path = Util::safePath('lang/' . $key . '/' . Request::post('path') . '.json');
+ if ($path === false) {
+ Message::addError('invalid-path');
+ Util::redirect('?do=Translation');
+ }
ksort($array); // Sort by key, so the diff on the output is cleaner
error_log("Converting " . print_r($array, true));
$json = up_json_encode($array, JSON_PRETTY_PRINT); // Also for better diffability of the json files, we pretty print
@@ -386,7 +378,7 @@ class Page_Translation extends Page
private function deleteTag($path, $tag)
{
//delete the tag from every language file
- $langArray = unserialize(SITE_LANGUAGES);
+ $langArray = Dictionary::getLanguages();
foreach ($langArray as $lang) {
$json = Dictionary::getArrayTemplate($path, $lang);
unset($json[$tag]);