Internationalization is the process of designing software so that it can be adapted (localized) to various languages and regions easily, cost-effectively, and in particular without engineering changes to the software. Localization is performed by simply adding locale-specific components, such as translated text, data describing locale-specific behavior, fonts, and input methods.
In the Java SE Platform, internationalization support is fully integrated into the classes and packages that provide language- or culture-dependent functionality. The following sections outline the most important internationalized areas of functionality in core, desktop, enterprise, and mobile Java.
Core Java Internationalization
Core Java provides the foundation for internationalization of desktop and server applications.
- Text representation: the Java programming language is based on the Unicode character set, and several libraries implement the Unicode standard.
- Locale identification and localization: Locales in the Java SE platform are just identifiers that can be used to request locale specific behavior in many different areas of functionality. Localization is supported at the most basic level by the ResourceBundle class, which provides access to locale specific objects, including strings.
- Date and time handling: The Java SE platform provides various calendars, and supports conversion to and from calendar independent Date objects. All time zones in the world are supported.
- Text processing includes character analysis and case mapping, string comparison, breaking text into words and lines, as well as formatting numbers, dates, and time values into strings or parsing them back from strings. Most of these functions are locale dependent.
- Character encoding conversion supports converting text between Unicode and other character encodings when reading incoming text from streams or writing outgoing text to streams.
See the documentation:
- Internationalization Tutorial
- Timezone Data, Daylight Savings Time, and the Java Runtime Environment
- Code Samples & Apps
Desktop Java Internationalization
The user interface libraries in the Java SE platform enable the development of rich interactive applications. Internationalization aspects include:
- Text input is the process of entering new text into a document - in the simplest case through typing on a keyboard, but often involving front-end software such as input methods, handwriting recognition, or speech input.
- Text display is a multistep process that includes selecting a font, arranging text into paragraphs and lines, selecting glyphs for characters or character sequences, and rendering these glyphs. Some writing systems require bidirectional text layout for Arabic and Hebrew, or complex character-to-glyph mappings for Arabic, Thai, and the scripts of India. Text display is handled by the Java 2D graphics system and the Swing toolkit for lightweight user interface components; by AWT for peered user interface components.
- User interface layout needs to accommodate text expansion or shrinkage caused by localization, and match the direction of the user's writing system. For example, English-speaking users expect the tools in a tool bar to be organized from left to right, but users of a right-to-left language such as Arabic expect the tools to be organized from right to left.
See the documentation:
Enterprise Java Internationalization
The J2EE technologies build on the internationalization foundation provided by Core Java. Of particular interest are the web tier technologies:
Mobile Java Internationalization
The J2ME configurations (Connected Limited Device Configuration and Connected Device Configuration) provide subsets of the internationalized APIs in Core Java. The layered profiles complement these with subsets of the Desktop Java APIs (Personal Profile, Personal Basis Profile), or provide their own internationalized APIs (Mobile Information Device Profile, Mobile Internationalization API).