在没有任何宝石的Rails 3.1中翻译路线

时间:2011-11-29 09:51:09

标签: ruby-on-rails internationalization routes

在之前的Rails 2.3项目中,我使用translate_routes gem来执行路由的转换。它运作得很好。 在我的新Rails 3.1项目中,我再次需要路由转换。不幸的是,translate_routes不再起作用了,劳尔的开发者宣布他将不再维护宝石。 我尝试使用Rails 3.1上应该没问题的项目的一个fork,但是我做不了多少。

有没有办法在没有宝石的情况下建立路线翻译?

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

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

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

之前有人这样做过吗? 感谢

2 个答案:

答案 0 :(得分:1)

对你来说可能有点晚了,但对其他人来说可能会有所帮助,请尝试使用translate_routes的分支:

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

答案 1 :(得分:1)

早些时候看到你的帖子,但后来发现了另一个解决方案。 我想翻译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 /出口

更新和销毁不是必需的,因为它们作为后期操作链接到根目录。保存你的工作;)