http API を使用して Bing Translation サービスを実装しています。実装中に 2 つの問題に遭遇しましたが、何時間にもわたる調査の結果、まだ解決できていません。誰かが私に少しのガイダンスを提供してくれることを願っています。
問題:
1) Web サービスに送信された最初のページは、ほぼ完全に翻訳されています。ただし、最初のページがレンダリングされた後、サーバーへの後続の呼び出しは最初の呼び出しからの応答を受け取ります。つまり、html 文字列はサービスに正しく送信されますが、サービスは、新しい要求に対する期待される新しい応答ではなく、元の要求に対する元の応答を返します (サービスが要求をキャッシュしている可能性がありますか?)。
2) Javascript は内部の html と同様に翻訳されます:-/ 以下の例を参照してください:
Javascript(翻訳:-/)
$(función () {}
elformulario var document.forms['ctl01 ='];
Si (typeof(Sys) == 'undefined') tira Error nuevo ('ASP NET Ajax client-side fram...
My Translation クラス (Web サービス呼び出し)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Configuration;
using System.Web;
using System.Web.Script.Serialization;
using System.Net;
using System.IO;
using System.Runtime.Serialization.Json;
using Services.Config;
using Services.Models;
namespace Services
{
public class TranslationService
{
private readonly RegisterServicesSection _config;
private readonly Service _btsrv;
public TranslationService()
{
_config = (RegisterServicesSection)ConfigurationManager.GetSection("registerServicesSection");
if (_config != null)
{
foreach (var item in _config.Services)
{
_btsrv = (Service)item;
if (_btsrv.Title == "BingTranslator")
break;
}
}
}
public string GetAuthToken()
{
string response;
_btsrv.AuthRequest = string.Format(_btsrv.AuthRequest, HttpUtility.UrlEncode(_btsrv.ClientId), HttpUtility.UrlEncode(_btsrv.ClientSecret));
try
{
//Create Web Client
var web = new WebClient();
//Set Web Client Encoding
web.Encoding = Encoding.UTF8;
//Get response from Web Client request
response = web.UploadString(_btsrv.AuthUrl, _btsrv.AuthRequest);
}
catch (Exception ex)
{
return null;
}
//Create Javasrcipt Object Serializer
var ser = new JavaScriptSerializer();
//Deserialize response into token poco object
var token = ser.Deserialize<BingAuthToken>(response);
if (token != null)
return token.access_token;
else
return null;
}
public string Post(string text, string fromCulture, string toCulture)
{
string response;
try
{
var accessToken = GetAuthToken();
if (accessToken == null)
return null;
//Create Web Client
var web = new WebClient();
//Set Web Client Authorization Headers
web.Headers.Add("Authorization", "Bearer " + accessToken);
//Get UrlEncoded Post Parameters from Web.config
_btsrv.Request = String.Format(_btsrv.Request, HttpUtility.UrlEncode(text), fromCulture, toCulture, HttpUtility.UrlEncode(_btsrv.ContentType));
//Set Web Client Encoding
web.Encoding = Encoding.UTF8;
//Get response from Web Client Request
response = web.DownloadString(_btsrv.Url + _btsrv.Request);
}
catch (Exception ex)
{
return null;
}
//Create xml document to load Web Client response
var doc = new XmlDocument();
//Load Web Client response
doc.LoadXml(response);
//Return Web Client response string
return doc.DocumentElement.InnerText;
}
}
}
マイページのレンダリング呼び出し:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using Services;
namespace TestTranslation
{
public class CustomPage: Page
{
private TranslationService _tsrv = new TranslationService();
protected override void Render(HtmlTextWriter writer)
{
using (StringWriter output = new StringWriter())
{
base.Render(new HtmlTextWriter(output));
//This is the rendered HTML of your page.
string outputAsString = output.ToString();
outputAsString = _tsrv.Post(outputAsString, "en", "es");
writer.Write(outputAsString);
output.Close();
writer.Close();
writer.Dispose();
}
}
}
}
vs2012 でデフォルトの Web フォーム テンプレートを使用しています。このアーキテクチャについて間違った方法で行っている可能性があり、以前にこのサービスを実装しようとしたことがありません。どんな助けでも大歓迎です!!!!