Ruby on rails RubyonRails允许用户一次用多种语言编写文章

Ruby on rails RubyonRails允许用户一次用多种语言编写文章,ruby-on-rails,localization,ruby-on-rails-5,Ruby On Rails,Localization,Ruby On Rails 5,我正在寻找一种允许用户以多种语言输入帖子的方法。然后仅显示用户语言的一个,除非没有,然后返回默认值或列出的默认值 到目前为止,我所能想到的就是创建多个帖子,每个帖子都有一个语言标记,然后检查帖子是否以请求的语言存在,如果没有,则返回默认值 有没有更好的解决办法 提前感谢Rails中的翻译通常使用。(“18”代表“国际化”中跳过的18个字母。) 这是一个非常大的主题,我无法在一篇StackOverflow文章中合理地涵盖它——因此我强烈建议您花一些时间阅读官方文档 然而,简而言之,您不需要通过实现

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

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

有没有更好的解决办法


提前感谢

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

这是一个非常大的主题,我无法在一篇StackOverflow文章中合理地涵盖它——因此我强烈建议您花一些时间阅读官方文档


然而,简而言之,您不需要通过实现自己的语言查找工具来“重新发明轮子”。您只需存储
i18n
翻译,并根据登录用户的区域设置获取它们。

如果您使用Postgres,请查看multilang hstore gem


您应该明确使用gem。它允许您翻译模型中的字段,并将这些翻译保存到数据库中

它适用于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"
对于您的示例,您可以使用此语法一次以多种语言呈现多个post输入:

<% Globalize.with_locale(:fr) do %>
  <%= render "post_partial" %>
<% end %>
<% Globalize.with_locale(:en) do %>
  <%= render "post_partial" %>
<% end %>

我正试图实施一个类似的项目,并对实施有了想法

使用easy translate gem()可以使用此语句翻译帖子正文

EasyTranslate.translate(@post.body, :to => :russian)
要使其个性化,您可以将用户首选语言存储在用户记录中并执行此操作

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

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

gemfile:
gem'hstore\u translate'

class Post < ActiveRecord::Base
  translates :title, :body
end
在应用程序中启用回退。rb:
config.i18n.fallbacks=true

我知道整个i18n库以及如何使用它。到目前为止,我已经在这个项目中使用了它。但我想做的是允许用户以多种语言发表文章,无论如何,谢谢……我想说的是,你可以使用
i18n
来实现这一点!根据您的UI设计,您可能需要一些额外的后端逻辑来将每个翻译存储在正确的位置-但使用
i18n
,问题仍然可以很容易地解决。是的,我知道i18n可以做到这一点,但我不知道如何做到。如果您想获得有关如何在应用程序中实现这一点的更具体建议(你到底在挣扎什么?),然后我需要关于应用程序如何工作的更具体的信息。基本上,我试图找到一种方法,允许用户存储多个文本条目,用户希望使用的每种语言一个。然后从数据库中检索并显示这些条目。这看起来像我正在寻找的,因为它允许用户实际输入多个文本语言。我想这可以通过表格完成。谢谢
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