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

Azure认知服务是否支持JSON值翻译?.NET Core实现咨询

用Azure认知服务翻译JSON值的.NET Core实现方法

Azure翻译器本身没有直接的JSON结构翻译接口,核心思路是解析JSON提取待翻译文本→批量翻译→重构JSON,以下是具体实现步骤:

1. 前置准备

  • 在Azure门户创建「翻译器」资源,获取密钥和区域端点
  • 在.NET Core项目中安装NuGet包:Microsoft.Azure.CognitiveServices.Translator.Text

2. 核心实现逻辑

步骤1:定义待翻译的JSON结构与目标字段

假设你有如下JSON需要翻译,仅需要翻译name、description、summary字段:

{
  "id": 1,
  "name": "Azure Cognitive Services",
  "description": "Cloud-based AI services for developers",
  "metadata": {
    "tags": ["AI", "Cloud"],
    "summary": "Build intelligent apps faster"
  }
}

步骤2:解析JSON并提取待翻译文本

用System.Text.Json递归遍历JSON节点,提取目标字段的文本值(支持处理嵌套结构):

using System.Text.Json;
using System.Text.Json.Nodes;

// 提取待翻译文本及对应的JSON节点
private static List<(string Text, JsonNode Node)> ExtractTranslatableTexts(JsonNode node, List<string> targetFields)
{
    var texts = new List<(string, JsonNode)>();
    if (node is JsonObject obj)
    {
        foreach (var property in obj)
        {
            if (targetFields.Contains(property.Key) && property.Value is JsonValue value && value.TryGetValue(out string text))
            {
                texts.Add((text, property.Value));
            }
            else
            {
                texts.AddRange(ExtractTranslatableTexts(property.Value, targetFields));
            }
        }
    }
    return texts;
}

步骤3:调用Azure翻译API批量翻译

初始化翻译客户端,批量提交文本进行翻译,减少API请求次数:

using Microsoft.Azure.CognitiveServices.Translator.Text;
using Microsoft.Azure.CognitiveServices.Translator.Text.Models;

private static async Task<List<string>> TranslateTexts(List<string> texts, string fromLang, string toLang, string key, string region)
{
    var credentials = new ApiKeyServiceClientCredentials(key);
    var client = new TranslatorTextClient(credentials) { Endpoint = $"https://{region}.cognitiveservices.azure.com/" };

    var translationResult = await client.TranslateAsync(
        to: new List<string> { toLang },
        text: texts,
        from: fromLang
    );

    return translationResult.SelectMany(r => r.Translations).Select(t => t.Text).ToList();
}

步骤4:将翻译结果替换回JSON

把翻译后的文本替换到对应的JSON节点,再序列化为最终JSON:

public static async Task<string> TranslateJson(string jsonInput, List<string> targetFields, string fromLang, string toLang, string azureKey, string azureRegion)
{
    var jsonNode = JsonNode.Parse(jsonInput);
    if (jsonNode == null) return jsonInput;

    // 提取待翻译文本
    var translatableItems = ExtractTranslatableTexts(jsonNode, targetFields);
    var textsToTranslate = translatableItems.Select(item => item.Text).ToList();
    if (!textsToTranslate.Any()) return jsonInput;

    // 批量翻译
    var translatedTexts = await TranslateTexts(textsToTranslate, fromLang, toLang, azureKey, azureRegion);

    // 替换回JSON节点
    for (int i = 0; i < translatableItems.Count; i++)
    {
        translatableItems[i].Node.GetValue<JsonValue>().Value = translatedTexts[i];
    }

    // 序列化为最终JSON
    return jsonNode.ToJsonString(new JsonSerializerOptions { WriteIndented = true });
}

3. 调用示例

var originalJson = @"{""id"":1,""name"":""Azure Cognitive Services"",""description"":""Cloud-based AI services for developers"",""metadata"":{""tags"":[""AI"",""Cloud""],""summary"":""Build intelligent apps faster""}}";
var targetFields = new List<string> { "name", "description", "summary" };
var translatedJson = await TranslateJson(originalJson, targetFields, "en", "zh-Hans", "your-azure-key", "your-region");
Console.WriteLine(translatedJson);

注意事项

  • 若JSON结构复杂,可根据实际需求调整ExtractTranslatableTexts方法的遍历逻辑,比如跳过数组元素、指定特定嵌套路径
  • Azure翻译API有请求限制,批量翻译时需注意单次请求的文本数量上限
  • 建议添加异常处理,捕获API调用超时、密钥无效等错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:55:16