触发值转换器重新评估
Trigger value converter re-evaluation
有没有办法触发某个class的所有值转换器重新求值?
我问这个是因为我目前正在尝试找出一种进行本地化的好方法,特别是有一个翻译字符串的字典。
例子如下:
值转换器:
export class TValueConverter {
static inject() { return [Dictionary] }
dictionary: Dictionary;
constructor(dictionary: Dictionary) {
this.dictionary = dictionary;
}
toView(key: string, replacements: any): string {
return this.dictionary.translate(key, replacements);
}
}
查看:
<template>
<p>${"hello_world" | t: {"name": "Some User"} }</p>
</template>
这将被转换为
<p>
Hello Some User!
</p>
但是,用户可以更改当前语言,当他们这样做时,我想使用新语言重新评估此值转换。
我的实现受到 https://github.com/zewa666/aurelia-i18next 的启发,但他们的解决方案是在值转换器中添加“:currentLanguage”以引入依赖项,这有效,但感觉重复,因为我将不得不注入字典到每个视图模型中,以使 "currentLanguage" 变量可用于视图。
我可以从 TValueConverter class 发出信号,表明它依赖于 dictionary.lang,或者使用事件触发它吗?
有没有办法触发某个class的所有值转换器重新求值?
我问这个是因为我目前正在尝试找出一种进行本地化的好方法,特别是有一个翻译字符串的字典。
例子如下:
值转换器:
export class TValueConverter {
static inject() { return [Dictionary] }
dictionary: Dictionary;
constructor(dictionary: Dictionary) {
this.dictionary = dictionary;
}
toView(key: string, replacements: any): string {
return this.dictionary.translate(key, replacements);
}
}
查看:
<template>
<p>${"hello_world" | t: {"name": "Some User"} }</p>
</template>
这将被转换为
<p>
Hello Some User!
</p>
但是,用户可以更改当前语言,当他们这样做时,我想使用新语言重新评估此值转换。
我的实现受到 https://github.com/zewa666/aurelia-i18next 的启发,但他们的解决方案是在值转换器中添加“:currentLanguage”以引入依赖项,这有效,但感觉重复,因为我将不得不注入字典到每个视图模型中,以使 "currentLanguage" 变量可用于视图。
我可以从 TValueConverter class 发出信号,表明它依赖于 dictionary.lang,或者使用事件触发它吗?