每个模型的翻译

时间:2016-12-03 20:04:53

标签: ruby-on-rails translation

在我的域中,许多模型都有名称,描述等。这些属性需要翻译。我知道如何在数据库中表示这一点。但是我很难找到用Rails表示这种方法的方法。


|-------translations-table--------|
|translation_id|locale|translation|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

|----------------------modelx-table---------------------|
|id|name_translation_id|description_translation_id|price|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

|-------modely-table--------|
|id|name_translation_id|date|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

2 个答案:

答案 0 :(得分:0)

您无需为翻译创建额外的模型,只需要设置.yml格式的区域设置,查看this以获取进一步说明

更新

好了,现在我理解你的观点,你想在你的实体/模型上添加可翻译的字段,这样用户可以通过UI管理这些翻译吗?你的方法是正确的,但是有一个名为{{3}的宝石这可以做同样的事情,但玩具更多,而且你想要的更加标准化。

答案 1 :(得分:0)

这是我最终提出的解决方案:

#Models
class Translation
   has_many :translation_records
end

class TranslationRecord
    (translation_records.find_by :locale => I18n.locale).text
end

class ModelX
    belongs_to :name_translation, :class_name => 'Translation'
    belongs_to :description_translation, :class_name => 'Translation'

    def name
        name_translation.current
    end

    def description
        description_translation.current
    end
end

#Migrations
class CreateTranslationRecords < ActiveRecord::Migration[5.0]
    def change
        create_table :translation_records do |t|
            t.references :translation
            t.string :locale
            t.string :text
        end

        add_index :translation_records, :locale
    end
end

class CreateTranslation < ActiveRecord::Migration[5.0]
    def change
        create_table :translations do |t|
            # only id column
        end
    end
end

class AddTranslationToModelXs < ActiveRecord::Migration[5.0]
    def change
        add_reference :model_xs, :name_translation
        add_reference :model_xs, :description_translation
    end
end