我学习了Angular 9中的新i18n功能。https://angular.io/guide/i18n
如何在TypeScript中翻译文本,例如SnackBar消息?
我学习了Angular 9中的新i18n功能。https://angular.io/guide/i18n
如何在TypeScript中翻译文本,例如SnackBar消息?
查看此博客:https://blog.ninja-squad.com/2019/12/10/angular-localize/
来自官方文档:https://angular.io/api/localize
@Component({
template: '{{ title }}'
})
export class HomeComponent {
title = $localize`You have 10 users`;
}
并且
您需要手动将其添加到您的messages.fr.xlf文件中
<trans-unit id="6480943972743237078">
<source>You have 10 users</source>
<target>Vous avez 10 utilisateurs</target>
</trans-unit>
别忘了部署你的Angular应用。
ID更新
@Component({
template: '{{ title }}'
})
export class HomeComponent {
title = $localize`:@@6480943972743237078:`;
}
ng extract-i18n --output-path {your_path}
可以生成 TypeScript 中 $localize 的 trans-unit。 - Arash更好的翻译 ID 的方法是:
title = $localize`:@@Home.Title:Some title text`
您需要手动将其添加到您的 messages.xx.xlf 文件中(例如 messages.fr.xlf 等)。
<trans-unit id="Home.Title">
<source>Some title text</source>
<target>TRANSLATION_HERE</target>
</trans-unit>
ng build ProjectName --localize=false
您可以使用locl工具从“二进制js”文件中提取翻译。我使用0.0.1-beta.6版本,因为它不会在xlf文件中生成目标部分。这些目标部分会破坏与xlf-merge的合并。而且ng xi18n工具也不会生成这些目标部分,因此在合并后结构是一致的。
npx locl extract -s='dist/ProjectName/**/*.js' -f=xlf -o='projects/ProjectName/src/locale/messages_extracted.xlf' --locale=fi
接下来,您可以将ng xi18n的结果与此结果结合使用。 这包含html和ts中的所有翻译,但不包括ng xi18n命令从html侧翻译提供的元数据。 我使用xlf-merge来实现这一点。
xlf-merge ./projects/ProjectName/src/locale/messages_extracted.xlf projects/ProjectName/src/locale/messages.xlf -o projects/ProjectName/src/locale/messages.xlf
ng xi18n --project=ProjectName --output-path src/locale && ng build ProjectName --localize=false && npx locl extract -s='dist/ProjectName/**/*.js' -f=xlf -o='projects/ProjectName/src/locale/messages_extracted.xlf' --locale=fi && xlf-merge ./projects/ProjectName/src/locale/messages_extracted.xlf projects/ProjectName/src/locale/messages.xlf -o projects/ProjectName/src/locale/messages.xlf
完成这些步骤后,您将在messages.xlf中获得所有的翻译标签。接着,您需要使用例如xliffmerge工具来生成/翻译每个语言文件。
$localize
。如果我没记错,一旦 Angular 的 i18n 设置成功完成,$localize
应该是全局可用的,你可以使用$localize\
MY_STRING_TO_BE_TRANSLATED`。再次强调,我还没有深入研究过 Angular 的 i18n 实现,所以请谨慎对待。总的来说,我建议目前使用
ngx-translate` 而不是 Angular 提供的解决方案。 - Philipp Meissner