0

私は春のMVCを使用しています。私のアプリでは、ユーザーは複数の言語 (英語、日本語、中国語、ポーランド語など) でコメント/テキストを投稿できる必要があります。これらの投稿は DB にも保存されます。UI側とサーバー側で多言語サポートを有効にするにはどうすればよいですか

私がしなければならないことは何ですか。国際化の例を見ましたが、混乱しているのは、プロパティファイルを使用して各単語の意味を保存していることです。それが、すべての単語をどのように保存できるかという問題です。それは私が必要とするものですか?例で十分です

4

3 に答える 3

0

データベースを使用する Spring l18n の場合、AbstractMessageSource を拡張します。Java 構成:

    @Bean
    public MessageSource messageSource(){
        DataBaseMessageSource source = new DatabaseMessageSource();

        return source;
    }

    @Bean
    public LocaleResolver localeResolver(){
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(Locale.ENGLISH); //setup default locale
       return resolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("lang"); //will change current user locale when hit url with ?lang
        registry.addInterceptor(interceptor);
    }

public class DatabaseMessageBandle extends AbstractMessageSource {

@Autowired
private FooRepository fooRepo;


@Override
protected MessageFormat resolveCode(String code, Locale locale) {
    String message = getMessage(code, locale);

    MessageFormat messageFormat = createMessageFormat(message, locale);

    return messageFormat;
}

@Override
protected String resolveCodeWithoutArguments(String code, Locale locale) {
    return getMessage(code, locale);
}

private String getMessage(String code, Locale locale) {
   String message = fooRepo.getMeesageByCodeAndLocale(code, locale); //better not do this 
    return message;
}

}

コントローラーで現在のロケールを取得する必要がある場合は、次のようにします。

@RequestMapping
public String index(Locale locale) {  //you will have it
//or use LocaleContextHolder.getLocale, and it will return current thread locale

return "index";
}
于 2015-11-21T22:26:10.630 に答える