GoogleTranslateLegitimateEndpoint.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.IO;
  6. using System.Net;
  7. using System.Reflection;
  8. using System.Text;
  9. using Harmony;
  10. using Jurassic;
  11. using SimpleJSON;
  12. using UnityEngine;
  13. using XUnity.AutoTranslator.Plugin.Core.Configuration;
  14. using XUnity.AutoTranslator.Plugin.Core.Constants;
  15. using XUnity.AutoTranslator.Plugin.Core.Extensions;
  16. namespace XUnity.AutoTranslator.Plugin.Core.Web
  17. {
  18. public class GoogleTranslateLegitimateEndpoint : KnownHttpEndpoint
  19. {
  20. private static readonly string HttpsServicePointTemplateUrl = "https://translation.googleapis.com/language/translate/v2?key={0}";
  21. public GoogleTranslateLegitimateEndpoint()
  22. {
  23. // Configure service points / service point manager
  24. ServicePointManager.ServerCertificateValidationCallback += Security.AlwaysAllowByHosts( "translation.googleapis.com" );
  25. SetupServicePoints( "https://translation.googleapis.com" );
  26. }
  27. public override bool SupportsLineSplitting => true;
  28. public override void ApplyHeaders( WebHeaderCollection headers )
  29. {
  30. }
  31. public override bool TryExtractTranslated( string result, out string translated )
  32. {
  33. try
  34. {
  35. var obj = JSON.Parse( result );
  36. var lineBuilder = new StringBuilder( result.Length );
  37. foreach( JSONNode entry in obj.AsObject[ "data" ].AsObject[ "translations" ].AsArray )
  38. {
  39. var token = entry.AsObject[ "translatedText" ].ToString();
  40. token = token.Substring( 1, token.Length - 2 ).UnescapeJson();
  41. if( !lineBuilder.EndsWithWhitespaceOrNewline() ) lineBuilder.Append( "\n" );
  42. lineBuilder.Append( token );
  43. }
  44. translated = lineBuilder.ToString();
  45. var success = !string.IsNullOrEmpty( translated );
  46. return success;
  47. }
  48. catch
  49. {
  50. translated = null;
  51. return false;
  52. }
  53. }
  54. public override string GetServiceUrl( string untranslatedText, string from, string to )
  55. {
  56. return string.Format( HttpsServicePointTemplateUrl, WWW.EscapeURL( Settings.GoogleAPIKey ) );
  57. }
  58. public override string GetRequestObject( string untranslatedText, string from, string to )
  59. {
  60. var b = new StringBuilder();
  61. b.Append( "{" );
  62. b.Append( "\"q\":\"" ).Append( untranslatedText.EscapeJson() ).Append( "\"," );
  63. b.Append( "\"target\":\"" ).Append( to ).Append( "\"," );
  64. b.Append( "\"source\":\"" ).Append( from ).Append( "\"," );
  65. b.Append( "\"format\":\"text\"" );
  66. b.Append( "}" );
  67. return b.ToString();
  68. }
  69. public override bool ShouldGetSecondChanceAfterFailure()
  70. {
  71. return false;
  72. }
  73. }
  74. //public class GRequest
  75. //{
  76. // public string q { get; set; }
  77. // public string target { get; set; }
  78. // public string source { get; set; }
  79. // public string format { get; set; }
  80. //}
  81. //public class GResponse
  82. //{
  83. // public GData data { get; set; }
  84. //}
  85. //public class GData
  86. //{
  87. // public List<GTranslation> translations { get; set; }
  88. //}
  89. //public class GTranslation
  90. //{
  91. // public string translatedText { get; set; }
  92. //}
  93. }