Sha256: 1ff4fc4932e52b5f3cd9bb32e712836a4524f8163654f1c4391f4224e7c8a08f
Contents?: true
Size: 1.74 KB
Versions: 1
Compression:
Stored size: 1.74 KB
Contents
module Rosetta module Translated extend ActiveSupport::Concern included do scope :missing_translation, ->(locale) { where.missing(:"#{locale.code}_translation") } scope :with_translated_version, ->(locale) { includes(:"#{locale.code}_translated_version") } end class_methods do def translate_in_all_locales return unless ActiveRecord::Base.connection.table_exists?("rosetta_locales") Locale.all.each do |locale| translated_in(locale) end Locale.register_class_for_translation(self) end def translated_in(locale) has_one :"#{locale.code}_translation", -> { where(target_locale: locale) }, class_name: "Rosetta::Translation", foreign_key: :from_id, dependent: :destroy has_one :"#{locale.code}_translated_version", through: :"#{locale.code}_translation", source: :to define_method("content_#{locale.code}") do if translation_changes[locale.code] translation_changes[locale.code].content else public_send(:"#{locale.code}_translated_version")&.content end end define_method("content_#{locale.code}=") do |localized_content| translation_changes[locale.code] = if localized_content.blank? Rosetta::Translated::Delete.new(self, locale) else Rosetta::Translated::Create.new(self, locale, localized_content) end end after_save { translation_changes[locale.code]&.save } end end def content_in(locale) public_send("content_#{locale.code}") end def translation_changes @translation_changes ||= {} end def reload(*) super.tap { @translation_changes = nil } end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rosetta-rails-0.2.1 | lib/rosetta/translated.rb |