Я делаю простой сайт с домашней страницей и контактной формой.Сейчас я пытаюсь сделать это на 3 языках, используя гем rails-i18n, и это было успешно на домашней странице, но теперь я застрял в том, как передать локали с домашней страницы на страницу контактов.Коды указаны ниже, и, пожалуйста, дайте мне знать, если у вас есть какие-либо подсказки.
rout.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
query_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/}
СогласноСтраница блога, на которую я ссылался, чтобы настроить все это, область действия в rout.rb должна разрешать доступ через / en или / ja и т. д., она дает ошибки маршрутизации.Я чувствую, что не все правильно понял ... Любой маленький совет был бы оценен!