2016-08-10 17 views
0

NSIS 2.51からNSIS 3.0へのアップグレードは、主に新しいバージョンsupports Windows 10です。NSIS 3.0でコンパイルするときにLANG_ENGLISHが定義されていません

私のインストーラではModern User Interface (MUI)を使用しています。私はいくつかのカスタムページを利用しています。 documentationによると、私は例えば、私のカスタムページ機能でページヘッダーにテキストを設定するマクロMUI_HEADER_TEXTを使用しています:

[...] 
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) 
    [...] 

私のインストーラスクリプトの終わりに私はまた、次の行を追加しました

!insertmacro MUI_LANGUAGE "English" 

Windows 7では、NSIS 2.51(以下)を使用しているときに、これは警告なしでコンパイルされます。しかし、NSIS 3.0でコンパイルするとき、私はLangStringラインのそれぞれについて、次のような警告が出ます:

「$ {} LANG_ENGLISH」言語ID 1033を使用して、有効な言語IDではありません! [...]

NSIS 3.0を使用すると、LANG_ENGLISHは定義されていないようです。

!define LANG_ENGLISH 1033 

しかし、私はNSIS 3.0のための正しい方法でこの問題を解決するために何をすべきかを想定しています:私は私のインストーラスクリプトに次の行を追加することで警告を取り除くことができますか? 4ページ(2カスタム・ページ)と


、最小完全、かつ検証例:私は知っている

!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" 

は、スクリプトの最後にMUI_LANGUAGEラインを持つことは奇妙に見えます。 MUI_LANGUAGE後に挿入

MUI_PAGE_ * [...]

私はMUI_LANGUAGEラインを置く場合:その後、私は次の警告を得るしかし、私は、スクリプトに早くその行を置くことができません

MUI_LANGUAGEがMUI_ [UN] PAGE_ *マクロの後に挿入する必要があります

[...]

:でも !insertmacro MUI_PAGE_WELCOME前に、私はまた、次の警告を取得します0

答えて

3

警告はNSIS 3では新しくコンパイラの動作は変更されていませんが、LANG_ENGLISHはNSIS 2のその時点では定義されていません。

警告があなたに何が起こっているかについてのヒントを与える:コンパイラがLangString文になると、コンパイラは数に文字列${LANG_ENGLISH}を変換しようと、それが失敗し、番号変換機能ようLANG_ENGLISHはまだ定義されていませんLangStringのドキュメントを見ると、言語IDとして0を渡すと、最後に使用/読み込まれた言語が使用されることがわかります。この時点で言語がロードされていない場合は、デフォルトの言語が残っており、それは英語です。

LANG_xyzの定義は、LoadLanguageFile命令によって作成され、xyz.nlfをロードするときに使用されます。あなたのソリューションは、マクロMUI_LANGUAGE以下LangString文を移動するだけであるので、MUIは、そのMUI_LANGUAGEマクロ内LoadLanguageFileを呼び出します。

!include MUI2.nsh 

Page Custom MyPageCreate 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE "English" 

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

Function MyPageCreate 
!insertmacro MUI_HEADER_TEXT $(PAGE_INSTALL_TYPE_TITLE) $(PAGE_INSTALL_TYPE_SUBTITLE) 
nsDialogs::Create 1018 
Pop $0 
${If} $0 == error 
    Abort 
${EndIf} 
${NSD_CreateLabel} 0 0 100% 12u "Hello world!" 
Pop $0 
nsDialogs::Show 
FunctionEnd 
+0

ありがとう、アンダース。私はMUIの 'insertmacro'行、' LangString'行、ページ関数を混在させました。私はあなたが言ったようにすべてを並べ替え、今警告がなくなった。スクリプトはまだ動作しています;) – honk

+0

注文は本当に厳格ではありません。関数はMUI.Hshの後に来なければなりません。MUI_HEADER_TEXTが存在し、$ {LANG_XYZ}を使用している場合はMUI_LANGUAGEの後にLangString ... – Anders

+0

が表示されます。私の主な問題は、3つのカスタムページがあり、ページに属するすべてのコマンドをグループ化していたことでした。 – honk

1

言語ストリングを定義する前に、マクロを挿入する必要があります。言語定義の前にマクロを挿入し、使用する前にマクロを挿入します。

!insertmacro MUI_LANGUAGE "English" 

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

私が覚えている限りでは、これはNSIS 2には何が違うのではない - 多分それは新しいです警告です。

+0

あなたが示唆したように、私は、コマンドの順序を変更してみました。 'MUI_ [UN] PAGE_ * macros'の後ろに' MUI_LANGUAGEを挿入する必要があるので、すべてのコマンドの順番を誤解しているようです。私はMUI定義を対応するページ関数の前に直接置いていたので、次に 'MUI_LANGUAGE'行の前にそれらを一緒に移動しようとします。 – honk

関連する問題