Merge pull request #11674 from overleaf/jpa-check-extracted-translations-in-ci

[web] check extracted translations in CI

GitOrigin-RevId: 27e13f5fd1fe08db65b68ffbff639adb83d99f74
This commit is contained in:
Jakob Ackermann 2023-02-07 14:58:25 +00:00 committed by Copybot
parent 9ff8d93ab8
commit 663aace586
2 changed files with 36 additions and 0 deletions

View file

@ -8,6 +8,27 @@ node scripts/translations/sort.js --check
# Ensure all locales are still in use # Ensure all locales are still in use
node scripts/translations/cleanupUnusedLocales.js --check 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. # Ensure no locales contain single quotes.
LOCALES_WITH_SINGLE_QUOTE=$(\ LOCALES_WITH_SINGLE_QUOTE=$(\
grep \ grep \

View file

@ -6,12 +6,23 @@ const EN_JSON = Path.join(__dirname, '../../locales/en.json')
const CHECK = process.argv.includes('--check') const CHECK = process.argv.includes('--check')
const SYNC_NON_EN = process.argv.includes('--sync-non-en') const SYNC_NON_EN = process.argv.includes('--sync-non-en')
const COUNT_SUFFIXES = [
'_plural',
'_zero',
'_one',
'_two',
'_few',
'_many',
'_other',
]
async function main() { async function main() {
const locales = JSON.parse(await fs.promises.readFile(EN_JSON, 'utf-8')) const locales = JSON.parse(await fs.promises.readFile(EN_JSON, 'utf-8'))
const src = execSync( const src = execSync(
// - find all the app source files in web // - find all the app source files in web
// - exclude data files // - exclude data files
// - exclude list of locales used in frontend
// - exclude locales files // - exclude locales files
// - exclude public assets // - exclude public assets
// - exclude third-party dependencies // - exclude third-party dependencies
@ -19,6 +30,7 @@ async function main() {
` `
find . -type f \ find . -type f \
-not -path './data/*' \ -not -path './data/*' \
-not -path './frontend/extracted-translations.json' \
-not -path './locales/*' \ -not -path './locales/*' \
-not -path './public/*' \ -not -path './public/*' \
-not -path '*node_modules/*' \ -not -path '*node_modules/*' \
@ -75,6 +87,9 @@ async function main() {
let m let m
while ((m = matcher.exec(src))) { while ((m = matcher.exec(src))) {
found.add(m[0]) found.add(m[0])
for (const suffix of COUNT_SUFFIXES) {
found.add(m[0] + suffix)
}
} }
const unusedKeys = [] const unusedKeys = []