英博应用的国际化

时间:2016-09-13 10:17:43

标签: ember.js ember-cli

我使用ember-i18n lib进行国际化,并希望将当前区域设置保存在以下路线中:

domain.com - 空为默认en

doman.com/esdoman.com/de - 另一个

为此,我尝试使用rootURL

Router.reopen({
  rootURL: '/' ('es' or 'de')
});

问题:当rootURL不为空时,应用无法重定向并失败并显示错误:ember.debug.js:4903 Uncaught Error: Assertion Failed: Path / does not start with the provided rootURL /es/

问题:制作重定向的最佳解决方案是什么,所有逻辑都将保留在emebr中,因此我无法将此逻辑移至nginx等。

另一个选项是Make a wrapper route,如下所示:

this.route(
    'lang', { path: '/:lang' }, function (){..}
);

这个解决方案看起来不太好:

  1. link-to帮助者需要lang param
  2. lang不能为空(默认语言)
  3. 更新:我了解如何动态更改rootURL,但无法自动重定向。

1 个答案:

答案 0 :(得分:0)

找到解决方案,在instance-initializer中描述这个逻辑

    export function initialize(app) {
  var router = app.lookup('router:main');
  var i18n = app.lookup('service:i18n');

  var path = window.location.pathname;
  var currentLang = ENV.i18n.defaultLocale;
  var newPath = '';

  var LangFromPath = path.match('^/([a-z]{2})(?:/|$)');
  if (LangFromPath && LangFromPath[1]){
    currentLang = (ENV.i18n.allowedLocales.indexOf(LangFromPath[1]) > -1) ? LangFromPath[1] : currentLang;
  }

  if (currentLang != ENV.i18n.defaultLocale) {
    var newPath = '/' + currentLang + '/';
  }

  router.rootURL = newPath;
  i18n.set('locale', currentLang);

  if (newPath && path.indexOf(newPath) === -1) {
      window.location.pathname = newPath;
  }

}