へっぽこITエンジニア@名古屋のブログ

Follow me on GitHub

SpringBoot3で日英切替

SpringBoot3で日英切り替えする方法と、Cookieに日英をの情報を保持して 再描画した際に設定が引き継ぐ方法を記載します。

日英切り替えのプログラム追加

以下にソースコードを作成しています。 mybatisDemoForSpringboot3

SpringBootのmain関数のあるクラスと同じところにLocaleConfigを追加します。 クラス名は別になんでもよいです。

@Configuration
public class LocaleConfig implements WebMvcConfigurer  {
  @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
      registry.addInterceptor(localeChangeInterceptor()); 
    } 
  @Bean 
  public LocaleChangeInterceptor localeChangeInterceptor() { 
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
    localeChangeInterceptor.setParamName("lang"); 
    return localeChangeInterceptor; 
  }
  
  @Bean 
  public CookieLocaleResolver localeResolver() { 
    CookieLocaleResolver localeResolver = new CookieLocaleResolver(); 
    localeResolver.setDefaultLocale(Locale.JAPAN);
    localeResolver.setCookieMaxAge(604800);
    localeResolver.setCookiePath("/");
    return localeResolver; 
  }
  
  @Bean 
  public ReloadableResourceBundleMessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasename("classpath:i18n/message"); 
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource; 
  }
} 

少し説明すると、以下の部分が日英切り替え時に動きます。 パラメータでlangを渡すとその値をセットします。

  public LocaleChangeInterceptor localeChangeInterceptor() { 
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
    localeChangeInterceptor.setParamName("lang"); 
    return localeChangeInterceptor; 
  }

次に以下の部分で、デフォルトとCookieを利用すること設定しています。 有効期限をsetCookieMaxAgeで設定し、別画面での切り替えにも対応するように/をパスにしています。

  public CookieLocaleResolver localeResolver() { 
    CookieLocaleResolver localeResolver = new CookieLocaleResolver(); 
    localeResolver.setDefaultLocale(Locale.JAPAN);
    localeResolver.setCookieMaxAge(604800);
    localeResolver.setCookiePath("/");
    return localeResolver; 
  }

セッションを利用したい場合はCookieLocaleResolverSessionLocaleResolverとすることで可能です。

そして最後にメッセージがどこにあるかと、設定ファイルの文字コードを記載しています。

  @Bean 
  public ReloadableResourceBundleMessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasename("classpath:i18n/message"); 
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource; 
  }

今回はresources/i18n/messageに配置して、UTF-8で利用します。

日英切り替えのメッセージを追加

message_ja.propertiesとmessage_en.propertiesとを resouces/i18nに配置します

それぞれ中身はこんな感じです。

customer.title=顧客一覧
customer.detail=詳細
customer.name=名前
customer.post=郵便番号
customer.address=住所
customer.title=Customers
customer.detail=Detail
customer.name=Name
customer.post=Post
customer.address=Address

Thymeleafに日英切り替えを追加

適当な場所に以下を追加して、langのパラメータを送信するようにします。

  <a href="?lang=ja" th:href="@{?lang=ja}">日本語</a>
  <br/>
  <a href="?lang=en" th:href="@{?lang=en}">English</a>

そして、Thymeleafのth:text属性で#{プロパティーの値}とすると日本語、英語を切り替えられます。

<th th:text="#{customer.name}">名前</th>
<th th:text="#{customer.post}">郵便番号</th>
<th th:text="#{customer.address}">住所</th>

まとめ

Cookieを利用して日英切り替えを保持する方法を記載しました。 ソースのサンプルもあるので、必要に応じてご利用ください。

作成日:2022-08-06  更新日:2022-08-06