LANG_ENGLISH undefined for MUI when compiling with NSIS 3.0
<p>I just upgraded from <a href="https://sourceforge.net/projects/nsis/files/NSIS%202/2.51/" rel="nofollow">NSIS 2.51</a> to <a href="https://sourceforge.net/projects/nsis/files/NSIS%203/3.0/" rel="nofollow">NSIS 3.0</a>, mainly because the new version <a href="http://nsis.sourceforge.net/Docs/AppendixF.html#v3.0" rel="nofollow">supports Windows 10</a>.</p>

<p>For my installer I'm using the <a href="http://nsis.sourceforge.net/Docs/Modern%20UI/Readme.html" rel="nofollow">Modern User Interface (MUI)</a>. I make use of some custom pages. According to the <a href="http://nsis.sourceforge.net/Docs/Modern%20UI/Readme.html" rel="nofollow">documentation</a>, I'm using the <code>MUI_HEADER_TEXT</code> macro to set the text on the page header in my custom page functions, for example:</p>

<pre><code>[...]
Page custom InstallType

LangString PAGE_INSTALL_TYPE_TITLE ${LANG_ENGLISH} "Installation Type"
LangString PAGE_INSTALL_TYPE_SUBTITLE ${LANG_ENGLISH} "Choose installation type."

Function InstallType
    !insertmacro MUI_HEADER_TEXT $(PAGE_INSTALL_TYPE_TITLE) $(PAGE_INSTALL_TYPE_SUBTITLE)
    [...]
</code></pre>

<p>At end of my installer script I also added the following line:</p>

<pre><code>!insertmacro MUI_LANGUAGE "English"
</code></pre>

<p>On Windows 7, this compiles without any warning when using NSIS 2.51 (and below). However, when compiling with NSIS 3.0, I get the following warning for each of the <code>LangString</code> lines:</p>

<blockquote>
  <p>"${LANG_ENGLISH}" is not a valid language id, using language id 1033! [...]</p>
</blockquote>

<p>It seems that <code>LANG_ENGLISH</code> is no longer defined when using NSIS 3.0. I can get rid of the warning by adding the following line to my installer script:</p>

<pre><code>!define LANG_ENGLISH 1033
</code></pre>

<p>But what am I supposed to do to fix this issue in the correct way for NSIS 3.0?</p>

<hr>

<p><strong>Minimal, complete, and verifiable example with 4 pages (2 custom pages):</strong></p>

<pre><code>!include "MUI2.nsh"

; Page 1.
!insertmacro MUI_PAGE_WELCOME

; Page 2.
Page custom InstallType

LangString PAGE_INSTALL_TYPE_TITLE ${LANG_ENGLISH} "Installation Type"
LangString PAGE_INSTALL_TYPE_SUBTITLE ${LANG_ENGLISH} "Choose installation type."

Function InstallType
  !insertmacro MUI_HEADER_TEXT $(PAGE_INSTALL_TYPE_TITLE) $(PAGE_INSTALL_TYPE_SUBTITLE)
  nsDialogs::Create /NOUNLOAD 1018
  Pop $0
  ${If} $0 == error
    Abort
  ${EndIf}
  ${NSD_CreateLabel} 0 4u 100% 12u "Custom page one"
  Pop $0
  nsDialogs::Show
FunctionEnd

; Page 3.
Page custom InstallVersion

LangString PAGE_VERSION_TITLE ${LANG_ENGLISH} "Version"
LangString PAGE_VERSION_SUBTITLE ${LANG_ENGLISH} "Choose version."

Function InstallVersion
  !insertmacro MUI_HEADER_TEXT $(PAGE_VERSION_TITLE) $(PAGE_VERSION_SUBTITLE)
  nsDialogs::Create /NOUNLOAD 1018
  Pop $0
  ${If} $0 == error
    Abort
  ${EndIf}
  ${NSD_CreateLabel} 0 4u 100% 12u "Custom page two"
  Pop $0
  nsDialogs::Show
FunctionEnd

; Page 4.
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"
</code></pre>

<p>I know, having the <code>MUI_LANGUAGE</code> line at the end of the script looks strange. However, I can't put that line earlier into the script, because then I get the following warning:</p>

<blockquote>
  <p>MUI_PAGE_* inserted after MUI_LANGUAGE [...]</p>
</blockquote>

<p>If I put the <code>MUI_LANGUAGE</code> line even before <code>!insertmacro MUI_PAGE_WELCOME</code>, then I also get the following warning:</p>

<blockquote>
  <p>MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros [...]</p>
</blockquote>