diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties
index 9d6a0a717..290cec4ce 100644
--- a/src/main/resources/messages_ar_AR.properties
+++ b/src/main/resources/messages_ar_AR.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties
index 99725d389..99075d553 100644
--- a/src/main/resources/messages_ca_CA.properties
+++ b/src/main/resources/messages_ca_CA.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties
index e1e316328..43c24f654 100644
--- a/src/main/resources/messages_de_DE.properties
+++ b/src/main/resources/messages_de_DE.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties
index d1abe2d4c..05a4bd912 100644
--- a/src/main/resources/messages_en_GB.properties
+++ b/src/main/resources/messages_en_GB.properties
@@ -308,6 +308,15 @@ showJS.tags=Redact,Hide,black out,black,marker,hidden
 #       WEB PAGES         #
 #                         #
 ###########################
+#login
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
 #auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties
index 96f082fff..dc7c93f8c 100644
--- a/src/main/resources/messages_en_US.properties
+++ b/src/main/resources/messages_en_US.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties
index 73e2c53ea..8ece9c785 100644
--- a/src/main/resources/messages_es_ES.properties
+++ b/src/main/resources/messages_es_ES.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties
index 554bfad2b..75edb5a4d 100644
--- a/src/main/resources/messages_eu_ES.properties
+++ b/src/main/resources/messages_eu_ES.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties
index 1f3bcc2ca..dad357130 100644
--- a/src/main/resources/messages_fr_FR.properties
+++ b/src/main/resources/messages_fr_FR.properties
@@ -299,9 +299,6 @@ home.showJS.title=Afficher le JavaScript
 home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF.
 showJS.tags=afficher,javascript,js
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=afficher,javascript,js
@@ -311,10 +308,19 @@ showJS.tags=afficher,javascript,js
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties
index aed51bb06..0f150f8ca 100644
--- a/src/main/resources/messages_it_IT.properties
+++ b/src/main/resources/messages_it_IT.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties
index b9e2506ac..46a45d482 100644
--- a/src/main/resources/messages_ja_JP.properties
+++ b/src/main/resources/messages_ja_JP.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties
index 5b5fbd489..50a8a7d00 100644
--- a/src/main/resources/messages_ko_KR.properties
+++ b/src/main/resources/messages_ko_KR.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties
index e3953ed33..331ecd891 100644
--- a/src/main/resources/messages_nl_NL.properties
+++ b/src/main/resources/messages_nl_NL.properties
@@ -299,9 +299,6 @@ home.showJS.title=Toon Javascript
 home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties
index 7cd0d36ca..bac7aa5f9 100644
--- a/src/main/resources/messages_pl_PL.properties
+++ b/src/main/resources/messages_pl_PL.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties
index c9b1807d9..3a89624e4 100644
--- a/src/main/resources/messages_pt_BR.properties
+++ b/src/main/resources/messages_pt_BR.properties
@@ -299,9 +299,6 @@ home.showJS.title=Mostrar Javascript
 home.showJS.desc=Procura e exibe qualquer JavaScript injetado em um PDF
 showJS.tags=JavaScript
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JavaScript
@@ -311,10 +308,19 @@ showJS.tags=JavaScript
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties
index 9a49a2ffe..bc038897f 100644
--- a/src/main/resources/messages_ro_RO.properties
+++ b/src/main/resources/messages_ro_RO.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties
index 869a74b8f..7e4121ee9 100644
--- a/src/main/resources/messages_ru_RU.properties
+++ b/src/main/resources/messages_ru_RU.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties
index 769c3d9b6..139c9ca23 100644
--- a/src/main/resources/messages_sv_SE.properties
+++ b/src/main/resources/messages_sv_SE.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties
index 6cb2ef352..3bfdab32a 100644
--- a/src/main/resources/messages_zh_CN.properties
+++ b/src/main/resources/messages_zh_CN.properties
@@ -299,9 +299,6 @@ home.showJS.title=Show Javascript
 home.showJS.desc=Searches and displays any JS injected into a PDF
 showJS.tags=JS
 
-##########################
-###  TODO: Translate   ###
-##########################
 home.autoRedact.title=Auto Redact
 home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
 showJS.tags=JS
