【问题标题】:Translations for each model每个模型的翻译
【发布时间】:2016-12-09 01:39:25
【问题描述】:

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

|-------翻译表--------| |translation_id|语言环境|翻译| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |----------------------modelx-table------ ----| |id|name_translation_id|description_translation_id|价格| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ |-------模式表--------| |id|name_translation_id|日期| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

【问题讨论】:

    标签: ruby-on-rails translation


    【解决方案1】:

    您不需要为翻译创建额外的模型,您只需设置 .yml 格式的语言环境,查看this 以获取更多说明

    更新

    好的,现在我明白你的意思了,你想在你的实体/模型上添加可翻译的字段,这样用户就可以通过 UI 管理这些翻译,对吗?你的方法是正确的,但是有一个名为 Globalize 的 gem做完全一样的事情,但玩具更多,更标准化。

    【讨论】:

    • 我所做的是添加一个模型 Translation(只有一个 id)和一个模型 TranslationRecord(有一个 id、一个 translation_id 和一个语言环境)。然后我向 Product 模型添加了 name_translation 和 description_translation "belongs_to :class_name => 'Translation'" 关系。可能有更标准的方法可以做到这一点,但我找不到。如果您使用 .yml 文件,则无法以不同语言管理您的产品名称和描述。随意发布在 Rails 中添加动态翻译的正确方法,否则我会用我自己的解决方案来回答。
    【解决方案2】:

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

    #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
    

    【讨论】:

      猜你喜欢
      • 2013-09-16
      • 1970-01-01
      • 2013-09-19
      • 2013-10-16
      • 2015-06-03
      • 2016-07-20
      • 2019-04-18
      • 2013-07-27
      • 2015-06-26
      相关资源
      最近更新 更多