3

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

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

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

但是,我也希望能够在 javascript 中做类似的事情,例如:

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

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

4

1 回答 1

3

这在 L20n 中是不可能的,因为作为开发人员,您无法确定这nominative将在所有语言中定义。继续阅读以找出原因。

在英语中,您的示例可能看起来像这样:

<brandName "Firefox">
<about "About {{ brandName }}">

.nominative这次没有任何要求!

L20n 完全是关于不对称的。英语字符串的一个变体可能对应于德语的 4 个变体、波兰语的 7 个变体和匈牙利语的 16 个变体。开发者和 L20n 之间有一个社会契约:如果开发者要求一个名为 的实体的值brandName,L20n 将返回一个可以在 UI 中使用的字符串。为获取该字符串所做的所有工作对开发人员都是隐藏的,并且可能会因语言和本地化程序构建的逻辑而有所不同。

根据您想要实现的目标,您可能会发现以下两个结构很有帮助:

  • 如果您不要求任何特定键,则默认值可用于指示要返回的默认键。在您问题的示例中,您可以nominative通过在其旁边放置一个星号来将其定义为默认值,如下所示:

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

    现在,当您尝试检索brandNameJavaScript 中的翻译时,您将获得nominative键的值“Firefox”:

    document.l10.get('brandName');
    // "Firefox"
    
  • 可以将属性添加到实体以存储元数据,如下所示:

    <brandName "Firefox"
     accesskey: "F"
    >
    

    请注意,属性与字典值不同。在上面的例子中, 的值brandName是一个简单的字符串“Firefox”。该brandName实体有一个额外的属性,accesskey其值为“F”。您可以通过以下方式访问属性getEntity

    document.l10.getEntity('brandName');    
    // { value: "Firefox", attributes: { accesskey: "F" } }
    
于 2013-08-14T09:42:49.410 回答