Files
Infra-LAB/projects/MDT/Scripts/DeployWiz_LanguageUI.vbs

549 lines
14 KiB
Plaintext

' // ***************************************************************************
' //
' // Copyright (c) Microsoft Corporation. All rights reserved.
' //
' // Microsoft Deployment Toolkit Solution Accelerator
' //
' // File: DeployWiz_LanguageUI.vbs
' //
' // Version: 6.3.8456.1000
' //
' // Purpose: Script methods used for the language UI (locale, timezone) pane
' //
' // ***************************************************************************
Option Explicit
dim g_oXMLLanguageList
Function oXMLLanguageList
If IsEmpty(g_oXMLLanguageList) then
Set g_oXMLLanguageList = oUtility.LoadConfigFileSafe( "scripts\ListOfLanguages.xml" )
End if
Set oXMLLanguageList = g_oXMLLanguageList
End function
dim g_oPackageGroup
''''''''''''''''''''''''''''''''''''''
function AddLanguage( LanugageToAdd )
Dim oLang, oOption2, sLangToAdd
' sLangToAdd = GetParentLanguageFromLocale(LanugageToAdd)
sLangToAdd = LanugageToAdd
For each oLang in oXMLLanguageList.selectNodes("//LOCALEDATA/LOCALE[IFLAGS='1' and SNAME]")
If ucase(oUtility.SelectSingleNodeString(oLang,"SNAME")) = ucase(LanugageToAdd) then
Set oOption2 = document.createElement("OPTION")
oOption2.Text = oUtility.SelectSingleNodeString(oLang,"SENGDISPLAYNAME")
If not oLang.SelectSingleNode("SNAME") is nothing then
oOption2.Value = lcase(oUtility.SelectSingleNodeString(oLang,"SNAME"))
UILanguage.add oOption2
End if
Exit for
End if
Next
End function
Function Locale_Initialization
Dim oItem
Dim oXMLPackageList
Dim FoundLocale
Dim AllreadyAddedLanguages
Dim aLangPack
Dim oOption2
Dim thisLocale
' g_sPackageDialogBox = ""
oLogging.CreateEntry "###### Locale_Initialization ###### " , LogTypeInfo
' Disable fields as appropriate
If UCase(oEnvironment.item("SkipLocaleSelection")) = "YES" then
UILanguage.Disabled = true
UserLocale_Edit.Disabled = true
KeyboardLocale_Edit.Disabled = true
ElseIf Left(oEnvironment.Item("ImageBuild"), 1) = "5" then
UILanguage.Disabled = true
End if
' Add a Language for each package selected
set oXMLPackageList = new ConfigFile
oXMLPackageList.sFileType = "Packages"
If IsInstallationUltimateEnterprise then
' Add langauges allready installed on the image.
AllreadyAddedLanguages = ""
For each oItem in oEnvironment.ListItem("ImageLanguage").Keys
If oItem <> "" then
AddLanguage oItem
AllreadyAddedLanguages = AllreadyAddedLanguages & vbTab & oItem
End if
Next
End if
aLangPack = property("LanguagePacks")
If not isArray(aLangPack) then
' Force LanguagePacks variable as an array for non Ultimate/Enterprise builds.
aLangPack = array(aLangPack)
oProperties.Item("LanguagePacks") = aLangPack
End if
For each oItem in aLangPack
FoundLocale = ""
If oItem = "DEFAULT" then
' Skip...
ElseIf not oXMLPackageList is nothing then
If oXMLPackageList.FindAllItems.Exists(oItem) then
FoundLocale = oUtility.SelectSingleNodeString(oXMLPackageList.FindAllItems.Item(oItem),"./Language")
End if
End if
If FoundLocale <> "" and Instr(1,AllreadyAddedLanguages, FoundLocale, vbTextCompare ) = 0 then
AddLanguage FoundLocale
AllreadyAddedLanguages = AllreadyAddedLanguages & vbTab & FoundLocale
End if
Next
If AllreadyAddedLanguages = "" then
For each oItem in oEnvironment.ListItem("ImageLanguage").Keys
If oItem <> "" then
AddLanguage oItem
AllreadyAddedLanguages = AllreadyAddedLanguages & vbTab & oItem
End if
Next
End if
ForceLCase "UILanguage"
ForceLCase "UserLocale"
ForceLCase "KeyboardLocale"
oLogging.CreateEntry "Languages Displayed: " & AllreadyAddedLanguages , LogTypeInfo
oLogging.CreateEntry "UILanguage: " & property("UILanguage") , LogTypeVerbose
' Populate the Locale
For each oItem in oXMLLanguageList.selectNodes("//LOCALEDATA/LOCALE[IFLAGS='1']")
Set oOption2 = document.createElement("OPTION")
oOption2.Text = oUtility.SelectSingleNodeString(oItem,"SENGDISPLAYNAME")
oOption2.Value = lcase(oUtility.SelectSingleNodeString(oItem,"./SNAME") & ";" & oUtility.SelectSingleNodeString(oItem,"ILANGUAGE"))
UserLocale_Edit.add oOption2
Next
PopulateElements
' Get default Language and populate
If UILanguage.Value <> "" then
thisLocale = UILanguage.Value
Elseif Property("UILanguage") <> "" then
thisLocale = Property("UILanguage")
ElseIf oEnvironment.Item("ImageLanguage001") <> "" then
thisLocale = oEnvironment.Item("ImageLanguage001")
Else
thisLocale = GetDefaultInstallationLocaleString
End if
If IsEmpty(thisLocale) then
thisLocale = "en-US" ' WinPE *may* not have the locale defined
End if
SetNewLanguageEx thisLocale
SetNewLocaleEx thisLocale
End function
Function ForceLCase( sPropertyName )
If Property(sPropertyName) <> lcase(Property(sPropertyName)) then
If oProperties.Exists(sPropertyName) then
oProperties.Item(sPropertyName) = lcase(oProperties.Item(sPropertyName))
Else
oProperties.Add sPropertyName, lcase(Property(sPropertyName))
End if
End if
End function
Function SetNewLanguage
If oProperties.exists("UserLocale") then
oProperties.remove "UserLocale"
End if
SetNewLanguageEx UILanguage.Value
SetNewLocale
End Function
Function SetNewLocale
If instr(1,UserLocale_Edit.Value,";",vbTextCompare) <> 0 then
If oProperties.exists("KeyboardLocale") then
oProperties.remove "KeyboardLocale"
End if
SetNewLocaleEx mid(UserLocale_Edit.Value,1,instr(1,UserLocale_Edit.Value,";",vbTextCompare) - 1)
End if
End Function
Function SetNewLanguageEx( thisLocale )
Dim LCID
oLogging.CreateEntry "SetNewLanguageEx " & thisLocale, LogTypeVerbose
' Get the default UserLocale
If Property("UserLocale") <> "" then
UserLocale_Edit.Value = lcase(Property("UserLocale") & ";" & GetLCIDFromSName( Property("UserLocale") ))
ElseIf instr(1,Property("KeyboardLocale"),":",vbTextCompare) <> 0 and len(trim(Property("KeyboardLocale"))) = len("0000:12345678") then
LCID = left(Property("KeyboardLocale"),instr(1,Property("KeyboardLocale"),":",vbTextCompare)-1)
UserLocale_Edit.Value = lcase(GetSNameFromLCID(LCID) & ";" & LCID)
Else
UserLocale_Edit.Value = lcase(thisLocale & ";" & GetLCIDFromSName( thisLocale ))
End if
oLogging.CreateEntry "UserLocale : " & Property("UserLocale") & " - " & UserLocale_Edit.Value, LogTypeVerbose
If Property("ImageLanguage001") = "" then
oProperties.Add "ImageLanguage001", thisLocale
End if
End function
Function SetNewLocaleEx (thisLocale)
Dim sKeyboard
Dim sItem
Dim sNew
oLogging.CreateEntry "SetNewLocaleEx " & thisLocale & " - " & Property("KeyboardLocale"), LogTypeVerbose
' Set the default Keyboard
sNew = ""
If Property("KeyboardLocale") <> "" then
sKeyboard = Property("KeyboardLocale")
If instr(1,sKeyboard,";",vbTExtCompare) <> 0 then
' Use the 1st instance of a ; delimited array that contains a :
for each sItem in split(sKeyboard,";")
If instr(1,sItem,":",vbTextCompare) <> 0 then
sKeyboard = trim(sItem)
exit for
End if
next
If isempty(sKeyboard) then
sKeyboard = trim(left(sKeyboard,instr(1,sKeyboard,";",vbTExtCompare)-1))
End if
End if
If instr(1,sKeyboard,":",vbTextCompare) <> 0 and len(sKeyboard) = len("0000:12345678") then
' KeyboardLocale appears to be in the format 0409:00000409 format
sNew = mid(sKeyboard,instr(1,sKeyboard,":",vbTextCompare)+1)
ElseIf instr(1,sKeyboard,"-",vbTextCompare) <> 0 Then
sNew = right("00000000" & GetLCIDFromSName(sKeyboard),8)
End if
End if
If sNew = "" Then
sNew = right("00000000" & GetKeyboardFromSName(thisLocale),8)
End if
KeyboardLocale_Edit.Value = lcase(sNew)
If KeyboardLocale_Edit.Value = "" then
KeyboardLocale_Edit.Value = "00000409"
End if
oLogging.CreateEntry "KeyboardLocale: " & Property("KeyboardLocale") & " - " & KeyboardLocale_Edit.Value & " - " & sNew, LogTypeVerbose
End function
''''''''''''''''''''''''''''''''
Function GetDefaultInstallationLocaleString
Dim oItem
' First see if a UserLocal value was specified
If Property("UserLocale") <> "" then
Set oItem = oXMLLanguageList.SelectSingleNode("//LOCALEDATA/LOCALE[@ID = '" & lcase(Property("UserLocale")) & "']/SNAME")
If not oItem is nothing then
GetDefaultInstallationLocaleString = oItem.Text
Exit Function
End if
End if
' No, so get the default locale
Set oItem = oXMLLanguageList.SelectSingleNode("//LOCALEDATA/LOCALE[@ID = '" & lcase(right("0000" & hex(GetLocale),4)) & "']/SNAME")
If not oItem is nothing then
GetDefaultInstallationLocaleString = oItem.Text
End if
End function
Function GetDefaultInstallationLanguageString
GetDefaultInstallationLanguageString = GetParentLanguageFromLocale(GetDefaultInstallationLocaleString)
End function
Function GetParentLanguageFromLocale( Locale)
Dim oLocale
For each oLocale in oXMLLanguageList.selectNodes("//LOCALEDATA/LOCALE/SNAME")
If UCase(Locale) = UCase(oLocale.text) then
GetParentLanguageFromLocale = oUtility.SelectSingleNodeString(oLocale.ParentNode,"SISO639LANGNAME")
Exit for
End if
Next
End function
Function GetSNameFromLCID ( LCID )
GetSNameFromLCID = oUtility.SelectSingleNodeString(oXMLLanguageList,"/LOCALEDATA/LOCALE[@ID='" & lcase(LCID) & "']/SNAME")
End function
Function GetKeyboardFromSName ( sName )
Dim oLocale
For each oLocale in oXMLLanguageList.selectNodes("//LOCALEDATA/LOCALE/SNAME")
If UCase(sName) = UCase(oLocale.text) then
GetKeyboardFromSName = oUtility.SelectSingleNodeString(oLocale.ParentNode,"DEFAULTKEYBOARD")
Exit for
End if
Next
End Function
Function GetLCIDFromSName ( sName )
Dim oLocale
For each oLocale in oXMLLanguageList.selectNodes("//LOCALEDATA/LOCALE/SNAME")
If UCase(sName) = UCase(oLocale.text) then
GetLCIDFromSName = oUtility.SelectSingleNodeString(oLocale.ParentNode,"ILANGUAGE")
Exit for
End if
Next
End Function
''''''''''''''''''''''''''''''''
Function IsInstallationUltimateEnterprise
IsInstallationUltimateEnterprise = oUtility.IsHighEndSKUEx( oEnvironment.Item("ImageFlags") )
End function
'''''''''''''''''''''''''''''''''''''
' Validate LanguagePack
'
''''''''''''''''''''''''''''''''''''''
Function Locale_Validation
Dim iSplit
Locale_Validation = TRUE
If not UILanguage.Disabled then
UILanguage_err.style.display = "none"
If UILanguage.SelectedIndex = -1 then
UILanguage_Err.style.display = "inline"
Locale_Validation = FALSE
End if
End if
If not UserLocale_Edit.Disabled then
UserLocale_Err.style.display = "none"
If UserLocale_Edit.SelectedIndex = -1 then
UserLocale_Err.style.display = "inline"
Locale_Validation = FALSE
End if
End if
If not KeyboardLocale_Edit.Disabled then
KeyboardLocale_Err.style.display = "none"
If KeyboardLocale_Edit.SelectedIndex = -1 then
KeyboardLocale_Err.style.display = "inline"
Locale_Validation = FALSE
End if
End if
If not Locale_Validation then
Exit Function
End if
iSplit = instr(1,UserLocale_Edit.Value,";",vbTextCompare)
TestAndLog iSplit <> 0 , "Verify UserLocale_Edit contains Comma Delimiter: " & UserLocale_Edit.Value
If instr(1,UserLocale_Edit.Value,";",vbTextCompare) <> 0 then
' Take the LCID From UserLocale and add it to the KeyboardLocale
KeyboardLocale.Value = UserLocale_Edit.Value & ":" & KeyboardLocale_Edit.Value
Else
' Some kind of Error
KeyboardLocale.Value = right("0000" & hex(GetLocale),4) & ":" & KeyboardLocale_Edit.Value
End if
If iSplit <> 0 then
UserLocale.Value = mid(UserLocale_Edit.Value,1,instr(1,UserLocale_Edit.Value,";",vbTextCompare) - 1)
Else
UserLocale.Value = UserLocale_Edit.Value
End if
End function
'''''''''''''''''''''''''''''''''''''
' Timezone functions
'
'''''''''''''''''''''''''''''''''''''
Function SetTimeZoneValue
' When the user selects a value in the TimeZoneList we must populate the hidden Text Values
TimeZoneName.Value = TimeZoneList.value
End function
Function TimeZone_Initialization
Dim TimeZone, i, TimeSplit, Item, test
' Disable fields as appropriate
If UCase(oEnvironment.item("SkipTimeZone")) = "YES" then
TimeZoneList.Disabled = true
End if
' If TimeZone Property is set, then select the coresponding list item.
If Property("TimeZoneName") <> "" then
For i = 0 to TimeZoneList.Options.Length - 1
If UCase(Property("TimeZoneName")) = UCase(TimeZoneList.Options(i).value) then
TimeZoneList.SelectedIndex = i
TimeZoneName.Value = TimeZoneList.Options(i).value
Exit function
End if
Next
End if
' Extract out the current TimeZone
For each TimeZone in objWMI.InstancesOf("Win32_TimeZone")
Exit for ' Take the first entry and break out of loop
Next
If IsEmpty(TimeZone) then
Exit function
End if
'Try to match the timezone against the current Timezone Name
For i = 0 to TimeZoneList.Options.Length - 1
If UCase(TimeZoneList.Options(i).Text) = UCase(TimeZone.Description) then
TimeZoneList.SelectedIndex = i
TimeZoneName.Value = TimeZoneList.Options(i).value
Exit function
End if
' See if there is a match in the alternate description or other Values
For each test in array(TimeZone.Description,TimeZone.StandardName)
If test <> "" then
If UCase(test) = UCase(TimeZoneList.Options(i).value) then
TimeZoneList.SelectedIndex = i
TimeZoneName.Value = TimeZoneList.Options(i).value
Exit function
End if
End if
Next
Next
' Try to match against the closest GMT value (This *May* select an entry that is not *exact*)
For i = 0 to TimeZoneList.Options.Length - 1
test = Instr(1, TimeZone.Description," ")
If test <> 0 then
If left(TimeZone.Description, test) = left(TimeZoneList.Options(i).Text, test) then
TimeZoneList.SelectedIndex = i
TimeZoneName.Value = TimeZoneList.Options(i).value
Exit function
End if
End if
Next
End function
Function TimeZone_Validation
' Return true if disabled or if a value has been specified
If UCase(oEnvironment.item("SkipTimeZone")) = "YES" then
TimeZone_Validation = True
Elseif TimeZoneName.Value <> "" then
TimeZone_Validation = True
Else
TimeZone_Validation = False
End if
End function