多语言翻译node工具

该文章介绍了一个基于Node.js的工具,用于处理多语言翻译。它能将Excel内容导入,更新或添加到项目中的JavaScript语言文件,例如dist文件夹内的exportconstmessage结构。工具支持读取test.txt文件,通过解析内容来修改或创建新的翻译。主要功能包括新增和修改操作,对dist文件夹内的语言文件进行处理,转换并更新exportconst为exports.格式。
摘要由CSDN通过智能技术生成

多语言 i18n 翻译node工具

介绍

  1. 本文是为了方便使用 i18n的翻译工具,实现把excel的内容追加更改到项目中的多语言文件中
  2. 主要文件为 index.jstest.txtdist 文件夹内所有内容(dist为项目中需要翻译的多语言文件,下面有例子)
  3. dist 内所有文件必须以(export const message = {})这种格式开头【暴露出去的对象里面可以有任何值,前提是满足js规则】其他情况可以根据本问源码更改替换规则就行了
  4. test.txt文件内容如下图选中区域然后复制到test.txt中去(复制excel内容至test.txt中去);zh-CN和en-US这一行为你的多语言文件名称(A竖不要内容);A这一竖为对象key值描述,如图(test会被翻译【zh-CN.js】为export const message = { test: ‘测试’, father: { son: {content: ‘儿子中的内容’ } } })

新增操作演示

在这里插入图片描述
在这里插入图片描述
执行 node index.js; zh-CN.js如下

export const message = { "test": "测试", "father": { "son": { "content": "儿子中的内容" } } }

修改操作演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主体代码 index.js

const fs = require('fs')

const createObj = (obj, keyArr, value, all) => {
    if (keyArr.length === 0) return all
    const nowKey = keyArr.splice(0, 1)[0];
    if (value) {
        obj[nowKey] = keyArr.length === 0 ? value : { ...obj[nowKey] };
    } else {
        keyArr.length === 0 ? void 0 : obj[nowKey] = { ...obj[nowKey] };
    }
    return createObj(obj[nowKey], keyArr, value, all)
}
const changeES6 = (name) => {
    const str = fs.readFileSync(`./dist/${name}.js`, 'utf8')
    fs.writeFileSync(`./dist/${name}.js`, `${str.replace(/^export\s+const\s+/g, 'exports.').replace(/^exports\s+|exports/g, 'exports').replace(/undefined/g, '{}')}`, err => {
        if (err) return console.log('文件写入失败!' + err.message)
        console.log(`文件写入成功!:${__dirname}\\end.js`)
    })
}
const readTxt = () => {
    const content = fs.readFileSync('./test.txt', 'utf8')
    const arr = String(content).split('\r\n');
    // 文件名字
    const fileName = arr.slice(0, 1).map((v) => {
        return v.split('\t')
    })[0].slice(1); 
    let endObj = fileName.reduce((pre, next) => {
        // 重构 export const 变更为exports.
        changeES6(next);
        const obj = require(`./dist/${next}`)
        pre[next] = obj;
        return pre
    }, {})

    // 翻译体
    arr.slice(1, -1).forEach((v) => {
        const content = v.split('\t')
        // 对象key
        const key = content[0].split(':');
        // 翻译体数组
        content.slice(1).forEach((tran, i) => {
            return createObj(endObj[fileName[i]].message, JSON.parse(JSON.stringify(key)), tran, endObj[fileName[i]].message);
        })

    });
    fileName.forEach((name, i) => {
        console.log(JSON.stringify(endObj[name]))
        fs.writeFile(`./dist/${name}.js`, `export const message = ${JSON.stringify(endObj[name].message)}`, err => {
            if (err) return console.log('文件写入失败!' + err.message)
            console.log(`文件写入成功!:${__dirname}\\end.js`)
        })
    });
}

readTxt();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值