2017-07-04 102 views
0

如果我設置語言,將把rootURL這個作品我能夠去任何路由/ subroute和當前的語言將出現在URL,但頁面刷新瀏覽器是從語言試圖獲取應用夾什麼想法? :/我使用Ember 1.11。設置,將把rootURL導致404錯誤頁面刷新

// router.coffee 

`import Ember from 'ember';` 
`import config from './config/environment';` 

Router = Ember.Router.extend 
    location: config.locationType 
    rootURL: '/' + localStorage.getItem('locale') + '/' 

// config/environment.js 

module.exports = function(environment) { 
    var ENV = { 
    locationType: 'history', 
    baseURL: '/' 
... 

enter image description here

回答

1

爲此,你不應該使用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; 

比你可以使用方法途徑langafterModel來確定所需的語言:

//../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可以)。

+0

THX我做這樣的事情了,但需要很大的變化,我需要改變所有鏈接到助手,然後'transitionTo','transitionToRoute','modelFor'了,畢竟,我需要確保url正確更新的每一條路由,因爲如果我從'your-route-name'的頁面將語言更改爲俄語(這將刷新頁面),例如,我將在URL中具有'en.your-route-name'刷新:/ – varto

+0

'this.transitionTo(「lang.index」,{郎鹹平:語言});'你能請解釋爲什麼這條線不能只是字符串這樣,我有無限循環只能如果我這樣做'this.transitionTo ('lang.index',language);' – varto

+1

@varto我從我的博客文章中複製了我在2015-07-19發佈的代碼。當時它工作。很遺憾,現在無法檢查。可能api被改變了。根據最近的胡言亂語,「this.transitionTo('lang.index',language);'是正確的。 –