에 다음을 추가하여 구현과 messageSource
빈의 기본 구현을 대체 :
// Place your Spring DSL code here
beans = {
messageSource(DatabaseMessageSource) {
messageBundleMessageSource = ref("messageBundleMessageSource")
}
messageBundleMessageSource(org.codehaus.groovy.grails.context.support.PluginAwareResourceBundleMessageSource) {
basenames = "WEB-INF/grails-app/i18n/messages"
}
}
그리고 당신의 src/groovy
폴더에 다음 클래스를 추가 :
class DatabaseMessageSource extends AbstractMessageSource {
def messageBundleMessageSource
protected MessageFormat resolveCode(String code, Locale locale) {
Message msg = messageBundleMessageSource.resolveCode(code, locale)
def format
if(msg) {
format = new MessageFormat(msg.text, msg.locale)
}
else {
format = Message.findByCodeAndLocale(code, locale)
}
return format;
}
}
이제 메시지 묶음에서 메시지를 분석하려고 시도합니다. 사용할 수없는 경우 데이터베이스에서 찾습니다. 오류 처리 기능을 추가 할 수 있지만이 버전은 모든 메시지를 적어도 한 곳에서 사용할 수 있으면 작동합니다.
자세한 내용은 http://graemerocher.blogspot.com/2010/04/reading-i18n-messages-from-database.html을 참조하십시오. resources.groovy
에서 수행 변경에
일부 세부 정보 : 단지 resources.groovy
에 정의 된 같은 이름을 갖는 변수를 정의하여 포함 할 수 있습니다 당신이 주사 끝내 클래스를 정의 할 수 있습니다이 파일에
. 예 : 이 파일에는 messageSource
과 messageBundleMessageSource
이 있으며 모든 컨트롤러 또는 서비스 파일에 포함시킬 수 있습니다. 이 변수가 정의되면 대괄호 안에 클래스의 인스턴스가 생성됩니다.
이 경우 일반 사용자 정의 구현 DatabaseMessageSource
을 사용하기 위해 일반 messageSource
을 덮어 씁니다. 따라서 I18n 함수 message
은 이제 사용자 정의 구현을 사용합니다.
사용자 지정 구현에서는 message.properties
파일을 확인해야하므로 원래 메시지 원본을 두 번째 빈에 유지해야합니다. 사용자 정의 구현에서이 인스턴스를 정의하면 이전 구현을 계속 사용할 수 있으므로 일반적인 방식으로 메시지를 조회 할 수 있습니다.
에 대한 자세한 내용은 http://stackoverflow.com/questions/8100312/grails-i18n-from-database-but-default-back-to-file을 참조하십시오. 데이터베이스에서 메시지를 검색하는 방법을 보여주는 블로그가 있습니다. stackoverflow 메시지는 데이터베이스와 메시지 파일을 결합하는 방법을 보여줍니다. – Chris
나를 지적 해 주셔서 고맙지 만, 실제 질문에 완전히 대답 한 적이 없습니다. 최소한 솔루션이 될 수있는 단서는 없습니다. :(이 게시물도 확인했습니다 .. http://grails.1312388.n4.nabble.com/i18n-Database-td4073132 다시 한 번 실제 해결책이 없습니다. – Marco
이 블로그? http://graemerocher.blogspot.com/2010/04/reading-i18n-messages-from-database.html – Chris