我如何国际化将类别表(带有名称列)说成不同的语言。产品表(由名称和描述列组成)如何。哪个是使用Ruby on Rails使这些数据库表的内容国际化的最佳方法?
答案 0 :(得分:6)
你看过: http://guides.rubyonrails.org/i18n.html
它详细描述了如何国际化您的应用程序和
“提供易于使用和可扩展的功能 翻译你的框架 应用于单个自定义 英语以外的语言或 提供多语言支持 你的申请。“
一些有用的链接:
更新:2018年
自九年前回答这个问题以来,i18n的同一作者创建了Globalize,它基于Ruby on Rails中的I18n API构建,为ActiveRecord模型添加模型转换。
请在此处查找详细信息:https://github.com/globalize/globalize
答案 1 :(得分:3)
在RailsCasts上有一篇很好的文章,使用名为Globalize3的gem。这只是让你设置哪些模型将被翻译并管理每个模型的翻译表,并且像i18n一样工作就是静态页面......
看看
http://railscasts.com/episodes/338-globalize3?view=asciicast
答案 2 :(得分:2)
如果你想在标准Rails i18n(yml)旁边的数据库中存储不同语言的值,你可以这样做:
产品表名称字段:
获取正确的值:
def i18n_db_value(object, attribute)
object.send("#{attribute.to_s}_#{I18n.locale}") if object
end
答案 3 :(得分:0)
“在模型中存储多个版本的内容并拥有一个网站” “在模型中只存储一个版本的内容,但有多个网站”
答案 4 :(得分:0)
您可以覆盖模型类别中的“名称”方法,可以在另一个表中搜索正确的翻译。
因此,在类别表中,您应该在字段“name”中翻译默认语言,例如“Other”。然后在表格中寻找“其他”:
transtations table
en_text "Other" <--- You search this (default language)
es_text "Otros" ---> You retrun this
ca_text "Altres" ---> or this
# Category table
class Category < ActiveRecord::Base
def name
Translation.translate(read_attribute("name"))
end
end
# Your transltation model
class Translation < ActiveRecord::Base
def self.translate(text)
locale=I18n.locale
if locale!="en" # default locale: what is on the table "category"
trad=self.find_by_en_text(text)
if trad
return eval("trad.#{locale}_text")
end
end
return text
end
end