구현해야 할 기능에 대한 딜레마가 있습니다. 우리 앱 (0 < n < +infinity
)에서 n
개의 언어를 지원하고 싶습니다. Rails 다중 경로 정보를 DataBase에 저장 (최종 사용자가 번역)
module TranslatedAttributes
def use_translated_attributes
has_many :translated_attributes, as: :owner
accepts_nested_attributes_for :translated_attributes
define_method :translate_attribute do |attribute, locale = I18n.locale|
TranslatedAttribute.where(attribute_name: attribute.to_s, owner_type: self.class.model_name, owner_id: self.id, locale: locale.to_s).first.try(:translation)
end
end
end
사용자가 예를 들어 제품 모델의 예를 들어 X 번역 (들)을 정의 할 수 있어야한다. 또한 사용자 프로필에 설정된 사용자의 로켈에 따라 번역 된 버전의 속성이 표시됩니다.
예 :보기에서
Product
id: 12
TranslatedAttribute
attribute_name: 'name'
owner_id: 12
owner_type: 'Product'
locale: 'en'
translation: 'Magnificent shiny shoes'
TranslatedAttribute
attribute_name: 'name'
owner_id: 12
owner_type: 'Product'
locale: 'fr'
translation: 'Magnifiques chaussures brillantes'
, 다음과 같이 호출 할 것이다 :
product.translate_attribute(:name)
# or we will eventually define_method for each attribute to be translated
# so we could use the following
# product.name
이 이미 테스트, 작동합니다.
문제는입니다. 많은 수의 레코드를로드하려고 할 때 문제가 있습니다. 각 레코드는 표시 할 적절한 변환을 알기 위해 DB를 쿼리해야합니다.
제 질문은입니다. 어떻게 캐시를 처리합니까?
또 다른 질문은 내가 볼 수있는 다른 문제가 있습니까? 또한 fields_for
으로 번역 양식을 작성하려면 accepts_nested_attributes_for :translated_attributes
을 생각했습니다. 이런 식으로 처리하는 것은 나쁜 생각이라고 생각합니까?
고마워요!