根据db i18n中的属性更改link_to中的区域设置

时间:2014-04-08 04:27:37

标签: ruby-on-rails ruby-on-rails-4 multilingual rails-i18n

好的,我在这里有点困惑 - 这个问题可能有一个简单的解决方案 - 但我在过去两个小时内没有想到它,所以我想我可能会问。

我在DB中有一个用两种不同语言(AT& EN)编写的博客 - 在I18n中定义的语言环境是(德语)& en(英语)。

每次创建博客条目时,我都会将区域设置与条目一起保存。简化示例:

id  |   title      |  content  |  locale
-----------------------------------------
1   |  First Blog  |  Hey, ..  |  en
2   |  Erster Blog |  Hallo, . |  at

因此,一般情况下,我将这两种语言分开保存在网站上 - 好像这两种语言是两个不同的网站,但访问博主的个人资料会显示最近的博客列表。一些博主用德语和英语发帖。

如果访问者现在访问www.mysite.com/en - 并点击德国博客上的参考文件,则会出错。

在控制器中,我定义了以下内容,以确保无法通过两个URL访问相同的内容:

@blog = Blog.friendly.find(params[:id], :conditions => ["language_id = ?", I18n.locale] )

所以这是为了确保SEO明智我不会受到惩罚。 (www.mysite.com/en/first-blog == www.mysite.com/at/first-blog)。目前我在模型中捕获异常:

around_filter :catch_not_found

.... 

 def catch_not_found
  yield
  rescue ActiveRecord::RecordNotFound
  redirect_to blogs_path, :flash => { :error => "Sorry, the Blog isn't available in your language." }
end

问题是 - 如何在link_to中传递区域设置,以便用户以正确的区域设置重定向到博客?

由于

1 个答案:

答案 0 :(得分:0)

还有一些其他方法可以为您的模型存储翻译字段。

首先是Globalize gem的工作原理,当你有另一个用于存储翻译字段的多态模型时

另一个使用postgresql的hstore将翻译存储为字典en : 'First Blog', at : 'Erster Blog'。有also some gems有助于整合此方法。

在这两种方法中,您对所有区域设置都有相同的post_id,因此它解决了链接/重新签名的问题