跳轉至

自动翻译 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)、密鑰

  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 結果訊息 字串 回應代碼參考 '成功' 在成功的情況下
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:///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 = 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 內部伺服器錯誤(或某些消息) 失敗 - 內部伺服器錯誤

請求範例

    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"
                                            }
                                    ]
                            }
                    ]
            }
    }
}