0

我的应用程序使用了 ember-i18n 插件。出于 SEO 的目的,我想在 URL 中添加 /[lang-code]/。

更改语言时,history.pushState 可以更改 URL 并且可以,但是页面上的链接不会更改为新语言,即使 router.rootURL 更改。

到目前为止,我只能更改 window.location.pathname,但正在发出新的网络请求。

我尝试覆盖 href-to 助手(来自 ember-href-to 插件)并添加了这个:

_recomputeOnLocaleChange: Ember.observer('i18n.locale', function() {
    console.log("here?");
    this.recompute();
})  

它在语言环境更改时执行,但显然重新计算什么都不做。即使使用 setTimeout (因为也许 rootURL 还没有改变)。链接都是一样的。

你有什么建议吗?将不胜感激!谢谢!!

4

1 回答 1

0

在文件的didTransition挂钩中router.js,检查区域设置是否已更改,并将服务上的属性设置为新的区域设置(如果已更改)。然后在您的助手中,您可以检查该属性。

router.js

oldI18nLocale: null,

didTransition() {
  this._super(...arguments);

  // ...

  let i18nLocale = this.get('locale.i18n');
  if (i18nLocale !== this.get('oldI18nLocale')) {
    this.set('someService.i18nlocale', this.get('locale.i18n');
  }
  this.set('oldI18nLocale', i18nLocale));
}

在你的助手中:

recomputeOnLocaleChange: Ember.observer('someService.i18nLocale', function() {
    this.recompute();
})

希望这有效。

于 2018-02-15T22:44:22.617 回答