open-design/apps/web/tests/i18n/locales.test.ts
marco 5dd70b5016
Some checks failed
ci / Validate workspace (push) Successful in 12m32s
landing-page-ci / Validate landing page (push) Successful in 9m41s
landing-page-deploy / Deploy landing page (push) Failing after 5m23s
github-metrics / Generate repository metrics SVG (push) Failing after 2m3s
refresh-contributors-wall / Refresh contributors wall cache bust (push) Failing after 11s
Initial import: open-design source for helix-mind.ai distribution
This repository contains the open-design daemon CLI source code, built
and packaged at https://helix-mind.ai/cli/open-design/latest.tgz for use
by the HelixMind /design slash command.

Licenses: Apache-2.0 (root) + MIT (skills/*)
2026-05-06 20:50:24 +02:00

51 lines
1.7 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { en } from '../../src/i18n/locales/en';
import { LOCALES, LOCALE_LABEL, type Dict, type Locale } from '../../src/i18n/types';
const EXPECTED_LOCALES = ['en', 'de', 'zh-CN', 'zh-TW', 'pt-BR', 'es-ES', 'ru', 'fa', 'ar', 'ja', 'ko', 'pl', 'hu', 'fr', 'uk', 'tr'];
function placeholders(value: string): string[] {
const names: string[] = [];
for (const match of value.matchAll(/\{(\w+)\}/g)) {
if (match[1]) {
names.push(match[1]);
}
}
return names.sort();
}
async function loadDict(locale: Locale): Promise<Dict> {
const module = await import(`../../src/i18n/locales/${locale}.ts`);
const dict = Object.values(module).find((value): value is Dict => {
return Boolean(value) && typeof value === 'object';
});
if (!dict) {
throw new Error(`No dictionary export found for locale ${locale}`);
}
return dict;
}
describe('i18n locales', () => {
it('registers every supported locale in the language menu', () => {
expect(LOCALES).toEqual(EXPECTED_LOCALES);
expect((LOCALE_LABEL as Record<string, string>).de).toBe('Deutsch');
expect((LOCALE_LABEL as Record<string, string>).ja).toBe('日本語');
});
it('keeps locale dictionaries aligned with English keys and placeholders', async () => {
const englishKeys = Object.keys(en).sort();
for (const locale of LOCALES) {
const dict = await loadDict(locale);
expect(Object.keys(dict).sort()).toEqual(englishKeys);
for (const key of englishKeys) {
const dictKey = key as keyof Dict;
expect(placeholders(dict[dictKey]), `${locale}.${key}`).toEqual(
placeholders(en[dictKey]),
);
}
}
});
});