Archive: $LANGUAGE is always English


$LANGUAGE is always English
Quote from NSIS documentation:
When the installer starts up it goes through these steps to select the interface language:
1. Get user's default Windows language
2. Find a perfect match for the language
3. If there is no perfect match, find a primary language match
4. If there is no match, use the first language defined in the script (make sure your first language is a common one like English)

I don't see how this could be misinterpreted but maybe I've done it.

My problem is:
In my script I load English.nlf and Croatian.nlf but although the default language on my system is Croatian, $LANGUAGE always gets English.

This would pose no problem if I was using LangDLL but due to nature of my 'installer', I don't want the user to select the language, I want it done automatically.

I achieved this by getting user's lang. ID through system plugin and setting $LANGUAGE manually. Now everything works just fine.

So why am I posting this?
I want to know what it is that I'm failing to understand. Croatian lang. ID is 1050, ID defined in croatian.nlf is 1050, kernel32::GetSystemDefaultLangID() returns 1050... so after I load croatian.nlf why does the installer decide that Croatian is not a perfect match?

The script is attached if anyone is interested.


Oops... now the script is attached.


It has changed and the documentation wasn't updated. The first selection is now the user's UI language as specified by GetUserDefaultUILanguage.

You can use the following in .onInit to get the old behavior.

System::Call kernel32::GetSystemDefaultLangID()i.a

So that's it. Thanks.