如果我想创建这样的东西,我将如何使用l20n:
About <strong>Firefox</strong>
我想将这个短语翻译成一个整体,但我也想要标记。我不想这样做:
<aboutBrowser "About {{ browserBrandShortName }}">
<aboutBrowserStrong "About <strong>{{ browserBrandShortName }}</strong>">
......因为翻译本身现在已经重复了。
我知道这可能不在l20n的范围内,但它可能是现实世界中常见的情况。是否有某种既定的方法可以解决这个问题?
答案 0 :(得分:7)
有时复制翻译是您可以做的最好的事情。冗余在本地化方面很好:它允许对翻译成其他语言的假设更少。 L20n的核心原则之一是only the localizer will know what they really need。
您提出的解决方案实际上非常好。你试图用<strong>
表达的重点完全有可能在我们可能不知道的某种语言中有一些未知的含义。例如,某些语言可能使用变量或postpositions来表示“关于某事”,在这种情况下,作为开发人员,您不应对<strong>
元素的确切位置做出太多假设。可能是整个翻译都是由<strong>
包围的单个词。
这是你的代码,使用L20n的多行字符串文字格式化:
<aboutBrowser "About {{ browserBrandShortName }}">
<aboutBrowserEmphasized """
About <strong>{{ browserBrandShortName }}</strong>
""">
请注意,要使其按预期工作,您需要使用data-l10n-overlay
向DOM节点添加data-l10n-id=aboutBrowserEmphasized
属性。否则,<
和>
将被转义。
让我快速离题并从Firefox OS中调出Bug 859035 — Do not use the same "unknown" entity for Size & Author when installing a WebApp。讲英语的开发人员假设他们可以使用“未知”形容词来限定安装对话框中的大小和作者。但是,在某些语言中,如法语或波兰语,形容词必须在性别和复数方面与对象一致。所以即使用英语,我们也只能有一个字符串:
<unknown "Unknown">
......其他语言可能需要两个单独的字符串用于它们所使用的每个上下文。在法语中,你会说“auteur inconnu”(未知的作者,阳性)但是“尾巴不合适”(未知大小,女性化) :
<unknownSize "inconnue">
<unknownAuthor "inconnu">
在英语中,这意味着一些冗余:
<unknownSize "Unknown">
<unknownAuthor "Unknown">
...但没关系,因为最终本地化的质量得到了提高。在任何地方使用独特的字符串并谨慎重用通常是一种很好的做法。理想情况下,您允许对所有字符串进行不同的翻译。如果考虑像威尔士这样的语言,即使像“是”和“否”这样简单而常见的东西也会很棘手:
威尔士每次都没有一个单词可以使用是和没有问题。使用的单词取决于问题的形式。您通常必须使用问题中使用的动词的相关形式,或者在动词不是您使用的第一个元素的问题中回答'ie'/'nage'。