ember 应用程序的国际化
Internationalization of ember application
我正在使用 ember-i18n
库进行国际化,并希望将当前语言环境保存在如下路径中:
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 等中
另一种选择是创建包装器路由,如下所示:
this.route(
'lang', { path: '/:lang' }, function (){..}
);
这个解决方案看起来不太好:
link-to
助手将需要 lang
参数
lang
不能为空(默认语言)
更新:我知道如何动态更改 rootURL,但不能自动重定向。
找到解决方案,在实例初始化器中描述这个逻辑
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;
}
}
我正在使用 ember-i18n
库进行国际化,并希望将当前语言环境保存在如下路径中:
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 等中
另一种选择是创建包装器路由,如下所示:
this.route(
'lang', { path: '/:lang' }, function (){..}
);
这个解决方案看起来不太好:
link-to
助手将需要lang
参数lang
不能为空(默认语言)
更新:我知道如何动态更改 rootURL,但不能自动重定向。
找到解决方案,在实例初始化器中描述这个逻辑
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;
}
}