c# - translateclient - com google cloud google cloud translate
Problemas al actualizar la cookie de Google Translate en Chrome (2)
Estoy tratando de permitir que el usuario establezca su idioma predeterminado. Cuando un usuario elige un idioma del menú desplegable y hace clic en "guardar", la página se vuelve a cargar y la cookie de Google Translate se actualiza, y por lo tanto el sitio se traduce al idioma que el usuario seleccionó. En FF e IE, los usuarios pueden configurar el idioma con el menú desplegable y luego cambiarlo a otro idioma. En Chrome, sin embargo, los usuarios pueden configurar el idioma la primera vez, pero luego no pueden cambiarlo a otro idioma.
Este problema solo aparece en el sitio de prueba y beta. Puedo actualizar el idioma en mi host local.
Estoy probando con Chrome versión 38.
Este es el código que establece la cookie por primera vez, y también que la actualiza cuando un usuario hace clic en Guardar.
public void ImplementUserPreferences(UserPreferences prefs)
{
//examples of prefs.GoogleTranslateDefaultLanguage:
// af, sq, ar, sp, is....
HttpCookie languageCookie = new HttpCookie("googtrans", "/en/" + prefs.GoogleTranslateDefaultLanguage);
AddOrSetCookie(languageCookie, "googtrans");
}
private void AddOrSetCookie(HttpCookie cookie, String cookieName)
{
if (System.Web.HttpContext.Current.Request.Cookies[cookieName] == null)
{
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
else
{
System.Web.HttpContext.Current.Response.Cookies.Set(cookie);
}
}
Por favor, no use cookies, es por eso que html5 incluye almacenamiento local
más sobre almacenamiento local: http://www.html5rocks.com/en/tutorials/offline/storage
y para su escenario: http://www.codeguru.com/csharp/.net/two-ways-of-passing-html5-web-storage-data-to-asp.net.htm
por cierto: estas características también son compatibles con IE8! (como se muestra aquí: http://caniuse.com/#search=local%20storage )
Verifique los encabezados de respuesta, pero no creo que la cookie no se envíe en la solicitud cuando su dirección sea localhost. Por lo tanto, con su lógica, la preferencia se actualizará cada vez que la solicitud no tenga una cookie presente.
Un HttpResponse no devolverá las cookies que vinieron en la solicitud, solo agrega las cookies que usted quiere establecer en la respuesta. Entonces, cuando está probando en el sitio beta, se envía una solicitud con una cookie después de que se haya configurado, y llamará al código en la condición de else. El método HttpCookieCollection.Set (...) no agrega una cookie, solo actualiza una que ya existe en la colección. Me gustaría cambiar el código para leer así:
private void AddOrSetCookie(HttpCookie cookie, String cookieName)
{
if (System.Web.HttpContext.Current.Request.Cookies[cookieName] == null
|| System.Web.HttpContext.Current.Request.Cookies[cookieName].Value != cookie.Value )
{
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
}