我使用ember-i18n
lib进行国际化,并希望将当前区域设置保存在以下路线中:
domain.com
- 空为默认en
doman.com/es
,doman.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 (){..}
);
这个解决方案看起来不太好:
link-to
帮助者需要lang
param lang
不能为空(默认语言)更新:我了解如何动态更改rootURL,但无法自动重定向。
答案 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;
}
}