ruby on rails允许用户一次以多种语言撰写帖子

时间:2017-06-21 07:15:50

标签: ruby-on-rails localization ruby-on-rails-5

我正在寻找一种允许用户以多种语言输入帖子的方法。然后只显示用户语言的那个,除非没有用户语言然后回退到默认值或列出的默认值。

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

有没有更好的解决方案?

提前致谢

5 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:1)

Rails中的翻译通常使用the i18n library。 (&#34; 18&#34;代表&#34;国际化&#34;中的18个跳过的字母。)

这是一个非常大的主题,我无法合理地在单个StackOverflow帖子中介绍 - 因此我强烈建议您花一些时间阅读官方文档。

然而,简而言之,你不需要重新发明轮子&#34;这里通过实现自己的语言查找工具。您只需存储nuget spec SomeRandom.csproj翻译in the database并根据登录用户的区域设置获取它们。

答案 2 :(得分:1)

如果你使用Postgres

,请查看multilang-hstore gem

https://github.com/bithavoc/multilang-hstore

答案 3 :(得分:1)

我试图实施一个类似的项目并对实施有所了解。

使用简易翻译gem(https://github.com/seejohnrun/easy_translate)您可以使用此语句翻译帖子正文

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

要使其个性化,您可以将用户首选语言存储在用户记录中并执行此操作

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

答案 4 :(得分:1)

如果您使用的是postgreSQL,则可以使用hstore_translate gem。 hstore模块实现hstore数据类型,用于将键值对存储在数据库中的单个值中。

gemfile:gem 'hstore_translate'

class Post < ActiveRecord::Base
  translates :title, :body
end

在您的迁移中:

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

在你的控制台中:

I18n.locale = :en
post.title

启用application.rb中的回退: config.i18n.fallbacks = true