【问题标题】:How to internationalize content on ruby on rails?如何在 ruby​​ on rails 上国际化内容?
【发布时间】:2009-10-02 06:44:46
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails internationalization


    【解决方案1】:

    您是否看过: http://guides.rubyonrails.org/i18n.html

    它详细描述了如何国际化您的应用程序和

    "提供了一个易于使用和可扩展的 翻译你的框架 应用到单个自定义 英语以外的语言或 提供多语言支持 你的应用程序。”

    一些有用的链接:

    更新:2018 年

    自从近九年前回答这个问题以来,i18n 的同一作者创建了 Globalize,它基于 Ruby on Rails 中的 I18n API 将模型转换添加到 ActiveRecord 模型。

    详情请点击:https://github.com/globalize/globalize

    【讨论】:

    • 所有这些参考文献都没有谈论翻译数据库内容...比如 gem Globalize3
    • 最初的问题是近 9 年前提出的。当时回答正确。我将引用 globalize 和 Globalize3 已移动并由与 i18n 相同的作者顺便编写
    【解决方案2】:

    在 RailsCasts 上有一篇不错的文章,关于使用名为 Globalize3 的 gem。这只是让您设置要翻译的模型并管理每个模型的翻译表,就像 i18n 对静态页面一样......

    看看

    http://railscasts.com/episodes/338-globalize3?view=asciicast

    【讨论】:

      【解决方案3】:

      如果您想将不同语言的值存储在标准 Rails i18n (yml) 旁边的数据库中,您可以执行以下操作:

      产品表名字段:

      • name_zh
      • name_fr
      • name_nl

      获取正确的值:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          您可以覆盖模型类别中的“名称”方法,可以在另一个表中搜索正确的翻译。

          因此,在类别表中,您应该在“名称”字段中包含默认翻译语言,例如“其他”。然后在如下表中查找“其他”:

          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多