Я использую библиотеку ngx-translate для поддержки нескольких языков в приложении Angular. Обнаружив пару недостающих переведенных строк при переключении языка, я решил добавить несколько базовых c тестов в файлы, содержащие переведенные строки. По сути, я хочу проверить, что все языковые файлы имеют одинаковые ключи.
Мои файлы перевода разделены в несколько папок: app
, labels
и wizards
(пока), с каждой папкой содержащий файлы es.json
и en.json
. Чтобы проверить все файлы, я делаю следующее:
i18n.spe c .ts
fdescribe("i18n language files tests", () => {
// Global app translations
let appEs: any;
let appEn: any;
// Panels translations
let panelsEs: any;
let panelsEn: any;
// Wizards translations
let wizardsEs: any;
let wizardsEn: any;
beforeEach(() => {
appEs = require('./app/es.json');
appEn = require('./app/en.json');
panelsEs = require('./panels/es.json');
panelsEn = require('./panels/en.json');
wizardsEs = require('./wizards/es.json');
wizardsEn = require('./wizards/en.json');
});
it('should have the same keys for all language files', () => {
// Global app translations
let keysEs = getObjKeys(appEs);
let keysEn = getObjKeys(appEn);
expect(findMissingKeys(appEn, keysEs)).toEqual([]);
expect(findMissingKeys(appEs, keysEn)).toEqual([]);
// Panels translations
keysEs = getObjKeys(panelsEs);
keysEn = getObjKeys(panelsEn);
expect(findMissingKeys(panelsEn, keysEs)).toEqual([]);
expect(findMissingKeys(panelsEs, keysEn)).toEqual([]);
// Wizards translations
keysEs = getObjKeys(wizardsEs);
keysEn = getObjKeys(wizardsEn);
expect(findMissingKeys(wizardsEn, keysEs)).toEqual([]);
expect(findMissingKeys(wizardsEs, keysEn)).toEqual([]);
});
});
Как видите, я загружаю каждый JSON, используя require
, а затем для каждой пары языковых «разделов» (приложение, панели, мастера) я получаю его ключи и удостоверяюсь, что оба языка имеют одинаковые значения.
Это работает хорошо, но, поскольку require
не работает с переменными, код довольно повторяющийся, и добавление новой языковой подпапки действительно громоздко, так как я должен добавить ее в несколько частей кода.
Любой идеи о том, как я могу упростить этот процесс? Спасибо!