Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度9:i18n在TypeScript中_Angular_Angular Material_Internationalization_Angular9 - Fatal编程技术网

Angular 角度9:i18n在TypeScript中

Angular 角度9:i18n在TypeScript中,angular,angular-material,internationalization,angular9,Angular,Angular Material,Internationalization,Angular9,我在Angular 9中研究了新的i18n特性 如何翻译TypeScript中的文本,例如SnackBar消息?查看此博客 及 您必须手动将其添加到messages.fr.xlf中 更好的翻译方法是: title = $localize`:@@Home.Title:Some title text` 您必须手动将其添加到messages.xx.xlf中(例如messages.fr.xlf等) 一些标题文本 翻译过来 以下是一些脚本,可用于将html+ts端本地化提取到xlf文件。因此,您可以像

我在Angular 9中研究了新的i18n特性

如何翻译TypeScript中的文本,例如SnackBar消息?

查看此博客

您必须手动将其添加到messages.fr.xlf中


更好的翻译方法是:

title = $localize`:@@Home.Title:Some title text`
您必须手动将其添加到messages.xx.xlf中(例如messages.fr.xlf等)


一些标题文本
翻译过来

以下是一些脚本,可用于将html+ts端本地化提取到xlf文件。因此,您可以像@Cyclion建议的那样使用$localize。此解决方案使用Ocombe的locl cli包。首先,您需要在不进行本地化的情况下构建项目

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合并来实现这一点

xlf-merge ./projects/ProjectName/src/locale/messages_extracted.xlf projects/ProjectName/src/locale/messages.xlf -o projects/ProjectName/src/locale/messages.xlf
此合并命令将把所有缺少的ts端翻译添加到messages.xlf-file的末尾

这是整个剧本

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工具生成/翻译每种语言的文件。

我使用typescript decorator进行翻译!我发现它更有效率。。。

为什么不加评论地否决投票?我想你正在寻找
$localize
。如果我没记错的话,angular i18n设置成功完成后,
$localize
应该是全局可用的,您可以将其用作
$localize`MY_STRING`u TO_be_translation`
。同样,我还没有深入研究angular的i18n实现,所以请谨慎使用。总的来说,我建议现在对angular提供的解决方案进行
ngx translate
。@NoobieNoob下面的Muhammet的答案有什么问题吗?我可以使用上面的方法使用id运行。也许会有用@是的,就是这样。我现在遇到的问题是,它无法从我的xlf文件中读取文本。如果我在使用文本的id旁边提供文本,但是更改文件中的翻译文本没有效果。在更改文件后,我需要做些什么来更新翻译文本吗?这个项目帮助我使用json文件作为翻译资源。以下是Angular的一篇博客文章:
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
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