gpt4 book ai didi

angular - 我如何在 Angular 中重复使用 i18n 翻译键?

转载 作者:太空狗 更新时间:2023-10-29 17:05:36 24 4
gpt4 key购买 nike

我正在使用对 Angular2 (4.0.3) 的 i18n 支持,如记录 here .我生成了 xlf文件和一切都在愉快地工作。

但是,假设我有一个链接到我的主页的菜单按钮。我使用属性 i18n="@@homeTitle" 创建 DOM 节点.现在,在我的主页组件中,我想在我的 <h1> 中使用相同的翻译 ID标签,这样我就可以得到相同的翻译,而不必在 xlf 中维护具有相同内容的多个条目。文件。

我曾希望做类似下面的事情,让它自动填充我的 <a>具有适当翻译的节点。

// home.component.html
<h1 i18n="@@homeTitle">Home</h1>

// menu.component.html
<a routerLink="/" i18n="@@homeTitle"></a>

但是,这不起作用。 <a>节点显示空文本,而不是翻译目标。 (此外,默认情况下,自动生成的 messages.xlf 文件中没有翻译目标。)

文档实际上 call out this situation但不提供解决方案。用户也提出了这个问题 on GitHub对于像 Mondaycancel 这样的常见字符串,但是那个问题线程没有涵盖这个特定问题的解决方案。

如何重用我的 xlf 中定义的 i18n 翻译跨多个节点的文件?

编辑:这里是 xlf使用 ng-xi18n --i18nFormat=xlf 生成:

<?xml version="1.0" encoding="UTF-8" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="homeTitle" datatype="html">
<source>Home</source>
<target/>
</trans-unit>
</body>
</file>
</xliff>

如果两个@@homeTitle的解析顺序节点已切换,<source>分别变化。

最佳答案

TLDR;只是不要担心自定义 ID 并正确编写您的字符串。 ng xi18n工具将负责匹配单个 <trans-unit> 下的相同字符串。 .然后,您的翻译将应用于整个单元。

较长的解释:xi18n工具通过字符串相等匹配应用中的字符串。每当它找到一个新字符串时,它会将它与已经找到的字符串进行比较。如果存在完全匹配,它会将新字符串包含在现有的 <trans-unit> 中。 .如果没有,它会创建一个新的并生成一个新的 ID。

但是,可以使用自定义 ID 和翻译提示来更改此行为。如果找到新字符串并包含自定义 ID,则将针对该特定 ID 检查当前消息并将其分配给现有的 <trans-group>。 ,如果找到。请注意,此过程会忽略字符串本身,因此任何非空 值都将合并到找到的 <trans-group> 中。使用自定义 ID。省略空字符串。

如文档所述,只有第一个具有自定义 ID 的元素会被检查是否有 source 字符串。当存在具有相同 ID 的第二个元素时,将不会解析它的字符串值。这意味着您可以更改您的解决方案,让具有您的自定义 ID 的所有其他节点包含一个占位符字符串。然后,本地化将按您的预期进行。

// home.component.html
<h1 i18n="@@homeTitle">Home</h1>
// menu.component.html
<a routerLink="/" i18n="@@homeTitle">ANY PLACEHOLDER STRING YOU WANT</a>

如您所见,这看起来并不特别花哨。此外,您必须记住自定义 ID 以便进一步重复使用。我建议不要这样做,除非绝对必要。在我看来,只写字符串(在你的情况下是 "Home" )更容易,打一个 i18n属性到元素上,不用担心重复使用,因为它会自动完成。我主要使用自定义 ID,以防您需要对一个字符串进行多种不同(上下文)翻译。

关于angular - 我如何在 Angular 中重复使用 i18n 翻译键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45722950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com