Some ICU Locale/LocaleBuilder/LocaleMatcher API docs, tests, and implementation details use the term “grandfathered” for certain language tags, in accordance with the BCP 47 spec and data.
It turns out that this well-known “term originated in late nineteenth-century legislation and constitutional amendments passed by a number of U.S. Southern states [...] The intent and effect of such rules was to prevent poor and illiterate African-American former slaves and their descendants from voting, but without denying poor and illiterate whites the right to vote.” (https://en.wikipedia.org/wiki/Grandfather_clause)
We cannot (easily) change BCP 47, and cannot/should not change the language subtag registry (in order not to break parsers).
I propose that we rephrase our API docs and code comments to use something like
legacy (“grandfathered” in BCP 47)
and rename test cases and variables accordingly. (BCP 47 does not use “legacy” so there is no conflict.)
https://www.rfc-editor.org/info/bcp47 → https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.8 “Grandfathered and Redundant Registrations”
Check with Mark (BCP 47 co-author) on terminology.
Check with CLDR on use of “grandfathered” there. Yoshito to create a ticket there.
Filed for discussing the use of the term in CLDR.
I want to fix this in ICU 68 but am not getting a timely resolution from CLDR. So here is my ICU PR anyway: