angular 验证所有文本节点是否具有i18n属性

gtlvzcf8  于 6个月前  发布在  Angular
关注(0)|答案(5)|浏览(70)

与功能请求相关的@angular/*包有哪些?

@angular/compiler-cli

描述

在国际化应用程序中,Angular模板中的每一块文本都需要 i18n 属性。这可以包含一个描述,还有其他 i18n- 属性提供用户可见文本的本地化版本(如 i18n-title )。这些属性很容易被忘记,尤其是像 i18n-title 这样的特殊情况。应该有一种一致性检查,以验证应用程序中的所有文本都已标记为国际化。

建议的解决方案

我们可以有一个扩展诊断,要求编译中的每个消息都标记为 i18n,并警告/错误缺失相关属性的消息。它还可以警告像 title 这样的属性,并建议 i18n-title 作为替代方案。
由于并非每个应用程序都是国际化的,因此此检查可能需要默认关闭,但是可以通过以下一行配置更改来确保没有消息遗漏:

{
    "angularCompilerOptions": {
      "extendedDiagnostics": {
        "checks": {
+         "i18nMessages": "error"
        }
      }
    }
  }

这是一个非常简单的方法,可以确保没有消息被忽略。
我们可能希望有一种 i18n-ignore 属性,允许某些消息被跳过。我曾经看到调试UI通常不需要翻译的情况就是这样。

考虑过的替代方案

可能会有一个基于社区的解决方案能够实现这一点,但我不记得有什么了。

cgh8pdjw

cgh8pdjw1#

这个功能请求现在已经成为我们的待办事项候选!在接下来的阶段,社区有60天的时间进行投票。如果请求获得超过20票的赞成,我们将把它移到我们的考虑列表中。
你可以在我们的文档中找到更多关于功能请求流程的详细信息。

7hiiyaii

7hiiyaii2#

请注意,我们已经开始了针对您的功能请求的社区投票过程。距离投票过程结束还有20天。
有关Angular功能请求流程的更多详细信息,请参阅我们的文档。

neskvpey

neskvpey3#

感谢您提交您的功能请求!看起来在投票过程中,它没有收集到足够的票数进入下一阶段。
我们希望保持Angular丰富且符合人体工程学,同时关注其范围和学习过程。如果您认为您的请求可能超出了Angular的范围,我们鼓励您与community合作,将其发布为开源项目package
您可以在我们的文档中找到有关功能请求过程的更多详细信息。

6vl6ewon

6vl6ewon4#

如果编译器能够在没有静态文本可翻译时警告使用i18n,那就方便了。例如:

<span i18n>{{ title }}</span>

有时候人们会混淆i18n可以在哪里找到,他们认为它可以确定所有title的变体,但实际上它创建了一个这样的翻译:

<trans-unit id="187187500641108332" datatype="html">
  <source><x id="INTERPOLATION" equiv-text="{{ title }}"/></source>
  <context-group purpose="location">
    <context context-type="sourcefile">src/app/app.component.html</context>
    <context context-type="linenumber">1</context>
  </context-group>
</trans-unit>

其中标题被插值到文本中,而标题没有本地化。

我想编译器的一个有用建议是,看看用户是否可以在定义title的地方添加$localize,但我也担心这可能会让人困惑,如果title比一个简单的title = 'Hello World'复杂一些的话。

k5ifujac

k5ifujac5#

这将非常棒,只要(如你所说),有一种简单的方法可以覆盖某些情况或误报。不要忘记在TS中使用$localize定义的消息。
编辑:我猜那些使用$localize的人已经被标记为翻译了。我想可能没有很好的方法来确保TS文件中的文本被翻译...

相关问题