MCPcopy
hub / github.com/xpf0000/FlyEnv / detectLanguageDifferences

Function detectLanguageDifferences

src/lang/check.mjs:120–226  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

118function diffKey() {
119 const FILE_EXTENSION = '.json'
120 function detectLanguageDifferences() {
121 // 1. 获取所有语言包
122 const languagePacks = fs
123 .readdirSync(LANG_DIR)
124 .filter((file) => fs.statSync(path.join(LANG_DIR, file)).isDirectory())
125
126 if (languagePacks.length < 2) {
127 console.log('需要至少2个语言包进行比较')
128 return
129 }
130
131 // 2. 收集所有JSON文件(跨所有语言包)
132 const allFiles = new Set()
133 const fileMap = {}
134
135 languagePacks.forEach((pack) => {
136 const files = fs
137 .readdirSync(path.join(LANG_DIR, pack))
138 .filter((file) => file.endsWith(FILE_EXTENSION))
139
140 files.forEach((file) => {
141 allFiles.add(file)
142 if (!fileMap[file]) fileMap[file] = []
143 fileMap[file].push(pack)
144 })
145 })
146
147 // 3. 分析差异
148 const results = {
149 missingFiles: {},
150 keyDifferences: {}
151 }
152
153 // 3.1 检查文件缺失情况
154 Array.from(allFiles).forEach((file) => {
155 const missingPacks = languagePacks.filter((pack) => !fileMap[file].includes(pack))
156 if (missingPacks.length > 0) {
157 results.missingFiles[file] = missingPacks
158 }
159 })
160
161 // 3.2 检查键差异(对每个文件)
162 Array.from(allFiles).forEach((file) => {
163 const fileResults = {
164 allKeys: new Set(),
165 packKeys: {}
166 }
167
168 // 收集所有语言包的键
169 fileMap[file].forEach((pack) => {
170 const content = require(path.join(LANG_DIR, pack, file))
171 const keys = getFlattenedKeys(content)
172 fileResults.packKeys[pack] = new Set(keys)
173 keys.forEach((key) => fileResults.allKeys.add(key))
174 })
175
176 // 找出每个包的缺失键
177 const allKeysArray = Array.from(fileResults.allKeys)

Callers 1

diffKeyFunction · 0.85

Calls 3

getFlattenedKeysFunction · 0.85
pushMethod · 0.80
logMethod · 0.45

Tested by

no test coverage detected