2017-06-21 83 views
0

我正在寻找一种允许用户以多种语言输入帖子的方式。然后只显示用户的语言版本,除非没有用户回退到缺省值或列出的默认值。ruby​​ on rails允许用户一次写入多种语言的帖子

到目前为止,我所能够想到的是每个语言标签都创建了多个帖子,然后检查帖子是否以所需语言存在,如果不是,则返回默认值。

有没有更好的解决方案呢?

预先感谢

回答

3

你应该明确地使用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 %> 
+0

这看起来像我在寻找的内容,因为它允许用户以多种语言进行实际输入。我认为这可以通过表单完成。谢谢 – zeitue

1

翻译Rails中通常利用the i18n library。 (“18”代表“国际化”中的18个跳过的字母)。

这是一个非常大的主题,我无法合理地在单个StackOverflow中发布 - 所以我强烈建议您花一些时间阅读官方文档。

但是,简而言之,您不需要通过实施自己的语言查找工具来“重新发明轮子”。您可以简单地存储i18n翻译in the database并根据登录用户的区域设置获取它们。

+0

我了解整个I18n库以及如何使用它。到目前为止,我已经在这个项目中使用了它。但我想要做的是允许用户在多语言文本中发帖,谢谢 – zeitue

+0

...而且我说你*可以*使用'i18n'来完成这个!根据您的UI设计,您可能需要一些额外的后端逻辑来将每个翻译存储在正确的位置 - 但问题仍然可以通过'i18n'轻松解决。 –

+0

是的我知道国际能源署可以做到这一点,但我不知道该怎么做。 – zeitue

1

我试图实现类似的项目,并有实施的想法。

使用容易翻译宝石(https://github.com/seejohnrun/easy_translate)您可以使用此语句后体内转化

EasyTranslate.translate(@post.body, :to => :russian) 

为了让个性化,你可以存储在用户记录用户的首选语言,这样做

EasyTranslate.translate(@post.body, :to => current_user.language) 
1

如果您使用的是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 
在控制台
相关问题