Internationalization 胡须/hogan i18n,并考虑词序

Internationalization 胡须/hogan i18n,并考虑词序,internationalization,mustache,templating,hogan.js,Internationalization,Mustache,Templating,Hogan.js,找到了以下几个问题和答案: 等等 但非特别是考虑到词序的。我需要能够: 第一步。给定一个键->查找特定语言的句子 第二步。这句话可能包含{{var}},需要修改 由json值替换 第二步。只有普通胡须模板 第一步。单独使用几种技术就可以完成,但我更喜欢不涉及Mustach/Hogan引擎之外的任何专门代码的技术,当然还有i18n资源包。Hogan似乎支持这样的说法:从上面的url var template = "{{#i18n}}Name{{/i18n}}: {{username}}",

找到了以下几个问题和答案: 等等

但非特别是考虑到词序的。我需要能够:

第一步。给定一个键->查找特定语言的句子

第二步。这句话可能包含{{var}},需要修改 由json值替换

第二步。只有普通胡须模板

第一步。单独使用几种技术就可以完成,但我更喜欢不涉及Mustach/Hogan引擎之外的任何专门代码的技术,当然还有i18n资源包。Hogan似乎支持这样的说法:从上面的url

var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
    context = {
       username: "Jean Luc",
       i18n: function (i18nKey) {return translatedStrings[i18nKey];}
    };
但是要结合1。二,。在本例中,我希望translatedStrings[i18nKey]返回一个可能也包含{{}}的字符串

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

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

最新版本的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

我创建了一个用最新版本演示这一点的应用程序。

最新版本的Hogan.js将在lambda返回的结果中处理胡须标记。但是,对您问题中的代码的一个小改动是,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
我创建了一个用最新版本演示这一点的