2011-11-29 50 views
1

在之前的Rails 2.3项目中,我使用translate_routes gem来执行路线的翻译。它效果很好。 在我的新Rails 3.1项目中,我需要路由转换。不幸的是,translate_routes不再有效,Raul的开发人员宣布他将不再维护宝石。 我试图与项目的一个分支在Rails 3.1上工作正常,但我无法做到这一点。在没有任何宝石的情况下在Rails 3.1中翻译路线

有没有办法建立没有宝石的路线翻译?

这里是一个没有翻译的工作路线的例子。

constraints(:subdomain => 'admin') do 
    scope "(:locale)", :locale => /fr|de/ do 
      resources :country, :languages 
      match '/' => 'home#admin', :as => :admin_home 
    end 
    end 

正如你所看到的,我也想有一个默认路由,没有用于默认语言环境的语言环境:en。

以前有人做过吗? 感谢

回答

1

可能有点晚了你,但它可能会有所帮助别人,尝试translate_routes的叉:

https://github.com/francesc/rails-translate-routes

+0

谢谢francesc。我会尽力回复你。我不太喜欢迄今为止设置的解决方案。我在rails 2.3中使用了翻译路线,它非常适合。 – jlfenaux

+0

我一直在测试Rails 3.2上的Gem,它工作的很好,但它似乎并没有考虑到子域。 – jlfenaux

+0

我修改了你的代码,将子域传递给翻译后的路由,现在它就可以工作。谢谢 ! – jlfenaux

1

看到你的帖子较早,但发现了另一个sollution以后。 我想翻译Rails路由及其默认资源操作,但我不喜欢他们的方式rails-translate-routes_nl添加到我的默认路径名称。

我最终这样做了(也适用于rails 4.0),当你用1或2种语言展示你的应用时,这应该是一个很好的解决方案。

# config/routes.rb 
Testapp::Application.routes.draw do 
    # This scope changes resources methods names 
    scope(path_names: { new: I18n.t('routename.new'), edit: I18n.t('routename.edit') }) do 

    # devise works fine with this technique 
    devise_for :users, path: I18n.t('routename.userspath') 

    # resource path names can be translated like this 
    resources :cars, path: I18n.t('routename.carspath') 

    # url prefixes can be translated to 
    get "#{I18n.t('routename.carspath')}/export", to: 'cars#export' 

    end 
end 

而且

# config/locales/nl.yml 
nl: 
    routename: 
    ## methods 
    new: 'nieuw' 
    edit: 'aanpassen' 
    ## resources, etc. 
    userpath: 'gebruikers' 
    carspath: 'voertuigen' 

导致:

  • /voertuigen
    • /voertuigen /的Nieuw
    • /voertuigen/aanpassen
    • /voertuigen /导出

更新和销毁不neccesairy因为它们链接到根的职务行为。保存你的工作;)

+0

用户更改语言后,不要忘记重新加载路由'YourAppName :: Application.reload_routes!'。 – Kovo

相关问题