前端自动翻译插件webpack-auto-i18n-plugin的使用

一个 前端自动翻译插件,支持所有编译成 JS 的前端框架(例如 Vue2/3 和 React)。无需修改源码,通过支持多种翻译服务,一键轻松实现多语言支持!默认集成有道翻译和谷歌翻译,同时支持自定义翻译器,兼容 Webpack、Vite、Rollup 等主流构建工具。

本文章只做 空翻译器 EmptyTranslator 只需要扫描目标语言,不进行翻译**),主要作为使用记录心得**

**主要就两个事:1、**通过脚本将本地多语言文件内容生成到xlsx,2、把已经翻译好的xlsx文件内容导入到本地的多语言文件

注意注意注意:确保项目已升级至 Webpack 5(插件仅支持 Webpack 5)可查看 升级到webpack5的那篇文章

一、EmptyTranslator 的作用

EmptyTranslatorwebpack-auto-i18n-plugin 内置的虚拟翻译器,​不依赖第三方翻译 API,仅生成多语言文件的结构框架(保留原文),需手动填充翻译内容。适用于以下场景:

  1. 需要完全自定义翻译内容。
  2. 项目敏感,禁止调用外部翻译 API。

二、配置 webpack-auto-i18n-plugin

1.安装插件

复制代码
npm install webpack-auto-i18n-plugin --save-dev

2.​修改 Webpack 配置

vue.config.js 中集成插件

复制代码
const WebpackAutoI18nPlugin = require('webpack-auto-i18n-plugin');
const { EmptyTranslator } = require('webpack-auto-i18n-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new WebpackAutoI18nPlugin({
        targetLangList: ['en'],  // 目标语言列表
        translator: new EmptyTranslator(), // 使用空翻译器
        outputPath: './src/lang',      // 语言文件输出目录
        originLang: 'zh',             // 源语言(保留原文)
        distPath: './dist/lang',      // 构建后语言文件路径(可选)
        distKey: 'index'              // 生成的主文件名(默认index.json)
      })
    ]
  }
};

3.入口文件引入

main.js 顶部添加语言包引入:

复制代码
import './lang/index';  // 插件自动生成的文件

4.​语言切换逻辑

插件默认通过 localStorage 管理语言,切换示例:

复制代码
window.localStorage.setItem('lang', 'en');
window.location.reload();

三、手动填充翻译的两种方式

方式1:直接编辑 JSON 文件
  1. 打开生成的 index.json 或各语言文件。
  2. 在对应字段的目标语言中填写翻译内容(如 "en": "Login")。
方式2:通过 Excel 管理(推荐)​
  1. 导出为 Excel :使用脚本将 index.json 转为 Excel(表头为 KEY, NAME, Translation),便于非技术人员协作。
  2. 导入回 JSON :通过脚本将编辑后的 Excel 内容合并回 index.json(覆盖)

1.更目录文件下 新建jsonToExcel.js和excelToJson.js(vue.config.js同一级别)

复制代码
npm install exceljs --save
生成 Excel 文件(脚本1)

jsonToExcel.js文件

复制代码
const ExcelJS = require('exceljs');
const fs = require('fs');

fs.readFile('./lang/index.json', 'utf-8', async (err, data) => {
    if (err) throw err;

    const workbook = new ExcelJS.Workbook();
    const worksheet = workbook.addWorksheet('Sheet1');

    // 设置列宽
    worksheet.columns = [
        { header: 'KEY', width: 12 },
        { header: 'Name', width: 100 },
        { header: 'Translation', width: 150 }
    ];

    // 添加数据并设置样式
    const json = JSON.parse(data);

    Object.entries(json).forEach(([key, translations]) => {
        const row = worksheet.addRow([key, translations['zh-cn'], translations['en']]);
        row.alignment = { vertical: 'middle' };
        row.height = 25;
    });

    await workbook.xlsx.writeFile('./translation.xlsx');
    console.log('读取成功,已保存到./translation.xlsx');

});
Excel 回 JSON(脚本2)​

excelToJson.js

复制代码
const ExcelJS = require('exceljs');
const fs = require('fs');


function getCellText(cell) {
    if (!cell || cell.value == null) return '';
    if (typeof cell.value === 'object' && cell.value.richText) {
        // 拼接富文本里的纯文字
        return cell.value.richText.map(rt => rt.text).join('');
    }
    return cell.value.toString();
}


async function excelToNestedJson() {
    const workbook = new ExcelJS.Workbook();
    try {
        // 读取 Excel 文件
        await workbook.xlsx.readFile('./translation.xlsx');
        // 获取第一个 worksheet
        const worksheet = workbook.getWorksheet(1);
        // 转换为 JSON 数据
        const result = {};

        worksheet.eachRow((row, rowNumber) => {
            if (rowNumber === 1) return;

            let key = getCellText(row.getCell(1));
            if (!result[key]) {
                result[key] = {};
            }
            result[key]['zh-cn'] = getCellText(row.getCell(2));
            result[key]['en'] = getCellText(row.getCell(3));
        });


        return result;

    } catch (error) {
        return null;
    }
}

// 执行转换
(async () => {
    const jsonResult = await excelToNestedJson();

    if (!jsonResult) {
        console.log('未找到翻译文件:translation.xlsx 或文件读取失败');
    } else {
        // 写入 JSON 文件
        fs.writeFileSync('./lang/index.json', JSON.stringify(jsonResult, null, 2));
        console.log('翻译文件转换成功,已保存到 ./lang/index.json');
    }
})();

packsge.json 脚本配置

复制代码
"scripts": {
    "readExcel": "node excelToJson.js",
    "readJson": "node jsonToExcel.js"
  },

​四**、实现原理**​

通过脚本将多语言 JSON 文件(如 index.json)与 Excel 文件(.xlsx)相互转换,利用 Excel 的易编辑性手动填充翻译内容,再同步回 JSON 文件。

核心流程 ​:
index.json → 生成 Excel → 手动编辑 Excel → 合并回 index.json

相关推荐
顾安r1 小时前
11.8 脚本网页 星际逃生
c语言·前端·javascript·flask
Hello.Reader1 小时前
Data Sink定义、参数与可落地示例
java·前端·网络
im_AMBER1 小时前
React 17
前端·javascript·笔记·学习·react.js·前端框架
一雨方知深秋2 小时前
2.fs模块对计算机硬盘进行读写操作(Promise进行封装)
javascript·node.js·promise·v8·cpython
谷歌开发者2 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (六)
前端·chrome·学习
一晌小贪欢3 小时前
【Html模板】电商运营可视化大屏模板 Excel存储 + 一键导出(已上线-可预览)
前端·数据分析·html·excel·数据看板·电商大屏·大屏看板
发现你走远了3 小时前
连接模拟器网页进行h5的调试(使用Chrome远程调试(推荐)) 保姆级图文
前端·chrome
街尾杂货店&4 小时前
css - 实现三角形 div 容器,用css画一个三角形(提供示例源码)简单粗暴几行代码搞定!
前端·css
顺凡4 小时前
删一个却少俩:Antd Tag 多节点同时消失的原因
前端·javascript·面试
小白路过4 小时前
CSS transform矩阵变换全面解析
前端·css·矩阵