5

我正在寻找使用国际化最佳实践的一些提示和建议。我已经四处搜寻,但是我对阅读的内容并不满意。我所阅读的大多数文章都将重点放在使用I18n的yml文件上,这种文件在我的情况下不起作用。Rails 3 I18n for database tables

我目前有几个数据库表中有英文文本。其中一些表格有几个句子的文本字段,有些是6+段文字。我也希望在西班牙文中有这些字段。

我目前正在考虑的方法是使用的I18n,活动记录和创业板有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内容。应用程序将查询原始表中的密钥,然后查询翻译表。另一个值得关注的问题是,翻译表将会很庞大,并且会有大量的行,因为它将存储应用程序的所有翻译(从部分标题[几个单词]到文本的整个页面的所有内容)

任何信息谢谢

+0

您也可以检出这一个https://github.com/tr8n/tr8n。 –

回答

6

在db中存储转换并不算太坏的解决方案,不要害怕大表 - 数据库是为此而设计的!只要确保你的索引配置正确并缓存任何你可以使用的数据。

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

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

-1

你必须在数据库上存储的唯一好处是如果你假装在飞行中编辑它。所以,如果这是你的意图,那么闲暇者的建议是一种方式。但如果你没有考虑这个问题,一个简单的YML将会完成翻译界面,表名,字段名等的工作。

如果你想用多种语言存储你的数据,你应该花费它们一段时间与特定的数据库建模。

基本上可以做到在两个方面: - 重复你在一个以上的语言 需要的领域 - 重复插入itens和国旗的语言,你也可以点上的所有副本的原始版本,以更好地跟踪他们。

+2

将数据存储在数据库中可以减少只需进行语言更新的推拉操作,这也使得您不必仅仅因为更新语言文件而推出新版本。这与“即时编辑”无关,这与翻译无关,无需由开发人员管理。如果我必须不断更新翻译者的语言,那么我就会非常生气和忙碌,因为翻译者不应该获得回购访问权限。有些人更喜欢copycopter,但是... –

+0

通过选择将代码翻译成代码,您将代码更改与翻译更改的关系放宽。这可能是也可能不是问题,这完全取决于你的网站改变多少。另外,如果出于某种原因想要返回并恢复更改,则不能仅通过检查修订系统上的版本来完成此任务,而必须处理数据库中的翻译内容。 即使有一些Web应用程序需要翻译东西(wordpress是一个很好的例子,ubuntu项目是另一个例子),他们确实会在某些时候生成代码来控制它的版本。 –

+0

您的翻译不应该随代码而改变,一旦您定义了翻译,它应该保持这种方式,除非代码被删除或代码被添加。这种剧烈的重构会导致问题,然后您需要在测试中对这些问题进行限制以防止出现这些问题。国际海事组织,如果你不断地改变你的翻译密钥,你做错了。基础系统翻译与您在生产网站上处理翻译的方式无关。我所说的是不要将ActiveModel或ActiveSupport的基础系统翻译放到你的船上。根据需要处理它们。 –