Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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 &引用;官方";I18N与简单资源文件_Angular_Localization_Internationalization - Fatal编程技术网

Angular &引用;官方";I18N与简单资源文件

Angular &引用;官方";I18N与简单资源文件,angular,localization,internationalization,Angular,Localization,Internationalization,这个问题在我看来相当复杂: i18n模板翻译过程分为四个阶段: 在组件模板中标记静态文本消息以进行转换 angular i18n工具将标记的消息提取到行业标准翻译源文件中 翻译器编辑该文件,将提取的文本消息翻译成目标语言,然后将文件返回给您 角度编译器导入完成的翻译文件,用翻译文本替换原始消息,并生成 目标语言中应用程序的新版本 您需要为应用程序构建和部署单独的应用程序版本 每种语言都支持 其中提到了一些怪癖: (a) 翻译复数和select消息有点棘手 标记为空表示复数,并选择翻译单位, 这使

这个问题在我看来相当复杂:

i18n模板翻译过程分为四个阶段:

  • 在组件模板中标记静态文本消息以进行转换

  • angular i18n工具将标记的消息提取到行业标准翻译源文件中

  • 翻译器编辑该文件,将提取的文本消息翻译成目标语言,然后将文件返回给您

  • 角度编译器导入完成的翻译文件,用翻译文本替换原始消息,并生成 目标语言中应用程序的新版本

  • 您需要为应用程序构建和部署单独的应用程序版本 每种语言都支持

    其中提到了一些怪癖:

    (a)

    翻译复数和select消息有点棘手

    标记为空表示复数,并选择翻译单位, 这使得它们很难与原始模板关联。这个 XLIFF格式尚不支持ICU规则;很快就会的

    (b)

    翻译文件维护和id更改

    随着应用程序的发展,您将更改i18n标记并重新运行 多次使用ng-xi18n提取工具。添加的新标记 这不是问题;但对现有标记的大多数更改都会触发 为受影响的翻译单元生成新ID

    id更改后,翻译文件不再同步。全部的 应用程序的翻译版本将在运行期间失败 重新汇编。错误消息标识不可用的旧ID 不再有效,但他们不会告诉你新的ID应该是什么

    将所有翻译消息文件提交给源代码管理,尤其是 英语源消息.xlf。老年人与老年人的区别 new messages.xlf文件可帮助您查找和更新整个系统中的id更改 翻译文件

    人类翻译人员可能需要一些上下文信息来翻译文本。因此,如果要提供含义和描述,可以在模板中使用以下语法。这些工具将把它传播到提供给转换器的文件中

    <img [src]="logo" i18n-title="<meaning>|<description>" title="Angular 2 logo" />
    
    |“title=“Angular 2徽标”/>
    
    我认为这种语法会大大增加标记


    因此,考虑到它的复杂性和怪癖,我想知道为什么您会选择这种方法?为什么不简单地为每种映射语言提供一个JSON文件(通常是稳定的)文本的键,将其作为JavaScript对象加载并绑定到模板中的键?这些键的含义和描述可以很容易地在附加文件中提供。顺便说一句,通过特定语言文本文件中的键访问文本是非常困难的。

    此注释显示了angular i18n和ngx translate之间的差异。也许它可以帮助您找出优点和缺点。