在Angular 9中,当使用$localize和xi18n标记模板表达式时,可能会遇到错误提示“标记模板表达式在元数据中不受支持”。这是由于Angular 9的编译器不再支持在元数据中标记模板表达式。
解决此问题的方法是将标记的模板表达式移动到组件的方法中,并在模板中调用该方法。以下是一个示例:
在组件中定义一个方法来处理国际化:
import { Component } from '@angular/core';
@Component({
selector: 'app-my-component',
template: `
{{ getLocalizedText() }}
`
})
export class MyComponent {
getLocalizedText(): string {
return $localize`:@@helloWorld:Hello, World!`;
}
}
请注意,这里使用了$localize标记来标记字符串以进行国际化。
在模板中调用getLocalizedText方法来获取本地化的文本。
然后,在应用中使用xi18n工具来提取这些标记的字符串,并生成相应的国际化文件。
在命令行中执行以下命令来提取国际化字符串:
ng extract-i18n --output-path src/locale
这将提取所有标记的字符串并将其保存在src/locale目录中。
然后,使用xi18n工具来生成本地化文件:
ng run my-app:xi18n
这将生成一个messages.xlf文件,其中包含了被标记的字符串的本地化版本。
最后,在应用中使用Angular的国际化服务来加载本地化文件并进行国际化。
希望这个示例能帮助你解决问题!