在这个例子中,我可以看到如何访问LOL资源中的变量
<brandName {
nominative: "Firefox",
genitive: "Firefoksa",
dative: "Firefoksowi",
accusative: "Firefoksa",
instrumental: "Firefoksem",
locative: "Firefoksie"
}>
<about "O {{ brandName.locative }}">
但是,我也想在javascript中做类似的事情,例如:
document.l10.get('brandName.nominative');
但这对我不起作用。我调试了一下,但我觉得我在浪费时间,而且可能有一种简单的方法可以做到这一点。有吗?
答案 0 :(得分:3)
这在L20n中是不可能的,因为作为开发人员,您无法确切知道nominative
将以所有语言定义。继续阅读以找出原因。
在英语中,您的示例可能看起来像这样:
<brandName "Firefox">
<about "About {{ brandName }}">
这次没有任何.nominative
要求!
L20n就是不对称。英语中的一个字符串的变体可以对应于德语中的4个变体,波兰语中的7个变体和匈牙利语中的16个变体。开发人员与L20n之间存在社交契约:如果开发人员要求提供名为brandName
的实体的值,则L20n将返回可在UI中使用的字符串。获取该字符串所做的所有工作都是从开发人员那里隐藏的,可能会因本地化程序构建的语言和逻辑而有所不同。
根据您想要实现的目标,您可能会发现以下两种结构很有用:
default values可用于指示在您不要求任何特定密钥时返回的默认密钥。在您的问题的示例中,您可以通过在其旁边放一个星号来定义nominative
作为默认值,如下所示:
<brandName {
*nominative: "Firefox",
genitive: "Firefoksa",
dative: "Firefoksowi",
accusative: "Firefoksa",
instrumental: "Firefoksem",
locative: "Firefoksie"
}>
<about "O {{ brandName.locative }}">
当您现在尝试在JavaScript中检索brandName
的翻译时,您将获得nominative
密钥的值,“Firefox”:
document.l10.get('brandName');
// "Firefox"
attributes添加到实体以存储元数据,如下所示:
<brandName "Firefox"
accesskey: "F"
>
请注意,属性与字典值不同。在上面的示例中,brandName
的值是一个简单的字符串,“Firefox”。 brandName
实体具有额外属性accesskey
,其值为“F”。您可以使用getEntity
访问属性:
document.l10.getEntity('brandName');
// { value: "Firefox", attributes: { accesskey: "F" } }