You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:50:14