Angular 5:提取 i18n 并创建不带 angular-cli 的 messages.xlf



我目前正在研究一个角度 4.4 项目,该项目是用 angular-cli 创建的,但从 angular-cli 中弹出。在我们的 webpack.config 中,我们使用AOTPluginExtractI18nPlugin来自@ngtools/webpack使用角度提前编译和提取基于我们的 i18n-Html-Attributes 的messages.xlf。每次我们使用此 webpack 配置运行构建任务时,messages.xlf都会更新。

更新到 Angular 5.2.1 后,我们将AOTPlugin替换为AngularCompilerPlugin,如@ngtools/webpack自述文件中所述:https://github.com/angular/angular-cli/tree/master/packages/%40ngtools/webpack。工作得很好。

但是,没有提到如何从ExtractI18nPlugin迁移,这似乎也被弃用了。如果我们将其保留在 webpack.config 中,则构建任务将失败并显示错误消息:请更新@angular/cli。Angular 5+ 至少需要 Angular CLI 1.5+。当然,我们所有的依赖项都是最新的,并且已经完全重新安装了几次(包括 angular-cli,我们不将其用于构建任务)

新的 AngularCompilerPlugin在界面AngularCompilerPluginOptions中定义了一些关于 i18n 的选项:

...
i18nInFile?: string;
i18nInFormat?: string;
i18nOutFile?: string;
i18nOutFormat?: string;
locale?: string;
...

https://github.com/angular/angular-cli/blob/master/packages/%40ngtools/webpack/src/angular_compiler_plugin.ts#L57

但是它们(似乎)没有效果,也没有关于如何使用它们的文档。

在寻找解决方案时,我发现这个示例项目演示了我们当前的场景,但它只在 angular 5 beta 之前有效。现在有一个 github 问题描述了我们的确切问题:https://github.com/ocombe/i18n-demo-no-cli

关于如何使用角度 18 再次运行我们的 i5.X 提取的任何想法?

找到了一个解决方案:如果选项skipCodeGeneration(禁用 AOT 编译)设置为true,则AngularCompilerPlugin跳过 i18n 提取。

我们的 i18n 提取工作配置现在如下所示:

new AngularCompilerPlugin({
mainPath: 'src/main.ts',
i18nOutFile: path.join('src', 'i18n', 'messages.xlf'),
i18nOutFormat: 'xlf',
locale: 'en',
sourceMap: true,
tsConfigPath: 'tsconfig.json',
skipCodeGeneration: false,
compilerOptions: {}
})

最新更新