多语言脚本(扣区多语言标签)

#!/usr/bin/env node

import * as fs from 'fs'
import path from 'path'

const getFileLang = async (fileList: string[]) => {
  const dataList = []
  const chDataList = []
  for (const key in fileList) {
    if (Object.prototype.hasOwnProperty.call(fileList, key)) {
      const filelink = fileList[key]
      const date = fs.readFileSync(filelink)
      const dataString = date.toString()
      const reg = /t\([']{1}.{1,100}[']{1}\)/g
      const re = dataString.match(reg)
      if (re) {
        dataList.push(...re)
      }
      const reg2 = /t\(["]{1}.{1,100}["]{1}\)/g
      const re2 = dataString.match(reg2)
      if (re2) {
        dataList.push(...re2)
      }

      for (const key2 in dataList) {
        if (Object.prototype.hasOwnProperty.call(dataList, key2)) {
          const str = dataList[key2]
          if (escape(str).indexOf('%u') != -1) {
            chDataList.push(str)
          }
        }
      }
    }
  }
  return chDataList
}

const fileListHandle = async (dir: string): Promise<string[]> => {
  const fileListTemp: string[] = fs.readdirSync(dir)
  const fileList: string[] = []
  for (const key in fileListTemp) {
    if (Object.prototype.hasOwnProperty.call(fileListTemp, key)) {
      const filrdir = fileListTemp[key]
      if (filrdir.includes('node_modules')) {
        continue
      }
      const fPath = path.join(dir, filrdir)
      const stats = fs.statSync(fPath)
      if (stats.isDirectory()) {
        fileList.push(...(await fileListHandle(fPath)))
      } else {
        fileList.push(fPath)
      }
    }
  }
  return fileList
}

const main = async () => {
  let dir = path.resolve()
  let stats: any
  try {
    stats = fs.statSync(path.resolve(dir, 'src'))
  } catch (error) {}

  if (stats && stats.isDirectory()) {
    dir = path.resolve(dir, 'src')
  }
  const fileList = await fileListHandle(dir)
  fs.writeFile('./langfile.txt', fileList.join('\n'), (err) => {})
  const re = await getFileLang(fileList)
  const cnList = []
  const enList = []
  for (const key in re) {
    if (Object.prototype.hasOwnProperty.call(re, key)) {
      const str = re[key]
      if (/['"]{1}[a-zA-Z]*['"]/.test(str)) {
        enList.push(str)
        continue
      }
      cnList.push(str)
    }
  }
  fs.writeFileSync(
    './lang.txt',
    [...new Set([...enList, ...cnList])].join('\n'),
    {
      encoding: 'utf8',
    },
  )
}

main()

{
  "name": "genlang",
  "version": "1.0.3",
  "description": "",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "publish": "npm publish",
    "build": "tsc -w",
    "dev": "ts-node ./bin/genlanguage.ts"
  },
  "bin": {
    "genlang": "./bin/genlanguage.js"
  },
  "keywords": [],
  "author": {
    "name": "join",
    "email": "372088783@qq.com"
  },
  "devDependencies": {
    "@types/node": "^18.0.3",
    "nodemon": "^2.0.19"
  },
  "dependencies": {
    "html-entities": "^2.3.3",
    "typescript": "^4.7.4"
  }
}

Last Updated:
Contributors: 刘荣杰