如何在轨道上将ruby上的内容国际化?

时间:2009-10-02 06:44:46

标签: ruby-on-rails internationalization

我如何国际化将类别表(带有名称列)说成不同的语言。产品表(由名称和描述列组成)如何。哪个是使用Ruby on Rails使这些数据库表的内容国际化的最佳方法?

5 个答案:

答案 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)旁边的数据库中存储不同语言的值,你可以这样做:

产品表名称字段:

  • name_en
  • name_fr
  • name_nl

获取正确的值:

def i18n_db_value(object, attribute)
  object.send("#{attribute.to_s}_#{I18n.locale}") if object
end

答案 3 :(得分:0)

“在模型中存储多个版本的内容并拥有一个网站” “在模型中只存储一个版本的内容,但有多个网站”

http://ruby-lang.info/blog/localization-jfw

答案 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