自动翻译 API
自動翻譯API是一個允許您輕鬆設置翻譯類型和翻譯者的API。它支持實時同步翻譯和異步翻譯,提供靈活的翻譯環境。
有兩種類型的自動翻譯API:
同步翻譯API,允許實時翻譯,非同步翻譯請求API,不允許實時翻譯,以及非同步翻譯結果確認API。
注意事項¶
支援的文本格式¶
同步翻譯API和非同步翻譯API支援的文本格式如下。
- 同步翻譯API:支持純文本和HTML格式
- 非同步翻譯 API:支持 Markdown 格式
專案匹配方法¶
自動翻譯 API 提供兩種方式來匹配在 App Center 註冊的每個遊戲專案的翻譯服務。
- 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)、密鑰¶
- 在Hive 控制台 > AI 服务 > 自动翻译 > 自动翻译系统 > 服务管理中注册服务。
- 檢查產品的服務金鑰(舊應用金鑰)和密鑰。
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 | 結果訊息 | 字串 | 回應代碼參考 | '成功' 在成功的情況下 |
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 Escape 字串 | 關於「註冊」過程的查詢 |
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¶
實時網址 | 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 | 字符串 | https:// |
回應代碼¶
代碼 | 文本 | 備註 |
---|---|---|
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 = 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¶
實時網址 | https://ats.withhive.com/api/translate/async/result/{uuid} |
HTTP 方法 | GET |
請求路徑¶
欄位名稱 | 描述 | 類型 | 是否必填 | 詳細資訊 | 範例 |
---|---|---|---|---|---|
uuid | 翻譯結果ID,異步翻譯請求的狀態響應值 | 字串 | Y | 從創建到 ~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 | 內部伺服器錯誤(或某些消息) | 失敗 - 內部伺服器錯誤 |
請求範例¶
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"
}
]
}
]
}
}
}