Javascript 刷新Aurelia中的i18n转换字符串插值

Javascript 刷新Aurelia中的i18n转换字符串插值,javascript,aurelia,Javascript,Aurelia,例如,如果我在标题中使用选择下拉输入字段(更准确地说是在我的站点范围导航栏中,它是自定义元素),并在共享状态对象中全局设置该值。如果I-onlanguageChanged(value)(导航栏自定义元素内)也更改this.i18n.setLocale('de-de') 然后,我如何在模板中刷新i18n翻译的字符串插值(例如,${'status\u deaster''t}),而不必像现在这样导航到新路径并返回 我在github上发现了这个问题,但由于我需要解决这个问题,我希望存在一些巧妙的解决方法

例如,如果我在标题中使用选择下拉输入字段(更准确地说是在我的站点范围导航栏中,它是自定义元素),并在共享状态对象中全局设置该值。如果I-on
languageChanged(value)
(导航栏自定义元素内)也更改
this.i18n.setLocale('de-de')

然后,我如何在模板中刷新i18n翻译的字符串插值(例如,
${'status\u deaster''t}
),而不必像现在这样导航到新路径并返回

我在github上发现了这个问题,但由于我需要解决这个问题,我希望存在一些巧妙的解决方法,除了必须使用window.location重新加载页面之外:/

编辑


如果我理解正确的话,今天可能是我的幸运日,8天前刚刚添加了这样一个功能,尽管还没有文档记录:-有人能想出并告诉我如何使用这个新功能实现它吗?如果我自己解决了这个问题,我会用解决方案更新这个线程:-)

当下一个版本发布时,您将能够使用
信号
绑定行为为绑定分配一个“信号名”,如下所示:

${'title_key'| t&signal:'i18n'}
${'content_key'| t&signal:'i18n'}

&
符号表示“绑定行为”(与值转换器的
|
相反)。绑定行为是向绑定添加“行为”的资源。他们可以完全访问绑定实例,并在绑定的
bind
unbind
生命周期事件之前收到通知

Aurelia将附带几个内置绑定行为:“throttle”、“debounce”、“one-time”、“signal”等。您还可以选择创建自己的绑定行为

在上面的示例中,我们为
标题
内容
插值绑定提供了一个“信号”名称“i18n”。名称是任意的,我们只需要知道它是什么,这样我们就可以使用
BindingSignaler
向绑定发送刷新信号,如下所示:

从“aurelia模板资源”导入{BindingSignaler};
从“aurelia框架”导入{inject};
@注入(绑定信号器)
导出类应用程序{
建造师(信号员){
该信号机=信号机;
}
//调用此方法将刷新应用程序中的所有绑定
//“信号名称”为“i18n”
刷新绑定(){
这个信号器信号('i18n');
}
}
我想,一旦绑定行为特性消失,i18n插件中就会有额外的工作,将
t
值转换器与某个版本的
signal
绑定行为结合起来,以启用简洁的绑定表达式,在语言发生变化时同时负责翻译和刷新绑定,因此您可以我想暂时坐着不动

编辑 如果您现在需要一些东西,您可以利用现有的Aurelia特性:当转换器参数更改时,将重新评估绑定

  • 创建一个新类:
  • 导出类语言更改通知程序{
    信号=0;
    通知(){
    这个.信号++;
    }
    }
    
  • 将此类注入所有视图模型,并将实例作为属性添加:
  • @inject(LanguageChangedNotifier)
    导出类应用程序{
    构造函数(通知程序){
    this.notifier=通知程序;
    }
    }
    
  • t
    绑定中使用通知程序(它不会影响
    t
    值转换器的行为):
  • ${'status_deposed'| t:notifier.signal}
    
  • 更改区域设置时,请使用通知程序刷新绑定:
  • this.notifier.notify();
    
    Jeremy真棒。Aurelia及其社区/开发者是迄今为止我在任何框架中偶然发现的最有帮助和最聪明的人。不过我确实有个小问题。我遇到了最后一个问题(刷新/翻译问题),我去了futuristic,在大客户的生产中实际使用Aurelia。所以,尽管我肯定会添加这个-正确的方式-一旦下一个版本发布,你能为我提供一个临时解决方案来完成这项工作吗。我需要明天送。如果一切都失败了,我想我可能会被迫使用window.location,但我希望不会当然-有关解决方法,请参见上面的编辑。希望你明天的发布一切顺利!明亮的非常感谢DJust想说这个信号现在在beta 1中起作用:-)