我正在制作一个简单的网站,其中包含主页和联系表单。现在我正在尝试使用 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( %>