Delphi11.3中修改TEdgeBrowser/WebView4Delphi的navigator.language值
问题背景
使用Delphi 11.3通过TEdgeBrowser组件调用WebView2,运行在英文Windows服务器上时,navigator.language默认返回en-US,需要将其修改为目标语言(例如法语fr)。已知CoreWebView2EnvironmentOptions.Language属性可用于设置语言,但不清楚如何在TEdgeBrowser中配置;尝试使用Webview4Delphi的TWVLoader设置Language属性后,alert(navigator.language)仍返回系统默认语言,设置无效。
尝试过的无效方法
在Webview4Delphi的SimpleBrowser示例中添加初始化代码,但未生效:
initialization GlobalWebView2Loader := TWVLoader.Create(nil); GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName) + '\CustomCache'; GlobalWebView2Loader.Language := 'fr'; // 测试设置为法语 GlobalWebView2Loader.StartWebView2;
最终解决方案
结合相关方案,通过以下两种方式分别实现:
1. 针对原生TEdgeBrowser组件
手动创建CoreWebView2Environment并指定语言参数,再初始化TEdgeBrowser:
uses Winapi.WebView2, Winapi.WebView2Loader, Vcl.Edge, System.SysUtils; procedure TForm1.FormCreate(Sender: TObject); var EnvOptions: ICoreWebView2EnvironmentOptions; Env: ICoreWebView2Environment; HR: HResult; begin // 创建环境选项实例并设置语言 CoCreateInstance(CLSID_CoreWebView2EnvironmentOptions, nil, CLSCTX_ALL, IID_ICoreWebView2EnvironmentOptions, EnvOptions); EnvOptions.put_Language('fr'); // 替换为目标语言代码 // 创建带自定义选项的WebView2环境 HR := CreateCoreWebView2EnvironmentWithOptions(nil, ExtractFileDir(Application.ExeName) + '\CustomCache', EnvOptions, TCoreWebView2CreateEnvironmentCompletedHandler.Create( procedure(const sender: ICoreWebView2Environment; const errorCode: HResult) begin if Succeeded(errorCode) then begin // 将环境绑定到TEdgeBrowser并初始化WebView EdgeBrowser1.CoreWebView2Environment := sender; EdgeBrowser1.CreateWebView(Handle); end; end )); end;
2. 针对Webview4Delphi组件
除了设置TWVLoader.Language,还需在创建环境时添加浏览器命令行参数强制指定语言:
uses Winapi.WebView2, WebView2; procedure TMainForm.GlobalWebView2LoaderCreateWebView2Environment(Sender: TObject; const aEnvironmentOptions: ICoreWebView2EnvironmentOptions; var aCancel: Boolean); var EnvOptions8: ICoreWebView2EnvironmentOptions8; begin // 检查是否支持ICoreWebView2EnvironmentOptions8接口 if Supports(aEnvironmentOptions, ICoreWebView2EnvironmentOptions8, EnvOptions8) then begin // 添加命令行参数强制设置语言,替换为目标语言代码 EnvOptions8.AddBrowserCommandLineArgument('--lang=fr', ''); end; end;
注意:首次设置前请清空旧的
UserDataFolder缓存目录,避免缓存的语言设置干扰新配置。
内容的提问来源于stack exchange,提问作者Marianne
相关产品推荐
相关产品推荐

