コンテンツにスキップ

自動翻訳API

自動翻訳APIは、翻訳タイプと翻訳者を簡単に設定できるAPIです。リアルタイムの同期翻訳と非同期翻訳の両方をサポートしており、柔軟な翻訳環境を提供します。

自動翻訳APIの種類は、リアルタイム翻訳を可能にする同期翻訳APIと、リアルタイム翻訳を許可しない非同期翻訳リクエストAPIおよび非同期翻訳結果確認APIに大別されます。

ノート

サポートされているテキスト形式

同期翻訳APIと非同期翻訳APIがサポートするテキストフォーマットは以下の通りです。

  • 同期翻訳API: プレーンテキストとHTML形式をサポート
  • 非同期翻訳API: マークダウン形式をサポート

プロジェクトマッチングメソッド

自動翻訳APIは、アプリセンターに登録された各ゲームプロジェクトに対して翻訳サービスを一致させるための2つの方法を提供します。

  • 自動翻訳サービスと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 App CenterプロジェクトID 文字列 N 1. 値がある場合: プロジェクトIDで集計する 2. 値がない場合: "None"として集計 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”
to 翻訳応答言語 文字列 Y 複数の言語は“,”で区切ってリクエストできます 翻訳サポート言語と Hive 言語コードの参照 1. (単一言語翻訳) “en” 2. (多言語翻訳)“en, fr, de"

応答

フィールド名 説明 タイプ 詳細
result 結果値 オブジェクト
result > code 結果コード 整数 レスポンスコードを参照 '200' 成功時
result > msg 結果メッセージ 文字列 レスポンスコードを参照 '成功' 成功時
content 翻訳結果 オブジェクト
content > data > translateMsg 翻訳値の配列 配列
content > data > translateMsg > detectedLanguage 入力言語に関連する値 オブジェクト ※ "翻訳リクエスト言語(from)" が "auto" の場合に存在
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"

レスポンスコード

失敗 * 解析できませんでした (JSONエラー)
コード テキスト 備考
200 "成功" 成功
400 <> が欠落しているか 不正なリクエスト 失敗 * リクエストパラメータが欠落しています
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は、翻訳リクエストとレスポンスを2つのAPIを通じて別々に処理します。 主に2つのAPIがあります:リクエスト用の「非同期翻訳リクエストAPI」と、レスポンス用の「非同期翻訳結果確認API」です。

これは、前処理および後処理を必要とするマークダウンテキスト形式をサポートする本文の翻訳テキストタイプです。

リクエスト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 App CenterプロジェクトID 文字列 はい 1. 値がある場合: プロジェクトIDで集計する 2. 値がない場合: "None"として集計 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 言語コードの参照 ※ 非同期翻訳は翻訳リクエストコンテンツの自動言語検出をサポートしていません。
to 翻訳応答言語 文字列 Y 複数の言語リクエストは「、」で区切ることで可能です。 翻訳サポート言語と 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} です

レスポンスコード

失敗 * 解析不可能(JSONエラー)
コード テキスト 備考
200 "成功" 成功
400 <> が欠落しているか 不正なリクエスト 失敗 * リクエストパラメータが欠落しています
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":"# マークダウン チートシート ......",
        "to":"ko,ja,zh-hant",
                "from":"en"
    }'
    import requests

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

    payload = {
            "info": {"service_key": "815e3d8d6e7443ba"},
            "text": "# Markdown チートシート ......",
            "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\":\"# マークダウン チートシート
    ......\",\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 翻訳ステータスメッセージ 文字列 “completed(100)”/ “waiting(101)” / “processing(102)” / “failed(199)”
content > data 翻訳結果値 オブジェクト ※ result>status>msg の値が “waiting” / “processing” / “failed” の場合、フィールドは存在せず、 “completed” の場合のみ存在します。
content > data > translateMsg 翻訳値の配列 配列
content > data > translateMsg > translations 翻訳テキストの配列 配列 言語ごとに配列として表示されます
content > data > translateMsg > translations > text 翻訳テキスト 文字列 JSONエスケープされた文字列 “登録”プロセスに関するお問い合わせ
content > data > translateMsg > translations > to 翻訳言語の国コード 文字列 "en"

レスポンスコード

失敗 * 解析不可能 (JSONエラー)
コード テキスト 備考
200 "成功" 成功
400 <> が欠落しているか 不正なリクエスト 失敗 * リクエストパラメータが欠落しています
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"
                                            }
                                    ]
                            }
                    ]
            }
    }
}