刷新Aurelia中的i18n转换字符串插值
Refreshing i18n translated string interpolated values in Aurelia
如果我在我的标题中使用一个选择下拉输入字段(更准确地说,在我的站点导航栏中,它是自定义元素),并在共享状态对象中全局设置该值。如果I-在languageChanged(value)
(导航栏自定义元素内)上也更改this.i18n.setLocale('de-DE')
然后,我如何刷新模板中的i18n转换字符串插值(例如${'status_deceased' | t}
),而不必像现在这样导航到新的路由并返回?
我在github上发现了这个问题https://github.com/aurelia/i18n/issues/6但由于我需要这样做,我希望存在一些巧妙的解决方法,除了必须使用window.location来重新加载页面:/
编辑
如果我理解正确的话,这似乎只是我的幸运日,这样的功能在8天前刚刚添加,尽管仍然没有记录:https://github.com/aurelia/templating-resources/pull/126-有人能想出并告诉我如何实现这一点吗,也许可以使用这个新功能?如果我自己解决了这个问题,我会用解决方案更新这个线程:-)
当下一个版本发布时,您将能够使用signal
绑定行为为绑定分配一个"信号名称",如下所示:
<h1>${'title_key' | t & signal:'i18n'}</h1>
<p>${'content_key' | t & signal:'i18n'}</p>
&
符号表示"绑定行为"(与值转换器的|
相反)。绑定行为是将"行为"添加到绑定中的资源。他们可以完全访问绑定实例,并在绑定的bind
和unbind
生命周期事件之前得到通知。
Aurelia将提供几个内置的绑定行为:"节流"、"防反弹"、"一次性"、"信号"等。您还可以选择创建自己的绑定行为。
在上面的示例中,我们为title
和content
插值绑定提供了一个"信号"名称"i18n"。名称是任意的,我们只需要知道它是什么,这样我们就可以使用BindingSignaler
"发出信号"来刷新绑定,如下所示:
import {BindingSignaler} from 'aurelia-templating-resources';
import {inject} from 'aurelia-framework';
@inject(BindingSignaler)
export class App {
constructor(signaler) {
this.signaler = signaler;
}
// invoking this method will refresh all bindings in the application
// with the "signal name" of "i18n"
refreshBindings() {
this.signaler.signal('i18n');
}
}
我想,一旦绑定行为功能消失,i18n插件中就会有额外的工作,将t
值转换器与signal
绑定行为的某个版本结合起来,以启用简洁的绑定表达式,在语言更改时负责翻译和刷新绑定,因此您可能暂时不必担心。
编辑如果您今天需要一些东西,您可以利用现有的Aurelia功能:当转换器参数更改时,将重新评估绑定。
- 创建一个新类:
export class LanguageChangedNotifier {
signal = 0;
notify() {
this.signal++;
}
}
- 将此类注入到所有视图模型中,并将实例作为属性添加:
@inject(LanguageChangedNotifier)
export class App {
constructor(notifier) {
this.notifier = notifier;
}
}
- 在
t
绑定中使用通知程序(它不会影响t
值转换器的行为):
${'status_deceased' | t:notifier.signal}
- 更改区域设置时,请使用通知程序刷新绑定:
this.notifier.notify();
- 谷歌地图的插值方法
- SVG实现的单调三次插值没有像d3这样的库
- 当我JSON.stringfy(对象)时,我得到一个疯狂的字符串作为值
- 如何从键Code;中获取字符串/字符值;
- AngularJS ngTranscluded、angular.noop和插值VS表达式
- 在已插值的字符串中以角度内插变量
- 使用Javascript和字符串插值更改html元素的类
- 获取字符串中用于插值的字符索引
- React 组件中的字符串插值,其中包含从服务器返回的字符串
- 使用sqlite3和Node进行字符串插值
- 刷新Aurelia中的i18n转换字符串插值
- 如何在JS字符串变量中找到JS每个函数的输出(即javascript插值)
- 如何在Coffeescript中转义字符串插值
- 字符串插值在包含多个单词的字符串中不能正常工作
- * ng用于数组的动态字符串插值
- jQuery:输入选择中的字符串插值
- 你能在javascript字符串插值中执行一个三元表达式吗?
- 我如何在javascript中创建动态插值字符串
- ES6字符串插值和jQuery的冲突
- 为什么要使用字符串插值