/// <summary> /// Performs translation with given translate request asynchronous. /// </summary> /// <param name="request">Translate request.</param> /// <param name="onCompleted">Completed action.</param> /// <param name="onError">Error action.</param> public IEnumerator TranslateAsync(GoogleTranslateRequest request, Action <TranslationCompletedEventArgs> onCompleted = null, Action <TranslationErrorEventArgs> onError = null) { using (UnityWebRequest www = PrepareRequest(request)) { #if UNITY_2017_2_OR_NEWER yield return(www.SendWebRequest()); #else yield return(www.Send()); #endif ProcessResponse(request, www, onCompleted, onError); } }
private void ProcessResponse(GoogleTranslateRequest request, UnityWebRequest www, Action <TranslationCompletedEventArgs> onCompleted, Action <TranslationErrorEventArgs> onError) { if (www.isNetworkError || www.isHttpError) { if (onError != null) { onError.Invoke(new TranslationErrorEventArgs(www.error, www.responseCode)); } } else { var response = JsonUtility.FromJson <JsonResponse>(www.downloadHandler.text); if (response != null && response.data != null && response.data.translations != null && response.data.translations.Length > 0) { var requests = new GoogleTranslateRequest[] { request }; var translateResponse = new GoogleTranslateResponse(); translateResponse.TranslatedText = response.data.translations[0].translatedText; var responses = new GoogleTranslateResponse[] { translateResponse }; if (onCompleted != null) { onCompleted.Invoke(new TranslationCompletedEventArgs(requests, responses)); } } else { if (response != null && response.error != null) { if (onError != null) { onError.Invoke(new TranslationErrorEventArgs(response.error.message, response.error.code)); } } if (onError != null) { onError.Invoke(new TranslationErrorEventArgs("Response data could not be read.", -1)); } } } }
/// <summary> /// Useful for Editor scripts. Otherwise, recommended to use <see cref="TranslateAsync"/>. /// </summary> /// <param name="request">Translate request.</param> /// <param name="onCompleted">Completed action.</param> /// <param name="onError">Error action.</param> public void Translate(GoogleTranslateRequest request, Action <TranslationCompletedEventArgs> onCompleted = null, Action <TranslationErrorEventArgs> onError = null) { using (UnityWebRequest www = PrepareRequest(request)) { #if UNITY_2017_2_OR_NEWER www.SendWebRequest(); #else www.Send(); #endif // Wait request completion. while (!www.isDone) { } ProcessResponse(request, www, onCompleted, onError); } }
private UnityWebRequest PrepareRequest(GoogleTranslateRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if (!AuthenticationFile) { throw new ArgumentNullException("AuthenticationFile", "Auth file not attached."); } var form = new WWWForm(); form.AddField(RequestKeyInputText, request.Text); form.AddField(RequestKeySourceLanguage, Localization.GetLanguageCode(request.Source)); form.AddField(RequestKeyTargetLanguage, Localization.GetLanguageCode(request.Target)); var url = string.Format(RequestUrlFormat, AuthenticationFile.text); return(UnityWebRequest.Post(url, form)); }