Skip to content
On this page

助力国际化 使用node读取翻译好的xlsx生成i18n文件

xlsx文件格式示例

需要读取的国际化xlsx示例

完全体代码

同样的,引用了node-xlsx的依赖,注意安装

js
// 读取文件的地址
const path = './test.xlsx'

const fs = require('fs')
const xlsx = require('node-xlsx')

try {
  // 读取文件并解析
  const datas = xlsx.parse(fs.readFileSync(path))

  // 判断是否有数据
  if (datas[0]?.data?.length) {
    const [{ data }] = datas
    console.debug(`获取到${data.length}条数据`)

    // 简单的判断下是否有重复的key, 若有则抛出错误
    // 想知道哪个key重复 那就只有遍历了,这里偷个懒
    if (new Set(data.map((arr) => arr[0])).size !== data.length) {
      throw new Error('存在重复的key!')
    }

    // 遍历数据 格式化字符串(具体格式看项目配置)
    let langCn = ''
    let langEn = ''
    data.forEach((arr) => {
      langCn += `${arr[0]}:'${arr[1]}',`
      langEn += `${arr[0]}:'${arr[2]}',`
    })
    langCn = `export default{message:{${langCn}}}`
    langEn = `export default{message:{${langEn}}}`

    // 输出文件
    try {
      fs.accessSync('./lang')
    } catch (err) {
      fs.mkdirSync('./lang')
    }
    fs.writeFileSync('lang/zh.js', langCn)
    fs.writeFileSync('lang/en.js', langEn)

    console.debug('i18n文件生成成功!')
  } else {
    throw new Error('读取的xlsx文件中没有数据')
  }
} catch (err) {
  console.debug(err)
}

上次更新于: