跳转至

自动翻译 API

自动翻译API是一个允许您轻松设置翻译类型和翻译器的API。它支持实时同步翻译和异步翻译,提供灵活的翻译环境。

自动翻译API的类型可以大致分为同步翻译API,允许实时翻译,以及异步翻译请求API异步翻译结果检查API,不允许实时翻译。

注意事项

支持的文本格式

同步翻译API和异步翻译API支持的文本格式如下。

  • 同步翻译API:支持纯文本和HTML格式
  • 异步翻译API:支持Markdown格式

项目匹配方法

自动翻译API为在应用中心注册的每个游戏项目提供两种匹配翻译服务的方法。

  • 自动翻译服务和1:1匹配:注册每个项目使用的服务
  • 调用单个自动翻译服务时,输入用于匹配的项目ID:将每个项目ID添加到API调用中

支持的翻译语言

Hive 支持的翻译语言总共有 16 种,具体如下。

语言 语言符号 Hive 语言代码
韩语 한국어 ko
英语 English en
日语 日本語 ja
简体中文 简体中文 zh-hans
繁体中文 繁體中文 zh-hant
法语 Français fr
德语 Deutsch de
俄语 русский ru
西班牙语 Español es
葡萄牙语 Português pt
印尼语 Bahasa Indonesia id
越南语 tiếng Việt vi
泰语 ไทย th
意大利语 Italiano it
土耳其语 Türkçe tr
阿拉伯语 العربية ar

前提条件

使用自动翻译API的先决条件如下。

1. 检查服务密钥和秘密密钥

  1. Hive 控制台 > AI 服务 > 自动翻译 > 自动翻译系统 > 服务管理 来注册服务。
  2. 检查产品的服务密钥和秘密密钥。

2. 签名验证

API 服务器使用服务密钥和秘密密钥生成签名。

在 Hive 控制台中选择密钥管理 > AI 服务 > 自动翻译 > 自动翻译系统 > 服务管理 以检查生成的签名。生成的签名代码示例如下。

  • 签名是使用服务密钥和秘密密钥通过 HmacSHA256 编码的 Base64 值。
import hmac
import hashlib
import base64

service_key = "your_service_key"
secret_key = "your_secret_key"

# 使用 hmac sha-256
signature_bytes = hmac.new(secret_key.encode('utf-8'), service_key.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(signature_bytes).decode('utf-8')

# 将签名添加到HTTP请求
# ...
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException {
String serviceKey = "your_service_key";
String secretKey = "your_secret_key";

// 使用 HMAC SHA-256
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
sha256_HMAC.init(secretKeySpec);

// 签名生成
byte[] signatureBytes = sha256_HMAC.doFinal(serviceKey.getBytes(StandardCharsets.UTF_8));
String signature = Base64.getEncoder().encodeToString(signatureBytes);

// 将签名添加到HTTP请求
// ...
}

同步翻译 API

处理翻译请求并在实时同步模式下通过单个 API 请求和响应提供结果。 由于翻译结果直接在 API 响应中提供,因此没有可用的 API 来检查翻译结果。

这是一个支持不需要前后处理的纯文本和HTML文本格式的同步翻译文本类型。

请求 URL

实时 URL https://ats.withhive.com/api/translate/Sync https://ats.withhive.com/api/translate/sync/{project_id}
HTTP 方法 POST
内容类型 application/json
数据格式 JSON

请求路径

字段名称 描述 类型 是否必填 详细信息 示例
project_id 应用中心项目ID 字符串 N 1. 如果有值:按项目ID聚合 2. 当没有值时:聚合为“无” com.com2us.project1

请求头

字段名称 描述 类型 必需 详细信息 示例
签名 用于身份验证的签名值 字符串 使用服务密钥的秘密密钥通过HmacSHA256编码的值 IWusOMIBN8D/0HqgZ7/58e4rgS05E+nka3Ya9vc+yiY=

请求体

字段名称 描述 类型 是否必需 详细信息 示例
info 服务密钥信息对象 对象
info > service_key 服务密钥值 字符串 802890479467404e
info > meta_data 在自动翻译服务中未聚合但存储在日志中的值 对象 转换为 JSON 对象字符串时,限制在 1kb 内 {“game” : “MLB”} 或 [{“key1”:“blabla”}]
text 翻译请求内容 字符串 ※ 需要字符串 JSON 转义 “ \”关于注册程序的询问\”
from 翻译请求语言 字符串 与“text”对应的语言代码 翻译支持语言和 Hive 语言代码参考 ※ 输入“auto”将自动检测(小写) 1. (自动检测)“auto” 2. (韩语)“ko”
翻译响应语言 字符串 可以通过用“,”分隔来请求多种语言 翻译支持语言和 Hive 语言代码参考 1. (单语言翻译) “en” 2. (多语言翻译)“en, fr, de"

响应

字段名称 描述 类型 详细信息 示例
result 结果值 对象
result > code 结果代码 整数 参考响应代码 '200' 表示成功
result > msg 结果消息 字符串 参考响应代码 '成功' 表示成功
content 翻译结果 对象
content > data > translateMsg 翻译值数组 数组
content > data > translateMsg > detectedLanguage 与输入语言相关的值 对象 ※ 如果“翻译请求语言(来自)”为“自动”,则存在
content > data > translateMsg > detectedLanguage > language 检测到的输入语言值 字符串 参考支持的翻译语言和 Hive 语言代码
content > data > translateMsg > detectedLanguage > score 输入语言检测分数(越接近1,越准确) 数字(浮点数) 1.0
content > data > translateMsg > translations 翻译文本数组 数组 按语言显示为数组
content > data > translateMsg > translations > text 翻译文本 字符串 Json 转义字符串 关于“注册”过程的查询
content > data > translateMsg > translations > to 翻译语言国家代码 字符串 "en"

响应代码

代码 文本 备注
200 "成功" 成功
400 <> 缺失或 请求不正确 失败 * 缺失请求参数或 失败 * 无法解析 (JSON 错误)
401 错误的签名 失败 * 签名密钥问题
404 未注册的应用密钥 失败 * 未注册的服务密钥
404 未注册的作业 UUID 失败 * 未注册的作业 UUID
500 内部服务器错误 (或某些消息) 失败 * 内部服务器错误

请求示例

    curl --request POST \
    --url https://ats.withhive.com/api/translate/sync \
    --header 'Content-Type: application/json' \
    --header 'Signature: IWusOMIBN8D/0HqgZ7/58e4rgS05E+nka3Ya9vc+yiY=' \
    --data '{
        "info":{
                "service_key":"802890479467404e"
        },
        "text":"请求创建服务器账户申请和管理多语言内容的程序",
        "to":"en,fr,de",
        "from" : "ko"
        }'
    import requests

    url = "https://ats.withhive.com/api/translate/sync"

    payload = {
            "info": {"service_key": "802890479467404e"},
            "text": "关于服务器账户申请和账户创建的多语言内容管理流程的询问",
            "to": "en,fr,de",
            "from": "ko"
    }
    headers = {
            "Content-Type": "application/json",
            "Signature": "IWusOMIBN8D/0HqgZ7/58e4rgS05E+nka3Ya9vc+yiY="
    }

    response = requests.request("POST", url, json=payload, headers=headers)

    print(response.text)
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"info\":{\n        \"service_key\":\"802890479467404e\"\n    },\n    \"text\":\"服务器账户申请账户创建多语言内容管理程序查询\",\n    \"to\":\"en,fr,de\",\n    \"from\" : \"ko\"\n}");
    Request request = new Request.Builder()
        .url("https://ats.withhive.com/api/translate/sync")
        .post(body)
        .addHeader("Content-Type", "application/json")
        .addHeader("Signature", "IWusOMIBN8D/0HqgZ7/58e4rgS05E+nka3Ya9vc+yiY=")
        .build();

    Response response = client.newCall(request).execute();

响应示例

    {
    "result" : {
    "code" : 200,
    "msg" : "Success"  
    },
    "content" : {
        "data" : {
            "translateMsg":[{
                "detectedLanguage":{
                    "language":"ko",
                    "score":-1.0
                },
                "translations":[{
                        "text":"Server Account Application Create an account Inquiries about the multilingual content management process",
                        "to":"en"
                    },
                    {
                        "text":"Demande de compte serveur Créer un compte Demandes de renseignements sur le processus de gestion de contenu multilingue",
                        "to":"fr"
                    },
                    {
                    "text":"Server-Konto-Anwendung Konto erstellen Anfragen zum mehrsprachigen Content-Management-Prozess",
                    "to":"de"
                }]
            }]
        }
    }
  }

异步翻译请求 API

异步翻译API通过两个API分别处理翻译请求和响应。 主要有两个API:用于请求的“异步翻译请求API”和用于响应的“异步翻译结果检查API”。

这是一个翻译文本类型,用于正文,支持需要前后处理的markdown文本格式。

请求 URL

实时 URL https://ats.withhive.com/api/translate/async https://ats.withhive.com/api/translate/async/{project_id}
HTTP 方法 POST
内容类型 application/json
数据格式 JSON

请求路径

字段名称 描述 类型 必需 详细信息 示例
project_id 应用中心项目ID 字符串 1. 当有值时:按项目ID聚合 2. 当没有值时:聚合为“无” com.com2us.project1

请求头

字段名称 描述 类型 必需 详细信息 示例
签名 用于身份验证的签名值 字符串 使用服务密钥的秘密密钥通过HmacSHA256编码的值 pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=

请求体

字段名称 描述 类型 必需 详细信息 示例
info 服务密钥信息对象 对象
info > service_key 服务密钥值 字符串 802890479467404e
info > meta_data 在自动翻译服务中未聚合但保存在日志中的值 对象 转换为 JSON 对象字符串时,大小在 1kb 以内 {“game” : “MLB”} 或 [{“key1”:“blabla”}]
text 翻译请求的内容 字符串 ※ 需要字符串 JSON 转义 “ \”有关注册程序的查询”
from 翻译请求的语言 字符串 与“text”对应的语言代码 翻译支持语言和 Hive 语言代码参考 ※ 异步翻译不支持自动语言检测功能。
翻译响应语言 字符串 可以通过“,”分隔来请求多种语言 翻译支持语言和 Hive 语言代码参考 1. (单语言翻译)“en” 2. (多语言翻译) “en, fr, de"

响应

字段名称 描述 类型 详细信息 示例
result 结果值 对象
result > code 结果代码 整数 参见响应代码 '200' 表示成功
result > msg 结果消息 字符串 参见响应代码 '成功' 表示成功
content 翻译结果值 对象
content > uuid 翻译结果 ID 字符串 UUID4 格式 ID 用于检查翻译状态的 ID 62fe5786-0bb8-4cd0-b51a-6d6f6bfe2bac
content > resultUrl 用于检查翻译状态的 URL 字符串 /api/translate/async/result/{uuid} 是

响应代码

代码 文本 备注
200 "成功" 成功
400 <> 缺失或 请求不正确 失败 * 缺失请求参数或 失败 * 解析不可能(JSON 错误)
401 错误的签名 失败 * 签名密钥异常
404 未注册的应用密钥 失败 * 未注册的服务密钥
404 未注册的工作 UUID 失败 * 未注册的工作 UUID
500 内部服务器错误(或某些消息) 失败 * 内部服务器错误

请求示例

    curl --request POST \
    --url https://ats.withhive.com/api/translate/async \
    --header 'Content-Type: application/json' \
    --header 'Signature: pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=' \
    --data '{
        "info":{
                "service_key":"815e3d8d6e7443ba"
        },
        "text":"# Markdown 备忘单 ......",
        "to":"ko,ja,zh-hant",
                "from":"en"
    }'
    import requests

    url = "https://ats.withhive.com/api/translate/async"

    payload = {
            "info": {"service_key": "815e3d8d6e7443ba"},
            "text": "# Markdown cheat sheet ......",
            "to": "ko,ja,zh-hant",
            "from": "en"
    }
    headers = {
            "Content-Type": "application/json",
            "Signature": "pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c="
    }

    response = requests.request("POST", url, json=payload, headers=headers)

    print(response.text)
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"info\":{\n        \"service_key\":\"815e3d8d6e7443ba\"\n    },\n\t\"text\":\"# Markdown cheat sheet
    ......\",\n    \"to\":\"ko,ja,zh-hant\",\n\t\t\"from\":\"en\"\n}\n");
    Request request = new Request.Builder()
        .url("https://ats.withhive.com/api/translate/async")
        .post(body)
        .addHeader("Content-Type", "application/json")
        .addHeader("Signature", "pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=")
        .build();

    Response response = client.newCall(request).execute();

