V8 上的 i18n 支持,带有 C++ 包装文件

问题描述 投票:0回答:1

在我正在工作的一个项目中,我们使用V8来执行javascript。有 v8lib_monolith.a 文件(表明 v8 引擎是预编译的)。在我用来构建项目的 cmakelists 中,我也将运行时与 v8 整体库链接起来。我还有一个围绕这个 v8 的包装器,我正在其中初始化 ICU。当我尝试使用利用 ICU 库的函数时,我仍然遇到错误。错误调用堆栈是:

stack: 'ReferenceError: Intl is not defined\n' + ' at getDateTimeFormat ([email protected]/plugin/timezone/index.js:24:5)\n' + ' at makeFormatParts ([email protected]/plugin/timezone/index.js:51:15)\n' + ' at tzOffset ([email protected]/plugin/timezone/index.js:56:24)\n' + ' at Function.d.tz ([email protected]/plugin/timezone/index.js:163:26)\n' 

我想的一个可能的原因是如果我用

构建我的V8
V8_ENABLE_I18N_SUPPORT=false

在 args.gn 文件中将使用

初始化 icu
v8::V8::InitializeICUDefaultLocation(path to lib file)

启用 ICU 支持。

javascript internationalization v8 icu dayjs
1个回答
0
投票

你实际上并没有问问题。想必您想知道如何获取

Intl
对象?

在您的

v8_enable_i18n_support = false
中使用
args.gn
,您不会得到
Intl
对象。因此,要么删除该参数(以使用默认值,即
true
),要么根据您的喜好将其显式设置为
true

除了启用 i18n 的编译时支持之外,您还需要初始化 ICU 数据文件的位置。

坦率地说,我不确定

V8_ENABLE_I18N_SUPPORT=false

(大写拼写)的作用。基于您没有 
Intl
 对象的事实,我猜变量名称不区分大小写。为了让事情更清楚,为什么不按照官方的方式拼写它,即小写呢?

© www.soinside.com 2019 - 2024. All rights reserved.