|
@@ -0,0 +1,77 @@
|
|
|
+/* 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']
|
|
|
+
|
|
|
+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()
|