/ / I18n clicar nos padrões de link da barra de navegação de volta para o inglês - ruby-on-rails, ruby-on-rails-3, internacionalização, rails-i18n

I18n clicar nos padrões de link da barra de navegação de volta para o inglês - ruby-on-rails, ruby-on-rails-3, internacionalização, rails-i18n

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 № 1

o 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