我对 i18next 不是很熟悉,所以我可能错误地使用了 i18next,但是您可以通过创建 bindingHandler 轻松实现这一点。这种支持传递可选选项的 bindingHandler 的一个非常简单的版本可能如下所示:
ko.bindingHandlers['translatedText'] = {
update: function(element, valueAccessor, allBindings){
var key = ko.unwrap(valueAccessor());
var options = ko.toJS(allBindings.get('translationOptions') || {});
var translation = i18n.t(key, options);
element.innerText = translation;
}
};
给定以下 i18next 初始化代码:
i18n.init({
lng: "en",
debug: true,
resStore: {
en: {
translation: {
'myTextKey': 'My translated value is "__value__"',
'otherTextKey': 'This is just a text which does not use options'
}
}
}
});
您可以将其与以下 HTML 一起使用:
<input type="text" data-bind="value: input, valueUpdate: 'afterkeydown'"/>
<div data-bind="translatedText: 'myTextKey', translationOptions: { value: input }"></div>
<div data-bind="translatedText: 'otherTextKey'"></div>
以及以下视图模型:
function ViewModel(){
this.input = ko.observable();
}
ko.applyBindings(new ViewModel);
我已将上面的代码保存到一个 jsfiddle 中,您可以在http://jsfiddle.net/md2Hr/找到它