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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal