63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import enUS from '@/lib/i18n/locales/en-US.json';
|
|
import zhCN from '@/lib/i18n/locales/zh-CN.json';
|
|
import zhTW from '@/lib/i18n/locales/zh-TW.json';
|
|
import jaJP from '@/lib/i18n/locales/ja-JP.json';
|
|
import ruRU from '@/lib/i18n/locales/ru-RU.json';
|
|
import arSA from '@/lib/i18n/locales/ar-SA.json';
|
|
|
|
const locales = {
|
|
'en-US': enUS,
|
|
'zh-CN': zhCN,
|
|
'zh-TW': zhTW,
|
|
'ja-JP': jaJP,
|
|
'ru-RU': ruRU,
|
|
'ar-SA': arSA,
|
|
};
|
|
const KEYS = [
|
|
'edit.delete',
|
|
'edit.text.label',
|
|
'edit.text.font',
|
|
'edit.text.fontDefault',
|
|
'edit.text.sizeUp',
|
|
'edit.text.sizeDown',
|
|
'edit.text.bold',
|
|
'edit.text.italic',
|
|
'edit.text.underline',
|
|
'edit.text.color',
|
|
'edit.text.alignLeft',
|
|
'edit.text.alignCenter',
|
|
'edit.text.alignRight',
|
|
'edit.text.bullet',
|
|
'edit.insert.textBox',
|
|
'edit.insert.line',
|
|
'edit.insert.table',
|
|
'edit.insert.chart',
|
|
'edit.insert.chartBar',
|
|
'edit.insert.chartLine',
|
|
'edit.insert.chartPie',
|
|
'edit.insert.tableDimensions',
|
|
'edit.table.doubleClickToEdit',
|
|
'edit.insert.image',
|
|
'edit.insert.imageDrop',
|
|
'edit.insert.imageOr',
|
|
'edit.insert.imageUrlPlaceholder',
|
|
'edit.insert.imageInsert',
|
|
'edit.image.crop',
|
|
];
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- locale JSON traversal
|
|
const get = (o: any, k: string) => k.split('.').reduce((a, p) => a?.[p], o);
|
|
|
|
describe('PR2 edit locale coverage', () => {
|
|
it('every PR2 key exists, non-empty, not echoing the key, in all 6 locales', () => {
|
|
for (const [code, data] of Object.entries(locales)) {
|
|
for (const k of KEYS) {
|
|
const v = get(data, k);
|
|
expect(typeof v, `${code} missing ${k}`).toBe('string');
|
|
expect((v as string).trim(), `${code} empty ${k}`).not.toBe('');
|
|
expect(v, `${code} echoes ${k}`).not.toBe(k);
|
|
}
|
|
}
|
|
});
|
|
});
|