2016-11-21 110 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