GoogleTranslateLegitimateEndpoint.cs 3.3 KB

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