2014-11-17 22 views
17

Kullanıcının varsayılan dilini ayarlamasına izin vermeye çalışıyorum. Bir kullanıcı açılır listeden bir dil seçip "kaydet" i tıkladığında sayfa yeniden yüklenir ve Google Çeviri çerezi güncellenir ve bu nedenle site kullanıcının seçtiği dile çevrilir. FF ve IE'de kullanıcılar, açılır menü ile dili ayarlayabilir ve daha sonra başka bir dile değiştirebilirler. Ancak, Chrome'da kullanıcılar dili ilk kez ayarlayabilir, ancak daha sonra farklı bir dile çeviremezler.Chrome'da Google Çeviri bilgisi güncelleme sorunları

Bu sorun, yalnızca sınamada ve beta sitede gösteriliyor - yerel anasistemdeki dili güncelleyebiliyorum.

Ben Chrome sürüm 38.

Bu ile test ediyorum Cookie'ye ilk kez setleri koddur ve bir kullanıcı Kaydet tıkladığında da o kadar günceller.

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); 
    } 
} 
+0

'System.Web.HttpContext.Current.Response.Cookies [cookieName] = cookie' veya '... Cookies [cookieName] .Value = cookie.Value' yapmayı denediniz mi? çerezi silip yeni bir değer ekleyerek? –

+0

Evet, denedim. Yardım etmiyor. – dmr

+0

Kaydetme, bir çerez indirirse, bunları temizlemelidir. Veya bunları hızlı bir şekilde yenilemek için ayarlayabilirsiniz, ancak ilk kez doğru olan kullanıcıları incitir. –

cevap

1

Kontrol yanıt başlıkları, ama adres localhost'tur çerez isteğinde gönderilen olmayacağını inanmıyorum. Bu nedenle, mantığınızla, istek hiçbir çerez mevcut olmadığı için tercih her zaman güncellenir.

HttpResponse, istekte bulunan tanımlama bilgilerini geri göndermez, yalnızca yanıtta ayarlamak istediğiniz tanımlama bilgilerini ekler. Bu nedenle, beta sitesinde test ettiğinizde, ayarlandıktan sonra bir çerez ile bir istek gelir ve kodu başka bir koşulda arayacaktır. HttpCookieCollection.Set (...) yöntemi bir tanımlama bilgisi eklemez, yalnızca koleksiyonda zaten mevcut olanı günceller. Böyle okumaya kodunu değiştirmek olacaktır:

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); 
    } 

} 
+0

Yanıt Başlıkları’nı (Chrome geliştirici araçları) kontrol ettiğimde, çerez listesinde bir google çeviri çerezi var: 'googtrans =/en/ca; ' – dmr

+0

Çerez localhost ve test/beta sitesinde – dmr

0

çerezleri kullanırız etmeyiniz - yani html5 yerel depolama içerir yüzden

yerel depolama hakkında daha fazla: http://www.html5rocks.com/en/tutorials/offline/storage

ve senaryo için: Bu arada, bu özellikler IE8 için de desteklenir !!! (burada gösterildiği gibi: http://caniuse.com/#search=local%20storage)

+0

test/beta sitesinde cevap başlığında görünürken, google çeviri bir çerezle uygulandığından ve bu çerezi geçersiz kıldığından çerezleri kullanıyorum. – dmr