How do you implement internationalization (i18n) in Spring applications?

Table of Contents

Introduction

Internationalization (i18n) is the process of designing your Spring application to support multiple languages and regions. This allows you to present your content in different languages based on the user's locale, making your application accessible to a global audience. In Spring, i18n is typically implemented using message bundles and locale resolution. This guide will walk you through the steps to configure and implement internationalization in a Spring application.

Configuring Message Sources in Spring

Spring provides the MessageSource interface, which is used to manage the resources for internationalization. The message source contains key-value pairs for different language translations.

Step 1: Add Message Properties Files

The first step in implementing i18n is creating message properties files for each supported language. These files typically have .properties extensions and are placed in the resources directory.

  • messages.properties (default)
  • messages_en.properties (English)
  • messages_fr.properties (French)
  • messages_de.properties (German)

For example, the default messages.properties file might look like this:

And the messages_fr.properties file could contain the French version:

Each file contains a set of key-value pairs where keys are the same across all language files, and values are translated according to the locale.

Step 2: Define the MessageSource Bean

In your Spring configuration file (either Java-based or XML-based), you need to define a MessageSource bean that will load the correct property files based on the user’s locale.

Using Java Configuration:

Using XML Configuration:

Here, basename refers to the base name of the message files (e.g., messages.properties), and Spring will automatically load the appropriate file based on the user's locale.

Locale Resolver in Spring

To determine the user’s preferred language or locale, you need to configure a LocaleResolver in Spring. The LocaleResolver will determine the locale of the user and make it available throughout the application.

Step 1: Configure a LocaleResolver

Spring provides several ways to resolve the locale, such as using the SessionLocaleResolver or CookieLocaleResolver.

Using SessionLocaleResolver:

Using CookieLocaleResolver:

Alternatively, you can use a CookieLocaleResolver if you want to store the user's locale preference in a cookie.

Step 2: Configure LocaleChangeInterceptor

To allow users to switch between locales (e.g., by clicking a language selection link), use the LocaleChangeInterceptor to intercept requests and change the locale based on the user's input (typically via a URL parameter).

Java Configuration:

In this case, the user can change the language by adding the lang parameter to the URL, like http://example.com/home?lang=fr.

Using Internationalization in Controllers and Views

Once the MessageSource and LocaleResolver are set up, you can use Spring’s i18n features to access localized messages in your controllers and views.

Example 1: Using @MessageSource in a Controller

In your Spring MVC controller, you can inject the MessageSource bean to retrieve the appropriate messages based on the current locale.

In this example, the greeting message will be fetched from the properties file (messages.properties) based on the specified lang parameter.

Example 2: Using Spring Form Tags for Localization

If you're using JSP or Thymeleaf for rendering views, you can use the Spring form tags and message tags to retrieve localized messages.

Using JSP:

Using Thymeleaf:

These expressions will display the localized greeting message based on the user’s locale.

Conclusion

Implementing internationalization (i18n) in a Spring application involves configuring message properties, setting up a LocaleResolver to handle locale changes, and using Spring’s MessageSource to retrieve the correct translations based on the user's locale. With this setup, your application can serve content in multiple languages, making it accessible to a global audience.

By using Spring’s i18n features, you can easily manage and serve localized messages in your controllers and views, providing a seamless internationalized user experience

Similar Questions