【问题标题】:Rails 3 I18n for database tablesRails 3 I18n 用于数据库表
【发布时间】:2011-07-12 04:18:07
【问题描述】:

我正在寻找有关使用国际化的最佳做法的提示和建议。我四处寻找,但我对所读的内容并不满意。我读过的大部分文章都关注在 I18n 中使用 yml 文件,这在我的情况下不起作用。

我目前有几个带有英文文本的数据库表。其中一些表格的文本字段只有几句话,有的则有 6 段以上的文本。我也想用西班牙语写这些字段。

我目前正在考虑的方法是使用 I18n-active 记录 gem 并有 1 个翻译表,应用程序将用于应用程序中的所有翻译

 class CreateTranslations < ActiveRecord::Migration
    def self.up
      create_table :translations do |t|
        t.string :locale
        t.string :key
        t.text   :value
        t.text   :interpolations
        t.boolean :is_proc, :default => false

        t.timestamps
      end
    end

    def self.down
      drop_table :translations
    end
  end

这是最好的方法吗?

一方面,所有翻译都将很好地存储在一张表中。另一方面,每次用户向数据库查询 I18n 内容时。该应用程序将查询原始表的键,然后查询翻译表。另一个问题是翻译表会很大并且有大量的行,因为它将存储应用程序的所有翻译(从部分标题 [几个单词] 到整页文本的所有内容。

感谢任何信息。谢谢

【问题讨论】:

标签: ruby-on-rails database ruby-on-rails-3 internationalization


【解决方案1】:

在数据库中存储翻译并不是一个太糟糕的解决方案。不要害怕大表——数据库就是为此而生的!只需确保您的索引配置正确并尽可能缓存即可。

另一个更快且可能更好的解决方案是使用 Redis 作为 I18n 的后端。请参阅http://guides.rubyonrails.org/i18n.html#using-different-backendshttp://railscasts.com/episodes/256-i18n-backends

无论您在哪里存储翻译,都无需尝试自己管理插值,因为 I18n 库可以很好地处理这一点(除非您正在做一些真正自定义的事情)。

【讨论】:

    【解决方案2】:

    您必须在数据库中存储的唯一优势是您可以假装在运行中对其进行编辑。因此,如果这是您的意图,idlefingers 的建议是一种方法。但是如果你不考虑这个,一个简单的 YML 就可以完成接口、表名、字段名等的翻译工作。

    如果您想用一种以上的语言存储数据,您应该花一些时间进行特定的数据库建模。

    你基本上可以通过两种方式做到这一点: - 用一种以上的语言复制您需要的字段 - 使用语言复制插入的itens和flag,您还可以将原始版本指向所有副本以更好地跟踪它们。

    【讨论】:

    • 将其存储在数据库中减少了仅为语言更新而推送和拉取的需要,它还使您不必因为更新语言文件而推出新版本。这与“动态编辑”无关,这与不需要开发人员管理的翻译有关。如果我不得不不断地为一个不应该访问 repo 的翻译更新语言,我会非常生气和忙碌。不过有些人更喜欢复印机……
    • 通过选择将翻译从代码中移开,您可以放松代码更改与翻译更改之间的关系。这可能是也可能不是问题,这完全取决于您的网站更改了多少。此外,如果您出于某种原因想要返回并恢复更改,您不能仅通过检查修订系统上的版本来做到这一点,您必须处理数据库中的翻译内容。即使那些有一些网络应用程序来翻译东西(wordpress 是一个很好的例子,ubuntu 项目另一个),他们也会在某些时候生成代码来对其进行版本控制。
    • 您的翻译不应随代码而改变,一旦您定义了翻译,除非删除代码或添加代码,否则它应该保持不变。如此剧烈的重构会导致问题,然后您需要在测试中确定这些问题的范围以防止出现此类问题。 IMO,如果您不断更改翻译键,那么您做错了。基本系统翻译也与您在生产站点上处理翻译的方式无关。我要说的是不要把 ActiveModel 或 ActiveSupport 的基本系统翻译扔到你的船上。在需要时与他们打交道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多