我正在寻找一种允许用户以多种语言输入帖子的方法。然后只显示用户语言的那个,除非没有用户语言然后回退到默认值或列出的默认值。
到目前为止,我能够想出的是,每个帖子都创建了多个带有语言标签的帖子,然后检查帖子是否以所请求的语言存在,如果没有返回默认值。
有没有更好的解决方案?
提前致谢
答案 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答案 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