【问题标题】:Angular i18n tags - ids conventionAngular i18n 标签 - ids 约定
【发布时间】:2017-07-04 11:54:56
【问题描述】:

由于https://angular.io/guide/i18n 中的 i18n 教程,每条翻译的消息都应该有一个唯一的 id。

问题是,如果有人在大型应用程序中遇到某种 id 字符串约定?当有很多组件、子组件等时,什么应该包含这样的 id 模式,以降低 id 重复的风险并易于维护消息翻译?

【问题讨论】:

    标签: angular internationalization naming-conventions


    【解决方案1】:

    此时我正在使用以下约定

       @@<modulename|libraryname>.<componentname>.<keyname[-<extension>]> - all lower case.
    

    我避免使用组件名称的“组件”后缀。 这有助于我命名空间、识别和确保整个应用程序中的键的唯一性,甚至在将模块/组件部署为库时在外部应用程序中使用时也是如此。

    【讨论】:

      【解决方案2】:

      我使用意义值作为上下文。所以不要使用

      <p i18n>This is a sample</p>
      

      <p i18n="@@sample">This is a sample</p>
      

      我使用意义值。像这样

      <p i18n="sample|">This is a sample</p>
      

      记得添加管道字符!否则提取工具会将值作为描述。提取工具会生成 id,但我的本地化工具会忽略它。相反,它使用资源文件中的含义和位置属性的组合来获得唯一的 ID。这使得编写代码变得更加容易,因为我们不必在所有模板(例如数百个文件)中拥有唯一 ID,而只需在一个文件中。

      如果由于某种原因模板中缺少含义,我的本地化工具会写入警告并使用生成的 id 作为上下文而不是含义+位置。开发人员将很快发现缺少意义的地方并可以添加它们。

      很容易确保单个文件(模板)中的含义是唯一的,但是当您拥有多个开发人员和数百个模板时,就不可能在全局范围内具有唯一性。

      【讨论】:

      • 重点是,你应该有一个全局唯一的 id 以避免翻译问题。目前我正在使用约定 'componentName''internal id' 或 global'id',但我不确定这是否是一个完美的解决方案。
      • 我得到一个全局唯一的 id,因为 id 是文件名和含义值的组合。关键是含义值必须仅在文件中是唯一的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多