|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
JDK-8185647 :
|
Summary
-------
Enhance `java.util.Locale` and related APIs to implement additional Unicode extensions of BCP 47 language tags.
Goals
-----
Support for [BCP 47][bcp47] language tags was was initially [added in Java SE 7][1], with support for the Unicode locale extension limited to calendars and numbers. This JEP will implement more of the extensions specified in the latest [LDML specification][2], in the relevant JDK classes.
Non-Goals
---------
Unicode language-tag extensions other than those described below will be ignored.
Description
-----------
As of Java SE 9, the [supported BCP 47 U language-tag extensions][3] are `ca` and `nu`. This JEP will add support for the following additional extensions:
- `cu` (currency type)
- `fw` (first day of week)
- `rg` (region override)
- `tz` (time zone)
In order to support these additional extensions, changes will be made to the following APIs:
- `java.text.DateFormat::get*Instance` will return instances based on the extensions `ca`, `rg` and/or `tz`
- `java.text.DateFormatSymbols::getInstance` will return instances based on the extension `rg`
- `java.text.DecimalFormatSymbols::getInstance` will return instances based on the extension `rg`
- `java.text.NumberFormat::get*Instance` will return instances based on the extensions `nu` and/or `rg`
- `java.time.format.DateTimeFormatter::localizedBy` will return `DateTimeFormatter` instances based on the extensions `ca`, `rg`, and/or `tz`
- `java.time.format.DateTimeFormatterBuilder::getLocalizedDateTimePattern` will return pattern string based on the `rg` extension.
- `java.time.format.DecimalStyle::of` will return `DecimalStyle` instances based on the extensions `nu`, and/or `rg`
- `java.time.temporal.WeekFields::of` will return `WeekFields` instances based on the extensions `fw` and/or `rg`
- `java.util.Calendar::{getFirstDayOfWeek,getMinimalDaysInWeek}` will return values based on the extensions `fw` and/or `rg`
- `java.util.Currency::getInstance` will return `Currency` instances based on the extensions `cu` and/or `rg`
- `java.util.Locale::getDisplayName` will return a string that includes display names for these U extensions
- `java.util.spi.LocaleNameProvider` will have new SPIs for the keys and types of these U extensions
Risks and Assumptions
---------------------
The display names returned from `Locale::getDisplayName` depend on the localized data provided by each locale provider.
[1]: http://openjdk.java.net/projects/locale-enhancement/
[2]: http://www.unicode.org/reports/tr35/tr35.html#Locale_Extension_Key_and_Type_Data
[3]: http://www.oracle.com/technetwork/java/javase/documentation/java9locales-3559485.html
[bcp47]: http://www.rfc-editor.org/rfc/bcp/bcp47.txt
|