你不能那样开箱。当您使用setLocale更改活动语言环境时,该方法会触发事件并向绑定行为发出更新信号https://github.com/aurelia/i18n/blob/master/src/i18n.js#L54。 TCustomAttribute侦听这些更改并自动提交绑定。你可以做的是创建你自己的自定义属性,如https://github.com/aurelia/i18n/blob/master/src/t.js所示,并且重写绑定和解除绑定方法,当你需要更新翻译时定义条件。
---更新与例子---
好了,所以这里有一个小例子,我在想,可能不是最好的方式,但它应该这样做。
在你main.js添加新globalResources
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.plugin('aurelia-i18n', (instance) => {
...
})
.globalResources("./foo-custom-attribute") //
现在创建一个文件foo-custom-attribute.js
import {TCustomAttribute} from 'aurelia-i18n';
import {customAttribute} from 'aurelia-framework';
@customAttribute('foo')
export class FooCustomAttribute extends TCustomAttribute {
constructor(element, i18n, ea, tparams) {
super(element, i18n, ea, tparams);
}
bind() {
this.params = this.lazyParams();
if (this.params) {
this.params.valueChanged = (newParams, oldParams) => {
this.paramsChanged(this.value, newParams, oldParams);
};
}
let p = this.params !== null ? this.params.value : undefined;
this.service.updateValue(this.element, this.value, p);
}
unbind() {}
}
这本质上创建一个新的属性称为foo,它扩展了TCustomAttribute并覆盖绑定/取消绑定方法来排除信号并收听语言改变的事件。
在你看来,你现在可以使用
现在切换语言会改变t属性,像往常一样,但将保持foo,因为它是。