0

Je suis le guide de railscast mais pour une raison quelconque, lorsque je clique sur un lien, les paramètres régionaux ne sont pas reportés.I18n cliquant sur le lien de barre de navigation par défaut Retour à l'anglais

Voici mon routes.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}/") 

Je pense que la principale différence entre mon application et les Railscasts est que je fais sur le modèle de application.html.erb. Je me demande donc si cela l'affecte.

Merci pour votre temps!

EDIT:

contrôleur d'application

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 

EDIT:

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

Pourriez-vous afficher exactement le 'link_tag' qui 'ne porte pas sur les paramètres régionaux'? Je suppose que vous ne le passez pas à votre méthode url helper, e..g 'blah_path' au lieu de' blah_path (locale:: es) '. –

+0

@JanBussieck J'ai ajouté l'étiquette de lien. Merci. –

+1

Ok, regardez ma réponse ci-dessous. Utilisez url et route helpers comme si 'link_to" Foods ", foods_path', dans votre cas, vous ne passez pas dans les paramètres régionaux comme paramètre url. –

Répondre

1

Le champ locale dans vos itinéraires fichier vérifie simplement que vos paramètres régionaux est définie en fonction de l'identifiant dans la chaîne URL . Cependant, vous devez toujours générer des URL contenant cet identifiant dans votre application, car elle n'est pas automatiquement transférée. Pour ce faire, il suffit de définir votre option par défaut url dans application_controller.rb comme ceci:

def default_url_options(options = {}) 
    if I18n.default_locale != I18n.locale 
    {locale: I18n.locale}.merge options 
    else 
    {locale: nil}.merge options 
    end 
end 

Maintenant, chaque fois que vous appelez un assistant d'itinéraire tel a books_path la configuration locale sera passé comme paramètre url comme il le ferait si vous aviez fait si explicitement; book_path(locale: I18n.locale).

Cela vous permet également de vous débarrasser de vos routes globales au bas de routes.rb puisque les paramètres régionaux par défaut sont définis par défaut dans default_url_options. Vous devriez également consulter cette section du rails guides