0

나는 thymeleaf로 Spring MVC로 프로젝트를 시작했다. 국제화되고 싶습니다. 공식 스프링 튜토리얼을 복사했습니다. 그러나 tr 버튼을 클릭하면 단어가 변경되지 않습니다. 내 코드를 붙여 넣고 있습니다. ResourceManager 서비스의 getLabel 함수가 현재 언어 레이블을 얻고 있다고 가정했습니다. 그러나 나는 확실하지 않다. 어떻게하면됩니까?springmvc에서 thymeleaf로 국제화 작업을 할 수 없음

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"com.yummynoodlebar.web.controller","com.yummynoodlebar.web.service","com.yummynoodlebar.web.domain"}) 
public class WebConfig extends WebMvcConfigurerAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
} 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
    localeChangeInterceptor.setParamName("lang"); 
    registry.addInterceptor(localeChangeInterceptor); 
} 

@Bean 
public LocaleResolver localeResolver() { 

    CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver(); 
    cookieLocaleResolver.setDefaultLocale(StringUtils.parseLocaleString("en")); 
    return cookieLocaleResolver; 
} 

@Bean 
public ServletContextTemplateResolver templateResolver() { 
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); 
resolver.setPrefix("/WEB-INF/views/"); 
resolver.setSuffix(".html"); 
//NB, selecting HTML5 as the template mode. 
resolver.setTemplateMode("HTML5"); 
resolver.setCharacterEncoding("UTF-8"); 
resolver.setCacheable(false); 
return resolver; 

} 

@Bean 
public SpringTemplateEngine templateEngine() { 
SpringTemplateEngine engine = new SpringTemplateEngine(); 
engine.setTemplateResolver(templateResolver()); 
return engine; 
} 

@Bean 
public ViewResolver viewResolver() { 

ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
    viewResolver.setTemplateEngine(templateEngine()); 
viewResolver.setOrder(1); 
viewResolver.setViewNames(new String[]{"*"}); 
viewResolver.setCache(false); 
    return viewResolver; 
} 

@Bean(name = "labelSource") 
public MessageSource messageSource() { 

    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasenames("classpath:i18n/labels"); 
    // if true, the key of the message will be displayed if the key is not 
    // found, instead of throwing a NoSuchMessageException 
    messageSource.setUseCodeAsDefaultMessage(true); 
    messageSource.setDefaultEncoding("UTF-8"); 
    // # -1 : never reload, 0 always reload 
    messageSource.setCacheSeconds(0); 
    return messageSource; 
} 

} 

@Component 
public class ResourceManager { 

@Resource(name = "labelSource") 
private MessageSource messageSource; 

public String getLabel(String code) { 
    return messageSource.getMessage(code, null, Locale.getDefault()); 
} 
} 

답변

0

나는 내 문제를 해결했습니다. 나는 getLabel 함수를 변경했다. 새 코드는 다음과 같습니다.

public String getLabel(String code) { 
    return messageSource.getMessage(code, null, LocaleContextHolder.getLocale()); 
} 
관련 문제