Re: ICU locale validation / canonicalization

Andreas Karlsson <andreas@proxel.se>

From: Andreas Karlsson <andreas@proxel.se>
To: Jeff Davis <pgsql@j-davis.com>, Robert Haas <robertmhaas@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2023-02-10T00:04:57Z
Lists: pgsql-hackers
On 2/9/23 23:09, Jeff Davis wrote:
> I do like the ICU format locale IDs from a readability standpoint.
> "en_US@colstrength=primary" is more meaningful to me than "en-US-u-ks-
> level1" (the equivalent language tag). And the format is specified[1],
> even though it's not an independent standard. But I think the benefits
> of better validation, an independent standard, and the fact that we're
> already favoring BCP47 outweigh my subjective opinion.

I have the same feeling one is readable and the other unreadable but the 
unreadable one is standardized. Hard call.

And in general I agree, if we are going to make ICU default it needs to 
be more user friendly than it is now. Currently there is no nice way to 
understand if you entered the right locale or made a typo in the BCP47 
syntax.

Andreas




Commits

  1. Add missing source file to nls.mk

  2. Fix MSVC warning introduced in ea1db8ae70.

  3. Canonicalize ICU locale names to language tags.

  4. Validate ICU locales.

  5. initdb: emit message when using default ICU locale.

  6. initdb: replace check_icu_locale() with default_icu_locale().

  7. Fix error inconsistency in older ICU versions.

  8. Avoid potential UCollator leak for older ICU versions.

  9. pg_locale.c: change ereport() to elog().

  10. Handle the "und" locale in ICU versions 54 and older.

  11. Wrap ICU ucol_open().

  12. Support language tags in older ICU versions (53 and earlier).

  13. Improve support for UNICODE collation on older ICU

  14. Use ICU by default at initdb time.