/* eslint-disable no-eval */ const fs = require('node:fs') const path = require('node:path') const transpile = require('typescript').transpile const targetLanguage = 'en-US' const languages = ['zh-Hans', 'fr-FR', 'ja-JP', 'pt-BR', 'uk-UA', 'vi-VN', 'zh-Hant'] async function getKeysFromLanuage(language) { return new Promise((resolve, reject) => { const folderPath = path.join(__dirname, language) let allKeys = [] fs.readdir(folderPath, (err, files) => { if (err) { console.error('Error reading folder:', err) reject(err) return } files.forEach((file) => { const filePath = path.join(folderPath, file) const fileName = file.replace(/\.[^/.]+$/, '') // Remove file extension const camelCaseFileName = fileName.replace(/[-_](.)/g, (_, c) => c.toUpperCase(), ) // Convert to camel case // console.log(camelCaseFileName) const content = fs.readFileSync(filePath, 'utf8') const translation = eval(transpile(content)) const keys = Object.keys(translation) const nestedKeys = [] const iterateKeys = (obj, prefix = '') => { for (const key in obj) { const nestedKey = prefix ? `${prefix}.${key}` : key nestedKeys.push(nestedKey) if (typeof obj[key] === 'object') iterateKeys(obj[key], nestedKey) } } iterateKeys(translation) allKeys = [...keys, ...nestedKeys].map( key => `${camelCaseFileName}.${key}`, ) }) resolve(allKeys) }) }) } async function main() { const compareKeysCount = async () => { const targetKeys = await getKeysFromLanuage(targetLanguage) const languagesKeys = await Promise.all(languages.map(language => getKeysFromLanuage(language))) const keysCount = languagesKeys.map(keys => keys.length) const targetKeysCount = targetKeys.length const comparison = languages.reduce((result, language, index) => { const languageKeysCount = keysCount[index] const difference = targetKeysCount - languageKeysCount result[language] = difference return result }, {}) console.log(comparison) // Print missing keys languages.forEach((language, index) => { const missingKeys = targetKeys.filter(key => !languagesKeys[index].includes(key)) console.log(`Missing keys in ${language}:`, missingKeys) }) } compareKeysCount() } main()