javascript - Nodejs/Javascript 输出写入所有文件而不是单个文件
问题描述
我正在学习 nodejs/javascript。我有一个基本上合并翻译文件的应用程序。我有一个english.pot 文件和多个翻译文件,Spanish.po French.po German.po 等。我得到所有存在的.po 文件并处理每个输出合并到一个新文件Spansh.po.new 的文件。当我只有 1 个 .po 文件时,我的代码可以正常工作,这就是我为轻松开发它的方式。我添加了其他 2 个 .po 文件,现在我得到了 3 个 .new 文件,但它们都有相同的输出,这是所有文件的合并。
带有 1 个 .po 文件
msgid "Visit plugin homepage"
msgstr "Besuchen Sie die Plugin-Homepage"
#. translators: %s: plugin author
msgid "by %s"
msgstr "von %s"
超过 1 个 .po 文件,所有 3 个 .new 文件看起来像这样
msgid "Visit plugin homepage"
msgstr "Besuchen Sie die Plugin-Homepage"
msgid "Visit plugin homepage"
msgstr "Visite la página inicial del Plugin"
msgid "Visit plugin homepage"
msgstr "Visitez la page d'accueil du plugin"
#. translators: %s: plugin author
#. translators: %s: plugin author
#. translators: %s: plugin author
msgid "by %s"
msgstr "von %s"
msgid "by %s"
msgstr "por %s"
msgid "by %s"
msgstr "par %s"
我确定它与异步有关,但不确定我做错了什么。
基本代码,我剥离了翻译逻辑
if (fs.existsSync(potFile)) {
var newPO = []
var dirPath = path.resolve(languageDir)
fs.readdir(dirPath, (err, files) => {
if (err)
this.log(err)
else {
files.forEach(file => {
if (path.extname(file) === '.po') {
const buffer = fs.readFileSync(languageDir + file, {encoding: 'utf8', flag: 'r'})
const poArray = new Array(buffer.split('\n')).flat()
var lineReader = require('line-reader')
lineReader.eachLine(potFile, function (line, last) {
// BUNCH OF TRANSLATION LOGIC
// THAT ADDS LINES TO newPO ARRAY by:
newPO.push(line)
if (last) {
// or check if it's the last one
var newFile = fs.createWriteStream(languageDir + file + '.new')
newFile.write(newPO.join('\n'))
}
})
}
})
}
})
}
我认为它会将每个 .po 作为一个单独的块进行旋转,并且它们都会被隔离,但猜测它不是这样工作的。
希望我的代码不是完全垃圾,但很高兴听到我做错了什么以及我可以做得更好。
解决方案
放在var newPO = []
该行的上方const buffer
,以更改该变量的范围。
现在它有这个外部范围,所以你只需继续附加它并写出相同的数组。
推荐阅读
- python-3.x - PRESENT 密码的按位运算
- pytest - pytest-parallel 不尊重模块范围的固定装置
- json - 无法弄清楚如何将数据从 JSON url 提取到 Angular 材料表
- css - 无法更改下拉 mat-form-field CSS - Angular 材质
- r - 在情节上方注释ggplot
- java - ObjectMapper 可以从超类中看到子类字段
- cypress - 使用 Cypress 在 Chrome 无头模式下忽略 X-Frame-Options
- python - Python pd.DataFrame 返回值错误:数组必须在同一范围内
- php - 为什么 PHP 使用大量内存来存储查询结果
- javascript - Axios 请求无法解析