Translation resources live in packages/shared/i18n/<lang>/<ns>.json (common, errors) and ship with de and en. The web app initializes react-i18next with bundled resources (?lng= wins, then the browser language); all shell components use useTranslation and the temporary t() stub is gone. The api localizes its uniform error bodies via a minimal i18next instance negotiated from Accept-Language. `pnpm i18n:check` fails CI when any key is missing in any language, backed by tested helpers in @dorfteich/shared. Closes #5 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
610 B
TypeScript
21 lines
610 B
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { missingTranslationKeys, translationKeys } from './i18n-tools';
|
|
|
|
describe('i18n tooling', () => {
|
|
it('flattens nested keys', () => {
|
|
expect(translationKeys({ a: { b: 'x', c: { d: 'y' } }, e: 'z' })).toEqual([
|
|
'a.b',
|
|
'a.c.d',
|
|
'e',
|
|
]);
|
|
});
|
|
|
|
it('finds keys missing in one language', () => {
|
|
const en = { home: { title: 'Hi', body: 'Text' } };
|
|
const de = { home: { title: 'Hallo' } };
|
|
expect(missingTranslationKeys(en, de)).toEqual(['home.body']);
|
|
expect(missingTranslationKeys(de, en)).toEqual([]);
|
|
});
|
|
});
|