1

发现了几个问题(和答案):How is internationalization configured for Hogan.js? ,ETC。

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

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

  • step 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>}}

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

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

4

1 回答 1

4

最新版本的 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,用最新版本演示了这一点。

于 2012-04-18T22:13:34.103 回答