爲此,你不應該使用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);'是正確的。 –