我们有一个角度翻译的网站。它完美地运作。我们有一个变量,我们想用某个语言键来固定。我们可以说该网站的语言包含了' 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方法。
答案 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')