2011-05-03 7 views
0

우리는 거의 30 개 언어로 번역 된 웹 사이트를 운영하고 있습니다. 각 기사에는 작성된 언어를 나타내는 필드가 있습니다.Multilang Webites : langs 목록을 저장할 위치는 어디입니까?

이 기능을 구현하는 가장 좋은 방법은 무엇일까?

Class Language 
    has_many :article 
end 
Class Article 
    belongs_to :language 
end 

를 또는 사용 가능한 모든 랭 가문을 나열 상수로 기사 테이블의 필드에 직접 하드 코딩 : 이런 식으로 뭔가로 전체 모델 언어를 만듭니다.

LANG_LIST = {:en => 'english', :de => 'german', :fr => 'french' ...} 

두 작품,하지만 최선의 레일 방식 및 유지 보수 깨끗한입니다 : (주로 드롭 다운 목록에서를 표시합니다)?

의견을 보내 주셔서 감사합니다.

답변

1

기사 모델에 정보를 저장하기위한 언어 속성을 만들면 두 번째 옵션으로 충분할 수 있습니다.

언어 모델이 너무 많아서 실제로 이득을 얻지 못할 것이라고 생각합니다.

더 자세히 캡슐화하려면 모델을 언어를 처리하는 인스턴스 메소드로 확장하는 모듈을 만들 수 있습니다. 그리고 그것은 아마도 물건을 깨끗하게하고 싶다면 아마도 선호되는 방법 일 것입니다.

모델을 고수해야한다면 위임 도우미를 사용하여 언어 모델에 투명하게 적용 할 수 있습니다. 따라서 article.language.locale 대신 article.language_locale (매우 미묘하지만 중요한 디자인 패턴)을 직접 호출 할 수 있습니다.

할 수있는 많은 일들이 있지만 여기서는 모듈로 간단하게 유지할 것입니다.

+0

그래, 나는 i18n 기능을 알고 있지만 모델 내부의 언어를 다루는 방법보다 더 많은 의견과 도우미 지향적 인 것으로 보인다. – Hartator

+0

globalize2 :)를 사용할 수 있습니다. https://github.com/joshmh/globalize2 – Spyros

+0

좋아, 언어를 처리하는 인스턴스 메소드로 모델을 확장하는 모듈이 무슨 뜻인지 알지 못합니까? – Hartator

관련 문제