我正在关注Ryan Bates的railscasts I18n国际化并遇到问题/疑问。
我正在尝试在我的链接中设置语言,如下所示:
英语 http://localhost:3000/en/site/services
和
西班牙语 http://localhost:3000/es/site/services
我在这里的路由文件中定义了这一点:
路线.rb
scope ":locale" do
get "site/home"
get "site/about_us"
get "site/faq"
get "site/discounts"
get "site/services"
get "site/contact_us"
get "site/admin"
get "site/posts"
get "categories/new_subcategory"
get "categories/edit_subcategory"
end
我的应用程序控制器中有
before_filter :set_locale
private
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
def default_url_options(options = {})
{locale: I18n.locale}
end
在我的视图/布局/应用程序.html.erb
<%= link_to_unless_current "English", locale: "en" %> |
<%= link_to_unless_current "Spanish", locale: "es" %>
现在,每当我尝试运行耙子路由或导航到我得到的 URL 时
C:wwwproject>rake routes
rake aborted!
missing :controller
我对路线相当陌生,有人可以帮助我查看/解释问题吗?提前谢谢。
我刚刚将您发布的所有代码粘贴到一个新的 rails 应用程序中,它就可以工作了。我的猜测是,您的 routes.rb 文件中还有其他路由,其中一个无效。您发布的路线是这样的:
mike@sleepycat:~/projects/testproj$ rake routes
site_home GET /:locale/site/home(.:format) :locale/site#home
site_about_us GET /:locale/site/about_us(.:format) :locale/site#about_us
site_faq GET /:locale/site/faq(.:format) :locale/site#faq
site_discounts GET /:locale/site/discounts(.:format) :locale/site#discounts
site_services GET /:locale/site/services(.:format) :locale/site#services
site_contact_us GET /:locale/site/contact_us(.:format) :locale/site#contact_us
site_admin GET /:locale/site/admin(.:format) :locale/site#admin
site_posts GET /:locale/site/posts(.:format) :locale/site#posts
categories_new_subcategory GET /:locale/categories/new_subcategory(.:format) :locale/categories#new_subcategory
categories_edit_subcategory GET /:locale/categories/edit_subcategory(.:format) :locale/categories#edit_subcategory
虽然你可能有能力做这样的事情,但问题是你应该这样做。如果您还不熟悉面向资源的体系结构,我强烈建议您阅读它。我不建议将 Rails 弯曲成奇怪的形状,直到你很好地掌握了这一点。它是Rails路由所基于的概念,在您理解之前,routes.rb中发生的事情将没有多大意义。
互联网上有很多可用的,一本为我澄清事情的好书是Leonard Richardson和Sam Ruby的Restful Web服务。我希望这有所帮助。