在Angularjs中添加另一个自定义插值器

时间:2014-01-31 15:35:16

标签: angularjs internationalization interpolation

我仍然希望{{1+2}}被评估为正常。但除了普通插补器之外,我想创建一个自定义的插补器,我可以编程来做我想做的任何事情。

e.g。 <p>[[welcome_message]]</p>应该是<p>{{'welcome_message' | translate}}</p><p translate="welcome_message"></p>的快捷方式。这样,i18n应用程序编写起来会更方便。

有可能吗?我目前正在浏览angular.js源代码,但插值系统看起来很复杂(?)。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我创建了一个指令,regex-find-替换它的innerHTML。基本上,我可以将任何文本重写为任何其他文本。我是这样做的:

How do I make angular.js reevaluate / recompile inner html?

现在我所要做的就是将我的指令属性“autotranslate”放在我希望插补器工作的其中一个父元素中,然后重写它,但我想要它! :d

<div class="panel panel-default" autotranslate>
  <div class="panel-heading">[[WELCOME]]</div>
  <div class="panel-body">
    [[HELLO_WORLD]
  </div>
</div>

变为

<div class="panel panel-default" autotranslate>
  <div class="panel-heading"><span translate="WELCOME"></span></div>
  <div class="panel-body">
    <span translate="HELLO_WORLD"></span>
  </div>
</div>

完全符合我的要求。

答案 1 :(得分:1)

我不认为这是可能的,但是如果你真的想要保存一些角色,你可以在rootScope上创建一个名为t的函数,然后在你的观点中调用它:

<p>{{ t(welcome_message) }}</p>