<i18n dev> RFR: 8378723: Locale variant delimiter is unclear

Naoto Sato naoto at openjdk.org
Fri Feb 27 22:49:18 UTC 2026


On Fri, 27 Feb 2026 21:58:56 GMT, Justin Lu <jlu at openjdk.org> wrote:

> Locale APIs which accept BCP 47 tags use hyphen for multiple variant subtags. Locale APIs that accept multiple (non BCP 47 subtag) variants use underscores. For example,
> 
> `Locale.of` supports multiple variants separated by underscore.
> `Locale.forLanguageTag` supports multiple variants separated by hyphen.
> `Locale.Builder.setLanguageTag` supports multiple variants separated by hyphen.
> `Locale.Builder.setVariant` supports multiple variants separated by either underscore or hyphen. 
> 
> The current wording is not detailed enough and implies both formats are interchangeable within `Locale`. This PR updates the wording to make this more apparent. Note that I left the constructor behavior out in the new wording as to not call attention to it.

src/java.base/share/classes/java/util/Locale.java line 182:

> 180:  *   BCP 47 language tags expect as such. However, {@link Locale.Builder#setVariant(String)}
> 181:  *   also supports underscore ('_') and {@link Locale#of(String, String, String)}
> 182:  *   only supports underscore ('_').</dd>

I think this behavior is to accommodate the JDK's own variants prior to BCP47. So adding something like " for backward compatibility" would be helpful.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/29970#discussion_r2866530377


More information about the i18n-dev mailing list