2. Contents
Introduction
Locale Class
Displaying Date and Time
Formatting Numbers
Resource Bundles
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
3. Introduction
Problem of customizing a program or page for different
countries or languages.
It would be highly problematic to create and maintain
enough different versions to meet the needs of all clients
everywhere.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
4. Internationalization
Internationalization is the process of designing an
application so that it can be adapted to various languages
and regions without engineering changes.
Java is the first language designed to support
Internationalization.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
5. Characteristics
An internationalized program has the following characteristics:
1. With the addition of localized data, the same executable can run
worldwide.
2. Textual elements, such as status messages and the GUI component
labels, are not hardcoded in the program. Instead they are stored
outside the source code and retrieved dynamically.
3. Support for new languages does not require recompilation.
4. Culturally-dependent data, such as dates and currencies, appear in
formats that conform to the end user's region and language.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
6. Java Features to Support
Internationalization
1. Unicode
2. Locale Class
3. Resource Bundles
Note: Java characters use Unicode, a 16-bit encoding scheme
established by the Unicode Consortium to support the interchange,
processing, and display of written texts in the world’s diverse
languages.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
7. LocaLe cLass
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
8. Locale
A Locale object represents a geographical, political, or cultural
region in which a specific language or custom is used.
For example, Americans speak English, and the Chinese speak
Chinese.
The conventions for formatting dates, numbers, and currencies
may differ from one country to another.
For example, The Chinese use year/month/day to represent the
date, while Americans use month/day/year.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
9. Locale
Locale class encapsulates information about a specific locale.
A Locale object determines how locale-sensitive information,
such as date, time, and number, is displayed.
The classes for formatting date, time, and numbers, and for
sorting strings are grouped in the java.text package.
Every Swing class has a locale property inherited from the
Component class.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
11. Language and Country Codes
Country Country Code Language Code
Spain ES es
Denmark DK da
Germany DE de
Greece GR el
China CN zh
Sweden SE sv
France FR fr
Norway NO no
Japan JP ja
United Kingdom GB en
Korea KR ko
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
12. Methods of Locale Class
String getCountry()
String getLanguage()
String getVariant()
Locale getDefault()
String getDisplayCountry()
String getDisplayLanguage()
String getDisplayName()
String getDisplayVariant()
Locale[] getAvailableLocales()
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
13. Locale Constants
Predefined Country Constants
Locale.US, Locale.UK, Locale.FRANCE, Locale.GERMANY,
Locale.ITALY, Locale.CHINA, Locale.KOREA, Locale.JAPAN
Predefined Language Constants
Locale.CHINESE, Locale.ENGLISH, Locale.FRENCH,
Locale.GERMAN, Locale.ITALIAN, Locale.JAPANESE,
Locale.KOREAN, Locale.SIMPLIFIED_CHINESE, and
Locale.TRADITIONAL_CHINESE
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
14. Displaying Time and Date
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
15. Displaying Date and Time
Java provides a system independent encapsulation of date
and time in the java.util.Date class.
It also provides java.util.TimeZone class for dealing with
time zones.
java.util.Calendar can be used for extracting detailed
information from Date.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
16. TimeZone Class
TimeZone is an abstract class.
Constructor:
There is only default Constructor for TimeZone.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
17. Methods of TimeZone Class
static String[] getAvailableIDs()
used to find all the available time-zones supported in Java.
static TimeZone getDefault()
used to obtain the default time-zone on host machine.
static TimeZone getTimeZone(String ID)
used to get TimeZone object for specified TimeZoneID.
String getID()
This method gets the ID of this time zone.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
18. DateFormat Class
An abstract class for date/time formatting subclasses which formats
and parses dates or time in a language-independent manner.
Constructor:
protected DateFormat()
Constants:
SHORT is completely numeric, such as 01.12.52 or 3:30pm
MEDIUM is longer, such as Jan 12, 1952
LONG is even longer, such as January 12, 1952 or 3:30:32pm
FULL is pretty completely specified, such as Tuesday, April 12, 1952
AD or 3:30:42pm IST.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
19. Methods of DateFormat Class
String format(Date date)
Formats a Date into a date/time string.
static DateFormat getInstance()
Get a default date/time formatter that uses the SHORT style for both
the date and the time.
void setTimeZone(TimeZone zone)
Sets the time zone for the calendar of this DateFormat object.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
20. Methods of DateFormat Class
static DateFormat getDateInstance()
Gets the date formatter with the default formatting style for the default
locale.
static DateFormat getDateInstance(int style)
Gets the date formatter with the given formatting style for the default
locale.
static DateFormat getDateInstance(int style, Locale aLocale)
Gets the date formatter with the given formatting style for the given
locale.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
21. Methods of DateFormat Class
static DateFormat getDateTimeInstance()
Gets the date/time formatter with the default formatting style for the
default locale.
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
Gets the date/time formatter with the given date and time formatting styles
for the default locale.
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle,
Locale aLocale)
Gets the date/time formatter with the given formatting styles for the given
locale.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
22. SimpleDateFormat Class
Defined in java.text package.
Enables to choose any user-defined pattern for date and time
formatting.
public SimpleDateFormat(String Pattern)
Example: SimpleDateFormat formatter = new
SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
Note: G represents Era designator, and z is TimeZone.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
26. Formatting Numbers
Numbers are formatted using an abstract base class
java.text.NumberFormat .
Formatting numbers is highly locale dependent.
Number: 5000.555
United States: 5,000.555
France: 5000,555
Germany: 5.000,555
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
28. Methods
format (number: double): String
format (number: long): String
getMaximumFractionDigits(): int
setMaximumFractionDigits(newValue: int): void
getMinimumFractionDigits(): int
setMinimumFractionDigits(newValue: int): void
getMaximumIntegerDigits(): int
setMaximumIntegerDigits(newValue: int): void
getMinimumIntegerDigits(): int
setMinimumIntegerDigits(newValue: int): void
parse(source: String): Number
getAvailableLocales(): Locale[]
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
29. Formatting Numbers
Plain Number Format:
NumberFormat nf = NumberFormat.getInstance(Locale l);
System.out.println(nf.format(1010.1055));
Currency Format:
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale l);
Percent Format:
NumberFormat nf = NumberFormat.getPercentInstance(Locale l);
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
30. Parsing Numbers
format(numericalValue) method is used to format a number into
a string.
parse(String) method can be used to convert a formatted
plain number, currency value, or percent number with the
conventions of a certain locale into an instance of
java.lang.Number.
The parse method throws a java.text.ParseException, if
parsing fails.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
31. Example
U.S. $5,000.56 can be parsed into a number using the following
statements:
NumberFormat currencyFormat =
NumberFormat.getCurrencyInstance(Locale.US);
try {
Number number = currencyFormat.parse("$5,000.56");
System.out.println(number.doubleValue());
}
catch (java.text.ParseException ex) {
System.out.println("Parse failed");
}
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
32. DecimalFormat Class
We can use the applyPattern(String pattern) method of the
DecimalFormat class to specify the patterns for displaying the
number.
A pattern can specify the minimum number of digits before the
decimal point and the maximum number of digits after the
decimal point.
The characters '0‘ and '#' are used to specify a required digit and
an optional digit, respectively.
The optional digit is not displayed if it is zero.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
33. Example
The pattern "00.0##" indicates minimum two digits before the
decimal point and maximum three digits after the decimal point.
If there are more actual digits before the decimal point, all of
them are displayed.
If there are more than three digits after the decimal point, the
number of digits is rounded.
Example:
1987.16920 will be formatted as: 1987.169
1389.2387 will be formatted as: 1389.239
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
35. Resource Bundles
A resource bundle is a Java class file or text file that provides
locale-specific information.
This information can be accessed by Java programs dynamically.
Resource bundles allows to write programs that separate the
locale-sensitive part of our code from the locale-independent
part.
When a locale-specific resource is needed, our program can load
it from the resource bundle appropriate for the desired locale.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
36. Resource Bundles
The resources are placed inside the classes that extend the
ResourceBundle class or a subclass of ResourceBundle.
Resource bundles contain key/value pairs.
Each key uniquely identifies a locale-specific object in the bundle.
Key is used to retrieve the object.
ListResourceBundle is a subclass of ResourceBundle that is often
used to simplify the creation of resource bundles.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
37. Example
public class MyResource extends java.util.ListResourceBundle
{
static final Object[][] contents = {
{"nationalFlag", "us.gif"},
{"nationalAnthem", "us.au"},
{"nationalColor", Color.red},
{"annualGrowthRate", new Double(7.8)}
};
public Object[][] getContents() {
return contents; }
}
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
38. Properties File
If all the resources are strings, they can be placed in a convenient
text file with the extension .properties.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
39. Resource Bundle Naming Conventions
1. BaseName_language_country_variant.class
2. BaseName_language_country.class
3. BaseName_language.class
4. BaseName.class
5. BaseName_language_country_variant.properties
6. BaseName_language_country.properties
7. BaseName_language.properties
8. BaseName.properties
The getBundle method attempts to load the class that matches the
specified locale by language, country, and variant by searching the file
names in the order shown above.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
40. Retrieving Values from Resource Bundle
To retrieve values from a ResourceBundle in a program, we need
to create an instance of ResourceBundle using one of the following
two static methods:
public static final ResourceBundle getBundle(String
baseName) throws MissingResourceException
public static final ResourceBundle getBundle (String
baseName, Locale locale) throws MissingResourceException
The first method returns a ResourceBundle for the default locale,
and second returns a ResourceBundle for the specified locale.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
41. getObject() method can be used to retrieve the value according to
the key.
ResourceBundle res = ResourceBundle.getBundle("MyResource");
String flagFile = (String)res.getObject("nationalFlag");
If the resource value is a string, then getString() method is more
convenient to use.
String flagFile = res.getString("nationalFlag");
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
43. Character Encoding
Java programs use Unicode. When we read a character using text
I/O, the Unicode code of the character is returned.
The encoding of the character in the file may be different.
Java automatically converts it to the Unicode.
When we write a character using text I/O, Java automatically
converts the Unicode of the character to the encoding specified for
the file.
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
44. Character Encoding
We can specify an encoding scheme using a constructor of
Scanner/PrintWriter for text I/O, as follows:
public Scanner(File file, String encodingName)
public PrintWriter(File file, String encodingName)
Encoding Names:
https://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.
html
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)