Eu estou seguindo o guia railscast mas, por algum motivo, quando eu clico em um link, a localidade params não está sendo transportada.
Aqui estão minhas rotas.db
Rails.application.routes.draw do
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
get "welcome/index"
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
root "welcome#index"
resources :foods
resources :shops
resources :communities
resources :events
resources :pictures
resources :videos
resources :services
end
get "*path", to: redirect("/#{I18n.default_locale}/%{path}")
get "", to: redirect("/#{I18n.default_locale}/")
Eu acho que a principal diferença entre meu aplicativo e os railscasts é que eu estou fazendo isso no template application.html.erb. Então eu me pergunto se isso está afetando isso.
Obrigado pelo seu tempo!
EDITAR:
controlador de aplicação
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
private
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
def default_url_options(options = {})
{locale: I18n.locale}
end
end
EDITAR:
<li><a href="/foods"><i class="fa fa-cutlery" aria-hidden="true"></i> <%= t("layouts.application.food") %><span class="sr-only">(current)</span></a></li>
Respostas:
1 para resposta № 1o locale
escopo em seu arquivo de rotas simplesmente garantir que o seulocale é definido dependendo do identificador na sequência de URL. No entanto, você ainda precisa gerar urls contendo esse identificador em seu aplicativo, já que ele não é "transportado" automaticamente. Para fazer isso, basta definir sua opção de URL padrão application_controller.rb
igual a:
def default_url_options(options = {})
if I18n.default_locale != I18n.locale
{locale: I18n.locale}.merge options
else
{locale: nil}.merge options
end
end
Agora, toda vez que você invocar um ajudante de rota, books_path
a localidade atual será passada como parâmetro de url da mesma forma que seria se você tivesse feito isso explicitamente; book_path(locale: I18n.locale)
.
Isso também permite que você se livre de suas rotas globalizadas na parte inferior routes.rb
desde que a localidade padrão é definida por padrão em default_url_options
. Você também deve consultar esta seção do guias de trilhos