Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 4
0
        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));
        }