首页 > 解决方案 > 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 作为一个单独的块进行旋转,并且它们都会被隔离,但猜测它不是这样工作的。

希望我的代码不是完全垃圾,但很高兴听到我做错了什么以及我可以做得更好。

标签: javascriptnode.jsasynchronous

解决方案


放在var newPO = []该行的上方const buffer,以更改该变量的范围。

现在它有这个外部范围,所以你只需继续附加它并写出相同的数组。


推荐阅读