37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import test from 'node:test'
|
|
|
|
import { collectSkinSiteMessages } from './skin-site-messages.mjs'
|
|
|
|
test('all skin-site messages used in source exist in both release language catalogs', () => {
|
|
const messages = collectSkinSiteMessages()
|
|
assert.ok(messages.length > 100, 'The check must scan the actual UI')
|
|
for (const locale of ['en-US', 'zh-CN']) {
|
|
const catalog = JSON.parse(
|
|
fs.readFileSync(`apps/app-frontend/src/locales/${locale}/index.json`, 'utf8'),
|
|
)
|
|
const missing = messages.filter(({ id }) => !catalog[id]?.message)
|
|
assert.deepEqual(
|
|
missing.map(({ id }) => id),
|
|
[],
|
|
`${locale} has uncataloged UI messages`,
|
|
)
|
|
}
|
|
})
|
|
|
|
test('Chinese login and announcement labels do not fall back to English', () => {
|
|
const catalog = JSON.parse(
|
|
fs.readFileSync('apps/app-frontend/src/locales/zh-CN/index.json', 'utf8'),
|
|
)
|
|
for (const id of [
|
|
'app.skin-site.login.title',
|
|
'app.skin-site.login.username',
|
|
'app.skin-site.login.password-hint',
|
|
'app.skin-site.home.announcements.title',
|
|
'app.skin-site.home.announcements.failed',
|
|
]) {
|
|
assert.match(catalog[id]?.message ?? '', /\p{Script=Han}/u, id)
|
|
}
|
|
})
|