ruby-on-rails – 使用Globalize&Friendly_id将同一页面重定
过去几个小时我一直在摸不着头脑,寻找答案,但我找不到任何地方.
我的宝石文件: # 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已正确配置. 但是我的问题是我不能使用以下语言切换器: <% if I18n.locale != :en %> <li> <%= link_to t('menu.languages.short_en'),url_for(locale: 'en') %> </li> <% end %> 路线变为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,:SEO_keywords] extend FriendlyId friendly_id :slug,:use => :globalize validates :slug,presence: true,uniqueness: { case_sensitive: false } 那么我需要做些什么才能在我的语言切换器上找到合适的路径? 谢谢! 解决方法
我相信你的全局布局中有url_for,用于不同的控制器.在这种情况下,您必须在每个控制器中设置某些记录(您可以帮助或将所有内容移动到路由器/中间件级别). url_for(页面)必须在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/(在某种语言中,但是示例可以帮助您理解整个概念). 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) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |