为此,你不应该使用rootURL
。相反,创建将成为家长给所有其他路由的路由:
//../app/router.js
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend(
{
location: config.locationType
}
);
Router.map(
function()
{
this.route(
'lang', { path: '/:lang' }, function()
{
this.route('index', { path: '/' });
this.route('404', { path: '/*wildcard' });
this.route('your-route-name');
}
);
}
);
export default Router;
比你可以使用方法途径lang
afterModel
来确定所需的语言:
//../app/routes/lang.js
import config from '../config/environment';
export default Ember.Route.extend(
{
afterModel: function (params)
{
var allowedLocales = config.i18n.allowedLocales;
var defaultLocale = config.i18n.defaultLocale;
this.set(
'i18n.locale',
params && params.lang && allowedLocales.indexOf(params.lang) > -1 ? params.lang : defaultLocale
);
}
}
);
而且在index
路线,你需要从浏览器设置或使用默认的检测用户的语言环境:
//../app/routes/index.js
import config from '../config/environment';
export default Ember.Route.extend(
{
beforeModel: function()
{
var allowedLanguages = config.i18n.allowedLocales;
var language = config.i18n.defaultLocale;
if (navigator.languages) {
for (let lang of navigator.languages) {
if (allowedLanguages.indexOf(lang) > -1) {
language = lang;
break;
}
}
} else {
if (navigator.language) {
language = navigator.language;
} else {
if (navigator.userLanguage) {
language = navigator.userLanguage;
}
}
}
this.transitionTo('lang.index', { lang: language });
}
}
);
顺便说一句,你的灰烬版本是很老。你可能想升级到1.13(1.13.x不应该打破你的应用程序,2.x可以)。
THX我做这样的事情了,但需要很大的变化,我需要改变所有链接到助手,然后'transitionTo','transitionToRoute','modelFor'了,毕竟,我需要确保url正确更新的每一条路由,因为如果我从'your-route-name'的页面将语言更改为俄语(这将刷新页面),例如,我将在URL中具有'en.your-route-name'刷新:/ – varto
'this.transitionTo(“lang.index”,{郎咸平:语言});'你能请解释为什么这条线不能只是字符串这样,我有无限循环只能如果我这样做'this.transitionTo ('lang.index',language);' – varto
@varto我从我的博客文章中复制了我在2015-07-19发布的代码。当时它工作。很遗憾,现在无法检查。可能api被改变了。根据最近的胡言乱语,“this.transitionTo('lang.index',language);'是正确的。 –