Files
DemonGatanjieu-Anomalous_Mo…/tests/shell_labels.mjs
T
DemonGatanjieuandClaude Opus 5.5 d3f249fd1a Rail shows 模型 / 图库 again, not the raw keys
ce35145 removed 'models' and 'gallery' as unused, but the rail (labelKey) and the page
titles (TITLE_KEYS) name them by key. A test now checks every such key in both languages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 19:35:26 +08:00

18 lines
1.0 KiB
JavaScript

// The rail's labels and the page titles name their screen words by key (labelKey, TITLE_KEYS),
// so a search for t('…') does not find them: each must still be in both languages.
// (ce35145 removed 'models' and 'gallery' as unused; the rail then showed the raw keys.)
import assert from 'node:assert/strict';
import fs from 'node:fs';
import { i18n } from '../web/modules/locales.js';
const read = name => fs.readFileSync(new URL(`../web/modules/${name}`, import.meta.url), 'utf8');
const railKeys = [...read('ui_shell_rail.js').matchAll(/labelKey: '([A-Za-z]+)'/g)].map(match => match[1]);
const titles = read('ui_shell_nav.js').match(/const TITLE_KEYS = \{([\s\S]*?)\};/)[1];
const titleKeys = [...titles.matchAll(/: '([A-Za-z]+)'/g)].map(match => match[1]);
assert.ok(railKeys.includes('models') && railKeys.includes('gallery'));
assert.ok(titleKeys.includes('gallery'));
for (const key of new Set([...railKeys, ...titleKeys])) {
for (const lang of ['zh', 'en']) assert.ok(i18n[lang][key], `${lang} has no '${key}'`);
}