响应示例

{
    "result": {
        "code": 200,
        "msg": "Success"
    },
    "content": {
        "uuid": "d2a36ba1-1bb3-43aa-ac57-46576d27eb37",
        "resultUrl": "https://test-ats.withhive.com/api/translate/async/result/d2a36ba1-1bb3-43aa-ac57-46576d27eb37"
    }
 }

异步翻译结果检查 API

异步翻译结果检查API返回异步翻译请求的翻译结果。换句话说,它是处理请求和响应分开的异步API中对应响应的API。

请求 URL

实时 URL https://ats.withhive.com/api/translate/async/result/{uuid}
HTTP 方法 GET

请求路径

字段名称 描述 类型 必需 详细信息 示例
uuid 翻译结果ID,异步翻译请求的状态响应值 字符串 可以从创建到~N天进行检查 5c8ded49-9ee2-412a-a0ab-a4018a0dc093

请求头

字段名称 描述 类型 必需 详细信息 示例
签名 用于身份验证的签名值 字符串 使用服务密钥的秘密密钥通过HmacSHA256编码的值 pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=

响应

字段名称 描述 类型 详细信息 示例
result 结果数组 对象
result > code 结果代码 整数 参考响应代码 '200' 表示成功
result > msg 结果消息 字符串 参考响应代码 '成功' 表示成功
content 翻译结果 对象
content 翻译结果 对象
content > status 翻译状态值 对象 翻译状态信息
content > status > code 翻译状态代码 整数 100 / 101 / 102 / 199
content > status > msg 翻译状态消息 字符串 “已完成(100)”/ “等待中(101)” / “处理中(102)” / “失败(199)”
content > data 翻译结果值 对象 ※ 如果result>status>msg值为 “等待中” / “处理中” / “失败” 将没有字段, 仅在“已完成”时存在
content > data > translateMsg 翻译值数组 数组
content > data > translateMsg > translations 翻译文本数组 数组 按语言显示为数组
content > data > translateMsg > translations > text 翻译文本 字符串 Json转义字符串 关于“注册”过程的查询
content > data > translateMsg > translations > to 翻译语言国家代码 字符串 "en"

响应代码

代码 文本 备注
200 "成功" 成功
400 <> 缺失或 请求不正确 失败 * 缺失请求参数或 失败 * 解析不可能(JSON错误)
401 错误的签名 失败 * 签名密钥异常
404 未注册的应用密钥 失败 * 未注册的服务密钥
404 未注册的作业UUID 失败 * 未注册的作业UUID
500 内部服务器错误(或某些消息) 失败 * 内部服务器错误

请求示例

    curl --request GET 
    --url https://test-ats.withhive.com/api/translate/asyncresult/3f8891e9-513a-4e91-b0b6-ac9aabbbf6d2 
    --header 'Content-Type: application/json' 
    --header 'Signature: pczeZ91NijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c='
import requests

url = "https://ats.withhive.com/api/translate/async/result/3f8891e9-513a-4e91-b0b6-ac9aabbbf6d2"

headers = {
        "Content-Type": "application/json",
        "Signature": "pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c="
}

response = requests.request("GET", url, headers=headers)

print(response.text)
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
    .url("https://ats.withhive.com/api/translate/async/result/3f8891e9-513a-4e91-b0b6-ac9aabbbf6d2")
    .get()
    .addHeader("Content-Type", "application/json")
    .addHeader("Signature", "pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=")
    .build();

Response response = client.newCall(request).execute();

响应示例

{
    "result": {
            "code": 200,
            "msg": "Success"
    },
    "content": {
            "status": {
                    "code": 100,
                    "msg": "completed"
            },
            "data": {
                    "translateMsg": [
                            {
                                    "translations": [
                                            {
                                                    "text": "# Markdown 치트 시트\r\n\r\n......",
                                                    "to": "ko"
                                            },
                                            {
                                                    "text": "# Markdownチートシート\r\n\r\n......",
                                                    "to": "ja"
                                            },
                                            {
                                                    "text": "# Markdown 備忘單\r\n\r\n......",
                                                    "to": "zh-hant"
                                            }
                                    ]
                            }
                    ]
            }
    }
}