Spring MVCで多言語対応を実装する方法 messages.propertiesとThymeleafの基本を初心者向けに解説
新人
「先輩、最近Webアプリを触っていたら日本語と英語が切り替わるサイトを見たんですが、あれってどうやって作っているんですか?」
先輩
「それは多言語対応と呼ばれる仕組みです。Spring MVCではmessages.propertiesという設定ファイルを使うことで実装できます。」
新人
「messages.propertiesですか。普通のHTMLに文字を書くのとは違うんですか?」
先輩
「そうです。直接HTMLに文字を書くのではなく、メッセージファイルに文字をまとめて管理します。そしてThymeleafというテンプレートエンジンから読み込みます。」
新人
「それなら日本語と英語を切り替えられるアプリが作れそうですね。」
先輩
「その通りです。今回はSpring MVCでの多言語対応の基本とmessages.propertiesの使い方を初心者向けに解説していきます。」
1. 多言語対応 i18n とは Webアプリで必要になる理由
多言語対応とは一つのWebアプリケーションで複数の言語を表示できる仕組みのことです。英語ではInternationalizationと呼ばれ、略してi18nと書かれることが多いです。これはInternationalizationという単語の最初の文字と最後の文字の間に十八文字あることからこのように略されています。
例えば世界中のユーザーが利用するWebサービスでは日本語だけではなく英語中国語韓国語など様々な言語で表示できる必要があります。もし日本語しか表示できない場合海外の利用者は内容を理解することができません。そのため多言語対応はグローバルなWebサービスを開発するうえで非常に重要な機能です。
実際のWebアプリケーションではログイン画面やメニューエラーメッセージボタンの文字などすべての表示テキストを言語ごとに切り替える必要があります。Spring MVCではこの多言語対応を簡単に実装するためにmessages.propertiesという仕組みが用意されています。
もし多言語対応を行わずにHTMLファイルに直接文字を書いてしまうと日本語版英語版中国語版など大量のページを作る必要が出てしまいます。管理も大変になりますし修正が必要になったときにすべてのページを直さなければならなくなります。
そこでSpring MVCではメッセージを一か所にまとめて管理する方法を使います。表示する文字をmessages.propertiesに保存しておき必要な場所で読み込むことで言語の切り替えを実現します。これによりWebアプリケーションの保守性と拡張性が大きく向上します。
この仕組みは企業の業務システムでもよく使われています。例えば社内システムを海外支社でも使う場合英語表示が必要になることがあります。そのような場面でもSpring MVCの多言語対応機能は非常に役立ちます。
2. Spring MVCにおける多言語対応の基本 messages.propertiesの役割
Spring MVCの多言語対応ではmessages.propertiesというファイルが中心的な役割を持ちます。このファイルはメッセージリソースファイルと呼ばれアプリケーションの表示テキストを管理するための設定ファイルです。
簡単に言うと表示する文字をまとめて保存しておく辞書のようなファイルです。画面で表示するメッセージをキーと値の形で保存しておきます。キーとは識別子のことでプログラムからメッセージを取り出すときに使います。
例えばログイン画面のタイトルを管理する場合次のように記述します。
login.title=ログイン画面
login.button=ログイン
login.error=ユーザー名またはパスワードが違います
このようにキーとメッセージをイコールでつなげて定義します。プログラムではこのキーを使ってメッセージを取得します。
さらにSpring MVCでは言語ごとにファイルを分けることができます。例えば英語版のメッセージファイルは次のように作ります。
login.title=Login Page
login.button=Sign In
login.error=Invalid username or password
このように同じキーを使っておけばユーザーの言語設定に応じて自動的に表示内容が切り替わります。つまりプログラムは同じコードのままで日本語と英語の両方に対応できるということです。
Spring MVCとThymeleafを組み合わせることでHTMLテンプレートから簡単にメッセージを読み込むことができます。この仕組みを理解することで実践的なWebアプリケーション開発ができるようになります。
多言語対応は難しそうに見えるかもしれませんが基本の仕組みはとてもシンプルです。メッセージを外部ファイルで管理して表示するときに読み込むという考え方を覚えておけば初心者でも理解できます。
3. messages.propertiesの基本構造とメッセージ定義の書き方
messages.propertiesの書き方はとてもシンプルです。基本的にはキーとメッセージをイコールでつなげて記述するだけです。この形式はプロパティファイルと呼ばれJavaの設定ファイルとして広く使われています。
Spring MVCでは通常resourcesフォルダの中にmessages.propertiesを配置します。これによりアプリケーション起動時に自動的に読み込まれるようになります。
例えば次のようなメッセージファイルを作成するとします。
app.title=サンプルアプリケーション
menu.home=ホーム
menu.login=ログイン
menu.logout=ログアウト
message.welcome=ようこそ
このファイルではアプリケーションのタイトルやメニューの表示文字を管理しています。キーの名前は自由に決めることができますがどの画面のメッセージなのか分かりやすい名前にすることが大切です。
次にThymeleafのHTMLテンプレートからメッセージを表示する方法を見てみましょう。Thymeleafではシャープと中括弧を使ってメッセージを呼び出します。
<h1 th:text="#{app.title}"></h1>
<ul>
<li th:text="#{menu.home}"></li>
<li th:text="#{menu.login}"></li>
<li th:text="#{menu.logout}"></li>
</ul>
このように書くことでmessages.propertiesに定義されたメッセージがHTMLに表示されます。もし英語用のmessages_en.propertiesが存在する場合ユーザーのロケール設定に応じて英語のメッセージが表示されます。
この仕組みを利用することでWebアプリケーションの文字管理が非常に簡単になります。画面に表示するテキストをすべてmessages.propertiesにまとめておけば文章を変更したいときもファイルを修正するだけで対応できます。
また翻訳作業を行う場合にも便利です。翻訳担当者はmessages.propertiesの内容だけを確認すればよいためHTMLやJavaコードを理解していなくても作業できます。これは実際の企業システム開発でもよく採用されている方法です。
Spring MVCとThymeleafを使った多言語対応は現代のWeb開発では非常に重要なスキルです。messages.propertiesの基本構造を理解することで将来的に大規模な国際対応システムを開発するときにも役立つ知識になります。
4. Spring MVCでmessages.propertiesを読み込む設定方法
SpringMVCで多言語対応を実装するためにはmessagespropertiesを読み込む設定を行う必要があります。messagespropertiesはメッセージリソースファイルと呼ばれアプリケーションの表示文字を管理する重要な設定ファイルです。しかしファイルを作成するだけではSpringMVCは自動的に読み込んでくれません。そのため設定クラスを作成してメッセージリソースを登録する必要があります。
まず基本となるのはMessageSourceという仕組みです。MessageSourceはSpringFrameworkが提供している機能でメッセージファイルを読み込んで必要な文字列を取得する役割を持っています。この仕組みを利用することでmessagespropertiesの内容をアプリケーション全体から利用できるようになります。
一般的な設定方法としてJavaの設定クラスでMessageSourceを定義します。次のコードはSpringMVCでmessagespropertiesを読み込む基本的な設定例です。
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
@Configuration
public class MessageConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
この設定ではmessagesという名前のメッセージファイルを読み込むように指定しています。実際には次のようなファイルが読み込まれる仕組みになります。
- messages.properties
- messages_en.properties
- messages_ja.properties
ユーザーの言語設定によってSpringが自動的に適切なファイルを選択します。例えばブラウザの言語が英語の場合はmessagesenpropertiesが使用されます。日本語の場合はmessagespropertiesが使用されます。
またUTF八を指定しているのは日本語などの文字化けを防ぐためです。もしこの設定を行わない場合日本語メッセージが正しく表示されないことがあります。初心者の方が多言語対応を実装するときに最も多いトラブルの一つが文字化けなのでこの設定は必ず行うようにしましょう。
このようにSpringMVCではMessageSourceの設定を行うことでmessagespropertiesをアプリケーション全体から利用できるようになります。設定が完了するとThymeleafやJavaコードから簡単にメッセージを取得できるようになります。
5. Thymeleafでメッセージを表示する方法(#{...}の使い方)
SpringMVCでmessagespropertiesを設定したら次に行うのは画面にメッセージを表示する処理です。SpringMVCではテンプレートエンジンとしてThymeleafがよく使用されます。Thymeleafではシャープと中括弧を使った特殊な記法を利用してメッセージを表示します。この記法がシャープ中括弧記法です。
シャープ中括弧記法はメッセージ式と呼ばれmessagespropertiesに定義されたキーを指定することで対応するメッセージを取得できます。基本的な書き方はとてもシンプルです。
<h1 th:text="#{app.title}"></h1>
<p th:text="#{message.welcome}"></p>
このように書くことでmessagespropertiesに定義されたメッセージが画面に表示されます。例えばmessagespropertiesに次のような定義がある場合を考えてみましょう。
app.title=サンプルアプリケーション
message.welcome=ようこそ
Thymeleafテンプレートを表示すると画面には次のような内容が表示されます。
サンプルアプリケーション
ようこそ
この仕組みによってHTMLテンプレートに直接文字を書く必要がなくなります。すべての表示文字をmessagespropertiesで管理できるため多言語対応がとても簡単になります。
さらにThymeleafではボタンやラベルメニューなど様々な場所でメッセージを利用できます。次の例はログイン画面のメニューを表示するテンプレートです。
<ul>
<li th:text="#{menu.home}"></li>
<li th:text="#{menu.login}"></li>
<li th:text="#{menu.logout}"></li>
</ul>
このようにキーを指定するだけでメッセージを表示できるため画面のコードがとてもシンプルになります。また英語版のmessagesenpropertiesが存在する場合自動的に英語のメッセージが表示されます。つまりHTMLテンプレートは一つだけで複数言語に対応できるということです。
この仕組みは大規模なWebアプリケーション開発でも非常に重要です。画面の文字をすべてメッセージファイルで管理することで保守性が高く変更に強いシステムを作ることができます。
6. ロケール(Locale)切り替えによる言語変更の仕組み
SpringMVCの多言語対応ではロケールという概念が重要になります。ロケールとはユーザーの言語や地域の設定を表す情報のことです。例えば日本語の場合は日本のロケール英語の場合は英語のロケールが使用されます。
SpringMVCではこのロケール情報を利用してどのメッセージファイルを読み込むかを判断します。例えば日本語のロケールであればmessagespropertiesが使用され英語のロケールであればmessagesenpropertiesが使用されます。
ロケールを切り替える方法はいくつかありますが代表的な方法としてLocaleResolverとLocaleChangeInterceptorを利用する方法があります。次のコードはロケール切り替えを設定する例です。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
public class LocaleConfig {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.JAPAN);
return resolver;
}
}
この設定ではデフォルトの言語を日本語に指定しています。つまり特別な設定がない場合日本語のmessagespropertiesが使用されます。
さらにURLのパラメータで言語を変更することもできます。例えば言語パラメータを指定してページにアクセスすると表示言語を変更できます。
example.com?lang=en
example.com?lang=ja
このような仕組みを利用することでユーザーが自由に言語を切り替えられるWebアプリケーションを作ることができます。海外ユーザーが利用するサービスでは言語切り替え機能は非常に重要な機能になります。
SpringMVCの多言語対応機能は非常に柔軟で企業の業務システムからグローバルWebサービスまで幅広く利用されています。messagespropertiesとロケールの仕組みを理解しておくことで実践的な国際化対応アプリケーションを開発できるようになります。
初心者のうちは設定ファイルやロケールの仕組みが少し難しく感じるかもしれませんが基本の考え方はとてもシンプルです。メッセージを外部ファイルで管理しユーザーの言語設定に応じて適切なメッセージを表示するという仕組みです。この基本を理解しておくことでSpringMVCを使った多言語対応開発をスムーズに進めることができます。
7. 多言語対応を実装することで得られるメリット
多言語対応を実装することでWebアプリケーションには多くのメリットがあります。特にSpringMVCのmessages.propertiesを利用した国際化対応は企業システムやWebサービスの開発において非常に重要な技術です。ここでは初心者にも理解しやすいように多言語対応のメリットを分かりやすく説明します。
まず大きなメリットは世界中のユーザーにサービスを提供できることです。もし日本語だけのサイトであれば利用できるのは日本語を理解できる人だけになります。しかし英語や中国語など複数の言語に対応していれば世界中の利用者がサービスを利用できるようになります。これはグローバルなWebサービスを作るうえでとても重要です。
次にアプリケーションの管理が簡単になるというメリットがあります。messages.propertiesを使う場合画面に表示するメッセージをすべて一か所で管理できます。そのため表示内容を変更したいときでもプログラムを修正する必要がなくメッセージファイルを修正するだけで対応できます。
例えばログインボタンの表示を変更したい場合次のようにメッセージファイルを修正するだけで反映されます。
login.button=ログイン
login.title=ログイン画面
login.message=ユーザー名とパスワードを入力してください
もしHTMLやJavaコードに直接文字を書いていた場合すべての画面を探して修正しなければなりません。しかしmessages.propertiesを使っていれば一つのファイルを修正するだけで全体に反映されます。
さらに翻訳作業が簡単になるというメリットもあります。企業のシステム開発では翻訳担当者がメッセージを翻訳することがあります。その場合プログラムコードを編集する必要はなくmessages.propertiesの内容だけを翻訳すればよいので作業がとても効率的になります。
次の例は英語版メッセージファイルの例です。
login.button=Login
login.title=Login Page
login.message=Please enter your username and password
このように同じキーを使用することでSpringMVCは自動的に適切な言語のメッセージを表示します。つまりプログラムは一つのコードのままで複数の言語に対応できるということです。
また大規模なシステム開発では保守性という考え方がとても重要になります。保守性とは将来システムを修正しやすいかどうかという意味です。messages.propertiesを使った設計は表示文字を外部ファイルに分離するため保守性が高い設計になります。
このようにSpringMVCの多言語対応機能を利用することでグローバル対応管理のしやすさ翻訳作業の効率化など多くのメリットを得ることができます。
8. messages.properties運用時の注意点(キー管理・翻訳管理)
messages.propertiesは非常に便利な仕組みですが運用するときにはいくつかの注意点があります。特にキーの管理方法と翻訳管理は重要なポイントになります。
まず注意したいのがキーの命名ルールです。キーとはメッセージを識別するための名前です。キーの名前が分かりにくいとどの画面のメッセージなのか分からなくなってしまいます。そのため次のように画面や機能ごとに整理して命名することが大切です。
login.title=ログイン画面
login.button=ログイン
login.error=ログインエラー
menu.home=ホーム
menu.user=ユーザー管理
menu.setting=設定
このように機能ごとにプレフィックスを付けることでメッセージの管理がとても分かりやすくなります。例えばloginで始まるキーはログイン画面のメッセージであることがすぐに分かります。
次に翻訳管理の問題があります。日本語版のmessages.propertiesを変更した場合英語版や他の言語のファイルも同じキーを追加しなければなりません。もしキーが存在しない場合正しく表示されない可能性があります。
例えば次のように日本語版だけに新しいメッセージを追加した場合を考えてみましょう。
login.success=ログイン成功
このキーが英語版のmessages_en.propertiesに存在しない場合英語環境でアプリケーションを表示するとメッセージが表示されない可能性があります。そのためメッセージを追加するときはすべての言語ファイルに同じキーを追加することが重要です。
実際の企業開発ではメッセージ管理ツールや翻訳管理システムを利用することもあります。これにより翻訳の抜け漏れを防ぎすべての言語ファイルを正しく管理することができます。
またmessages.propertiesは行数が増えると数百行以上になることがあります。そのため定期的に整理して不要なキーを削除したりコメントを追加したりすることも大切です。整理されたメッセージファイルはチーム開発でも非常に役立ちます。
9. Spring MVCの多言語対応(messages.properties)のポイント整理
ここまでSpringMVCにおける多言語対応の仕組みとmessages.propertiesの使い方について解説してきました。最後に重要なポイントを整理して理解を深めておきましょう。
SpringMVCの多言語対応ではメッセージリソースファイルを使用して表示文字を管理します。このファイルがmessages.propertiesです。画面に表示するテキストをこのファイルにまとめて管理することで複数の言語に対応できるWebアプリケーションを作ることができます。
基本的な仕組みはとてもシンプルです。messages.propertiesにキーとメッセージを登録しHTMLテンプレートやJavaコードからキーを指定してメッセージを取得します。ユーザーの言語設定に応じてSpringが自動的に適切なメッセージファイルを読み込みます。
例えばSpringMVCのJavaコードからメッセージを取得する場合次のように書くことができます。
import org.springframework.context.MessageSource;
import java.util.Locale;
public class MessageExample {
private MessageSource messageSource;
public String getMessage() {
return messageSource.getMessage("login.title", null, Locale.JAPAN);
}
}
このようにJavaコードから直接メッセージを取得することもできます。これにより画面だけではなくログメッセージやエラーメッセージにも多言語対応を適用できます。
またThymeleafテンプレートからメッセージを取得する場合は次のように書きます。
<h1 th:text="#{login.title}"></h1>
<p th:text="#{login.message}"></p>
<button th:text="#{login.button}"></button>
このようにmessages.propertiesとテンプレートエンジンを組み合わせることで柔軟な多言語対応を実現できます。
現在のWeb開発では国際化対応はとても重要な要素になっています。海外ユーザーが利用する可能性のあるサービスでは最初から多言語対応を考えて設計することが一般的です。SpringMVCのmessages.propertiesを理解しておくことで将来のWebシステム開発でも役立つ知識になります。
初心者のうちは難しく感じるかもしれませんが基本の仕組みはとてもシンプルです。メッセージを設定ファイルに保存して必要な場所で呼び出すという考え方を覚えておけば多言語対応の理解が深まります。