chore(web): enforce valid translation keys using typescript (#12106)

This commit is contained in:
Michel Heusschen
2024-08-29 14:41:39 +02:00
committed by GitHub
parent bab5ad7ebd
commit 9f5a3f1e84
7 changed files with 48 additions and 49 deletions

View File

@@ -1,39 +1,8 @@
import { langs } from '$lib/constants';
import messages from '$lib/i18n/en.json';
import { getClosestAvailableLocale } from '$lib/utils/i18n';
import { exec as execCallback } from 'node:child_process';
import { readFileSync, readdirSync } from 'node:fs';
import { promisify } from 'node:util';
type Messages = { [key: string]: string | Messages };
const exec = promisify(execCallback);
function setEmptyMessages(messages: Messages) {
const copy = { ...messages };
for (const key in copy) {
const message = copy[key];
if (typeof message === 'string') {
copy[key] = '';
} else if (typeof message === 'object') {
setEmptyMessages(message);
}
}
return copy;
}
describe('i18n', () => {
test('no missing messages', async () => {
const { stdout } = await exec('npx svelte-i18n extract -c svelte.config.js "src/**/*"');
const extractedMessages: Messages = JSON.parse(stdout);
const existingMessages = setEmptyMessages(messages);
// Only translations directly using the store seem to get extracted
expect({ ...extractedMessages, ...existingMessages }).toEqual(existingMessages);
});
describe('loaders', () => {
const languageFiles = readdirSync('src/lib/i18n').sort();
for (const filename of languageFiles) {