1

現在、Spring Framework を使用して Java Web アプリケーションを作成しています。私のアプリケーションには、1 つの管理者アカウントと複数の通常のユーザー アカウントがあります。管理サイトから言語を選択することで、アプリケーションを解決する言語を選択できる管理者アカウントにしたいと考えています。

1. 管理者は、アプリケーションを表示する言語を選択できる管理者ページに移動します。 2. 設定の保存ボタンを選択すると、Web アプリケーションのクラスパスにあるプロパティ ファイルを更新します。 .

私の問題は、このプロパティ ファイルが新しい言語で更新されるときに、実行時にロケールを変更できないことです。それはまだ古い言語を使用しています。Cookie とセッションの両方がユーザーごとに異なることを読んだので、fixedLocaleResolver を使用しています。

これが私のコードです

構成ファイル

//Other code omitted

@PropertySource("classpath:/configuration/system.properties")
public class DefaultWebConfigurationContext extends WebMvcConfigurationSupport {

    @Autowired
    Environment env;

    @Bean
    public LocaleResolver localeResolver() {
        FixedLocaleResolver localeResolver = new FixedLocaleResolver();
        localeResolver.setDefaultLocale(new Locale(env.getProperty("system.default.language")));
        return localeResolver;
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/languages/lang");
        messageSource.setUseCodeAsDefaultMessage(true);
        return messageSource;
    }
//Other code omitted

システムプロパティ

system.default.language=en

管理者が tomcat サーバーを停止せずにロケールを変更し、手動で system.properties を変更し、Tomcat サーバーを起動できるように、この機能を機能させる方法を正しい方向に導くことができることを願っています。また。


私の解決策 (2013 年 5 月 23 日) 独自の LocaleResolver を実装するように言われました。これまでのところうまくいくように見えるので、ここでカスタム Locale Resolver のソリューションを選択します

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Locale;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.LocaleResolver;
/**
 *
 * @author Martin Rohwedder
 * @since 23-05-2013
 * @version 1.0
 */
public class PropertyLocaleResolver implements LocaleResolver {

    private Properties prop = new Properties();
    private Locale defaultLocale = Locale.getDefault();

    public void setDefaultLocale(Locale locale) {
        this.defaultLocale = locale;
    }

    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        return this.defaultLocale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale)     {
        try {
            this.prop.load(new FileInputStream("classpath:/configuration/system.properties"));
            this.defaultLocale = new Locale(this.prop.getProperty("system.default.language"));
        }
        catch (IOException e) {
            this.defaultLocale = (defaultLocale != null ? defaultLocale : Locale.getDefault());
        }
    }

}
4

1 に答える 1