在运行时更改Cefsharp Locale

时间:2017-07-26 13:08:29

标签: cefsharp

你不能Cef.Shutdown()并重新初始化,你不能多次初始化,所以看起来你不能在没有完全重启应用程序的情况下改变浏览器语言环境。

目标是根据登录时定义的应用程序用户语言切换Cefsharp的语言。例如。用户使用德语Cefsharp登录是用德语注销,用户英语注销Cefsharp应该是英文的,但仍然是初始化的语言。 wrong language after logoff, login with different lang

关于此主题的此Github issue存在且处于已关闭状态。这个问题说明了部分实施和测试的问题,从2015年开始。我在C#代码中没有找到任何如何做到这一点。

2 个答案:

答案 0 :(得分:2)

刚刚加入Mohammad Dimas的答案。

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

答案 1 :(得分: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));
}