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

如何在C#中对DeepL现有术语表进行增删改操作?

解决DeepL API术语表动态增删改的C#实现

现状说明

DeepL官方API目前不支持术语表的增量更新(添加、修改、删除单个词条),仅提供创建、删除和导出整个术语表的接口。因此需要基于现有接口自行实现词条的动态管理逻辑。

核心实现思路

针对每个语言对(比如EN→DE、EN→FR、EN→ES)维护独立术语表,通过导出现有词条→修改词条→重建术语表的流程实现增删改操作。为避免数据丢失,建议采用「先创建新表,再删除旧表」的顺序操作。

C#代码实现

1. 辅助方法:获取指定语言对的术语表

根据术语表名称和源/目标语言,从DeepL的术语表列表中匹配目标术语表:

private async Task<Glossary> GetGlossaryByLangPairAsync(DeepL.Translator translator, string sourceLang, string targetLang, string glossaryName)
{
    var allGlossaries = await translator.ListGlossariesAsync();
    return allGlossaries.FirstOrDefault(g => 
        g.Name == glossaryName && 
        g.SourceLanguage == sourceLang && 
        g.TargetLanguage == targetLang);
}

2. 辅助方法:导出术语表词条

将指定术语表的词条转换为字典格式,方便修改:

private async Task<Dictionary<string, string>> ExportGlossaryEntriesAsync(DeepL.Translator translator, Glossary glossary)
{
    var entries = await translator.GetGlossaryEntriesAsync(glossary);
    return entries.ToDictionary(e => e.SourceTerm, e => e.TargetTerm);
}

3. 添加词条

检查词条是否存在,不存在则导出现有词条并添加新词条,重建术语表:

public async Task AddGlossaryTermAsync(DeepL.Translator translator, string sourceLang, string targetLang, string glossaryName, string sourceTerm, string targetTerm)
{
    var existingGlossary = await GetGlossaryByLangPairAsync(translator, sourceLang, targetLang, glossaryName);
    Dictionary<string, string> termDict;

    // 术语表不存在则直接创建
    if (existingGlossary == null)
    {
        termDict = new Dictionary<string, string> { { sourceTerm, targetTerm } };
        await translator.CreateGlossaryAsync(glossaryName, sourceLang, targetLang, new GlossaryEntries(termDict));
        return;
    }

    termDict = await ExportGlossaryEntriesAsync(translator, existingGlossary);
    if (termDict.ContainsKey(sourceTerm))
        return; // 词条已存在,无需操作

    termDict.Add(sourceTerm, targetTerm);
    // 先创建新术语表,成功后再删除旧表
    var newGlossary = await translator.CreateGlossaryAsync(glossaryName, sourceLang, targetLang, new GlossaryEntries(termDict));
    if (newGlossary != null)
    {
        await translator.DeleteGlossaryAsync(existingGlossary.GlossaryId);
    }
}

4. 替换词条

修改指定源术语对应的目标术语,重建术语表:

public async Task UpdateGlossaryTermAsync(DeepL.Translator translator, string sourceLang, string targetLang, string glossaryName, string sourceTerm, string newTargetTerm)
{
    var existingGlossary = await GetGlossaryByLangPairAsync(translator, sourceLang, targetLang, glossaryName);
    if (existingGlossary == null)
        throw new InvalidOperationException("目标术语表不存在");

    var termDict = await ExportGlossaryEntriesAsync(translator, existingGlossary);
    if (!termDict.ContainsKey(sourceTerm))
        return; // 词条不存在,无需操作

    termDict[sourceTerm] = newTargetTerm;
    var newGlossary = await translator.CreateGlossaryAsync(glossaryName, sourceLang, targetLang, new GlossaryEntries(termDict));
    if (newGlossary != null)
    {
        await translator.DeleteGlossaryAsync(existingGlossary.GlossaryId);
    }
}

5. 删除词条

移除指定源术语,若词条为空则直接删除术语表,否则重建:

public async Task RemoveGlossaryTermAsync(DeepL.Translator translator, string sourceLang, string targetLang, string glossaryName, string sourceTerm)
{
    var existingGlossary = await GetGlossaryByLangPairAsync(translator, sourceLang, targetLang, glossaryName);
    if (existingGlossary == null)
        return;

    var termDict = await ExportGlossaryEntriesAsync(translator, existingGlossary);
    if (!termDict.Remove(sourceTerm))
        return; // 词条不存在,无需操作

    if (termDict.Count == 0)
    {
        await translator.DeleteGlossaryAsync(existingGlossary.GlossaryId);
    }
    else
    {
        var newGlossary = await translator.CreateGlossaryAsync(glossaryName, sourceLang, targetLang, new GlossaryEntries(termDict));
        if (newGlossary != null)
        {
            await translator.DeleteGlossaryAsync(existingGlossary.GlossaryId);
        }
    }
}

注意事项

  • 避免硬编码术语表ID:每次操作通过术语表名称+语言对获取最新ID,或把ID存储在可动态更新的位置(如配置文件、数据库)。
  • 异常处理:添加网络异常捕获逻辑,防止因创建新表失败导致数据丢失。
  • 性能优化:若术语表词条量较大,可减少频繁导出重建的操作,批量处理词条修改后再执行重建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:17:19