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

Azure Translator翻译Markdown文档时格式丢失问题求助

解决Azure Translator翻译Markdown时的格式丢失问题

针对你遇到的翻译后Markdown格式错乱(元数据解析失败、引号内句号移位、图片路径被翻译、加粗格式破坏)问题,可通过以下方案解决:

1. 启用Markdown专属格式保留配置

Azure Translator Batch API支持针对Markdown文件的格式保留,需在翻译请求中明确指定文件格式并开启格式保留选项,避免标记错位:

修改代码中翻译请求的data部分,添加format和options参数:

const data = JSON.stringify({
  inputs: [
    {
      source: {
        sourceUrl: inputBlobSasUrl,
      },
      targets: [
        {
          targetUrl: `https://${process.env.OUTPUT_BLOB_STORAGE_ACCOUNT_NAME}.blob.core.windows.net/${process.env.OUTPUT_BLOB_STORAGE_CONTAINER_NAME}/${targetFileName}?${outputSas}`,
          language: 'es',
          glossaries: [
            {
              glossaryUrl,
              format: 'csv',
            },
          ],
          // 新增:目标语言的格式保留配置
          options: {
            preserveFormatting: true, // 保留Markdown标记位置
            sentenceSplitting: 'Off' // 关闭自动分句,避免标记错位
          }
        },
      ],
      storageType: 'File',
      format: 'markdown' // 明确指定源文件为Markdown格式
    },
  ],
});

2. 单独处理YAML元数据区域

YAML元数据(---包裹的头部区域)不需要翻译,且格式错误会导致解析库失效,最可靠的方式是拆分元数据和正文,只翻译正文部分:

实现步骤:

  1. 先实现一个流转字符串的工具函数:
async function streamToString(stream) {
  const chunks = [];
  return new Promise((resolve, reject) => {
    stream.on('data', (chunk) => chunks.push(chunk));
    stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
    stream.on('error', reject);
  });
}
  1. 在读取源Blob时拆分元数据和正文:
// 读取源Blob内容
const blobClient = inputContainerClient.getBlobClient(blob.name);
const downloadResponse = await blobClient.download();
const content = await streamToString(downloadResponse.readableStreamBody);

// 拆分YAML元数据和正文
const yamlRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
const match = content.match(yamlRegex);
let yamlPart = '';
let bodyPart = content;
if (match) {
  yamlPart = match[1];
  bodyPart = match[2];
}
  1. 将拆分后的正文保存为临时Blob提交翻译,翻译完成后再将原YAML元数据与翻译后的正文合并,写入目标Blob。

3. 保护图片路径和链接不被翻译

图片路径、URL链接不需要翻译,可通过两种方式处理:

  • 自定义术语表:将所有固定路径(如/assets/blog/dynamic-routing/cover.jpg)添加到术语表,设置为不翻译
  • 占位符替换:翻译前将路径替换为唯一占位符(如[[PATH_COVER]]),翻译完成后再替换回原路径

4. 修复引号内句号移位问题

启用preserveFormatting后,Translator会尽量保留引号的位置;若仍有问题,可将引号内包含句号的完整短语添加到自定义术语表,强制保留原有格式。


内容的提问来源于stack exchange,提问作者Richard Carrigan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:47:34