我希望能够更改浏览器窗口使用的语言(并重新加载页面,而无需重新启动应用程序)。我目前使用的是 CefSharp 69。
我的第一次尝试是在设置中使用不同的 Cef.Shutdown()
调用 Cef.Initialize()
然后再次调用 Locale
(因为这似乎是设置该值的唯一方法)。 (当然,首先关闭所有现有的浏览器,然后再创建它们。)但是,似乎在关闭后调用 Initialize 会因非托管内存异常而崩溃,所以这是不行的。 (这似乎是一个错误。)
我的第二次尝试是在创建浏览器之后但在导航之前设置 browser.BrowserSettings.acceptLanguageList
。虽然这似乎确实按预期更新了 accept-Language
标头中发送的值,但它对结果页面上的 JS navigator.languages
和 navigator.language
属性完全没有任何作用,它们仍然报告旧语言. (这似乎是另一个错误。)
我的第三次尝试是设置 RequestContext
,然后为 intl.accept_languages
调用 SetPreference。这确实设置了 JS navigator.languages
和 navigator.language
,但不发送任何 accept-Language
标头。 (这似乎是另一个错误。)
因此,目前我通过同时第二和第三件事,设法拼凑出一些似乎按预期工作的东西,但这似乎完全荒谬。
我随后尝试更新到 CefSharp 91(目前可用的最新版本)。这几乎是相同的,除了设置 intl.accept_languages
现在似乎可以同时做这两件事,而设置 acceptLanguageList
仍然只影响请求标头而不影响 JS。