7

Ich habe mir in den letzten paar Stunden den Kopf gekratzt, auf der Suche nach einer Antwort, aber ich kann sie nirgends finden.Mit Globeize & Friendly_id dieselbe Seite in andere Sprache umleiten

Mein Juwel Datei:

# 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' 

Hier ist die Situation:

ich zwei Sprachen "en" und "fr" haben

2 Modelle: Seiten und pages_translations Seiten eine Schnecke Spalte hat, pages_translations hat auch eine Slug-Spalte.

wenn ich die Seite -> en/pages/slug-en, es funktioniert.

wenn ich die Seite -> fr/pages-slug-fr, es funktioniert.

Also ich nehme an, Friendly_id und Globalize sind richtig konfiguriert.

aber mein Problem ist, dass ich keine Sprachumschalter Arbeit machen können mit:

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

Die Route wird en/pages/Slug-fr (das heißt die Sprache ändert aber nicht die Schnecke).

Ich habe config.use: Finder im Initialisierer aktiviert.

Meine Seite Modell:

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 } 

Also, was muss ich tun, um den richtigen Pfad-Umschalter auf meine Sprache zu haben? Im Idealfall möchte ich, dass dies mit allen Modellen funktioniert, nicht nur mit dem Page-Modell.

Danke! - Vincent

+0

Die Frage ist bereits in dieser Verbindung gelöst http://stackoverflow.com/a/41788382/7351177 es dupliziert wird. –

Antwort

0

Ich glaube, Sie haben url_for in Ihrem globalen Layout, für verschiedene Controller. In diesem Fall müssen Sie einen bestimmten Datensatz in jedem Controller festlegen (Sie können Helfer erstellen oder alles auf eine Router-/Middleware-Ebene verschieben). url_for(page) muss in I18n.with_locale ausgeführt werden und erfordert möglicherweise .

Weitere Informationen finden Sie hier: https://github.com/norman/friendly_id-globalize/issues/7 und http://www.cantierecreativo.net/blog/2015/02/10/alternate-sitemap/ (in einigen Sprachen, aber Beispiele können Ihnen helfen, das ganze Konzept zu verstehen).

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) } 
Verwandte Themen