7

Mi sono grattato la testa per le ultime ore, cercando una risposta ma non riesco a trovarla da nessuna parte.Reindirizza la stessa pagina in un'altra lingua con Globalize & Friendly_id

Il mio file gemma:

# Use globalize for translating models 
gem "globalize", github: "ncri/globalize" # for Rails 4.2 
gem 'globalize-accessors', '~> 0.1.5' 

# Use friendly_id for slugs 
gem 'friendly_id', '~> 5.1.0' 
gem 'friendly_id-globalize', '~> 1.0.0.alpha1' 

Ecco la situazione:

Ho due lingue "it" e "fr"

2 modelli: pagine e pages_translations pagine ha una colonna slug, pages_translations ha anche una colonna di slug.

se visualizzo la pagina -> it/pages/slug-it, funziona.

se visualizzo la pagina -> fr/pagine-slug-fr, funziona.

Quindi presumo che friendly_id e globalize siano correttamente configurati.

Tuttavia il mio problema è che non riesco a far funzionare un linguaggio switcher utilizzando:

<% if I18n.locale != :en %> 
    <li> 
    <%= link_to t('menu.languages.short_en'), url_for(locale: 'en') %> 
    </li> 
<% end %> 

Il percorso diventa it/pages/slug-fr (vale a dire la lingua cambia ma non la lumaca).

Ho attivato config.use: cercatori nell'inizializzatore.

La mia pagina del modello:

translates :title, :slug, :blurb, :content, :seo_title, :seo_description, :seo_keywords 
    globalize_accessors :locales => [:en, :fr], :attributes => [:title, :slug, :blurb, :content, :seo_title, :seo_description, :seo_keywords] 

    extend FriendlyId 
     friendly_id :slug, :use => :globalize 
     validates :slug, presence: true, uniqueness: { case_sensitive: false } 

Così che cosa devo fare per avere il percorso corretto sul mio switcher lingua? Idealmente, mi piacerebbe che funzionasse con qualsiasi modello, non solo con il modello Page.

Grazie! - Vincent

+0

La questione è già risolto in questo link http://stackoverflow.com/a/41788382/7351177 è duplicato. –

risposta

0

Credo che tu abbia url_for nel tuo layout globale, per diversi controller. In tal caso, è necessario impostare determinati record in ciascun controller (è possibile creare helper o spostare tutto in un livello router/middleware). url_for(page) deve essere eseguito in I18n.with_locale e potrebbe richiedere https://github.com/norman/friendly_id-globalize.

Altre informazioni possono essere trovate qui: https://github.com/norman/friendly_id-globalize/issues/7 e http://www.cantierecreativo.net/blog/2015/02/10/alternate-sitemap/ (in alcune lingue, ma alcuni esempi possono aiutare a comprendere l'intero concetto).

TL; DR

# app/views/layouts/application.html.slim 
ul.switch_locale 
    - I18n.available_locales.each do |locale| 
    li= I18n.with_locale(locale) do 
     - url = yield(:current_page_url) || url_for(locale: locale) 
     = link_to "Switch to #{locale}", url 

# app/views/posts/show.html.slim 
- content_for(:current_page_url) { post_url(@post) } 
Problemi correlati