TranslationJob_GET.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Linq;
  8. using UnityEngine.Networking;
  9. namespace I2.Loc
  10. {
  11. using TranslationDictionary = Dictionary<string, TranslationQuery>;
  12. public class TranslationJob_GET : TranslationJob_WWW
  13. {
  14. TranslationDictionary _requests;
  15. GoogleTranslation.fnOnTranslationReady _OnTranslationReady;
  16. List<string> mQueries;
  17. public string mErrorMessage;
  18. public TranslationJob_GET(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady)
  19. {
  20. _requests = requests;
  21. _OnTranslationReady = OnTranslationReady;
  22. mQueries = GoogleTranslation.ConvertTranslationRequest(requests, true);
  23. GetState();
  24. }
  25. void ExecuteNextQuery()
  26. {
  27. if (mQueries.Count == 0)
  28. {
  29. mJobState = eJobState.Succeeded;
  30. return;
  31. }
  32. int lastQuery = mQueries.Count - 1;
  33. var query = mQueries[lastQuery];
  34. mQueries.RemoveAt(lastQuery);
  35. string url = string.Format("{0}?action=Translate&list={1}", LocalizationManager.GetWebServiceURL(), query);
  36. www = UnityWebRequest.Get(url);
  37. I2Utils.SendWebRequest(www);
  38. }
  39. public override eJobState GetState()
  40. {
  41. if (www != null && www.isDone)
  42. {
  43. ProcessResult(www.downloadHandler.data, www.error);
  44. www.Dispose();
  45. www = null;
  46. }
  47. if (www==null)
  48. {
  49. ExecuteNextQuery();
  50. }
  51. return mJobState;
  52. }
  53. public void ProcessResult(byte[] bytes, string errorMsg)
  54. {
  55. if (string.IsNullOrEmpty(errorMsg))
  56. {
  57. var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text
  58. errorMsg = GoogleTranslation.ParseTranslationResult(wwwText, _requests);
  59. if (string.IsNullOrEmpty(errorMsg))
  60. {
  61. if (_OnTranslationReady!=null)
  62. _OnTranslationReady(_requests, null);
  63. return;
  64. }
  65. }
  66. mJobState = eJobState.Failed;
  67. mErrorMessage = errorMsg;
  68. }
  69. }
  70. }