使用Globalize&Friendly_id将同一页面重定向到不同的语言

过去几个小时我一直在摸不着头脑,寻找答案,但我找不到任何地方。

我的gem文件:

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

这是情况:

我有两种语言“en”和“fr”

2个模型:pages和pages_translations页面有一个slug列,pages_translations也有一个slug列。

如果我查看页面 – > en / pages / slug-en,它可以工作。

如果我查看页面 – > fr / pages-slug-fr,它可以工作。

所以我假设friendly_id和globalize已正确配置。

但是我的问题是我不能使用以下语言切换器:

   
  • 路线变为en / pages / slug-fr(即语言改变而不是slug)。

    我在初始化程序中激活了config.use:finders。

    我的页面模型:

     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 } 

    那么我需要做些什么才能在我的语言切换器上找到合适的路径? 理想情况下,我希望这适用于任何模型,而不仅仅是Page模型。

    谢谢! – 文森特

    我相信你的全局布局中有url_for ,用于不同的控制器。 在这种情况下,您必须在每个控制器中设置某些记录(您可以创建帮助程序或将所有内容移动到路由器/中间件级别)。 url_for(page)必须在I18n.with_locale运行,可能需要https://github.com/norman/friendly_id-globalize 。

    更多信息可以在这里找到: https : //github.com/norman/friendly_id-globalize/issues/7和http://www.cantierecreativo.net/blog/2015/02/10/alternate-sitemap/(in一些语言,但例子可以帮助你理解整个概念)。

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