1

MongoDB/Mongoid에이 (http://railscasts.com/episodes/256-i18n-backends)을 구현하는 방법에 대한 아이디어가 있습니까? 내 질문은 주로 initializer.rb 파일에 관한 것입니다.MongoDB/Mongoid를 사용하는 I18n 백엔드

GitHub의에 Mongo-I18n의 문서는 제안 방법 'Store.new :: MongoI18n'의를 사용하여 다음

collection = Mongo::Connection.new['my_app_related_db'].collection('i18n') 
    I18n.backend = I18n::Backend::KeyValue.new(MongoI18n::Store.new(collection) 

하지만 당신은 자신의 플러그인을 사용하지 않으려는이 경우에 어떻게 할 수 있나요? Mongo :: Store 메소드와 같은 것이 있습니까?

답변

1

Mongo-I18n을 설치하는 데 문제가 있다는 것을 제외하고는이 똑같은 작업을 수행했습니다. MongoDB의 아주 오래된 버전에 종속되어 있기 때문입니다.

이 문제를 해결하기 위해 here의 코드를 lib/mongo_i18n.rb에 복사했습니다. 당신이 Mongoid를 사용하는 경우

당신은,하지만 당신의 이니셜을 가진 바른 길에 있었다 - 앞으로 가장 좋은 방법은이 작업을 수행하는 것입니다라는 새 컬렉션을 사용하는 국제화 백엔드 (알

require 'mongo_i18n' 
collection = Mongoid.database.collection('i18n') 
I18n.backend = I18n::Backend::KeyValue.new(MongoI18n::Store.new(collection)) 

i18n)이지만 나머지 응용 프로그램과 동일한 데이터베이스에 있습니다.

gemfile에서 Mongo_I18n gem을 삭제하고 서버를 다시 시작하기 전에 bundle을 실행하십시오.

직접 사용하여 저장소에 액세스 할 수 있습니다 내가 가게에 액세스 할 수 있도록

# mongo_i18n.rb 
def self.store 
    collection = Mongoid.database.collection('i18n') 
    MongoI18n::Store.new 
end 

:

I18n.backend.store 

그러나이 조금 청소기 만들기 위해, 내 국제화 라이브러리에이 방법을 추가 직접 사용 :

MongoI18n.store 
+0

감사합니다. 서버가 불만없이 시작되었습니다. 하지만 인덱스 뷰와 컨트롤러에서 번역을 검색/액세스하는 방법은 무엇입니까? TRANSLATION_STORE를 상수로 사용하는 것은 효과가없는 것 같습니다. –

+0

I18n 스토어에 액세스하는 것에 대한 몇 가지 추가 정보를 사용하여 답변을 업데이트했습니다. 또한 원본 코드에서 오타가 수정되었습니다. – theTRON

+0

USING TRANSLATION_STORE (레일 캐스트) [코드] COLLECTION = Mongo :: Connection.new [ 'tflocale'] 컬렉션 ('i18n') TRANSLATION_STORE = MongoI18n :: Store.new (콜렉션) I18n.backend = I18n :: 백엔드 :: 체인. 새 (I18n :: 백엔드 :: KeyValue.new (TRANSLATION_ST – StrangeDays

0

정확히 '트론'과 같았습니다. 단, 'mongo_i18n '전체 클래스 MongoI18n :: Mongo_i18n gem의 스토어 정의를 mongo initializer에 직접 추가했습니다. MongoI18n :: Store 전체가 41 줄이기 때문에 그리 큰 문제는 아닙니다. Look here, 왜 41 줄 보석에서 의존성을 만드나요?