diff --git a/.gitlab/ci/translation.gitlab-ci.yml b/.gitlab/ci/translation.gitlab-ci.yml
index d7962436c..5e50cd20e 100644
--- a/.gitlab/ci/translation.gitlab-ci.yml
+++ b/.gitlab/ci/translation.gitlab-ci.yml
@@ -2,7 +2,7 @@
 # TRANSLATION
 ########################################
 
-remove-stale-translated-strings:
+autofix-translated-strings:
   stage: translation
   image: "before-install"
   needs: []
@@ -14,12 +14,13 @@ remove-stale-translated-strings:
   script:
     - cd tests # Maybe move this script location to another folder?
     # create a local branch that will overwrite distant one
-    - git checkout -b "ci-remove-stale-translated-strings-${CI_COMMIT_REF_NAME}" --no-track
+    - git checkout -b "ci-autofix-translated-strings-${CI_COMMIT_REF_NAME}" --no-track
     - python3 remove_stale_translated_strings.py
+    - python3 autofix_locale_format.py
     - '[ $(git diff -w | wc -l) != 0 ] || exit 0'  # stop if there is nothing to commit
-    - git commit -am "[CI] Remove stale translated strings" || true
-    - git push -f origin "ci-remove-stale-translated-strings-${CI_COMMIT_REF_NAME}":"ci-remove-stale-translated-strings-${CI_COMMIT_REF_NAME}"
-    - hub pull-request -m "[CI] Remove stale translated strings" -b Yunohost:dev -p || true # GITHUB_USER and GITHUB_TOKEN registered here https://gitlab.com/yunohost/yunohost/-/settings/ci_cd
+    - git commit -am "[CI] Autofix translated strings" || true
+    - git push -f origin "ci-autofix-translated-strings-${CI_COMMIT_REF_NAME}":"ci-autofix-translated-strings-${CI_COMMIT_REF_NAME}"
+    - hub pull-request -m "[CI] Autofix translated strings" -b Yunohost:dev -p || true # GITHUB_USER and GITHUB_TOKEN registered here https://gitlab.com/yunohost/yunohost/-/settings/ci_cd
   only:
     variables:
       - $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
diff --git a/tests/autofix_locale_format.py b/tests/autofix_locale_format.py
new file mode 100644
index 000000000..f777f06f1
--- /dev/null
+++ b/tests/autofix_locale_format.py
@@ -0,0 +1,47 @@
+import re
+import json
+import glob
+
+# List all locale files (except en.json being the ref)
+locale_folder = "locales/"
+locale_files = glob.glob(locale_folder + "*.json")
+locale_files = [filename.split("/")[-1] for filename in locale_files]
+locale_files.remove("en.json")
+
+reference = json.loads(open(locale_folder + "en.json").read())
+
+
+def fix_locale(locale_file):
+
+    this_locale = json.loads(open(locale_folder + locale_file).read())
+    fixed_stuff = False
+
+    # We iterate over all keys/string in en.json
+    for key, string in reference.items():
+
+        # Ignore check if there's no translation yet for this key
+        if key not in this_locale:
+            continue
+
+        # Then we check that every "{stuff}" (for python's .format())
+        # should also be in the translated string, otherwise the .format
+        # will trigger an exception!
+        subkeys_in_ref = [k[0] for k in re.findall(r"{(\w+)(:\w)?}", string)]
+        subkeys_in_this_locale = [k[0] for k in re.findall(r"{(\w+)(:\w)?}", this_locale[key])]
+
+        if set(subkeys_in_ref) != set(subkeys_in_this_locale) and (len(subkeys_in_ref) == len(subkeys_in_this_locale)):
+            for i, subkey in enumerate(subkeys_in_ref):
+                this_locale[key] = this_locale[key].replace('{%s}' % subkeys_in_this_locale[i], '{%s}' % subkey)
+                fixed_stuff = True
+
+    if fixed_stuff:
+        json.dump(
+            this_locale,
+            open(locale_folder + locale_file, "w"),
+            indent=4,
+            ensure_ascii=False,
+        )
+
+
+for locale_file in locale_files:
+    fix_locale(locale_file)