Rails 4 / i18n / 无法将语言环境传递到另一个页面



我正在制作一个简单的网站,其中包含主页和联系表单。现在我正在尝试使用 rails-i18n gem 将其转换为 3 种语言,并且在主页上取得了成功,但现在我坚持如何将语言环境从主页传递到联系页面。代码如下,如果您有任何线索,请告诉我。

routes.rb(删除范围内的 2 个资源没有区别(

Rails.application.routes.draw do
get 'contact' => 'inquiry#contact'
post 'contact/confirm' => 'inquiry#confirm'
post 'contact/thanks' => 'inquiry#thanks'
root 'static_pages#home'
match '/home', to: 'static_pages#home', via: 'get'
scope '(:locale)', locale: /#{I18n.available_locales.map(&:to_s).join('|')}/ do
resources :static_pages
resources :inquiry
end
end

application_controller.rb(删除default_url_options没有区别(

class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :set_locale
def set_locale
I18n.locale = locale
end
def locale
@locale ||= params[:locale] ||= I18n.default_locale
end
def default_url_options(options={})
options.merge(locale: locale)
end
end

inquiry_controller.rb(呼叫联系人时,区域设置变为默认的 :en(

class InquiryController < ApplicationController
def contact
@inquiry = Inquiry.new
render :action => 'contact'
end
def confirm
@inquiry = Inquiry.new(params[:inquiry])
if @inquiry.valid?
render :action => 'confirm'
else
render :action => 'contact'
end
end
def thanks
@inquiry = Inquiry.new(params[:inquiry])
InquiryMailer.received_email(@inquiry).deliver
render :action => 'thanks'
end
end

_dropdown.html.erb(用于更改我在主页中添加的语言的下拉列表。它不会添加到联系页面中(

<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Languages <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><%= link_to '英語/English', url_for(controller: controller.controller_name, action: controller.action_name, locale: 'en') %></li>
<li><%= link_to '中文/Mandarin', url_for(controller: controller.controller_name, action: controller.action_name, locale: 'ma') %></li>
<li><%= link_to '日本語/Japanese', url_for(controller: controller.controller_name, action: controller.action_name, locale: 'ja') %></li>
</ul>
</li>

控制台(我觉得有些不对劲...

$ rake routes
Prefix Verb   URI Pattern                                Controller#Action
contact GET    /contact(.:format)                         inquiry#contact
contact_confirm POST   /contact/confirm(.:format)                 inquiry#confirm
contact_thanks POST   /contact/thanks(.:format)                  inquiry#thanks
root GET    /                                          static_pages#home
home GET    /home(.:format)                            static_pages#home
static_pages GET    (/:locale)/static_pages(.:format)          static_pages#index {:locale=>/en|ma|ja/}
POST   (/:locale)/static_pages(.:format)          static_pages#create {:locale=>/en|ma|ja/}
new_static_page GET    (/:locale)/static_pages/new(.:format)      static_pages#new {:locale=>/en|ma|ja/}
edit_static_page GET    (/:locale)/static_pages/:id/edit(.:format) static_pages#edit {:locale=>/en|ma|ja/}
static_page GET    (/:locale)/static_pages/:id(.:format)      static_pages#show {:locale=>/en|ma|ja/}
PATCH  (/:locale)/static_pages/:id(.:format)      static_pages#update {:locale=>/en|ma|ja/}
PUT    (/:locale)/static_pages/:id(.:format)      static_pages#update {:locale=>/en|ma|ja/}
DELETE (/:locale)/static_pages/:id(.:format)      static_pages#destroy {:locale=>/en|ma|ja/}
inquiry_index GET    (/:locale)/inquiry(.:format)               inquiry#index {:locale=>/en|ma|ja/}
POST   (/:locale)/inquiry(.:format)               inquiry#create {:locale=>/en|ma|ja/}
new_inquiry GET    (/:locale)/inquiry/new(.:format)           inquiry#new {:locale=>/en|ma|ja/}
edit_inquiry GET    (/:locale)/inquiry/:id/edit(.:format)      inquiry#edit {:locale=>/en|ma|ja/}
inquiry GET    (/:locale)/inquiry/:id(.:format)           inquiry#show {:locale=>/en|ma|ja/}
PATCH  (/:locale)/inquiry/:id(.:format)           inquiry#update {:locale=>/en|ma|ja/}
PUT    (/:locale)/inquiry/:id(.:format)           inquiry#update {:locale=>/en|ma|ja/}
DELETE (/:locale)/inquiry/:id(.:format)           inquiry#destroy {:locale=>/en|ma|ja/}

根据我提到的设置所有这些的博客页面,routes.rb 中的范围应该通过/en 或/ja 等启用访问,它会产生路由错误。我觉得我没有把整件事做好...任何小建议将不胜感激!

通过将/contact 的链接从 href="/contact" 更改为 <%= link_to t('view.contact'(, url_for(控制器: :查询, 操作: :contact( %>

最新更新