-
-
Save baca130/aad967a94b1f24d76ee560500f78fe1d to your computer and use it in GitHub Desktop.
Simple Unity Google Translator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Credit */ | |
// Inspired by grimmdev's code - https://gist.github.com/grimmdev/979877fcdc943267e44c | |
/* Dependency */ | |
// Import SimpleJSON Scripts : http://wiki.unity3d.com/index.php/SimpleJSON | |
// You can use your own JSON Parser if you want. | |
/* Limitations */ | |
// translate.googleapis.com is free, but it only allows about 100 requests per one hour. | |
// After that, you will receive 429 error response. | |
// You may consider using paid service like google translate v2(https://translation.googleapis.com/language/translate/v2) to remove the limitations. | |
// Check here if you want to use paid version : https://gist.github.com/IJEMIN/fdff6db1b1131b91033cbf204247816e | |
using System; | |
using System.Collections; | |
using Newtonsoft.Json.Linq; | |
using UnityEngine; | |
using UnityEngine.Networking; | |
public class GoogleTranslator : MonoBehaviour { | |
private void Awake() | |
{ | |
DoExample(); | |
} | |
public class GoogleTranslator : MonoBehaviour { | |
// Remove this method after understanding how to use. | |
private void DoExample() | |
{ | |
TranslateText("en","ko","I'm a real gangster.", (success, translatedText) => | |
{ | |
if (success) | |
{ | |
Debug.Log(translatedText); | |
} | |
}); | |
TranslateText("ko","en","나는 리얼 갱스터다.", (success, translatedText) => | |
{ | |
if (success) | |
{ | |
Debug.Log(translatedText); | |
} | |
}); | |
} | |
public void TranslateText(string sourceLanguage, string targetLanguage, string sourceText, Action<bool, string> callback) { | |
StartCoroutine(TranslateTextRoutine(sourceLanguage, targetLanguage, sourceText, callback)); | |
} | |
private static IEnumerator TranslateTextRoutine(string sourceLanguage, string targetLanguage, string sourceText, Action<bool, string> callback) { | |
var url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl={sourceLanguage}&tl={targetLanguage}&dt=t&q={UnityWebRequest.EscapeURL(sourceText)}"; | |
using (var webRequest = UnityWebRequest.Get(url)) { | |
yield return webRequest.SendWebRequest(); | |
if (webRequest.result == UnityWebRequest.Result.ProtocolError || webRequest.result == UnityWebRequest.Result.ConnectionError) { | |
Debug.LogError(webRequest.error); | |
callback.Invoke(false, string.Empty); | |
yield break; | |
} | |
try { | |
// Parsowanie JSON za pomocą Newtonsoft.Json | |
var jsonResponse = JArray.Parse(webRequest.downloadHandler.text); | |
// Zbieranie wszystkich fragmentów tłumaczenia | |
string translatedText = string.Empty; | |
foreach (var segment in jsonResponse[0]) { | |
translatedText += segment[0]?.ToString(); | |
} | |
callback.Invoke(true, translatedText); | |
} catch (Exception ex) { | |
Debug.LogError($"JSON Parsing Error: {ex.Message}"); | |
callback.Invoke(false, string.Empty); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment