哪个@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
)
- html文件应该包含一个异步管道,例如:
<ng-container *ngIf="anyObservable | async"> </ng-container>
- 标记为提取的项目应包含一个变量或嵌套的HTML或两者兼有,以触发xliff文件中的占位符。
- 变量或嵌套的HTML应该是标记的HTML元素中的第一个项目,并且不应有前导空格,例如:
<span i18n="@@test"> {{test}} hello</span>
将被正确提取,但:<span i18n="@@test">{{test}} hello</span>
在提取过程中将没有准确的等效文本。
Stackblitz链接,用于最小化复现bug
- cd angular-hello*
- npm i*
要生成xliff文件: ng extract-i18n angular-hello
要运行应用程序: ng serve --open
请注意链接的xliff文件,并比较id为badComponentTitle
和goodComponentTitle
的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
1条答案
按热度按时间ckocjqey1#
可能与 #48985 有关。我还看到它以各种不一致的方式混淆
equiv-text
和disp
。