ICU: use uloc_getDefault() for initdb.

Simpler, and better preserves the locale name as read from the
environment.

Author: Daniel Verite
Discussion: https://postgr.es/m/a6204a46-c077-451b-8f9d-8965d95bb57c@manitou-mail.org
This commit is contained in:
Jeff Davis 2023-05-26 11:26:11 -07:00
parent 7a844c77ec
commit ec1264f01e
1 changed files with 2 additions and 31 deletions

View File

@ -2354,42 +2354,13 @@ icu_validate_locale(const char *loc_str)
}
/*
* Determine default ICU locale by opening the default collator and reading
* its locale.
*
* NB: The default collator (opened using NULL) is different from the collator
* for the root locale (opened with "", "und", or "root"). The former depends
* on the environment (useful at initdb time) and the latter does not.
* Determine the default ICU locale
*/
static char *
default_icu_locale(void)
{
#ifdef USE_ICU
UCollator *collator;
UErrorCode status;
const char *valid_locale;
char *default_locale;
status = U_ZERO_ERROR;
collator = ucol_open(NULL, &status);
if (U_FAILURE(status))
pg_fatal("could not open collator for default locale: %s",
u_errorName(status));
status = U_ZERO_ERROR;
valid_locale = ucol_getLocaleByType(collator, ULOC_VALID_LOCALE,
&status);
if (U_FAILURE(status))
{
ucol_close(collator);
pg_fatal("could not determine default ICU locale");
}
default_locale = pg_strdup(valid_locale);
ucol_close(collator);
return default_locale;
return pg_strdup(uloc_getDefault());
#else
pg_fatal("ICU is not supported in this build");
#endif