2017-10-20 80 views
0

@ NGX-翻譯'setTranslation」和‘設置’我正在使用@ NGX-翻譯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」

我做錯了嗎?

回答

-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); 
     }) 
    } 
}