角度翻译即时方法不起作用

时间:2014-04-02 06:50:26

标签: javascript angularjs

我们有一个角度翻译的网站。它完美地运作。我们有一个变量,我们想用某个语言键来固定。我们可以说该网站的语言包含了' en'和' zh'作为选项,我想要一个特定的翻译返回' zh'无论语言选择如何。

通过浏览API reference,我找到了一个名为Instant的方法来做到这一点。但是,当我们尝试调用

时,它不起作用
$translate.instant('zh', 'TRANSLATION_ID')

它返回错误

TypeError: Object function (a,b,e){var f=d?n[d]:n,i=e?w[e]:u;if(f&&f.hasOwnProperty(a))return i.interpolate(f[a],b);if(h&&!v&&g.get(h)(a,d),d&&c&&d!==c){var j=n[c][a];if(j){var k;return i.setLocale(c),k=i.interpolate(j,b),i.setLocale(d),k}}return l&&(a=[l,a...<omitted>...a} has no method 'instant'

我想知道如何正确使用isntant方法。

2 个答案:

答案 0 :(得分:9)

您似乎没有正确使用该方法,或者可能只是误解了它。

$translate.instant('ID')期望翻译ID为第一参数,插值参数为第二参数。然后它将id 同步而不是异步(这是$translate()所做的)。

无论当前使用何种语言键,您想要的是在某个语言环境中明确翻译翻译ID。目前支持尚未

希望能让事情变得清晰。

答案 1 :(得分:8)

为什么不把这个词嵌入'zh'。不要在那里使用$translate因为你显然不想翻译那个词。

如果还有其他原因;我建议:

// store the current language
var currentLanguage = $translate.use();
// change the language
$translate.use("zh").then(function (translation) {
    // then translate here
    $log.debug($translate.instant('SOME_WORD'));
    // set the previous language back when you're fulfilled
    $translate.use(currentLanguage);
});

但由于这是异步的,因此在此期间可能会将其他一些词翻译为'zh'

实现此目标的第三种方法是在每个语言文件中为SOME_WORD设置相同的翻译值。

我能想到的第四种方法是仅在SOME_WORD文件中翻译'en''zh'文件中没有翻译价值)并使用'en'作为后备广告语言。例如:$translate.fallbackLanguage('en')