1

我正在使用@ngx-translate setTranslation 方法根据代码中的某些条件在运行时更新几个值。

带有翻译的 JSON 文件如下所示:

"example":{
    "tab":{
        "firstValue": "someValue"
    }
}

setTranslation 函数调用如下:

this.translateService.setTranslation('es', {
            "example": {
                "tab": {
                    "firstValue": "otherValue",
                }
            },
        });

这个:

this.translateService.get("example.tab.firstValue").subscribe(response => {
                console.log(response);
            });

总是返回"someValue",但它应该返回更新的值 - "otherValue"

我做错了什么?

4

1 回答 1

-1

我对此的第一反应可能没有完全解决问题。当我添加与现有对象具有相同键的对象时,'shouldMerge' 标志没有任何区别。所以我采取了另一种方法:我首先获取给定语言的翻译,这会返回一个对象,然后操作这个对象,然后我用这个被操作的对象设置翻译。就我而言,我现在有一个如下所示的方法:

private addDynamicTranslation(section:string,culture:string,k:string,v:string){
    //if key already exists: overwrite it, if not create it
    if(this.valueMapper.translateService.getLangs().includes(culture)){
       this.valueMapper.translateService.getTranslation(culture).subscribe((t:Object)=>{
            if(t.hasOwnProperty(section)){
               if(t[section].hasOwnProperty(k)) t[section][k]=v;
               else Object.defineProperty(t[section], k, {value:v, writable:true, configurable:true, enumerable:true});
            }
            else{
                var obj={};
                Object.defineProperty(obj, k, {value:v, writable:true, configurable:true, enumerable:true});
                Object.defineProperty(t, section, obj);
            };
            this.valueMapper.translateService.setTranslation(culture,t);
        })
    }
}
于 2017-10-23T12:59:09.400 回答