l20n.js - 如何从javascript访问本地化子实体

时间:2013-08-14 09:16:59

标签: javascript localization l20n

在这个例子中,我可以看到如何访问LOL资源中的变量

<brandName {
  nominative: "Firefox",
  genitive: "Firefoksa",
  dative: "Firefoksowi",
  accusative: "Firefoksa",
  instrumental: "Firefoksem",
  locative: "Firefoksie"
}>

<about "O {{ brandName.locative }}">

但是,我也想在javascript中做类似的事情,例如:

document.l10.get('brandName.nominative');

但这对我不起作用。我调试了一下,但我觉得我在浪费时间,而且可能有一种简单的方法可以做到这一点。有吗?

1 个答案:

答案 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" } }