Re: ICU locale validation / canonicalization

Peter Eisentraut <peter.eisentraut@enterprisedb.com>

From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: Jeff Davis <pgsql@j-davis.com>, pgsql-hackers@postgresql.org
Date: 2023-02-09T14:44:56Z
Lists: pgsql-hackers
On 08.02.23 08:59, Jeff Davis wrote:
> The overall benefit here is that we keep our catalogs consistently
> using an independent standard format for ICU locale strings, rather
> than whatever the user specifies. That makes it less likely that ICU
> needs to use any fallback logic when trying to open a collator, which
> could only be bad news.

One use case is that if a user specifies a locale, say, of 'de-AT', this 
might canonicalize to 'de' today, but we should still store what the 
user specified because 1) that documents what the user wanted, and 2) it 
might not canonicalize to the same thing tomorrow.




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.