@@ -311,10 +308,19 @@ showJS.tags=JS
 #       WEB PAGES         #
 #                         #
 ###########################
-#auto-redact
+#login
 ##########################
 ###  TODO: Translate   ###
 ##########################
+login.title=Sign in
+login.signin=Sign in
+login.rememberme=Remember me
+login.invalid=Invalid username or password.
+login.locked=Your account has been locked.
+login.signinTitle=Please sign in
+
+
+#auto-redact
 autoRedact.title=Auto Redact
 autoRedact.header=Auto Redact
 autoRedact.textsToRedactLabel=Text to Redact (line-separated)
diff --git a/src/main/resources/static/js/darkmode.js b/src/main/resources/static/js/darkmode.js
index fe2395831..ebf9c6831 100644
--- a/src/main/resources/static/js/darkmode.js
+++ b/src/main/resources/static/js/darkmode.js
@@ -16,6 +16,8 @@ function getElements() {
 }
 
 function setMode(mode) {
+	var event = new CustomEvent('modeChanged', { detail: mode });
+    document.dispatchEvent(event);
 	elements.lightModeStyles.disabled = mode !== "off";
 	elements.darkModeStyles.disabled = mode !== "on";
 	elements.rainbowModeStyles.disabled = mode !== "rainbow";
diff --git a/src/main/resources/static/js/languageSelection.js b/src/main/resources/static/js/languageSelection.js
index 3da819b3d..c554c2a7a 100644
--- a/src/main/resources/static/js/languageSelection.js
+++ b/src/main/resources/static/js/languageSelection.js
@@ -1,4 +1,5 @@
 document.addEventListener('DOMContentLoaded', function() {
+	setLanguageForDropdown('.lang_dropdown-item');
 	const defaultLocale = document.documentElement.lang || 'en_GB';
 	const storedLocale = localStorage.getItem('languageCode') || defaultLocale;
 	const dropdownItems = document.querySelectorAll('.lang_dropdown-item');
@@ -13,6 +14,21 @@ document.addEventListener('DOMContentLoaded', function() {
 	}
 });
 
+function setLanguageForDropdown(dropdownClass) {
+    const defaultLocale = document.documentElement.lang || 'en_GB';
+    const storedLocale = localStorage.getItem('languageCode') || defaultLocale;
+    const dropdownItems = document.querySelectorAll(dropdownClass);
+
+    for (let i = 0; i < dropdownItems.length; i++) {
+        const item = dropdownItems[i];
+        item.classList.remove('active');
+        if (item.dataset.languageCode === storedLocale) {
+            item.classList.add('active');
+        }
+        item.addEventListener('click', handleDropdownItemClick);
+    }
+}
+
 function handleDropdownItemClick(event) {
     event.preventDefault();
     const languageCode = event.currentTarget.dataset.bsLanguageCode;  // change this to event.currentTarget
diff --git a/src/main/resources/templates/fragments/langAndDarkMode.html b/src/main/resources/templates/fragments/langAndDarkMode.html
deleted file mode 100644
index 8c6b0ea36..000000000
--- a/src/main/resources/templates/fragments/langAndDarkMode.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<th:block th:fragment="langAndDarkMode">
-
-<script src="js/languageSelection.js"></script>
-<script src="js/darkmode.js"></script>
-
-    				<li class="nav-item">
-                        <a class="nav-link" id="dark-mode-toggle" href="#">
-                          <img class="navbar-icon" id="dark-mode-icon" src="moon.svg" alt="icon" />
-                        </a>
-                      </li>
-
-                    <li class="nav-item dropdown">
-                        <a class="nav-link dropdown-toggle" href="#" id="languageDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-globe2" viewBox="0 0 20 20">
-                          <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855-.143.268-.276.56-.395.872.705.157 1.472.257 2.282.287V1.077zM4.249 3.539c.142-.384.304-.744.481-1.078a6.7 6.7 0 0 1 .597-.933A7.01 7.01 0 0 0 3.051 3.05c.362.184.763.349 1.198.49zM3.509 7.5c.036-1.07.188-2.087.436-3.008a9.124 9.124 0 0 1-1.565-.667A6.964 6.964 0 0 0 1.018 7.5h2.49zm1.4-2.741a12.344 12.344 0 0 0-.4 2.741H7.5V5.091c-.91-.03-1.783-.145-2.591-.332zM8.5 5.09V7.5h2.99a12.342 12.342 0 0 0-.399-2.741c-.808.187-1.681.301-2.591.332zM4.51 8.5c.035.987.176 1.914.399 2.741A13.612 13.612 0 0 1 7.5 10.91V8.5H4.51zm3.99 0v2.409c.91.03 1.783.145 2.591.332.223-.827.364-1.754.4-2.741H8.5zm-3.282 3.696c.12.312.252.604.395.872.552 1.035 1.218 1.65 1.887 1.855V11.91c-.81.03-1.577.13-2.282.287zm.11 2.276a6.696 6.696 0 0 1-.598-.933 8.853 8.853 0 0 1-.481-1.079 8.38 8.38 0 0 0-1.198.49 7.01 7.01 0 0 0 2.276 1.522zm-1.383-2.964A13.36 13.36 0 0 1 3.508 8.5h-2.49a6.963 6.963 0 0 0 1.362 3.675c.47-.258.995-.482 1.565-.667zm6.728 2.964a7.009 7.009 0 0 0 2.275-1.521 8.376 8.376 0 0 0-1.197-.49 8.853 8.853 0 0 1-.481 1.078 6.688 6.688 0 0 1-.597.933zM8.5 11.909v3.014c.67-.204 1.335-.82 1.887-1.855.143-.268.276-.56.395-.872A12.63 12.63 0 0 0 8.5 11.91zm3.555-.401c.57.185 1.095.409 1.565.667A6.963 6.963 0 0 0 14.982 8.5h-2.49a13.36 13.36 0 0 1-.437 3.008zM14.982 7.5a6.963 6.963 0 0 0-1.362-3.675c-.47.258-.995.482-1.565.667.248.92.4 1.938.437 3.008h2.49zM11.27 2.461c.177.334.339.694.482 1.078a8.368 8.368 0 0 0 1.196-.49 7.01 7.01 0 0 0-2.275-1.52c.218.283.418.597.597.932zm-.488 1.343a7.765 7.765 0 0 0-.395-.872C9.835 1.897 9.17 1.282 8.5 1.077V4.09c.81-.03 1.577-.13 2.282-.287z"/>
-                        </svg>
-                         </a>
-                        <div class="dropdown-menu" aria-labelledby="languageDropdown">
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ar_AR">
-                                <img src="images/flags/sa.svg" alt="icon" width="20" height="15"> العربية
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ca_CA">
-                                <img src="images/flags/es-ct.svg" alt="icon" width="20" height="15"> Català
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_CN">
-                                <img src="images/flags/cn.svg" alt="icon" width="20" height="15"> 简体中文
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="de_DE">
-                                <img src="images/flags/de.svg" alt="icon" width="20" height="15"> Deutsch
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_GB">
-                                <img src="images/flags/gb.svg" alt="icon" width="20" height="15"> English (GB)
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_US">
-                                <img src="images/flags/us.svg" alt="icon" width="20" height="15"> English (US)
-                            </a>
-                           <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="eu_ES">
-                                <img src="images/flags/eu.svg" alt="icon" width="20" height="15"> Euskara
-                            </a>
-				            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="es_ES">
-                                <img src="images/flags/es.svg" alt="icon" width="20" height="15"> Español
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="fr_FR">
-                                <img src="images/flags/fr.svg" alt="icon" width="20" height="15"> Français
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="it_IT">
-                                <img src="images/flags/it.svg" alt="icon" width="20" height="15"> Italiano
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="nl_NL">
-                                <img src="images/flags/nl.svg" alt="icon" width="20" height="15"> Nederlands
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pl_PL">
-                                <img src="images/flags/pl.svg" alt="icon" width="20" height="15"> Polski
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pt_BR">
-                                <img src="images/flags/pt_br.svg" alt="icon" width="20" height="15"> Português (BR)
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ro_RO">
-                                <img src="images/flags/ro.svg" alt="icon" width="20" height="15"> Romanian
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="sv_SE">
-                                <img src="images/flags/se.svg" alt="icon" width="20" height="15"> Svenska
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ru_RU">
-                                <img src="images/flags/ru.svg" alt="icon" width="20" height="15"> Русский
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ko_KR">
-                                <img src="images/flags/kr.svg" alt="icon" width="20" height="15"> 한국어
-                            </a>
-                            <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ja_JP">
-                                <img src="images/flags/jp.svg" alt="icon" width="20" height="15"> 日本語
-                            </a>
-                        </div>
-                    </li>
-</th:block>
\ No newline at end of file
diff --git a/src/main/resources/templates/fragments/languages.html b/src/main/resources/templates/fragments/languages.html
new file mode 100644
index 000000000..17b886608
--- /dev/null
+++ b/src/main/resources/templates/fragments/languages.html
@@ -0,0 +1,56 @@
+<th:block th:fragment="langs">
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ar_AR">
+             <img src="images/flags/sa.svg" alt="icon" width="20" height="15"> العربية
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ca_CA">
+             <img src="images/flags/es-ct.svg" alt="icon" width="20" height="15"> Català
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_CN">
+             <img src="images/flags/cn.svg" alt="icon" width="20" height="15"> 简体中文
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="de_DE">
+             <img src="images/flags/de.svg" alt="icon" width="20" height="15"> Deutsch
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_GB">
+             <img src="images/flags/gb.svg" alt="icon" width="20" height="15"> English (GB)
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_US">
+             <img src="images/flags/us.svg" alt="icon" width="20" height="15"> English (US)
+         </a>
+        <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="eu_ES">
+             <img src="images/flags/eu.svg" alt="icon" width="20" height="15"> Euskara
+         </a>
+		  <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="es_ES">
+             <img src="images/flags/es.svg" alt="icon" width="20" height="15"> Español
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="fr_FR">
+             <img src="images/flags/fr.svg" alt="icon" width="20" height="15"> Français
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="it_IT">
+             <img src="images/flags/it.svg" alt="icon" width="20" height="15"> Italiano
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="nl_NL">
+             <img src="images/flags/nl.svg" alt="icon" width="20" height="15"> Nederlands
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pl_PL">
+             <img src="images/flags/pl.svg" alt="icon" width="20" height="15"> Polski
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pt_BR">
+             <img src="images/flags/pt_br.svg" alt="icon" width="20" height="15"> Português (BR)
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ro_RO">
+             <img src="images/flags/ro.svg" alt="icon" width="20" height="15"> Romanian
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="sv_SE">
+             <img src="images/flags/se.svg" alt="icon" width="20" height="15"> Svenska
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ru_RU">
+             <img src="images/flags/ru.svg" alt="icon" width="20" height="15"> Русский
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ko_KR">
+             <img src="images/flags/kr.svg" alt="icon" width="20" height="15"> 한국어
+         </a>
+         <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ja_JP">
+             <img src="images/flags/jp.svg" alt="icon" width="20" height="15"> 日本語
+         </a>
+</th:block>
\ No newline at end of file
diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html
index 009445e8d..4326afccd 100644
--- a/src/main/resources/templates/fragments/navbar.html
+++ b/src/main/resources/templates/fragments/navbar.html
@@ -147,7 +147,27 @@
                         </div>
                     </li>
 
-                    <th:block th:insert="~{fragments/langAndDarkMode :: langAndDarkMode}"></th:block>
+         
+
+					<script src="js/languageSelection.js"></script>
+					<script src="js/darkmode.js"></script>
+
+    				<li class="nav-item">
+                        <a class="nav-link" id="dark-mode-toggle" href="#">
+                          <img class="navbar-icon" id="dark-mode-icon" src="moon.svg" alt="icon" />
+                        </a>
+                      </li>
+
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" href="#" id="languageDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-globe2 globe-icon" viewBox="0 0 20 20">
+                          <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855-.143.268-.276.56-.395.872.705.157 1.472.257 2.282.287V1.077zM4.249 3.539c.142-.384.304-.744.481-1.078a6.7 6.7 0 0 1 .597-.933A7.01 7.01 0 0 0 3.051 3.05c.362.184.763.349 1.198.49zM3.509 7.5c.036-1.07.188-2.087.436-3.008a9.124 9.124 0 0 1-1.565-.667A6.964 6.964 0 0 0 1.018 7.5h2.49zm1.4-2.741a12.344 12.344 0 0 0-.4 2.741H7.5V5.091c-.91-.03-1.783-.145-2.591-.332zM8.5 5.09V7.5h2.99a12.342 12.342 0 0 0-.399-2.741c-.808.187-1.681.301-2.591.332zM4.51 8.5c.035.987.176 1.914.399 2.741A13.612 13.612 0 0 1 7.5 10.91V8.5H4.51zm3.99 0v2.409c.91.03 1.783.145 2.591.332.223-.827.364-1.754.4-2.741H8.5zm-3.282 3.696c.12.312.252.604.395.872.552 1.035 1.218 1.65 1.887 1.855V11.91c-.81.03-1.577.13-2.282.287zm.11 2.276a6.696 6.696 0 0 1-.598-.933 8.853 8.853 0 0 1-.481-1.079 8.38 8.38 0 0 0-1.198.49 7.01 7.01 0 0 0 2.276 1.522zm-1.383-2.964A13.36 13.36 0 0 1 3.508 8.5h-2.49a6.963 6.963 0 0 0 1.362 3.675c.47-.258.995-.482 1.565-.667zm6.728 2.964a7.009 7.009 0 0 0 2.275-1.521 8.376 8.376 0 0 0-1.197-.49 8.853 8.853 0 0 1-.481 1.078 6.688 6.688 0 0 1-.597.933zM8.5 11.909v3.014c.67-.204 1.335-.82 1.887-1.855.143-.268.276-.56.395-.872A12.63 12.63 0 0 0 8.5 11.91zm3.555-.401c.57.185 1.095.409 1.565.667A6.963 6.963 0 0 0 14.982 8.5h-2.49a13.36 13.36 0 0 1-.437 3.008zM14.982 7.5a6.963 6.963 0 0 0-1.362-3.675c-.47.258-.995.482-1.565.667.248.92.4 1.938.437 3.008h2.49zM11.27 2.461c.177.334.339.694.482 1.078a8.368 8.368 0 0 0 1.196-.49 7.01 7.01 0 0 0-2.275-1.52c.218.283.418.597.597.932zm-.488 1.343a7.765 7.765 0 0 0-.395-.872C9.835 1.897 9.17 1.282 8.5 1.077V4.09c.81-.03 1.577-.13 2.282-.287z"/>
+                        </svg>
+                         </a>
+                        <div class="dropdown-menu" aria-labelledby="languageDropdown">
+                            <th:block th:insert="~{fragments/languages :: langs}"></th:block>
+                        </div>
+                    </li>
 
 
                     <li class="nav-item">
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index be819cd43..1ddea6ec6 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -1,6 +1,8 @@
-<html xmlns:th="http://www.thymeleaf.org">
+<!doctype html>
+<html th:lang="${#locale.toString()}" th:lang-direction="#{language.direction}" xmlns:th="http://www.thymeleaf.org">
 
 <th:block th:insert="~{fragments/common :: head(title=#{login.title})}"></th:block>
+<script src="js/darkmode.js"></script>
 <style>
 html, body {
 	height: 100%;
@@ -51,40 +53,251 @@ body {
 .footer-bottom {
     margin-top: auto;
 }
+body.light-mode input:-webkit-autofill,
+body.light-mode input:-webkit-autofill:hover, 
+body.light-mode input:-webkit-autofill:focus,
+body.light-mode input:-webkit-autofill:active {
+    -webkit-text-fill-color: #212529;  /* Dark font color */
+    -webkit-box-shadow: 0 0 0 1000px #f8f9fa inset;  /* Light background color */
+}
+
+/* Dark Mode */
+body.dark-mode input:-webkit-autofill,
+body.dark-mode input:-webkit-autofill:hover, 
+body.dark-mode input:-webkit-autofill:focus,
+body.dark-mode input:-webkit-autofill:active {
+    -webkit-text-fill-color: #f8f9fa;  /* Light font color */
+    -webkit-box-shadow: 0 0 0 1000px #212529 inset;  /* Dark background color */
+}
+/* Light Mode */
+body.light-mode .form-floating > input:focus + label {
+    color: #212529 !important;  /* Dark text for light background */
+}
+
+/* Dark Mode */
+body.dark-mode .form-floating > input:focus + label {
+    color: #fff !important;  /* Light text for dark background */
+}
+
+body.light-mode .form-floating > label {
+    color: #212529 !important;  /* Dark text for light background */
+}
+
+body.dark-mode .form-floating > label {
+    color: #fff !important;  /* Light text for dark background */
+}
+
+
+/* Removing default styles for ul and li */
+ul {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+
+li {
+    list-style: none;
+}
+
+/* Positioning the container of these elements to the top right */
+.your-container-class {
+    position: absolute;
+    top: 0;
+    right: 0;
+    display: flex;
+}
+
+/* Styling for the dropdown */
+.dropdown-menu {
+    min-width: 200px;  /* or whatever width you prefer */
+}
+
+.navbar-icon {
+	width: 40px;
+	height: 40px;
+}
+
 </style>
 <body>
+<div class="your-container-class">
+</div>
 <div class="container-flex">
 <main class="form-signin text-center">
 
+
+<script>
+function setInputMode(elementId, mode) {
+    var inputElement = document.getElementById(elementId);
+
+    if (!inputElement) return;  // If the element doesn't exist, exit the function
+
+    switch (mode) {
+        case "on":
+            inputElement.classList.add("bg-dark", "text-light");
+            inputElement.classList.remove("bg-light", "text-dark");
+            break;
+        case "off":
+            inputElement.classList.add("bg-light", "text-dark");
+            inputElement.classList.remove("bg-dark", "text-light");
+            break;
+        case "rainbow":
+            // Assuming you have defined some classes for rainbow mode
+           
+            break;
+    }
+}
+
+
+
+document.addEventListener('modeChanged', function(e) {
+    var mode = e.detail;
+    
+    setInputMode("username", mode);
+    setInputMode("password", mode);
+    document.body.classList.remove("light-mode", "dark-mode", "rainbow-mode"); // remove all mode classes first
+
+    switch (mode) {
+        case "on":
+            document.body.classList.add("dark-mode");
+            break;
+        case "off":
+            document.body.classList.add("light-mode");
+            break;
+        case "rainbow":
+            document.body.classList.add("rainbow-mode");
+            break;
+    }
+    
+});
+
+document.addEventListener('DOMContentLoaded', function() {
+	
+	const defaultLocale = document.documentElement.lang || 'en_GB';
+    const storedLocale = localStorage.getItem('languageCode') || defaultLocale;
+
+    const currentURL = new URL(window.location.href);
+    const urlParams = currentURL.searchParams;
+    const currentLangParam = urlParams.get('lang') || defaultLocale;
+
+    console.log("defaultLocale", defaultLocale)
+    console.log("storedLocale", storedLocale)
+    console.log("currentLangParam", currentLangParam)
+
+    if (currentLangParam !== storedLocale) {
+        urlParams.set('lang', storedLocale);
+        currentURL.search = urlParams.toString();
+
+        console.log("redirecting to", currentURL.toString());
+        window.location.href = currentURL.toString();
+        return;
+    }
+    
+    const dropdown = document.getElementById('languageDropdown');
+    const dropdownItems = document.querySelectorAll('.lang_dropdown-item');
+
+    let activeItem;
+    for (let i = 0; i < dropdownItems.length; i++) {
+        const item = dropdownItems[i];
+        item.classList.remove('active');
+        if (item.dataset.bsLanguageCode === storedLocale) {
+            item.classList.add('active');
+            activeItem = item;
+        }
+        item.addEventListener('click', handleDropdownItemClick);
+    }
+
+    if (activeItem) {
+        dropdown.innerHTML = activeItem.innerHTML;  // This will set the dropdown button's content to the active language's flag and name
+    }
+
+    // Additional functionality that was in your provided code:
+
+    document.querySelectorAll('.nav-item.dropdown').forEach((element) => {
+        const dropdownMenu = element.querySelector(".dropdown-menu");
+        if (dropdownMenu.id !== 'favoritesDropdown' &&  dropdownMenu.children.length <= 2 && dropdownMenu.querySelectorAll("hr.dropdown-divider").length === dropdownMenu.children.length) {
+            if (element.previousElementSibling && element.previousElementSibling.classList.contains('nav-item') && element.previousElementSibling.classList.contains('nav-item-separator')) {
+                element.previousElementSibling.remove();
+            }
+            element.remove();
+        }
+    });
+
+    // Sort languages by alphabet
+    const list = Array.from(document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').children).filter(child => child.matches('a'));
+    list.sort(function(a, b) {
+        var A = a.textContent.toUpperCase();
+        var B = b.textContent.toUpperCase();
+        return (A < B) ? -1 : (A > B) ? 1 : 0;
+    }).forEach(node => document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').appendChild(node));
+});
+
+function handleDropdownItemClick(event) {
+    event.preventDefault();
+    const languageCode = event.currentTarget.dataset.bsLanguageCode;
+    const dropdown = document.getElementById('languageDropdown');
+
+    if (languageCode) {
+        localStorage.setItem('languageCode', languageCode);
+
+        const currentUrl = window.location.href;
+        if (currentUrl.indexOf('?lang=') === -1) {
+            window.location.href = currentUrl + '?lang=' + languageCode;
+        } else {
+            window.location.href = currentUrl.replace(/\?lang=\w{2,}/, '?lang=' + languageCode);
+        }
+
+        dropdown.innerHTML = event.currentTarget.innerHTML;  // Update the dropdown button's content
+    } else {
+        console.error("Language code is not set for this item.");
+    }
+}
+
+
+
+</script>
 		<div th:if="${logoutMessage}" class="alert alert-success"
 			th:text="${logoutMessage}"></div>
 
 		<form th:action="@{login}" method="post">
 			<img class="mb-4" src="favicon.svg" alt="" width="144" height="144">
-			<h1 class="h1 mb-3 fw-normal">Stirling-PDF</h1>
-			<h2 class="h5 mb-3 fw-normal">Please sign in</h2>
+			<h1 class="h1 mb-3 fw-normal" th:text="${@appName}">Stirling-PDF</h1>
+			<h2 class="h5 mb-3 fw-normal" th:text="#{login.signinTitle}">Please sign in</h2>
 
 			<div class="form-floating">
-				<input type="text" class="form-control" id="username" name="username"
-					placeholder="admin"> <label for="username">Username</label>
+				<input type="text" class="form-control bg-dark text-light" id="username" name="username"
+					placeholder="admin"> <label for="username" th:text="#{username}">Username</label>
 			</div>
 			<div class="form-floating">
-				<input type="password" class="form-control" id="password" name="password"
-					placeholder="Password"> <label for="password">Password</label>
+				<input type="password" class="form-control bg-dark text-light" id="password" name="password"
+					placeholder="Password"> <label for="password" th:text="#{password}">Password</label>
 			</div>
 
 			<div class="checkbox mb-3">
-				<label> <input type="checkbox" value="remember-me">
-					Remember me
+				<label > <input type="checkbox" value="remember-me">
+					<span th:text="#{login.rememberme}"></span>
 				</label>
 			</div>
-			<button class="w-100 btn btn-lg btn-primary" type="submit">Sign
+			<button class="w-100 btn btn-lg btn-primary" type="submit" th:text="#{login.signin}">Sign
 				in</button>
 		</form>
+		<div class="mt-3"> <!-- Added a margin-top for spacing -->
+	    <div class="dropdown">
+	        <button class="btn btn-secondary dropdown-toggle" type="button" id="languageDropdown" data-bs-toggle="dropdown" aria-expanded="false">
+	            English (GB) <!-- Default language placeholder -->
+	        </button>
+	        <div class="dropdown-menu" aria-labelledby="languageDropdown">
+	            <!-- Here's where the fragment will be included -->
+	            <th:block th:replace="~{fragments/languages :: langs}"></th:block>
+	        </div>
+	    </div>
+	</div>
+			
+		
+		
 		<div class="text-danger text-center">
-			<div th:if="${error == 'badcredentials'}">Invalid username or
+			<div th:if="${error == 'badcredentials'}" th:text="#{login.invalid}">Invalid username or
 				password.</div>
-			<div th:if="${error == 'locked'}">Your account has been locked.
+			<div th:if="${error == 'locked'}" th:text="#{login.locked}">Your account has been locked.
 			</div>
 		</div>