overleaf/services/web/bin/lint_locales
Jakob Ackermann 663aace586 Merge pull request #11674 from overleaf/jpa-check-extracted-translations-in-ci
[web] check extracted translations in CI

GitOrigin-RevId: 27e13f5fd1fe08db65b68ffbff639adb83d99f74
2023-02-08 09:06:06 +00:00

61 lines
1.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# Ensure all locale files are sorted.
node scripts/translations/sort.js --check
# Ensure all locales are still in use
node scripts/translations/cleanupUnusedLocales.js --check
# Ensure all locales used in the frontend are tracked
OUTPUT=data/dumpFolder/i18next-scanner
trap "rm -rf $OUTPUT" EXIT
npx i18next-scanner --output "$OUTPUT"
ACTUAL=frontend/extracted-translations.json
EXPECTED="$OUTPUT/frontend/extracted-translations.json"
if ! diff "$ACTUAL" "$EXPECTED"; then
cat <<MSG >&2
services/web/frontend/extracted-translations.json is not up-to-date.
---
Try running:
internal$ bin/run web npm run extract-translations
---
MSG
exit 1
fi
# Ensure no locales contain single quotes.
LOCALES_WITH_SINGLE_QUOTE=$(\
grep \
--files-with-matches \
--recursive locales/ \
--regex "'" \
|| true
)
for file in ${LOCALES_WITH_SINGLE_QUOTE}; do
cat <<MSG >&2
ERROR: $file contains a locale with a single quote.
---
$(grep "$file" --regex "'")
---
Using single quotes in locales can lead to Angular XSS.
You will need to replace the quote with a similar looking character.
(\u2019) is a good candidate.
Links:
- https://en.wikipedia.org/wiki/Right_single_quotation_mark
- https://github.com/overleaf/issues/issues/4478
MSG
exit 1
done