diff --git a/src/freedombone-installer b/src/freedombone-installer
index ab7e21e51b5de940be4c29196b05ab9a3a77fd34..7e05938c5e4883b5b85669e52bb051c303be9b2a 100755
--- a/src/freedombone-installer
+++ b/src/freedombone-installer
@@ -132,6 +132,34 @@ ICECAST_DIR=/icestream
 ICECAST_JINGLES=/jingles
 liquidsoap_script=/etc/liquidsoapuser/radio.liq
 
+function web_admin_translate {
+    if ! grep -q 'DEFAULT_LANGUAGE=' "$CONFIGURATION_FILE"; then
+        return
+    fi
+    language=$(grep 'DEFAULT_LANGUAGE=' "$CONFIGURATION_FILE" | head -n 1 | awk -F '=' '{print $2}')
+    if [ ! "$language" ]; then
+        return
+    fi
+
+    local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local
+    webadmin_install_dir="/var/www/${local_hostname}/htdocs/admin"
+
+    translations_file="/var/www/${local_hostname}/htdocs/admin/translations/${language}.txt"
+    if [ ! -f "$translations_file" ]; then
+        return
+    fi
+
+    while read -r trans; do
+        translated_text=$(echo "$trans" | awk -F '|' '{print $2}')
+        if [ "$translated_text" ]; then
+            english_text=$(echo "$trans" | awk -F '|' '{print $1}')
+            for webfile in "/var/www/${local_hostname}/htdocs/admin"/*.html; do
+                sed -i "/translate=\"yes\"/s|>$english_text<|>$translated_text<|g" "$webfile";
+            done
+        fi
+    done <"$translations_file"
+}
+
 function backup_mount_drive {
     backup_drive_mounted=
     if [ "$1" ]; then
@@ -674,6 +702,8 @@ function web_admin_setup_login {
         echo -n "$webadmin_password" > ${IMAGE_PASSWORD_FILE}
     fi
 
+    web_admin_translate
+
     echo -n "$INSTALL_STATE_WEBADMIN_PASSWORD_CTEATED" > "$install_state_file"
     install_state=$INSTALL_STATE_WEBADMIN_PASSWORD_CTEATED
 }
@@ -2273,9 +2303,14 @@ function change_language {
                         webadmin_update_version
                     fi
 
+                    sed -i "s|DEFAULT_LANGUAGE=.*|DEFAULT_LANGUAGE=$language|g" "$CONFIGURATION_FILE"
+
+                    if [ -f "$webadmin_install_dir/translations/${language}.txt" ]; then
+                        web_admin_translate
+                    fi
+
                     chown -R www-data:www-data "$webadmin_install_dir/*"
 
-                    sed -i "s|DEFAULT_LANGUAGE=.*|DEFAULT_LANGUAGE=$language|g" "$CONFIGURATION_FILE"
                     locale-gen "${language}"
                     update-locale LANG="${language}"
                     update-locale LANGUAGE="${language}"
diff --git a/src/freedombone-utils-webadmin b/src/freedombone-utils-webadmin
index 2676054ab335f3a5da17a999c7c72d6559b473ad..02b2161b955e41f5ce17ce4b1a415d9e1bc1d60b 100755
--- a/src/freedombone-utils-webadmin
+++ b/src/freedombone-utils-webadmin
@@ -35,6 +35,34 @@ WEBADMIN_LOGIN_TEXT=$"Welcome to ${PROJECT_NAME}"
 
 WEBADMIN_ONION_PORT=5783
 
+function web_admin_translate {
+    if ! grep -q 'DEFAULT_LANGUAGE=' "$CONFIGURATION_FILE"; then
+        return
+    fi
+    language=$(grep 'DEFAULT_LANGUAGE=' "$CONFIGURATION_FILE" | head -n 1 | awk -F '=' '{print $2}')
+    if [ ! "$language" ]; then
+        return
+    fi
+
+    local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local
+    webadmin_install_dir="/var/www/${local_hostname}/htdocs/admin"
+
+    translations_file="/var/www/${local_hostname}/htdocs/admin/translations/${language}.txt"
+    if [ ! -f "$translations_file" ]; then
+        return
+    fi
+
+    while read -r trans; do
+        translated_text=$(echo "$trans" | awk -F '|' '{print $2}')
+        if [ "$translated_text" ]; then
+            english_text=$(echo "$trans" | awk -F '|' '{print $1}')
+            for webfile in "/var/www/${local_hostname}/htdocs/admin"/*.html; do
+                sed -i "/translate=\"yes\"/s|>$english_text<|>$translated_text<|g" "$webfile";
+            done
+        fi
+    done <"$translations_file"
+}
+
 function web_admin_get_hostname {
     # shellcheck disable=SC2154
     if [ ! "$rootdir" ]; then
@@ -1297,6 +1325,8 @@ function install_web_admin {
             myqr "http://${WEBADMIN_ONION_HOSTNAME}/admin" -p /root/freedombone/img/onion.png -c -v 8 -n "$webadmin_qrcode"
         fi
     fi
+
+    web_admin_translate
 }
 
 # NOTE: deliberately no exit 0