跳转至

自动翻译 API

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

有两种类型的自动翻译API:

同步翻译API,允许实时翻译,异步翻译请求API,不允许实时翻译,以及异步翻译结果确认API

注意事项

支持的文本格式

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

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

项目匹配方法

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

  • 1:1 与自动翻译服务的匹配:为每个项目注册所使用的服务
  • 调用一个自动翻译服务时,输入项目ID以匹配:通过添加每个项目ID来调用API

支持的翻译语言

Hive 平台支持总共 16 种翻译语言,如下所示。

语言 语言特定符号 语言代码
韩语 Korean 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. 检查服务密钥 (appKey)、秘密密钥

  1. Hive 控制台 > AI 服务 > 自动翻译 > 自动翻译系统 > 服务管理中注册服务。
  2. 检查产品的服务密钥(旧应用密钥)和密钥。

2. 检查签名

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

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

※ 签名是使用应用程序密钥和加密密钥通过 HmacSHA256 编码的 Base64 值。

import hmac
import hashlib
import base64

app_key = "your_app_key"
secret_key = "your_secret_key"

# 使用 HMAC SHA-256
signature_bytes = hmac.new(secret_key.encode('utf-8'), app_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 appKey = "your_app_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(appKey.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 > app_key 应用密钥值 字符串 802890479467404e
info > meta_data 未被自动翻译服务聚合的值,但作为日志保存 对象 转换 JSON 对象字符串时,限制在 1kb 内 {“game” : “MLB”} 或 [{“key1”:“blabla”}]
text 翻译请求内容 字符串 ※ 需要字符串 JSON 转义 “关于 \”注册\” 程序的询问”
from 翻译请求的语言 字符串 与“text”对应的语言代码 翻译支持语言和语言代码参考 ※ 输入“auto”时,自动检测(小写) 1. (自动检测)“auto” 2. (韩语)“ko”
to 翻译响应语言 字符串 Y 可以通过用“,”分隔请求多种语言 翻译支持的语言和语言代码参考 1. (单语言翻译)“en” 2. (多语言翻译)“en, fr, de"

响应

字段名称 描述 类型 详细信息 示例
result 结果值 对象
result > code 结果代码 整数 响应代码参考 成功时为'200'
result > msg 结果消息 字符串 响应代码参考 成功时为'Success'
content 翻译结果 对象
content > data > translateMsg 翻译值数组 数组
content > data > translateMsg > detectedLanguage 输入语言相关值 对象 ※ 当“翻译请求语言(从)”为“自动”时存在
content > data > translateMsg > detectedLanguage > language 输入语言检测值 字符串 翻译支持语言和语言代码参考
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":{
                "app_key":"802890479467404e"
        },
        "text": "服务器账户申请账户创建多语言内容管理程序查询",
        "to":"en,fr,de",
        "from": "ko"
        }'
    import requests

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

    payload = {
            "info": {"app_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        \"app_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”。

这是一种同步翻译文本类型,支持需要前后处理的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

请求头

字段名称 描述< /th> 类型 是否必需 详细信息 示例
签名 用于身份验证的签名值 字符串 使用密钥对应用程序密钥值进行HmacSHA256编码 pczeZ91N/ijDBZ80ktNdTDPhnmEK98a3AIsTui46o9c=

请求体

字段名称 描述< /th> 类型 必需 详细信息 示例
info 应用密钥信息对象 对象
info > app_key 应用密钥值 字符串 802890479467404e
info > meta_data 不通过自动翻译服务聚合,而是作为日志值存储 对象 转换 JSON 对象字符串时,限制在 1kb 内 {“game” : “MLB”} 或 [{“key1”:“blabla”}]
text 翻译请求内容 字符串 ※ 需要字符串 JSON 转义 “关于 \”注册\” 程序的查询”
from 翻译请求语言 字符串 与“text”对应的语言代码 翻译支持语言和语言代码参考 ※ 异步翻译 不支持自动语言检测翻译请求。
翻译响应语言 字符串 可以通过“,”分隔进行多语言请求 支持的翻译语言和语言代码参考 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":{
                "app_key":"815e3d8d6e7443ba"
        },
        "text":"# Markdown Cheat Sheet ......",
        "to":"ko,ja,zh-hant",
                "from":"en"
    }'
    import requests

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

    payload = {
            "info": {"app_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.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"info\":{\n        \"app_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 > mag 翻译状态消息 字符串 “已完成(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"
                                            }
                                    ]
                            }
                    ]
            }
    }
}