Angular 14项目移除法语默认语言,替换为英文的方法
批量替换Angular源码为英文翻译的解决方案
步骤1:提取英法语翻译映射
首先从messages.en.xlf中提取所有法语原文与对应英文翻译的键值对,可通过以下Node.js脚本快速生成映射文件:
const fs = require('fs'); const xml2js = require('xml2js'); // 读取英文翻译文件 const xlfContent = fs.readFileSync('./src/locale/messages.en.xlf', 'utf8'); xml2js.parseString(xlfContent, (err, result) => { if (err) throw err; const translations = {}; const units = result.xliff.file[0].body[0]['trans-unit']; units.forEach(unit => { const french = unit.source[0]; const english = unit.target[0]; translations[french] = english; }); // 保存为JSON映射文件 fs.writeFileSync('./translation-map.json', JSON.stringify(translations, null, 2)); console.log('翻译映射文件已生成:translation-map.json'); });
运行前先安装依赖:
npm install xml2js --save-dev
步骤2:批量替换源码文件
创建第二个Node.js脚本,遍历src目录下的.html和.ts文件,替换内容并清理i18n相关标记:
const fs = require('fs'); const path = require('path'); const translations = require('./translation-map.json'); // 遍历目录处理文件 function processDirectory(dirPath) { const files = fs.readdirSync(dirPath); files.forEach(file => { const fullPath = path.join(dirPath, file); const stats = fs.statSync(fullPath); if (stats.isDirectory()) { processDirectory(fullPath); } else if (fullPath.endsWith('.html') || fullPath.endsWith('.ts')) { processFile(fullPath); } }); } // 处理单个文件 function processFile(filePath) { let content = fs.readFileSync(filePath, 'utf8'); if (filePath.endsWith('.html')) { // 处理HTML文件:移除i18n属性,替换文本 content = content.replace(/<([a-z]+)([^>]*)i18n([^>]*)>([^<]+)<\/\1>/gi, (match, tag, attr1, attr2, text) => { const translatedText = translations[text.trim()] || text.trim(); return `<${tag}${attr1}${attr2}>${translatedText}</${tag}>`; }); } else if (filePath.endsWith('.ts')) { // 处理TS文件:移除$localize包裹,替换文本 content = content.replace(/\$localize`([^`]+)`/g, (match, text) => { const translatedText = translations[text.trim()] || text.trim(); return `"${translatedText}"`; }); } fs.writeFileSync(filePath, content); console.log(`已处理文件:${filePath}`); } // 开始处理src目录 processDirectory('./src');
运行脚本:
node replace-translations.js
步骤3:清理i18n相关配置和文件
- 删除
src/locale文件夹及其所有文件 - 打开
angular.json,移除整个i18n配置块 - 全局检查项目,确认是否有遗漏的i18n标记或法语文本(比如硬编码在常量中的内容)
注意事项
- 脚本会直接修改源文件,建议先备份项目或提交当前代码到版本控制系统
- 如果存在带参数的翻译(如
$localize包含占位符),需要调整脚本正则适配,示例:
对应的正则修改如下:// 原代码 $localize`Bonjour ${name}` // 目标效果 `Hello ${name}`content = content.replace(/\$localize`([^`]+)`/g, (match, text) => { let translatedText = text; Object.keys(translations).forEach(french => { if (translatedText.includes(french)) { translatedText = translatedText.replace(french, translations[french]); } }); return `\`${translatedText}\``; });
内容的提问来源于stack exchange,提问作者MICKAEL VANHOUTTE
相关产品推荐
相关产品推荐

