[SPRING] Java / Spring에서 누락 된 변환 값을 정상적으로 처리하는 방법은 무엇입니까?
SPRINGJava / Spring에서 누락 된 변환 값을 정상적으로 처리하는 방법은 무엇입니까?
국제 웹 사이트에 Java + Spring을 사용하고 있습니다.
2 개의 언어는 ZH와 EN (중국어와 영어)입니다.
두 파일 : messages.properties (영어 키 / 값 쌍) 및 messages_zh.properties 있습니다.
이 사이트는 #springMessage 태그를 사용하여 영어로 코딩되어 있습니다. 그런 다음 Poeditor.com을 사용하여 각 영어 구에 중국어 값을 제공합니다. 따라서 영문 messages.properties 파일은 항상 완전하지만 messages_zh.properties 파일에는 항상 모든 키가 있지만 messages_zh.properties 파일은 수 일 후에 번역사의 번역을 받기 때문에 때때로 공백 값을 갖습니다.
중국인의 가치가 없어지면 내 웹 사이트에서 동등한 영어 값을 표시 할 수있는 시스템이 필요합니다.
어떻게하면 중국어 값을 사용할 수 없을 때마다 영어를 사용하도록 Spring이 "후퇴"하도록 말할 수 있습니까? 가치 기준으로이 작업이 필요합니다.
현재 중국의 가치가없는 곳이라면 내 사이트에 빈 버튼 레이블이 표시됩니다. 나는 중국어가 공백 일 때마다 영어 (기본 언어)를 사용하려고한다.
해결법
-
==============================
1.이 목적을 위해 사용자 지정 MessageSource를 만들 수 있습니다.
이 목적을 위해 사용자 지정 MessageSource를 만들 수 있습니다.
같은 것 :
public class SpecialMessageSource extends ReloadableResourceBundleMessageSource { @Override protected MessageFormat resolveCode(String code, Locale locale) { MessageFormat result = super.resolveCode(code, locale); if (result.getPattern().isEmpty() && locale == Locale.CHINESE) { return super.resolveCode(code, Locale.ENGLISH); } return result; } @Override protected String resolveCodeWithoutArguments(String code, Locale locale) { String result= super.resolveCodeWithoutArguments(code, locale); if ((result == null || result.isEmpty()) && locale == Locale.CHINESE) { return super.resolveCodeWithoutArguments(code, Locale.ENGLISH); } return result; } }
Spring에서이 messageSource bean을 다음과 같이 설정한다.
<bean id="messageSource" class="SpecialMessageSource"> ..... </bean>
이제 Label을 해결하기 위해 MessageSource의 아래 메소드 중 하나를 호출하게됩니다.
String getMessage(String code, Object[] args, Locale locale); String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
resolveCode ()는 메시지 레이블에 인수가 있고 아래 인수와 같은 인수를 전달할 때 호출됩니다 invalid.number = {0}은 (는) 잘못되었습니다. messageSource.getMessage ( "INVALID_NUMBER", 새 Object [] {2d}, 로켈)를 호출하면
resolveCodeWithoutArguments ()는 메시지 레이블에 인수가없고 args 매개 변수를 null로 전달할 때 호출됩니다. validation.success = 유효성 검사 성공 messageSource.getMessage ( "INVALID_NUMBER", null, locale)를 호출합니다.
-
==============================
2.@ harrybvp의 대답은 올바른 방향으로 나를 잡았습니다. 이것은 나를 위해 작동하는 것으로 보이는 코드입니다 (그리고 "super"라고 불리는 메소드를 조롱 할 때 단위 테스트 가능합니다) :
@ harrybvp의 대답은 올바른 방향으로 나를 잡았습니다. 이것은 나를 위해 작동하는 것으로 보이는 코드입니다 (그리고 "super"라고 불리는 메소드를 조롱 할 때 단위 테스트 가능합니다) :
public class GracefulMessageSource extends org.springframework.context.support.ReloadableResourceBundleMessageSource { final static private Locale defaultLocale = Locale.ENGLISH; @Override protected MessageFormat resolveCode(final String code, final Locale locale) { MessageFormat result = superResolveCode(code, locale); if (result.toPattern().isEmpty() && !locale.equals(this.defaultLocale)) { result = superResolveCode(code, this.defaultLocale); } return result; } @Override protected String resolveCodeWithoutArguments(final String code, final Locale locale) { String result = superResolveCodeWithoutArguments(code, locale); if (result.isEmpty() && !locale.equals(this.defaultLocale)) { result = superResolveCodeWithoutArguments(code, this.defaultLocale); } return result; } protected MessageFormat superResolveCode(final String code, final Locale locale) { return super.resolveCode(code, locale); } protected String superResolveCodeWithoutArguments(final String code, final Locale locale) { return super.resolveCodeWithoutArguments(code, locale); } }
그리고 내 webmvc-config.xml :
<bean id="messageSource" class="com.mycode.fe.web.GracefulMessageSource"> <property name="basename"> <value>${content.path.config}/WEB-INF/messages</value> </property> <property name="defaultEncoding" value="UTF-8" /> <property name="cacheSeconds" value="2"/> <property name="fallbackToSystemLocale" value="true"/> </bean>
그런 다음 내 Velocity보기 템플릿에서
인수가없는 일반 키 : #springMessage ( 'menu_item1')
인수를 허용하는 키 : #springMessageText ( 'male_to_female_ratio'[3, 2])
그런 다음 messages.properties (영문 번역본)에서 : male_to_female_ratio = {0} : {1} 명의 남녀 비율이 있습니다.
from https://stackoverflow.com/questions/18152710/in-java-spring-how-to-gracefully-handle-missing-translation-values by cc-by-sa and MIT license