diff --git a/docs/dev/translation.svg b/docs/dev/translation.svg
index 70400cca7..71f4172b5 100644
Binary files a/docs/dev/translation.svg and b/docs/dev/translation.svg differ
diff --git a/manage b/manage
index 6f6f1a4fe..53c31be06 100755
--- a/manage
+++ b/manage
@@ -239,16 +239,14 @@ weblate.push.translations() {
 
     local messages_pot diff_messages_pot last_commit_hash last_commit_detail \
           last_commit_message exitcode
+    messages_pot="${TRANSLATIONS_WORKTREE}/searx/translations/messages.pot"
     (   set -e
-        # lock change on weblate
-        pyenv.cmd wlc lock
 
         # get translations branch in git worktree (TRANSLATIONS_WORKTREE)
         weblate.translations.worktree
 
         # update messages.pot in the master branch
         build_msg BABEL 'extract messages from source files and generate POT file'
-        messages_pot="${TRANSLATIONS_WORKTREE}/searx/translations/messages.pot"
         pyenv.cmd pybabel extract -F babel.cfg \
                 -o "${messages_pot}" \
                 "searx/"
@@ -258,8 +256,25 @@ weblate.push.translations() {
                             git diff -- "searx/translations/messages.pot")
         if ! echo "$diff_messages_pot" | grep -qE "[\+\-](msgid|msgstr)"; then
             build_msg BABEL 'no changes detected, exiting'
-            return 0
+            return 42
         fi
+        return 0
+    )
+    exitcode=$?
+    if [ "$exitcode" -eq 42 ]; then
+        return 0
+    fi
+    if [ "$exitcode" ]; then
+       return $exitcode
+    fi
+    (
+        set -e
+
+        # lock change on weblate
+        # weblate may add commit(s) since the call to "weblate.translations.worktree".
+        # this is not a problem because after this line, "weblate.to.translations"
+        # calls again "weblate.translations.worktree" which calls "git pull"
+        pyenv.cmd wlc lock
 
         # save messages.pot in the translations branch for later
         pushd "${TRANSLATIONS_WORKTREE}"