diff --git a/GameEngine/Lang/en.php b/GameEngine/Lang/en.php
index 366349db..49c243be 100755
--- a/GameEngine/Lang/en.php
+++ b/GameEngine/Lang/en.php
@@ -2211,6 +2211,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', 'In the village you can build bu
tz_def('TZ_IRON_25_5_GOLD', 'Iron +25% (5 gold)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (yy/mm/dd 24h)');
tz_def('TZ_ITALIAN', 'Italian');
+tz_def('TZ_SPANISH', 'Spanish');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', 'I activated Plus, but production did not increase.');
tz_def('TZ_JOIN_AN_ALLIANCE', 'Join an alliance');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', 'Join an alliance or found one on your own.');
diff --git a/GameEngine/Lang/es.php b/GameEngine/Lang/es.php
index 5ee394c6..a99a3e1e 100644
--- a/GameEngine/Lang/es.php
+++ b/GameEngine/Lang/es.php
@@ -2211,6 +2211,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', 'In the village you can build bu
tz_def('TZ_IRON_25_5_GOLD', 'Iron +25% (5 gold)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (yy/mm/dd 24h)');
tz_def('TZ_ITALIAN', 'Italian');
+tz_def('TZ_SPANISH', 'Español');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', 'I activated Plus, but production did not increase.');
tz_def('TZ_JOIN_AN_ALLIANCE', 'Join an alliance');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', 'Join an alliance or found one on your own.');
diff --git a/GameEngine/Lang/fr.php b/GameEngine/Lang/fr.php
index 1e610dd0..3d71a780 100644
--- a/GameEngine/Lang/fr.php
+++ b/GameEngine/Lang/fr.php
@@ -2218,6 +2218,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', 'Dans le village vous pouvez con
tz_def('TZ_IRON_25_5_GOLD', 'Fer +25% (5 or)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (aa/mm/jj 24h)');
tz_def('TZ_ITALIAN', 'Italien');
+tz_def('TZ_SPANISH', 'Espagnol');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', 'J\'ai activé Plus, mais la production n\'a pas augmenté.');
tz_def('TZ_JOIN_AN_ALLIANCE', 'Rejoindre une alliance');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', 'Rejoignez une alliance ou fondez la vôtre.');
diff --git a/GameEngine/Lang/it.php b/GameEngine/Lang/it.php
index 48bcfdf7..19a1977f 100755
--- a/GameEngine/Lang/it.php
+++ b/GameEngine/Lang/it.php
@@ -1874,6 +1874,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', 'Nel villaggio puoi costruire ed
tz_def('TZ_IRON_25_5_GOLD', 'Ferro +25% (5 oro)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (aa/mm/gg 24h)');
tz_def('TZ_ITALIAN', 'Italiano');
+tz_def('TZ_SPANISH', 'Spagnolo');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', 'Ho attivato Plus, ma la produzione non è aumentata.');
tz_def('TZ_JOIN_AN_ALLIANCE', 'Unisciti a un\'alleanza');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', 'Unisciti a un\'alleanza o fondane una tua.');
diff --git a/GameEngine/Lang/ro.php b/GameEngine/Lang/ro.php
index 02bf3ed2..d54e07f9 100644
--- a/GameEngine/Lang/ro.php
+++ b/GameEngine/Lang/ro.php
@@ -2178,6 +2178,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', 'În sat poți construi clădiri
tz_def('TZ_IRON_25_5_GOLD', 'Fier +25% (5 aur)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (aa/ll/zz 24h)');
tz_def('TZ_ITALIAN', 'Italiană');
+tz_def('TZ_SPANISH', 'Spaniola');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', 'Am activat Plus, dar producția nu a crescut.');
tz_def('TZ_JOIN_AN_ALLIANCE', 'Alătură-te unei alianțe');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', 'Alătură-te unei alianțe sau întemeiază una proprie.');
diff --git a/GameEngine/Lang/zh.php b/GameEngine/Lang/zh.php
index 35129dd7..db157db9 100644
--- a/GameEngine/Lang/zh.php
+++ b/GameEngine/Lang/zh.php
@@ -1979,6 +1979,7 @@ tz_def('TZ_IN_THE_VILLAGE_YOU_CAN_BUILD_BUILD', '在村庄中您可以建造建
tz_def('TZ_IRON_25_5_GOLD', '铁 +25%(5 金币)');
tz_def('TZ_ISO_YY_MM_DD_24H', 'ISO (yy/mm/dd 24h)');
tz_def('TZ_ITALIAN', '意大利语');
+tz_def('TZ_SPANISH', '西班牙语');
tz_def('TZ_I_ACTIVATED_PLUS_BUT_PRODUCTION_DI', '我激活了 Plus,但产量没有增加。');
tz_def('TZ_JOIN_AN_ALLIANCE', '加入联盟');
tz_def('TZ_JOIN_AN_ALLIANCE_OR_FOUND_ONE_ON_Y', '加入联盟或自己创建一个。');
diff --git a/GameEngine/Profile.php b/GameEngine/Profile.php
index 63e569de..63946456 100755
--- a/GameEngine/Profile.php
+++ b/GameEngine/Profile.php
@@ -97,10 +97,20 @@ class Profile {
unset($_SESSION[$cacheKeyUser]);
// Game language.
- $allowed = ['en', 'fr', 'it', 'ro', 'zh'];
+ //
+ // Lista NU mai e scrisa de mana: se accepta orice limba care are fisier
+ // in GameEngine/Lang/. Inainte, adaugarea unei limbi noi cerea si o
+ // modificare aici, altfel alegerea jucatorului era respinsa in tacere -
+ // exact ce s-a intamplat cu spaniola.
+ //
+ // Tiparul e acelasi cu cel din panou (editServerSet): doua litere mici
+ // si fisierul sa existe. Verificarea pe nume opreste orice incercare de
+ // a iesi din folder.
if (!empty($post['lang'])) {
$lang = strtolower(trim($post['lang']));
- if (in_array($lang, $allowed, true)) {
+
+ if (preg_match('/^[a-z]{2}$/', $lang)
+ && is_file(__DIR__ . '/Lang/' . $lang . '.php')) {
$database->updateUserField($session->uid, "lang", $lang, 1);
$_SESSION['lang'] = $lang;
$session->userinfo['lang'] = $lang;
diff --git a/Templates/Profile/preference.tpl b/Templates/Profile/preference.tpl
index 19493edf..12b5ac86 100644
--- a/Templates/Profile/preference.tpl
+++ b/Templates/Profile/preference.tpl
@@ -532,7 +532,7 @@ if(isset($_POST['lang']))
+