Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"test": "vitest",
"test:watch": "vitest --watch",
"redis:up": "docker compose up -d redis",
"redis:down": "docker compose stop redis"
"redis:down": "docker compose stop redis",
"validate-locales": "node scripts/validate-locales.js"
},
"dependencies": {
"@octokit/graphql": "^9.0.3",
Expand Down
21 changes: 21 additions & 0 deletions scripts/validate-locales.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const fs = require('fs');

Check failure on line 1 in scripts/validate-locales.js

View workflow job for this annotation

GitHub Actions / Validate (Node 24.x)

A `require()` style import is forbidden
const path = require('path');

Check failure on line 2 in scripts/validate-locales.js

View workflow job for this annotation

GitHub Actions / Validate (Node 24.x)

A `require()` style import is forbidden

const localesDir = path.join(__dirname, '..', 'locales');
const enKeys = Object.keys(JSON.parse(fs.readFileSync(path.join(localesDir, 'en.json'), 'utf8'))).sort();

let hasError = false;

fs.readdirSync(localesDir).forEach(file => {
if (file === 'en.json') return;

const fileKeys = Object.keys(JSON.parse(fs.readFileSync(path.join(localesDir, file), 'utf8'))).sort();
const missing = enKeys.filter(k => !fileKeys.includes(k));
const extra = fileKeys.filter(k => !enKeys.includes(k));
if (missing.length || extra.length) {
hasError = true;
console.error(`${file}: ${missing.length ? `Missing keys: ${missing.join(', ')}` : ''}${extra.length ? ` Extra keys: ${extra.join(', ')}` : ''}`);
}
});

process.exit(hasError ? 1 : 0);
Loading