2017-07-26 104 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); 
}