2016-11-21 97 views
1

我使用angular-translate來製作Web應用程序多語言。一切工作正常,和現在我已經構建我的翻譯,讓我有:帶有一些平等翻譯的角度翻譯對象

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    } 
}); 

比方說,我要添加BUTTONS.ENGLISHLANGUAGE.ENGLISH相同的定義。是否有可能以某種方式引用它,如BUTTONS.ENGLISH = this.LANGUAGE.ENGLISH

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    }, 
    "BUTTONS": { 
     "ENGLISH": this["LANGUAGE"]["ENGLISH"] // ??? 
    } 
}); 

回答

1

由於javascript範圍問題,您嘗試執行的方式不可行,但您可以始終在翻譯中使用插值來調用另一個翻譯,如下例所示。

"ENGLISH": "{{ 'LANGUAGE.ENGLISH' | translate }}" 

這樣,您可以保證您的密鑰將與另一個可能使維護更容易的密鑰值相對應。

全碼:

$translateProvider.translations("en", { 
    "LANGUAGE": { 
     "ENGLISH": "english", 
     "GERMAN": "german", 
     "ITALIAN": "italian", 
     "FRENCH": "french", 
    }, 
    "BUTTONS": { 
     "ENGLISH": "{{ 'LANGUAGE.ENGLISH' | translate }}" 
    } 
}); 

此外,值得注意的性能問題:我認爲這不會造成任何巨大的性能問題,儘管它比普通字符串比較昂貴,但它會是使用變量替換的成本相同,但是比普通字符串更昂貴(我測試過,通常比內插字符串便宜25%),所以請避免大量使用它。

+0

它確實有效,似乎是唯一可行的方法,所以非常感謝您的答覆。你認爲這是有效的嗎? – Naigel

+1

@Naigel我認爲它不會造成任何巨大的性能問題,儘管它比普通字符串更昂貴,但使用變量替換的成本相同,但比普通字符串更昂貴(我測試過通常比內插字符串便宜25%),所以請避免大量使用。 –

+0

非常感謝您的完整答案和解釋。也許你可以在答案中包含這些信息作爲未來的參考? – Naigel

1

在Javascript中,你不能this訪問對象字面其他屬性(this具有文本,它之前,手做的初始化期間相同的值)。

+0

在這種情況下,'this',將永遠是'window'對象,不是嗎? –

+0

嗯,通常是的,但它取決於上下文... – MarcoS

+0

那麼有沒有辦法輕鬆訪問當前的對象不知何故,對嗎? – Naigel