我正在寻找一种允许用户以多种语言输入帖子的方式。然后只显示用户的语言版本,除非没有用户回退到缺省值或列出的默认值。ruby on rails允许用户一次写入多种语言的帖子
到目前为止,我所能够想到的是每个语言标签都创建了多个帖子,然后检查帖子是否以所需语言存在,如果不是,则返回默认值。
有没有更好的解决方案呢?
预先感谢
我正在寻找一种允许用户以多种语言输入帖子的方式。然后只显示用户的语言版本,除非没有用户回退到缺省值或列出的默认值。ruby on rails允许用户一次写入多种语言的帖子
到目前为止,我所能够想到的是每个语言标签都创建了多个帖子,然后检查帖子是否以所需语言存在,如果不是,则返回默认值。
有没有更好的解决方案呢?
预先感谢
你应该明确地使用Globalize宝石。它允许您翻译模型中的字段并将该翻译保存到数据库中。
它与的I18n当前区域:
I18n.locale = :en
post.title = "english_title"
I18n.locale = :fr
post.title = "french_title"
post.save
I18n.locale = :en
post.title #=> "english_title"
I18n.locale = :fr
post.title #=> "french_title"
为了您的例子中,你可以使用这个语法来呈现多语言多交一次投入:
<% Globalize.with_locale(:fr) do %>
<%= render "post_partial" %>
<% end %>
<% Globalize.with_locale(:en) do %>
<%= render "post_partial" %>
<% end %>
翻译Rails中通常利用the i18n
library。 (“18”代表“国际化”中的18个跳过的字母)。
这是一个非常大的主题,我无法合理地在单个StackOverflow中发布 - 所以我强烈建议您花一些时间阅读官方文档。
但是,简而言之,您不需要通过实施自己的语言查找工具来“重新发明轮子”。您可以简单地存储i18n
翻译in the database并根据登录用户的区域设置获取它们。
检查出multilang-hstore宝石,如果你使用的Postgres
我试图实现类似的项目,并有实施的想法。
使用容易翻译宝石(https://github.com/seejohnrun/easy_translate)您可以使用此语句后体内转化
EasyTranslate.translate(@post.body, :to => :russian)
为了让个性化,你可以存储在用户记录用户的首选语言,这样做
EasyTranslate.translate(@post.body, :to => current_user.language)
如果您使用的是PostgreSQL,您可以使用hstore_translate gem。 hstore模块实现hstore数据类型,用于将键值对存储在数据库中的单个值中。
的Gemfile:gem 'hstore_translate'
class Post < ActiveRecord::Base
translates :title, :body
end
在迁移
:
I18n.locale = :en
post.title
启用您的application.rb中回退: config.i18n.fallbacks = true
class CreatePosts < ActiveRecord::Migration
def up
create_table :posts do |t|
t.column :title_translations, 'hstore'
t.column :body_translations, 'hstore'
t.timestamps
end
end
def down
drop_table :posts
end
end
在控制台
这看起来像我在寻找的内容,因为它允许用户以多种语言进行实际输入。我认为这可以通过表单完成。谢谢 – zeitue