How to Use Locale for Internationalization
Internationalization (i18n) involves designing applications so that they can be adapted to different languages, regions, and cultures. In Java, the Locale class is a fundamental part of i18n. It represents a specific geographical, political, or cultural region and is used in conjunction with various APIs to format dates, numbers, and text according to a specific […]
Artikel oleh Wayan · Sumber: Kode Java ↗
Terjemahan artikel ini belum tersedia. Isi asli ditampilkan.
Internationalization (i18n) involves designing applications so that they can be adapted to different languages, regions, and cultures. In Java, the Locale class is a fundamental part of i18n. It represents a specific geographical, political, or cultural region and is used in conjunction with various APIs to format dates, numbers, and text according to a specific locale.
Here are the basic steps to use Locale for internationalization:
1. Creating a Locale
You can create a Locale object in a few different ways:
package org.kodejava.util;
import java.util.Locale;
public class LocaleExample {
public static void main(String[] args) {
// Using predefined constants
Locale defaultLocale = Locale.getDefault(); // System default locale
Locale usLocale = Locale.US; // United States
// Using constructors
Locale customLocale = new Locale("fr", "FR"); // French (France)
// Using Locale.Builder (for more control)
Locale builderLocale = new Locale.Builder()
.setLanguage("de") // German
.setRegion("DE") // Germany
.build();
System.out.println("Default Locale: " + defaultLocale);
System.out.println("US Locale: " + usLocale);
System.out.println("Custom Locale: " + customLocale);
System.out.println("Builder Locale: " + builderLocale);
}
}
2. Using Locale with Date/Time Formatting
Locale is commonly used to format dates and times in a way that is familiar to a specific region:
package org.kodejava.util;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateLocalizationExample {
public static void main(String[] args) {
Date now = new Date();
// Formatting date in French (France)
Locale frenchLocale = new Locale("fr", "FR");
DateFormat frenchDateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, frenchLocale);
System.out.println("Date in French: " + frenchDateFormatter.format(now));
// Formatting date in German (Germany)
Locale germanLocale = new Locale("de", "DE");
DateFormat germanDateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, germanLocale);
System.out.println("Date in German: " + germanDateFormatter.format(now));
}
}
3. Using Locale with Numbers and Currency Formatting
The NumberFormat class allows you to format numbers and currencies according to a locale:
package org.kodejava.util;
import java.text.NumberFormat;
import java.util.Locale;
public class NumberLocalizationExample {
public static void main(String[] args) {
double amount = 12345.67;
// Format currency in US locale
Locale usLocale = Locale.US;
NumberFormat usFormatter = NumberFormat.getCurrencyInstance(usLocale);
System.out.println("In US: " + usFormatter.format(amount));
// Format currency in Japanese locale
Locale japanLocale = Locale.JAPAN;
NumberFormat japanFormatter = NumberFormat.getCurrencyInstance(japanLocale);
System.out.println("In Japan: " + japanFormatter.format(amount));
}
}
4. Internationalizing Messages with ResourceBundles
For text and messages, Java provides the ResourceBundle class, which allows you to store localized strings in property files.
- Create Properties Files (e.g.,
messages_en_US.properties,messages_fr_FR.properties):# messages_en_US.properties greeting=Hello farewell=Goodbye# messages_fr_FR.properties greeting=Bonjour farewell=Au revoir - Read ResourceBundle Based on Locale:
package org.kodejava.util; import java.util.Locale; import java.util.ResourceBundle; public class ResourceBundleExample { public static void main(String[] args) { // Locale for English (US) Locale usLocale = new Locale("en", "US"); ResourceBundle bundleUS = ResourceBundle.getBundle("messages", usLocale); System.out.println("US Greeting: " + bundleUS.getString("greeting")); System.out.println("US Farewell: " + bundleUS.getString("farewell")); // Locale for French (France) Locale frLocale = new Locale("fr", "FR"); ResourceBundle bundleFR = ResourceBundle.getBundle("messages", frLocale); System.out.println("French Greeting: " + bundleFR.getString("greeting")); System.out.println("French Farewell: " + bundleFR.getString("farewell")); } }
5. Switching Locales Dynamically
You can dynamically switch between different locales at runtime, based on user preferences or system settings:
package org.kodejava.util;
import java.util.Locale;
public class LocaleSwitcher {
public static void setLocale(String language, String country) {
Locale.setDefault(new Locale(language, country));
}
public static void main(String[] args) {
// Default locale
System.out.println("Default Locale: " + Locale.getDefault());
// Switch to French
setLocale("fr", "FR");
System.out.println("Current Locale: " + Locale.getDefault());
// Perform locale-specific operations...
// Switch back to English
setLocale("en", "US");
System.out.println("Current Locale: " + Locale.getDefault());
// Perform locale-specific operations...
}
}
Key Points:
- The
Localeobject is essential for tailoring applications for specific languages and regions. - Utilize
DateFormat,NumberFormat, andResourceBundlefor locale-based formatting and localized messages. - Keep localized data (like messages) in separate resource files (
.properties) to facilitate easier translation. - Avoid hardcoding language-specific content directly in the code—this ensures maintainability and scalability.
