[fpc-pascal] GetLocaleInfo returns ZZZ

Henry Vermaak henry.vermaak at gmail.com
Wed Feb 28 10:58:55 CET 2018


On Wed, Feb 21, 2018 at 12:11:10PM +0100, Darius Blaszyk wrote:
> On my machine getlocaleinfo returns ZZZ when requesting the abbrev
> langname. The country code is correctly set to NL. This makes
> gettext.GetLanguageIDs return zz_NL. What could be causing this?
> 
> Also the behavior of GetLocaleInfoIDs does not seem to be according to
> the gettext manual. On windows the locale is determined by the Win API
> and on all other platforms the environment variables are checked as
> they are described in the manual but the first LANGUAGE env var is not
> probed and followed. This env var gives the preferred order of
> translations.

The Windows implementation of GetLanguageIDs() in gettext.pp is not
right.  It uses GetLocaleInfo() with LOCALE_SABBREVLANGNAME and
LOCALE_SABBREVCTRYNAME where it should probably be using
LOCALE_SISO639LANGNAME and LOCALE_SISO3166CTRYNAME, respectively.  The
*_SISO* constants work on Windows 98 and later, maybe that was the
reason for using *_SABBREV* originally.

I guess the fix belongs in FPC, but it can also be fixed in lazarus,
which overrides GetLanguageIDs() for darwin already.  Have a look at
LazGetLanguageIDs() in lazutf8.pas.  I override the lot of them and then
call SetDefaultLang() in LCLTranslator.pas.

For reference, the reason I had to fix it was because of the language
codes for Chinese don't agree (CHS/CHT vs zh) and I didn't want to
duplicate the locale directories.  There's a table here:

http://archives.miloush.net/michkap/archive/2005/02/17/375235.html

Henry


More information about the fpc-pascal mailing list