diff --git a/translation/update-po-files.sh b/translation/update-po-files.sh
index 17e020d479..7afae0b0b2 100755
--- a/translation/update-po-files.sh
+++ b/translation/update-po-files.sh
@@ -59,6 +59,7 @@ CSVFILE=${PWD}/i18n_status.csv
 POTDIRS=`cat $LOCALDIR/POTDIRS|grep -v '^#'|grep -v '^\s*$'` #Read file without comment and empty lines
 
 cd $SOURCEDIR
+NPROC=`nproc --ignore=1`
 
 #Generate/update template pot file
 find $POTDIRS -name '*.cpp' -or -name '*.h' -or -name '*.xml.in' -or -name '*.desktop.in' |
@@ -89,21 +90,17 @@ fi
 echo "Writing summary to ${CSVFILE}"
 echo "LANG;TRANSLATED;FUZZY;UNTRANSLATED" > "${CSVFILE}"
 
-for i in $LINGUAS
-do
-  echo "## $i"
-  if [ "$i" = "en" ] ; then
-    msgmerge --no-location --no-fuzzy-matching --force-po $LOCALDIR/pofiles/$i.po $LOCALDIR/pofiles/kicad.pot -o $LOCALDIR/pofiles/$i.po 2> /dev/null
-    msgen $LOCALDIR/pofiles/$i.po -o $LOCALDIR/pofiles/$i.po.tmp && mv $LOCALDIR/pofiles/$i.po.tmp $LOCALDIR/pofiles/$i.po
+translate () {
+  if [ "$1" = "en" ] ; then
+    msgmerge --no-location --no-fuzzy-matching --force-po $LOCALDIR/pofiles/$1.po $LOCALDIR/pofiles/kicad.pot -o $LOCALDIR/pofiles/$1.po 2> /dev/null
+    msgen $LOCALDIR/pofiles/$1.po -o $LOCALDIR/pofiles/$1.po.tmp && mv $LOCALDIR/pofiles/$1.po.tmp $LOCALDIR/pofiles/$1.po
   else
-    msgmerge --force-po $LOCALDIR/pofiles/$i.po $LOCALDIR/pofiles/kicad.pot -o $LOCALDIR/pofiles/$i.po 2> /dev/null
+    msgmerge --force-po $LOCALDIR/pofiles/$1.po $LOCALDIR/pofiles/kicad.pot -o $LOCALDIR/pofiles/$1.po 2> /dev/null
   fi
-  msgfmt --statistics $LOCALDIR/pofiles/$i.po -o $LOCALDIR/pofiles/messages.mo 2>&1 >>/dev/null |
+
+  msgfmt --statistics $LOCALDIR/pofiles/$1.po -o $LOCALDIR/pofiles/$1_messages.mo 2>&1 >>/dev/null |
     while IFS=",." read A B C D ; do
-      echo $A
-      echo $B
-      echo $C
-      echo $D
+      echo -e "## $1\n$A\n$B\n$C\n$D"
 
       for STRING in "$A" "$B" "$C" "$D" ; do
         STRING=${STRING# }
@@ -120,15 +117,23 @@ do
         "" )
           ;;
         * )
-          echo >&2 "$0: Unknown format of \"msgfmt --statistics $LOCALDIR/$i/kicad.po \": \"$STRING\""
+          echo >&2 "$0: Unknown format of \"msgfmt --statistics $LOCALDIR/$1/kicad.po \": \"$STRING\""
           exit 1
           ;;
         esac
       done
-      echo "$i;${TRANSLATED};${FUZZY};${UNTRANSLATED}">>"${CSVFILE}"
+      echo "$1;${TRANSLATED};${FUZZY};${UNTRANSLATED}">>"${CSVFILE}"
     done
-    rm $LOCALDIR/pofiles/messages.mo
+    rm $LOCALDIR/pofiles/$1_messages.mo
+}
+
+for i in $LINGUAS
+do
+  { 
+    translate $i 
+  } &
 done
+wait
 
 if [ "$PLOT" = "1" ]; then
   cd $LOCALDIR