カテゴリ: Spring 更新日: 2026/03/03

Spring Bootでの国際化・時刻設定を完全ガイド!初心者でもわかる文字コード・ロケール・タイムゾーンの設定方法

国際化・時刻設定:文字コード/ロケール/タイムゾーンの初期化
国際化・時刻設定:文字コード/ロケール/タイムゾーンの初期化

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootアプリで、日本語の表示が文字化けしてしまうことがあるんですが、どうしたらいいですか?」

先生

「それは文字コードやロケール、タイムゾーンなどの設定が正しく行われていない可能性があります。Spring Bootではそれらを簡単に設定できますよ。」

生徒

「なるほど、国際化の設定って難しそうですが、基本から教えてください!」

先生

「それでは、文字コード・ロケール・タイムゾーンの初期化を中心に、Spring Bootでの国際化対応の方法をわかりやすく解説していきましょう!」

1. Spring Bootと国際化(i18n)の関係とは

「1. Spring Bootと国際化(i18n)の関係とは」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Spring Bootと国際化(i18n)の関係とは
1. Spring Bootと国際化(i18n)の関係とは

国際化とは、アプリケーションを複数の言語や地域に対応させる仕組みのことです。英語では「Internationalization」と呼ばれ、よくi18nと省略されます。Spring Bootは、デフォルトで国際化に対応しており、適切な設定を行えば、日本語・英語・フランス語など、さまざまな言語で表示することができます。

2. 文字コード(Character Encoding)の設定方法

2. 文字コード(Character Encoding)の設定方法
2. 文字コード(Character Encoding)の設定方法

文字化けの主な原因は、文字コードが一致していないことです。Spring Bootでは、UTF-8を使うことで日本語を含む多言語を正しく表示できます。設定はapplication.propertiesに記述します。


spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

この設定により、リクエストやレスポンスの文字コードがすべてUTF-8に統一されます。特に、フォーム送信やAPI通信で日本語を含むデータを扱う場合に必須です。

3. ロケール(Locale)の設定と切り替え

3. ロケール(Locale)の設定と切り替え
3. ロケール(Locale)の設定と切り替え

ロケールとは、言語と地域の組み合わせを表す情報です。Spring Bootでは、デフォルトのロケールを設定したり、ユーザーの選択によってロケールを動的に切り替えることができます。まず、固定のロケールを指定する場合は次のようにします。


spring.mvc.locale=ja_JP
spring.mvc.locale-resolver=fixed

この設定により、すべてのリクエストで日本語表示がデフォルトになります。

動的に切り替えたい場合は、LocaleResolverLocaleChangeInterceptorを使って設定します。


@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(Locale.JAPAN);
        return resolver;
    }

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

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

これにより、URLに?lang=enのようにパラメータをつけることで、英語などに切り替えることができます。

4. メッセージプロパティファイルの作成

「4. メッセージプロパティファイルの作成」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. メッセージプロパティファイルの作成
4. メッセージプロパティファイルの作成

Spring Bootの国際化機能では、ロケールごとのメッセージを別ファイルで定義します。たとえば、以下のようにmessages_ja.propertiesmessages_en.propertiesを作成します。


# messages_ja.properties
greeting=こんにちは!

# messages_en.properties
greeting=Hello!

テンプレート(例:Thymeleaf)で使用する場合は、次のように記述します。


<p th:text="#{greeting}">Default</p>

5. タイムゾーン(TimeZone)の初期化設定

5. タイムゾーン(TimeZone)の初期化設定
5. タイムゾーン(TimeZone)の初期化設定

アプリケーションが複数の国や地域で使用される場合、日時の表示も重要になります。Spring Bootでは、起動時にデフォルトのタイムゾーンを設定することで、日時のズレを防ぐことができます。


@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
        SpringApplication.run(DemoApplication.class, args);
    }
}

この設定により、アプリケーション全体のタイムゾーンが東京(日本時間)に統一されます。

6. データベースとの時刻連携に注意

6. データベースとの時刻連携に注意
6. データベースとの時刻連携に注意

アプリケーション側でタイムゾーンを設定していても、データベース側の設定が異なると、保存された日時がずれることがあります。MySQLを使っている場合は、JDBCのURLにタイムゾーンを指定すると安心です。


spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Tokyo

また、JPAを使っている場合、@Temporal@CreationTimestampなどのアノテーションを使って、時刻の取り扱いを明示することも重要です。

7. サーバー側(Tomcatなど)の文字コード設定

「7. サーバー側(Tomcatなど)の文字コード設定」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. サーバー側(Tomcatなど)の文字コード設定
7. サーバー側(Tomcatなど)の文字コード設定

Spring Bootアプリは、内部的にTomcatを使っていることが多いです。Tomcat側のエンコーディングもUTF-8に設定しておくと安心です。


server.tomcat.uri-encoding=UTF-8

これにより、URLパラメータやリクエストボディの文字列も、正しくUTF-8で処理されます。

8. ログ出力やファイル保存時の文字コード指定

8. ログ出力やファイル保存時の文字コード指定
8. ログ出力やファイル保存時の文字コード指定

ログファイルやテキストファイルを出力する際にも、明示的にUTF-8を指定しておくと、将来的なトラブルを防ぐことができます。


PrintWriter writer = new PrintWriter(new OutputStreamWriter(
    new FileOutputStream("log.txt"), StandardCharsets.UTF_8));
writer.println("ログ出力テスト:日本語");
writer.close();

ファイルを外部システムと連携する場合にも、文字コードを統一しておくことで、読み取りエラーや文字化けを防げます。

カテゴリの一覧へ
新着記事
New1
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
更新記事
New2
Thymeleaf
Thymeleafの#numbersユーティリティとは?初心者向け数値操作ガイド
更新記事
New3
Java
Javaのif文を完全マスター!初心者でもわかる分岐処理の使い方
更新記事
New4
JSP
JSPの文字コード設定(UTF-8)の方法!文字化けを防ぐ設定ポイントとは?
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
No.3
Java&Spring記事人気No3
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法
No.4
Java&Spring記事人気No4
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.5
Java&Spring記事人気No5
Thymeleaf
Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
No.6
Java&Spring記事人気No6
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.7
Java&Spring記事人気No7
Thymeleaf
Thymeleaf(タイムリーフ)の使い方入門!初心者でもわかるth:textの基礎
No.8
Java&Spring記事人気No8
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門