From 7729b0c4f207789bf85b55f0a33661345aca188d Mon Sep 17 00:00:00 2001
From: CaTasTrOOf <benoit@besnard.biz>
Date: Tue, 1 Feb 2022 19:07:14 +0100
Subject: [PATCH] Add pre-commit hook to check i18n keys

---
 .githooks/pre-commit         |  9 ++++++++
 .gitignore                   |  4 ++++
 utils/findMissingI18nKeys.sh | 45 ++++++++++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+)
 create mode 100755 .githooks/pre-commit
 create mode 100755 utils/findMissingI18nKeys.sh

diff --git a/.githooks/pre-commit b/.githooks/pre-commit
new file mode 100755
index 0000000..c10e6b8
--- /dev/null
+++ b/.githooks/pre-commit
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+$(git rev-parse --show-toplevel)/utils/findMissingI18nKeys.sh
+FINDING_MISSING_KEYS=$?
+if [ $FINDING_MISSING_KEYS -ne 0 ]; then
+    echo "You must to complete all i18n keys used in pages"
+    exit $FINDING_MISSING_KEYS
+fi
+exit 0
diff --git a/.gitignore b/.gitignore
index 3fea6ec..60cde32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,3 +89,7 @@ sw.*
 
 # Vim swap files
 *.swp
+
+# Script generated files
+*.missing
+keysUsed
\ No newline at end of file
diff --git a/utils/findMissingI18nKeys.sh b/utils/findMissingI18nKeys.sh
new file mode 100755
index 0000000..262e017
--- /dev/null
+++ b/utils/findMissingI18nKeys.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+TMP_FILE=temp
+KEY_FILE=keysUsed
+
+grep --include=\*.vue --exclude=\*template.vue -roE -e "\\\$(t|tc)\((\"|')([a-Z.]*)(\"|')(, [a-Z._]*){0,1}\)" . > $TMP_FILE
+sed -i -e "s/'/\"/" $TMP_FILE
+sed -i -e "s/'/\"/" $TMP_FILE
+sed -i -E -e 's/\..*:\$(t|tc)\("([a-Z.]*).*$/\2/' $TMP_FILE
+
+sort $TMP_FILE | uniq > $KEY_FILE
+
+FILES="i18n/locales/*.json"
+for f in $FILES
+do
+    echo "Processing $f file..."
+    missingFile="$(basename $f).missing"
+    if [ -f $missingFile ]
+    then
+        rm -fr $missingFile
+    fi
+    while read key; do
+        jq -e ".$key" < $f > /dev/null
+        status=$?
+        if [ $status -ne 0 ]
+        then
+            echo $key >> $missingFile
+        fi
+    done < $KEY_FILE
+    # take action on each file. $f store current file name
+    # cat "$f"
+done
+
+MISSING_FILES="*.missing"
+RETURN_CODE=0
+if ls $MISSING_FILES 1> /dev/null 2>&1; then
+    for f in $MISSING_FILES
+    do
+        RETURN_CODE=$((RETURN_CODE+1))
+        echo "Missing keys in $f"
+        cat $f
+    done
+fi
+rm $KEY_FILE $TMP_FILE
+exit $RETURN_CODE
-- 
GitLab