Darius Blaszyk wrote 10 lines
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