【问题标题】:angular translate instant method does not work角度翻译即时方法不起作用
【发布时间】:2014-05-26 17:52:49
【问题描述】:

我们有一个带有角度翻译的网站。它完美地工作。我们有一个变量,我们想用某种语言键来固定。假设网站的语言有“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方法。

【问题讨论】:

  • 你能否在调试时也指向函数的文档,如果可用,你应该使用非缩小源,否则错误不会告诉你太多。

标签: javascript angularjs


【解决方案1】:

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

$translate.instant('ID') 期望翻译 id 作为 first 参数和插值参数作为 second 参数。然后它会同步而不是异步$translate() 所做的)翻译 id。

无论当前使用什么语言键,您想要的是在特定语言环境中显式翻译翻译 ID。目前支持

希望能让事情变得清晰。

【讨论】:

【解决方案2】:

你为什么不把这个词嵌入'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 设置相同翻译值。

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

【讨论】:

  • 因为我们想对一些动态页面在zh中做SEO,但是Google只在en中抓取我们。
  • 那么,我的建议都不适合你吗?
  • @Onur 就我而言,我有很多从 JSON 文件中获取的关键词。当我使用 $translate.instant 时,第一次加载它无法评估。你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
相关资源
最近更新 更多