2017-07-26 89 views
1

您無法Cef.Shutdown()並重新初始化,因此您無法初始化多次,因此您似乎無法在不徹底重新啓動應用程序的情況下更改瀏覽器語言環境。在運行時更改Cefsharp語言環境

目標是根據我們在登錄時定義的應用程序用戶語言切換Cefsharp的語言。例如。用戶登錄德語Cefsharp是德語,用戶英語Cefsharp註銷應爲英文,但仍爲初始化語言。 wrong language after logoff, login with different lang

Github issue關於此主題存在,它是在狀態關閉。該問題說了一些關於部分實施和測試的內容,並且是從2015年開始的。我沒有發現如何在C#代碼中執行此操作。

回答

1

編輯:

好的,你可以試試這個嗎?它會改變當地語言(navigator.languages),但不確定它會包含該pdf查看器。

public static void SetLanguage(string languageCode) 
{ 
    Cef.UIThreadTaskFactory.StartNew(() => 
    { 
     using (var context = Cef.GetGlobalRequestContext()) 
      SetLanguage(languageCode, context); 
    }); 
} 

public static void SetLanguage(string languageCode, IRequestContext context) 
{ 
    string error = null; 
    var success = context.SetPreference("intl.accept_languages", languageCode, out error); 

    if (!string.IsNullOrEmpty(error)) 
     Log.WriteAsync(LogLevel.Error, string.Format("Error changing language: {0}", error)); 
} 
+0

我在我的問題中增加了更多細節。這也很有用,但我有興趣改變整個瀏覽器語言。我們使用Cefsharp例如以顯示PDF並且按鈕懸停文本保持初始化語言。我想這是因爲這與RequestContext – CodingYourLife

+0

沒有任何關係,我已經編輯了答案。 –

+0

嘗試了它,但除了一個奇怪的副作用,因爲Cef.UIThreadTaskFactory有時爲零,它並沒有改變懸停文本的語言。謝謝無論如何,我認爲我們會學會忍受這個錯誤...... – CodingYourLife

2

只需添加到穆罕默德迪馬斯的答案。

ChromiumWebBrowser有一個IsBrowserInitializedChanged事件,您可以從中獲得RequestContext

browser.IsBrowserInitializedChanged += Browser_IsBrowserInitializedChanged; 

private void Browser_IsBrowserInitializedChanged(object sender, IsBrowserInitializedChangedEventArgs e) 
{ 
     var browserHost = browser.GetBrowser().GetHost(); 
     var requestContext = browserHost.RequestContext; 
     string errorMessage = ""; 

     requestContext.SetPreference("intl.accept_languages", languageCode, out error); 
}