From d2571ea76ae5a9ccb7053bfec24bf3aedd366084 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Thu, 13 Nov 2025 00:31:10 +0000 Subject: [PATCH] 8371339: Illegal pattern char 'B' with locale.providers as HOST on macOS for Taiwanese Reviewed-by: jlu, rriggs --- .../provider/HostLocaleProviderAdapterImpl.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/java.base/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java b/src/java.base/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java index e587ee54097..e24a986782d 100644 --- a/src/java.base/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java +++ b/src/java.base/macosx/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -874,6 +874,17 @@ public class HostLocaleProviderAdapterImpl { sb.append('\''); break; + case 'B': + // 'B' character (day period) is not supported by SimpleDateFormat, + // this is a workaround in which 'B' character + // appearing in macos' pattern string (based on LDML) is replaced + // with 'a' character and hence resolved with am/pm strings. + // This workaround is based on the fallback mechanism + // specified in LDML spec for 'B' character, when a locale + // does not have data for day period ('B') + appendN('a', count, sb); + break; + default: appendN(cldrLetter, count, sb); break;