【问题标题】:mustache/hogan i18n and taking word-order into accountmustache/hogan i18n 并考虑词序
【发布时间】:2012-04-04 19:50:43
【问题描述】:

在此找到几个问题(和答案):How is internationalization configured for Hogan.js? ,ETC。

但不是特别考虑词序。我需要具备以下能力:

  • 步骤 1. 给定一个键 -> 查找特定语言的句子。

  • 第2步,这句话可能包含{{var}},需要
    替换为 json-values。

步骤 2. 单独是一般的胡须模板。

步骤 1. 单独可以使用多种技术完成,但我更喜欢不涉及 Mustache/Hogan 引擎之外的任何专门代码的技术(当然与 i18n 资源包结合使用)。霍根似乎通过以下方式支持这一点:(来自上面的网址)

var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
    context = {
       username: "Jean Luc",
       i18n: function (i18nKey) {return translatedStrings[i18nKey];}
    };

但是,在这个例子中,结合 1. 和 2. 我希望 translatedStrings[i18nKey] 返回一个可能包含 {{<some expansion>}} 的字符串。

有人知道这样做的优雅方法吗?

理由: 通常语言在词序等方面存在很大差异,这使得复杂的模板没有这种能力。

【问题讨论】:

    标签: internationalization mustache templating hogan.js


    【解决方案1】:

    最新版本的 Hogan.js 将处理从 lambda 返回的结果中的 Mustache 标签。但是,您问题中代码的一个小改动是 lambda 的结果应该是一个函数,以便修改字符串:

    var translatedStrings = { name: "Nom {{rank}}" };
    
    var template = "{{#i18n}}name{{/i18n}}: {{username}}",
        context = {
            username: "Jean Luc",
            rank: 'Captain',
            i18n: function() {
                return function (i18nKey) {return translatedStrings[i18nKey];};
            }
        };
    
    document.write(Hogan.compile(template).render(context));​ // Nom Captain: Jean Luc
    

    我创建了一个jsfiddle,用最新版本演示了这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多