如何使用Backbone.js增强多语言网站导航?

Fab*_*aux 8 javascript seo friendly-url internationalization backbone.js

我有一个多语言网站,显示几个(十几个)内容页面,有这样的漂亮网址:

example.com              <- home for default language (french)
example.com/biographie   <- page 1
example.com/en           <- home for english language
example.com/en/biography <- page 1 english translation
Run Code Online (Sandbox Code Playgroud)

我想将页面合并在一起并提供完整的ajax导航,就像Pitchfork一样.而最重要的是保留非JavaScript客户端(SEO,社交网络和其他)页面视图.

服务器提供完整的网页,然后当Backbone初始化时,它预取其他页面并将其注入DOM以加速导航.当我导航到另一个页面时,我使用Backbone内置历史记录API来记录历史记录中的新URL,并更改我的视图以显示所请求的页面.

var Navigator = Backbone.Router.extend({

  routes: {
    "*page":                "showPage",
  },

  showPage: function(page) {
    this.pages[page].show();
  }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是管理i18n(我的意思是翻译页面).如何设置我的路由器来处理语言?我该如何处理语言切换?

routes: {
  "*page":                "showPageFr",
  "en/*page":             "showPageEn",
},

showPageFr: function(page){
  showPage(page, 'fr');
},

showPageEn: function(page){
  showPage(page, 'en');
},

showPage: function(page, lang) {
  // How should I manage 'lang' parameter here ?
  this.pages[page].show();
}
Run Code Online (Sandbox Code Playgroud)

我看了i18n JS框架,但我认为我不需要它,因为我想翻译整个页面内容,而不是一些UI元素.所有翻译部分都在服务器端进行管理.

Fab*_*aux 5

感谢DashK,他开着我的好路.解决方案是在检测到英语时更改历史记录根.

var Router = Backbone.Router.extend({
    language: null,

    initialize: function(options){

        this.language = options.language;
        Backbone.history.start({pushState: true, root:'/'+ (this.language ? this.language : '')});
    },

    routes: {
        ":chapter(/*subpage)": "go",
        "" : "go" // match home route
    },

    go: function(chapter, subpage) {

    }
});

// wait for the document to be ready
$(function(){
    var lang;
    if($.url().segment(1) === 'en') { lang = 'en'; }

    new Router({language: lang});
});
Run Code Online (Sandbox Code Playgroud)

然后,当我router.navigate("some-chapter")在代码中使用时,我不必关心语言.