NSIS How to get user selected language without using registry function
This is an example based on my custom needed to rename config file for my application based on language selection by user during setup 
First onInit function you must pop $LANGUAGE variable on global stack as you can retrive it later.
Function .onInit
....
....
!insertmacro MUI_LANGDLL_DISPLAY
 Pop $LANGUAGE
FunctionEnd
Then on interested section you wite your custom language files (D_MyApp..... E_MyApp.... F_MyApp...)
Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite try
  SetDetailsPrint none
  SetShellVarContext all
  File "D:\projects\xxxxx\MyApp_v32_09082013\D_MyApp.exe.config"
  File "D:\projects\xxxxx\MyApp_v32_09082013\E_MyApp.exe.config"
  File "D:\projects\xxxxx\MyApp_v32_09082013\F_MyApp.exe.config"
 Here you compare $LANGUAGE with  LCID value  (see http://www.science.co.il/Language/Locale-codes.asp  for reference)
If selected language match then rename file else continue if statement
  StrCmp $LANGUAGE '1031' customGerman noDE
  customGerman:
  Rename "$INSTDIR\D_MyApp.exe.config" "$INSTDIR\MyApp.exe.config"
  goto languageSettingsDone
  
  noDE:
  StrCmp $LANGUAGE '1033' customEnglish noEN
  customEnglish:
  Rename "$INSTDIR\E_MyApp.exe.config" "$INSTDIR\MyApp.exe.config"
  goto languageSettingsDone
  noEN:
  StrCmp $LANGUAGE '1036' customFrench noFR
  customFrench:
  Rename "$INSTDIR\F_MyApp.exe.config" "$INSTDIR\MyApp.exe.config"
  goto languageSettingsDone
  
  noFR:
  goto languageSettingsDone
  
  languageSettingsDone:
....
....
....
;Contiune with other files
If this short giude has been usefull for you please leave comment
 
