Googel Cloud Translation
Cloud Translation は、Google のニューラル機械翻訳技術を使用して、テキストを 100 以上の言語に瞬時に翻訳してくれるサービスです。今回は、Cloud TranslationのうちCloud Translation - Basic V2をUnityで使用する方法について解説します。
料金
Cloud Translationは、毎月最初の500,000文字までは無料で利用することができます。以降は、翻訳を行なった原文の文字数に対して請求されます。この文字数は、マルチバイト文字であっても1文字としてカウントしてくれますが、空白文字を含む全ての文字がカウント対象に含まれるのでご注意ください。例えば<p>こんにちは</p>
は12文字、空のクエリは1文字としてカウントされます。
詳しくは、Cloud Translation の料金
前準備
Google CloudのGet started for freeから支払い情報を入力し、Google Cloudに登録します。登録後、自動でMy First Projectが生成されます。
次は、左のタブのAPIとサービス -> ライブラリからClooud Translation APIを有効化します。
最後に左のタブのAPIとサービス -> 認証情報から認証情報を作成 -> APIキーを選択します。このAPIキーが外部に公開されると、意図しない請求が発生する可能性があります。利用が終わった後は、必ずAPIキーを削除するか、API キーを保護するに従ってキーの保全に努めてください。
実装
特に変わったことはなく、リファレンスに従って実装していきます。
using System;
using System.Collections.Generic;
using System.Text;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
namespace Sample
{
public sealed class TranslateSample : MonoBehaviour
{
private const string APIKey = "Your API Key.";
private readonly string _url = $"https://translation.googleapis.com/language/translate/v2?key={APIKey}";
private void Start()
{
Translate("en", "ja", "It is raining.");
// 雨が降っている。
}
private async void Translate(string sourceLanguage, string targetLanguage, string sentence)
{
var query = new TranslateQuery
{
source = sourceLanguage,
target = targetLanguage,
format = "text",
q = sentence
};
var requestBody = JsonUtility.ToJson(query);
var postData = Encoding.UTF8.GetBytes(requestBody);
using var request = new UnityWebRequest(_url, "POST");
request.uploadHandler = new UploadHandlerRaw(postData);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
await request.SendWebRequest();
var translateResponse = JsonUtility.FromJson<TranslateResponseBody>(request.downloadHandler.text);
foreach (var translate in translateResponse.data.translations)
{
Debug.Log(translate.translatedText);
}
}
[Serializable]
public class TranslateQuery
{
public string source;
public string target;
public string format;
public string q;
}
[Serializable]
public sealed class TranslateResponseBody
{
public TranslateTextResponseList data;
}
[Serializable]
public sealed class TranslateTextResponseList
{
public List<TranslateTextResponseTranslation> translations;
}
[Serializable]
public sealed class TranslateTextResponseTranslation
{
public string translatedText;
}
}
}
翻訳するの言語のコードは言語コードから参照してください。
ちなみにTranslateQuery
のq
はList<string>
でもいけたりします。