angular 当文件中有异步管道时,ng extract-i18n bug,等效文本提取错误的字符,

z2acfund  于 5个月前  发布在  Angular
关注(0)|答案(1)|浏览(56)

哪个@angular/*包是bug的来源?

localize

这是一个回归吗?

描述

当组件的html文件中有一个异步管道时,如果文件中的标记用于i18n提取,则所有具有变量的项目都会获得错误的等效文本内容。

示例:

对于HTML内容

<span i18n="@@someTransUnitKey">{{ foodList?.length }} items exist</span>

预期的xlf文件中的trans-unit为:

<source><x id="INTERPOLATION" equiv-text="{{ foodList?.length }}"/> items exist</source>

但我得到的是:

<source><x id="INTERPOLATION" equiv-text="i"/> items exist</source>

这使得在添加一个异步管道的文件时,很难维护代码,因为会在整个xliff文件中产生很多差异。这对于我们的翻译人员来说也是一个问题,当等效文本块不包含他们期望的上下文时。

观察到的问题/重现问题的步骤: (请查看链接项目中的test-bad.component.html)

  1. html文件应该包含一个异步管道,例如:
<ng-container *ngIf="anyObservable | async"> </ng-container>
  1. 标记为提取的项目应包含一个变量或嵌套的HTML或两者兼有,以触发xliff文件中的占位符。
  2. 变量或嵌套的HTML应该是标记的HTML元素中的第一个项目,并且不应有前导空格,例如:<span i18n="@@test"> {{test}} hello</span> 将被正确提取,但:<span i18n="@@test">{{test}} hello</span> 在提取过程中将没有准确的等效文本。

Stackblitz链接,用于最小化复现bug

https://stackblitz.com/edit/stackblitz-starters-1zcqro?file=angular-hello%2Fsrc%2Flocale%2Fmessages.xlf

  • cd angular-hello*
  • npm i*

要生成xliff文件: ng extract-i18n angular-hello
要运行应用程序: ng serve --open
请注意链接的xliff文件,并比较id为badComponentTitlegoodComponentTitle的trans-units中的<source>。这是使我们的工作变得不便的一个更“丰富多彩”的例子,它提取了意外的字符。唯一的区别是 test-bad-component 在其HTML文件中有异步管道,而 test-good-component 没有。

请提供您发现此bug的环境(运行ng version)

@angular-devkit/architect       0.1602.7
@angular-devkit/build-angular   16.2.7
@angular-devkit/core            16.2.7
@angular-devkit/schematics      16.2.7
@angular/cli                    16.2.7
@schematics/angular             16.2.7
rxjs                            7.8.1
typescript                      5.1.6
zone.js                         0.13.3
ckocjqey

ckocjqey1#

可能与 #48985 有关。我还看到它以各种不一致的方式混淆 equiv-textdisp

相关问题