你不能开箱即用。当您使用 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") // <-- this here
现在创建一个文件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 并覆盖了绑定/取消绑定方法以排除信令和侦听语言更改事件。
在您看来,您现在可以使用
<span t="demo"></span>
<span foo="demo"></span>
现在切换语言将照常更改t 属性,但将保持foo 不变。