Ciao lista,
sto utilizzando all’interno di un progetto rails routing-filter
(GitHub - svenfuchs/routing-filter: routing-filter wraps around the complex beast that the Rails routing system is, allowing for unseen flexibility and power in Rails URL recognition and generation.)
Sito multi lingua che utilizza high_voltage.
Rail mi generava degli orribili “?locale=en”
Ho configurato le mie rotte secondo questo modello:
filter :locale, :exclude => /^/admin/
scope “/(:locale)”, :locale => /it|fr/ do
resources :varie
resources :eventuali
match “#{HighVoltage::content_path}*id” => ‘high_voltage/pages#show’,
:as => :page
end
in questo modo ottengo rotte corrette ma quando la url viene generata
da qualcosa come resource_path sono dolori:
/it/miapagina (quando utilizzo HighVoltage)
/it/it/varie (quando utilizzo un path generato da una mia risorsa)
di fatto c’ una sovrapposizione tra quello che fa routing-filter e
quello che rails fa di default quando vede che c’ un locale e lo
inserisce nella url.
Con exclude posso evitare /admin e va bene ma per il restante delle
risorse diventa troppo noioso.
Ho trovato due strade e mi fanno schifo tutte e due:
- RoutingFilter.active = false spengo l’url rewrite in toto. Nelle
poche pagine HighVoltage faccio a mano - dentro la gemma RoutingFilter ho inserito una cosa di questo tipo:
…
prepend_segment!(result, locale) if prepend_locale?(locale,url) &&
!excluded?(url) # <— AGGIUNTO url come parametro passato a
prepend_locale?
…
def prepend_locale?(locale,url)
locale && (self.class.include_default_locale? ||
!default_locale?(locale) ) && !url.include?(locale.to_s) # <—
AGGIUNTO l’ultimo include?
end
…
Qualcuno ha suggerimenti in merito?
grazie Lorenzo