如何在车把模板中使用本地化字符串?

时间:2012-07-11 18:00:11

标签: ember.js handlebars.js

说我的观点如下:

<script type="text/x-handlebars" data-template-name="say-hello">
  Hello, <b>{{name}}</b>
</script>

如何使用内置的Ember.String.loc()本地化单词“Hello”?我没有在文档/代码中看到解决方案。

1 个答案:

答案 0 :(得分:3)

我现在正在使用内置本地化。

为此,我们会创建一个“简单”的视图助手:http://gist.github.com/3093861

Handlebars.registerHelper('loc', function(property, fn) {
  var str;
  // we are bound to a value, it is now the context
  if (fn.contexts && typeof fn.contexts[0] === 'string') {
    str = fn.contexts[0];

  // Convention, start all localization keys with _
  } else if (property[0] === '_') {
    str = property;

  // Convention, start all globals with capital
  } else if (/[A-Z]/.test(property[0])) {
    str = Em.getPath(window, property)

  // all other's are local properties
  } else {
    str = this.getPath(property)
  }

  return new Handlebars.SafeString((str || '').loc(''));
});

// use:
// {{loc _some_string}}
// {{#bind App.someString}}{{loc App.someString}}{{/bind}}
// {{#bind view.localString}}{{loc view.localString}}{{/bind}}

但这并不像应该的那样干净,请注意{{#bind}}

中需要包含的绑定值

仍然愿意接受更好的选择。 (我想我可以更新视图助手以支持绑定,但尚未进一步调查)