Quality Outreach Heads-up – JDK 27: Removal of ‘java.locale.useOldISOCodes’ System Property

原文はこちら。
This article was written by Nicolai Parlog (Java Developer Advocate at Oracle).
https://inside.java/2026/03/10/quality-heads-up/

OpenJDK Quality Groupは、リリースの全体的な品質向上の手段としてOpenJDKビルドを使ってのFOSSプロジェクトのテストを推進しています。

Quality Outreach
https://wiki.openjdk.java.net/display/quality/Quality+Outreach

このHeads upは、関係するプロジェクトに送られる定期的なコミュニケーションの一部です。

JDK 24 Release Candidate | JavaOne and More Heads-Up
https://mail.openjdk.org/pipermail/quality-discuss/2025-February/001141.html

このプログラムの詳細と参加方法については、上記wikiをご覧ください。

ISO 639 and BCP 47

1995年に初めて導入されたBCP 47は、言語を識別するためのタグを定義しており、その主要なサブタグ(複数ある可能性のあるサブタグのうち最初のもの)は、通常、はるかに古いISO 639-1規格に基づいています。ただし、例外も存在します。その例外には以下の3つの言語が含まれます:

  • ヘブライ語:
    • ISO 639:iw
    • BCP 47:he
  • インドネシア語:
    • ISO 639:in
    • BCP 47:id
  • イディッシュ語:
    • ISO 639:ji
    • BCP 47:yi

Past Preference

JDK 17以前、Javaはこれら3つの言語のISO-639タグを正規のものとして扱い、BCP 47タグをそれらにマッピングしていました(LocaleのドキュメントのLegacy language codesを参照):

Locale (Java Platform SE 8)
https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html

static void printLocales(String iso, String bcp) {
System.out.println(Locale.forLanguageTag(iso) + " | " + Locale.forLanguageTag(bcp));
}
// on JDK < 17, ISO 639 tags are preferred:
public static void main(String[] args) {
printLocales("iw", "he"); // ~> "iw | iw"
printLocales("in", "id"); // ~> "in | in"
printLocales("ji", "yi"); // ~> "ji | ji"
}

Transition

これはJDK 17で変更されました。それ以来、デフォルトの動作はBCP 47タグへのマッピングとなっています。

[JDK-8263202] Update Hebrew/Indonesian/Yiddish ISO 639 language codes to current
https://bugs.openjdk.org/browse/JDK-8263202

// on JDK 17+, BCP 47 tags are preferred:
public static void main(String[] args) {
printLocales("iw", "he"); // ~> "he | he"
printLocales("in", "id"); // ~> "id | id"
printLocales("ji", "yi"); // ~> "yi | yi"
}

アプリケーションコードを変更せずに直ちにJava 17以降に更新できるようにするため、一時的なシステムプロパティ java.locale.useOldISOCodes が導入されました。これを true に設定すると、Java 17 以前の動作に戻ります。

New Preference

java.locale.useOldISOCodesはJDK 25 で非推奨になりました。 JDK 27 で削除される予定です。このプロパティを設定すると、警告が出ます。

[JDK-8353118] Deprecate the use of `java.locale.useOldISOCodes` system property
https://bugs.openjdk.org/browse/JDK-8353118
[JDK-8355522] Remove the `java.locale.useOldISOCodes` system property
https://bugs.openjdk.org/browse/JDK-8355522

WARNING: The system property "java.locale.useOldISOCodes" is no longer supported. Any specified value will be ignored.

Code that relies on java.locale.useOldISOCodes needs to be updated to consistently expect BCP 47 tags when querying Locale instances. It will remain possible to use the ISO 639 tags to instantiate Locale instances for Hebrew, Indonesian, and Yiddish.

java.locale.useOldISOCodes に依存しているコードは、Locale インスタンスをクエリする際に、一貫してBCP 47タグを使用するように更新する必要があります。ヘブライ語、インドネシア語、イディッシュ語については、引き続きISO 639タグを使用して Locale インスタンスをインスタンス化できます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください