delphi TedgeBrowser如何给予选项CoreWebView2EnvironmentOptions.Language

vql8enpb  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(169)

在 Delphi 11.3中,我通过tedgeBrowser组件使用webview 2。使用Tedgebrowser的应用程序在运行英语Windows的服务器上运行。默认情况下,tedgebrowser的navigator.language值为“en-US”。
但是我希望能够改变这个值。
我找到了有关属性CoreWebView2EnvironmentOptions.Language的信息,但我不知道如何在tedgebrowser组件中给予该语言属性。
我还看到你们中的一些人建议使用另一个组件:Webview4Delphi。我尝试使用Webview 4Delphi演示“simplebrowser”来实现:

initialization

GlobalWebView2Loader := TWVLoader.Create(nil);
GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName) +
  '\CustomCache';
GlobalWebView2Loader.Language := 'fr';  // here my test 
GlobalWebView2Loader.StartWebView2;

但没有效果。当我做一个警报(navigator.language)时,它仍然给予默认语言(OS语言)。
有人能帮我吗?
萨尔瓦多给出的解决方案帮助了我,但在我的情况下部分起作用。我应用了萨尔瓦多的解决方案+NoriyukiIchijo在那个帖子上给出的方法:https://github.com/MicrosoftEdge/WebView2Feedback/issues/833#issuecomment-890281898

ogsagwnx

ogsagwnx1#

根据documentation设置CoreWebView2EnvironmentOptions.Language还应更改Accept-language头,但存在低优先级bug in WebView2,此功能目前无法工作。
如果您手动更改标题,则有一个解决方案。您必须在TWVBRowser.OnAfterCreation事件中设置一个过滤器,如下所示:

procedure TMiniBrowserFrm.WVBrowser1AfterCreated(Sender: TObject);
begin
  WVWindowParent1.UpdateSize;
  WVBrowser1.AddWebResourceRequestedFilter('*', COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL);
end;

使用TWVBrowser. OnResourceRequested事件来修改HTTP标头时需要该过滤器,如下所示:

procedure TMiniBrowserFrm.WVBrowser1WebResourceRequested(Sender: TObject; const aWebView: ICoreWebView2; const aArgs: ICoreWebView2WebResourceRequestedEventArgs);
var
  TempArgs : TCoreWebView2WebResourceRequestedEventArgs;
  TempRequestHeaders : ICoreWebView2HttpRequestHeaders;
begin
  TempArgs:= TCoreWebView2WebResourceRequestedEventArgs.Create(aArgs);
  try
    TempArgs.Request.Get_Headers(TempRequestHeaders);
    TempRequestHeaders.SetHeader('Accept-Language','fr-fr');
  finally
    TempArgs.Free;
  end;
end;

此外,您还必须设置GlobalWebView2Loader.Language:= 'fr-fr';在GlobalWebView2Loader.StartWebView2调用之前更改用户界面语言。

相关问题